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,279 @@
1
+ import { Router } from '@angular/router';
2
+ import { Component, EventEmitter, Output, } from '@angular/core';
3
+ import { Subject, takeUntil } from 'rxjs';
4
+ import { CookieStorageManagerService } from '../../services/cookie-storage-manager.service';
5
+ import { DialogService } from 'primeng/dynamicdialog';
6
+ import { ToastMsgService } from '../../services/toast-msg.service';
7
+ import { GlobalConstants, RoutePaths, errorMsg } from '../../model/data_model';
8
+ import { CommonHeaderLibService } from '../../common-header-lib.service';
9
+ import { GeneralConfigurationComponent } from '../general-configuration/general-configuration.component';
10
+ import { StorageService } from '../../services/storage.service';
11
+ import { TranslateService } from '@ngx-translate/core';
12
+ import { HttpCommonService } from '../../services/http/http-common.service';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "primeng/dynamicdialog";
15
+ import * as i2 from "../../services/cookie-storage-manager.service";
16
+ import * as i3 from "@angular/router";
17
+ import * as i4 from "../../services/toast-msg.service";
18
+ import * as i5 from "../../services/storage.service";
19
+ import * as i6 from "../../common-header-lib.service";
20
+ import * as i7 from "@ngx-translate/core";
21
+ import * as i8 from "../../services/http/http-common.service";
22
+ import * as i9 from "@angular/common";
23
+ import * as i10 from "primeng/skeleton";
24
+ import * as i11 from "../ng-translation/ng-translation.component";
25
+ import * as i12 from "../../pipes/slice-to-two.pipe";
26
+ export class UserSidebarComponent {
27
+ constructor(dialogService, _cookieService, route, msgService, _localStorage, libService, translateService, httpCommonService) {
28
+ this.dialogService = dialogService;
29
+ this._cookieService = _cookieService;
30
+ this.route = route;
31
+ this.msgService = msgService;
32
+ this._localStorage = _localStorage;
33
+ this.libService = libService;
34
+ this.translateService = translateService;
35
+ this.httpCommonService = httpCommonService;
36
+ // @Input() apiURL: string = '';
37
+ // @Output('langChange') langChange = new EventEmitter<any>();
38
+ this.userDetails = {};
39
+ this.showProfile = false;
40
+ this.userdisplayName = '';
41
+ this.userFirstName = '';
42
+ this.userLastName = '';
43
+ this.userLastLoggedIn = '';
44
+ // private LoggedInUserID: string = '';
45
+ this.unsubscribeAPIEventListenerData = new Subject();
46
+ this.closeDialogBox = new EventEmitter();
47
+ // public userSessionID: string = '';
48
+ this.sec = 1;
49
+ this.min = 2;
50
+ this.Hr = 30;
51
+ this.isOpenSidePopup = false;
52
+ this.showUserDetails = false;
53
+ // private themeService: ThemeService,
54
+ // private fontService: FontService,
55
+ // private cookieService: CookieService,
56
+ // this.fetchedSavedData();
57
+ }
58
+ ngOnInit() {
59
+ this.getLoggedInuserDteils();
60
+ }
61
+ //Method: Open User Setting Panel
62
+ openUserSettingPanel() {
63
+ this.ref = this.dialogService.open(GeneralConfigurationComponent, {
64
+ header: this.translateService.instant('Generic_lib.GeneralConfiguration'),
65
+ styleClass: 'general-configuration',
66
+ // data: {
67
+ // apiURL: this.apiURL,
68
+ // },
69
+ });
70
+ }
71
+ getLoggedInuserDteils() {
72
+ this.httpCommonService
73
+ .getLoggedInUserDetails()
74
+ .pipe(takeUntil(this.unsubscribeAPIEventListenerData))
75
+ .subscribe((result) => {
76
+ if (result && result['success'] && result['result']) {
77
+ console.log('UserDetails: ', this.userDetails);
78
+ this.userDetails = result['result'];
79
+ this.userdisplayName = this.userDetails['userDisplayName'];
80
+ this.showProfile = true;
81
+ this.getTotalSessionTime();
82
+ this.setLoggedInUserName(this.userdisplayName);
83
+ }
84
+ else {
85
+ this.showProfile = false;
86
+ this.userDetails = {};
87
+ }
88
+ });
89
+ }
90
+ setLoggedInUserName(userdisplayName) {
91
+ if (userdisplayName && userdisplayName.includes(' ')) {
92
+ let splitStringArr = userdisplayName.split(' ');
93
+ this.userFirstName = splitStringArr[0];
94
+ this.userLastName = splitStringArr[1];
95
+ }
96
+ else {
97
+ this.userdisplayName = userdisplayName;
98
+ }
99
+ }
100
+ getcloseDialogBox() {
101
+ this.closeDialogBox.emit(true);
102
+ }
103
+ getUserLoggedInTime() {
104
+ let LastLoggedIn = this.convertUTCToLocal(this.userDetails['lastLogIn']);
105
+ let LastLoggedInDate = new Date(LastLoggedIn);
106
+ this.userLastLoggedIn = LastLoggedInDate.toLocaleString();
107
+ }
108
+ logoutCurrentUser() {
109
+ this.libService
110
+ .getInitiateUserLogout()
111
+ .pipe()
112
+ .subscribe((res) => {
113
+ if (res) {
114
+ this._cookieService.clearAllCookies();
115
+ this._localStorage.clearData();
116
+ if (res && res['spLogoutUrls'] && res['spLogoutUrls'].length > 0) {
117
+ this.destoryAllSessions(res['spLogoutUrls']);
118
+ }
119
+ if (res?.['identity']) {
120
+ this.userWithWindowAuthentication();
121
+ }
122
+ else {
123
+ const path = '/' + RoutePaths.LOGINPG_PATH;
124
+ const urlnew = new URL(window.location.href).origin + '/#' + path;
125
+ window.location.href = urlnew;
126
+ }
127
+ }
128
+ else {
129
+ this.msgService.error(errorMsg.LOGOUTERROR);
130
+ // window.location.href = new URL(window.location.href).origin + '/#/login';
131
+ }
132
+ });
133
+ }
134
+ /**
135
+ * This function destroys all user sessions by opening multiple SAML logout URLs in new browser tabs.
136
+ */
137
+ destoryAllSessions(samlUrls) {
138
+ samlUrls.forEach((url) => {
139
+ // let enCodedURL = encodeURI(url);
140
+ console.log('URL: ', url);
141
+ window.open(url, '_blank');
142
+ });
143
+ }
144
+ userWithWindowAuthentication() {
145
+ const path = '/' + RoutePaths.LOGOUT_PATH;
146
+ this.route.navigateByUrl(path);
147
+ }
148
+ getTotalSessionTime() {
149
+ // let LastLogin = this.userDetails['lastLogIn'];
150
+ // LastLogin = LastLogin.toLocaleString();
151
+ // let dateParts = this.userDetails['currentLogIn'].split(' ')[0].split('/');
152
+ // let timeParts = this.userDetails['currentLogIn'].split(' ')[1].split(':');
153
+ // let loginTime = new Date(
154
+ // dateParts[2],
155
+ // dateParts[1] - 1,
156
+ // dateParts[0],
157
+ // timeParts[0],
158
+ // timeParts[1]
159
+ // );
160
+ // loginTime = new Date(loginTime).toLocaleString();
161
+ // Convert local time to UTC
162
+ // currentTime = new Date(
163
+ // currentTime.getTime() + currentTime.getTimezoneOffset() * 60000
164
+ // );
165
+ let loginTime = this.convertUTCToLocal(this.userDetails['currentLogIn']);
166
+ // console.log('loginTime: ', loginTime);
167
+ let loginTimeDate = new Date(loginTime);
168
+ let currentTime = new Date();
169
+ // console.log('Login Time Date: ', loginTimeDate);
170
+ // console.log('Current Time: ', currentTime);
171
+ let milliseconds = currentTime.valueOf() - loginTimeDate.valueOf();
172
+ let seconds = Math.floor(milliseconds / 1000);
173
+ let minutes = Math.floor(seconds / 60);
174
+ let hours = Math.floor(minutes / 60);
175
+ seconds = seconds % 60;
176
+ minutes = minutes % 60;
177
+ this.Hr = hours;
178
+ this.min = minutes;
179
+ this.sec = seconds;
180
+ // console.log('Session Total', this.Hr, this.min, this.sec);
181
+ setInterval(() => {
182
+ this.updateTimer();
183
+ }, 1000);
184
+ }
185
+ updateTimer() {
186
+ if (this.sec < 59) {
187
+ this.sec += 1;
188
+ }
189
+ else {
190
+ this.sec = 0;
191
+ if (this.min < 59) {
192
+ this.min += 1;
193
+ }
194
+ else {
195
+ this.min = 0;
196
+ this.Hr += 1;
197
+ }
198
+ }
199
+ }
200
+ convertUTCToLocal(newdate) {
201
+ let localDate = newdate + 'Z';
202
+ localDate = localDate.toLocaleString();
203
+ // console.log('LOcal: ', localDate);
204
+ return localDate;
205
+ }
206
+ OpenArconLearningCenter() {
207
+ const url = GlobalConstants.PlugInDownloadURL;
208
+ console.log(url);
209
+ window.open(url, '_blank');
210
+ }
211
+ //close Popup
212
+ closeUserSettingPanel() {
213
+ if (this.ref) {
214
+ this.ref.close();
215
+ }
216
+ }
217
+ // languageChange(event: any) {
218
+ // if (!event) return;
219
+ // // this.langChange.emit(event);
220
+ // }
221
+ //*Global Font and Theme
222
+ getRedTheme() {
223
+ // const active = this.themeService.getActiveTheme();
224
+ // if (
225
+ // active.name === "blue" ||
226
+ // active.name === "black" ||
227
+ // active.name === "red"
228
+ // ) {
229
+ // this.themeService.setTheme("red");
230
+ // this.cookieService.set("themeColor", "red");
231
+ // }
232
+ }
233
+ getBlackTheme() {
234
+ // const active = this.themeService.getActiveTheme();
235
+ // if (
236
+ // active.name === "blue" ||
237
+ // active.name === "black" ||
238
+ // active.name === "red"
239
+ // ) {
240
+ // this.themeService.setTheme("blue");
241
+ // this.cookieService.set("themeColor", "blue");
242
+ // }
243
+ }
244
+ getBlueTheme() {
245
+ // const active = this.themeService.getActiveTheme();
246
+ // if (
247
+ // active.name === "blue" ||
248
+ // active.name === "black" ||
249
+ // active.name === "red"
250
+ // ) {
251
+ // this.themeService.setTheme("black");
252
+ // this.cookieService.set("themeColor", "black");
253
+ // }
254
+ }
255
+ // Accessibility Fonts sizes
256
+ getSmallFont() {
257
+ // this.fontService.setFont("smFont");
258
+ }
259
+ getMediumFont() {
260
+ // this.fontService.setFont("mdFont");
261
+ }
262
+ getLargeFont() {
263
+ // this.fontService.setFont("lgFont");
264
+ }
265
+ ngOnDestroy() {
266
+ this.closeUserSettingPanel();
267
+ this.unsubscribeAPIEventListenerData.next(true);
268
+ this.unsubscribeAPIEventListenerData.complete();
269
+ }
270
+ }
271
+ UserSidebarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UserSidebarComponent, deps: [{ token: i1.DialogService }, { token: i2.CookieStorageManagerService }, { token: i3.Router }, { token: i4.ToastMsgService }, { token: i5.StorageService }, { token: i6.CommonHeaderLibService }, { token: i7.TranslateService }, { token: i8.HttpCommonService }], target: i0.ɵɵFactoryTarget.Component });
272
+ UserSidebarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: UserSidebarComponent, selector: "app-user-sidebar", outputs: { closeDialogBox: "closeDialogBox" }, providers: [DialogService], ngImport: i0, template: "<div class=\"white-bg\">\r\n <div class=\" sidebar-outer white-bg\">\r\n <div class=\"sidebar-header grey-background\">\r\n <div class=\"sh-top\">\r\n <div class=\"sh-top-left d-flex\">\r\n <img src=\"assets/common-header-lib/images/logout.svg\" class=\"imgs\" alt=\"user\">\r\n <div class=\"mx-2 log-text\" (click)=\"logoutCurrentUser()\">{{\"Generic_lib.Logout\" | translate}}</div>\r\n </div>\r\n <div class=\"sh-top-right\">\r\n <button type=\"button\" class=\"common-bn tertiary-btn\">\r\n <img src=\"assets/common-header-lib/images/close.svg\" class=\"imgs\" alt=\"close icon\" title=\"Close\"\r\n (click)=\"getcloseDialogBox()\">\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showProfile; else LoadingAnimation\">\r\n <div class=\"sh-bottom d-flex pt-3\">\r\n <ng-container *ngIf=\"userdisplayName && userdisplayName.length > 0; else defaultName\">\r\n <div class=\"initial-text\">\r\n {{ userdisplayName | sliceToTwo }}\r\n </div>\r\n </ng-container>\r\n <ng-template #defaultName>\r\n <div class=\"initial-text\">\r\n {{ 'NA' }}\r\n </div>\r\n </ng-template>\r\n <div class=\"sh-bottom-content\">\r\n <h4 class=\"title\">{{ userDetails['userDisplayName']}}</h4>\r\n <p>{{ userDetails['emailID']}}</p>\r\n <div class=\"sh-bottom-content-ls\">\r\n <ng-container\r\n *ngIf=\"userDetails['lastLogIn'] && !userDetails['lastLogIn'].includes('NA'); else InvalidDate\">\r\n <p style=\"margin-right: 5px;\">{{\"Generic_lib.LastSession\" | translate}} : </p>\r\n <p>{{userDetails['lastLogIn']}}</p>\r\n </ng-container>\r\n <ng-template #InvalidDate>\r\n <p style=\"margin-right: 5px;\">{{\"Generic_lib.LastSession\" | translate}} : </p>\r\n <p>NA</p>\r\n </ng-template>\r\n </div>\r\n <div class=\"sh-bottom-content-ls session-content\">\r\n <p tyle=\"margin-right: 5px;\">{{\"Generic_lib.CurrentSession\" | translate}} : </p>\r\n <p>{{Hr}} {{\"Generic_lib.hrs\" | translate}} {{min}} {{\"Generic_lib.min\" | translate}} {{sec}}\r\n {{\"Generic_lib.secs\" | translate}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #LoadingAnimation>\r\n <div class=\"loading-skeleton d-flex p-3\">\r\n <p-skeleton shape=\"circle\" size=\"4rem\" styleClass=\"mr-2\"></p-skeleton>\r\n <div class=\"ms-1\">\r\n <p-skeleton width=\"10rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton width=\"8rem\" height=\".7rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton width=\"5rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton height=\".5rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"sidebar-body\">\r\n <div class=\"sb-list pb-20px\">\r\n <ul>\r\n <li class=\"grey-bg-hover\">\r\n <img src=\"assets/common-header-lib/images/domain_img.svg\" loading=\"lazy\">\r\n <div class=\"mx-2 lang-dropdown\">\r\n <ng-translation></ng-translation> <!-- (langChange)=\"languageChange($event)\" -->\r\n </div>\r\n </li>\r\n <li class=\"grey-bg-hover\" (click)=\"OpenArconLearningCenter()\">\r\n <img src=\"assets/common-header-lib/images/local.svg\" class=\"imgs\" alt=\"Arcon\">\r\n <p class=\"mx-2\">{{\"Generic_lib.ArconLearningCenter\" | translate}}</p>\r\n </li>\r\n\r\n <li class=\"grey-bg-hover\">\r\n <img src=\"assets/common-header-lib/images/settings.svg\" alt=\"settings\">\r\n <p class=\"mx-2\" (click)=\"openUserSettingPanel()\">{{\"Generic_lib.GeneralConfiguration\" | translate}}</p>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Global Font and Theme -->\r\n <!-- <div class=\"accessibility-container d-flex justify-content-between\">\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getSmallFont()\">\r\n <span>A-</span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getMediumFont()\">\r\n <span>A</span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getLargeFont()\">\r\n <span>A+</span>\r\n </button>\r\n </div>\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getRedTheme()\">\r\n <span class=\"theme theme-red\"></span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getBlackTheme()\">\r\n <span class=\"theme theme-black\"></span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getBlueTheme()\">\r\n <span class=\"theme theme-blue\"></span>\r\n </button>\r\n </div>\r\n </div> -->\r\n</div>\r\n", styles: [".white-bg{background-color:#fff!important;width:100%!important}.grey-background{background-color:#f6f7fb!important}.imgs{width:20px!important}.cursor-pointer{cursor:pointer}.sidebar-outer{width:100%!important;float:left!important}.sidebar-outer .sidebar-header{padding:12px 15px!important}.sidebar-outer .sidebar-header .sh-top{display:flex!important;align-items:center!important;justify-content:space-between!important}.sidebar-outer .sidebar-header .sh-top .sh-top-left{display:flex!important;align-items:center!important}.sidebar-outer .sidebar-header .sh-top .sh-top-left .log-text{font-size:14px!important;font-weight:500!important;cursor:pointer!important}.sidebar-outer .sidebar-header .sh-top .sh-top-right button{height:24px!important;border:none!important;background-color:transparent!important}.sidebar-outer .sidebar-header .sh-bottom{display:flex!important;padding-top:16px!important}.sidebar-outer .sidebar-header .sh-bottom .initial-text{width:40px;height:40px;display:flex;align-items:center;justify-content:center;font-size:15px;border-radius:50%;color:#fff;background-color:#8e562e}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content{padding-left:14px!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .title{font-size:17px!important;font-weight:600!important;height:21px!important;margin-bottom:2px!important;line-height:26px!important;color:#292f4c!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content p{font-size:14px!important;line-height:22px!important;color:#676879!important;margin-bottom:0!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .sh-bottom-content-ls{display:flex!important;align-items:center!important;font-size:12px!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .session-content{position:relative!important;bottom:2px!important}.sidebar-outer .sidebar-body{padding:12px 20px!important;width:100%!important}.sidebar-outer .sidebar-body .sb-list{width:100%!important}.sidebar-outer .sidebar-body .sb-list ul{width:100%!important;list-style:none;padding-left:0;margin:0}.sidebar-outer .sidebar-body .sb-list ul li{display:flex!important;align-items:center!important;padding:8px 2px!important;cursor:pointer!important}.sidebar-outer .sidebar-body .sb-list ul li img{width:18px}.sidebar-outer .sidebar-body .sb-list ul li p{margin:0 0 0 8px!important;font-size:14px!important}.sidebar-outer .sidebar-body .sb-list ul li .lang-dropdown{margin-left:8px!important}.accessibility-container{background-color:#eee;padding:7px 20px}.accessibility-container .btn{align-content:center;align-items:center;border:1px solid #9e9e9e;color:#707070;display:flex;font-size:10px;height:20px;justify-content:center;padding:0;width:20px;margin-right:5px;overflow:hidden}.accessibility-container .btn:last-child{margin-right:0}.accessibility-container .btn .theme{display:block;height:100%;margin-left:-50%;width:60%}.accessibility-container .btn .theme-red{background-color:#d4231d}.accessibility-container .btn .theme-black{background-color:#212121}.accessibility-container .btn .theme-blue{background-color:#4d91ea}\n"], dependencies: [{ kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i11.NgTranslationComponent, selector: "ng-translation" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i12.SliceToTwoPipe, name: "sliceToTwo" }] });
273
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UserSidebarComponent, decorators: [{
274
+ type: Component,
275
+ args: [{ selector: 'app-user-sidebar', providers: [DialogService], template: "<div class=\"white-bg\">\r\n <div class=\" sidebar-outer white-bg\">\r\n <div class=\"sidebar-header grey-background\">\r\n <div class=\"sh-top\">\r\n <div class=\"sh-top-left d-flex\">\r\n <img src=\"assets/common-header-lib/images/logout.svg\" class=\"imgs\" alt=\"user\">\r\n <div class=\"mx-2 log-text\" (click)=\"logoutCurrentUser()\">{{\"Generic_lib.Logout\" | translate}}</div>\r\n </div>\r\n <div class=\"sh-top-right\">\r\n <button type=\"button\" class=\"common-bn tertiary-btn\">\r\n <img src=\"assets/common-header-lib/images/close.svg\" class=\"imgs\" alt=\"close icon\" title=\"Close\"\r\n (click)=\"getcloseDialogBox()\">\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showProfile; else LoadingAnimation\">\r\n <div class=\"sh-bottom d-flex pt-3\">\r\n <ng-container *ngIf=\"userdisplayName && userdisplayName.length > 0; else defaultName\">\r\n <div class=\"initial-text\">\r\n {{ userdisplayName | sliceToTwo }}\r\n </div>\r\n </ng-container>\r\n <ng-template #defaultName>\r\n <div class=\"initial-text\">\r\n {{ 'NA' }}\r\n </div>\r\n </ng-template>\r\n <div class=\"sh-bottom-content\">\r\n <h4 class=\"title\">{{ userDetails['userDisplayName']}}</h4>\r\n <p>{{ userDetails['emailID']}}</p>\r\n <div class=\"sh-bottom-content-ls\">\r\n <ng-container\r\n *ngIf=\"userDetails['lastLogIn'] && !userDetails['lastLogIn'].includes('NA'); else InvalidDate\">\r\n <p style=\"margin-right: 5px;\">{{\"Generic_lib.LastSession\" | translate}} : </p>\r\n <p>{{userDetails['lastLogIn']}}</p>\r\n </ng-container>\r\n <ng-template #InvalidDate>\r\n <p style=\"margin-right: 5px;\">{{\"Generic_lib.LastSession\" | translate}} : </p>\r\n <p>NA</p>\r\n </ng-template>\r\n </div>\r\n <div class=\"sh-bottom-content-ls session-content\">\r\n <p tyle=\"margin-right: 5px;\">{{\"Generic_lib.CurrentSession\" | translate}} : </p>\r\n <p>{{Hr}} {{\"Generic_lib.hrs\" | translate}} {{min}} {{\"Generic_lib.min\" | translate}} {{sec}}\r\n {{\"Generic_lib.secs\" | translate}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #LoadingAnimation>\r\n <div class=\"loading-skeleton d-flex p-3\">\r\n <p-skeleton shape=\"circle\" size=\"4rem\" styleClass=\"mr-2\"></p-skeleton>\r\n <div class=\"ms-1\">\r\n <p-skeleton width=\"10rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton width=\"8rem\" height=\".7rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton width=\"5rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton height=\".5rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"sidebar-body\">\r\n <div class=\"sb-list pb-20px\">\r\n <ul>\r\n <li class=\"grey-bg-hover\">\r\n <img src=\"assets/common-header-lib/images/domain_img.svg\" loading=\"lazy\">\r\n <div class=\"mx-2 lang-dropdown\">\r\n <ng-translation></ng-translation> <!-- (langChange)=\"languageChange($event)\" -->\r\n </div>\r\n </li>\r\n <li class=\"grey-bg-hover\" (click)=\"OpenArconLearningCenter()\">\r\n <img src=\"assets/common-header-lib/images/local.svg\" class=\"imgs\" alt=\"Arcon\">\r\n <p class=\"mx-2\">{{\"Generic_lib.ArconLearningCenter\" | translate}}</p>\r\n </li>\r\n\r\n <li class=\"grey-bg-hover\">\r\n <img src=\"assets/common-header-lib/images/settings.svg\" alt=\"settings\">\r\n <p class=\"mx-2\" (click)=\"openUserSettingPanel()\">{{\"Generic_lib.GeneralConfiguration\" | translate}}</p>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Global Font and Theme -->\r\n <!-- <div class=\"accessibility-container d-flex justify-content-between\">\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getSmallFont()\">\r\n <span>A-</span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getMediumFont()\">\r\n <span>A</span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getLargeFont()\">\r\n <span>A+</span>\r\n </button>\r\n </div>\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getRedTheme()\">\r\n <span class=\"theme theme-red\"></span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getBlackTheme()\">\r\n <span class=\"theme theme-black\"></span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getBlueTheme()\">\r\n <span class=\"theme theme-blue\"></span>\r\n </button>\r\n </div>\r\n </div> -->\r\n</div>\r\n", styles: [".white-bg{background-color:#fff!important;width:100%!important}.grey-background{background-color:#f6f7fb!important}.imgs{width:20px!important}.cursor-pointer{cursor:pointer}.sidebar-outer{width:100%!important;float:left!important}.sidebar-outer .sidebar-header{padding:12px 15px!important}.sidebar-outer .sidebar-header .sh-top{display:flex!important;align-items:center!important;justify-content:space-between!important}.sidebar-outer .sidebar-header .sh-top .sh-top-left{display:flex!important;align-items:center!important}.sidebar-outer .sidebar-header .sh-top .sh-top-left .log-text{font-size:14px!important;font-weight:500!important;cursor:pointer!important}.sidebar-outer .sidebar-header .sh-top .sh-top-right button{height:24px!important;border:none!important;background-color:transparent!important}.sidebar-outer .sidebar-header .sh-bottom{display:flex!important;padding-top:16px!important}.sidebar-outer .sidebar-header .sh-bottom .initial-text{width:40px;height:40px;display:flex;align-items:center;justify-content:center;font-size:15px;border-radius:50%;color:#fff;background-color:#8e562e}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content{padding-left:14px!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .title{font-size:17px!important;font-weight:600!important;height:21px!important;margin-bottom:2px!important;line-height:26px!important;color:#292f4c!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content p{font-size:14px!important;line-height:22px!important;color:#676879!important;margin-bottom:0!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .sh-bottom-content-ls{display:flex!important;align-items:center!important;font-size:12px!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .session-content{position:relative!important;bottom:2px!important}.sidebar-outer .sidebar-body{padding:12px 20px!important;width:100%!important}.sidebar-outer .sidebar-body .sb-list{width:100%!important}.sidebar-outer .sidebar-body .sb-list ul{width:100%!important;list-style:none;padding-left:0;margin:0}.sidebar-outer .sidebar-body .sb-list ul li{display:flex!important;align-items:center!important;padding:8px 2px!important;cursor:pointer!important}.sidebar-outer .sidebar-body .sb-list ul li img{width:18px}.sidebar-outer .sidebar-body .sb-list ul li p{margin:0 0 0 8px!important;font-size:14px!important}.sidebar-outer .sidebar-body .sb-list ul li .lang-dropdown{margin-left:8px!important}.accessibility-container{background-color:#eee;padding:7px 20px}.accessibility-container .btn{align-content:center;align-items:center;border:1px solid #9e9e9e;color:#707070;display:flex;font-size:10px;height:20px;justify-content:center;padding:0;width:20px;margin-right:5px;overflow:hidden}.accessibility-container .btn:last-child{margin-right:0}.accessibility-container .btn .theme{display:block;height:100%;margin-left:-50%;width:60%}.accessibility-container .btn .theme-red{background-color:#d4231d}.accessibility-container .btn .theme-black{background-color:#212121}.accessibility-container .btn .theme-blue{background-color:#4d91ea}\n"] }]
276
+ }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.CookieStorageManagerService }, { type: i3.Router }, { type: i4.ToastMsgService }, { type: i5.StorageService }, { type: i6.CommonHeaderLibService }, { type: i7.TranslateService }, { type: i8.HttpCommonService }]; }, propDecorators: { closeDialogBox: [{
277
+ type: Output
278
+ }] } });
279
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zaWRlYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXItbGliL3NyYy9saWIvY29tcG9uZW50cy91c2VyLXNpZGViYXIvdXNlci1zaWRlYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXItbGliL3NyYy9saWIvY29tcG9uZW50cy91c2VyLXNpZGViYXIvdXNlci1zaWRlYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFJWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDNUYsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDekcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVE1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RDtRQUNyRCxPQUFPO1FBQ1AsOEJBQThCO1FBQzlCLCtCQUErQjtRQUMvQiwwQkFBMEI7UUFDMUIsTUFBTTtRQUNOLHdDQUF3QztRQUN4QyxrREFBa0Q7UUFDbEQsSUFBSTtJQUNOLENBQUM7SUFDRCxZQUFZO1FBQ1YscURBQXFEO1FBQ3JELE9BQU87UUFDUCw4QkFBOEI7UUFDOUIsK0JBQStCO1FBQy9CLDBCQUEwQjtRQUMxQixNQUFNO1FBQ04seUNBQXlDO1FBQ3pDLG1EQUFtRDtRQUNuRCxJQUFJO0lBQ04sQ0FBQztJQUVELDRCQUE0QjtJQUM1QixZQUFZO1FBQ1Ysc0NBQXNDO0lBQ3hDLENBQUM7SUFFRCxhQUFhO1FBQ1gsc0NBQXNDO0lBQ3hDLENBQUM7SUFFRCxZQUFZO1FBQ1Ysc0NBQXNDO0lBQ3hDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsK0JBQStCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEQsQ0FBQzs7aUhBN1FVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLDBGQUZwQixDQUFDLGFBQWEsQ0FBQywwQkN4QjVCLDhzS0E2R0E7MkZEbkZhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxrQkFBa0IsYUFHakIsQ0FBQyxhQUFhLENBQUM7a1VBZWhCLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb29raWVTdG9yYWdlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb29raWUtc3RvcmFnZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgVG9hc3RNc2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9hc3QtbXNnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxDb25zdGFudHMsIFJvdXRlUGF0aHMsIGVycm9yTXNnIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YV9tb2RlbCc7XHJcbmltcG9ydCB7IENvbW1vbkhlYWRlckxpYlNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24taGVhZGVyLWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJhbENvbmZpZ3VyYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9nZW5lcmFsLWNvbmZpZ3VyYXRpb24vZ2VuZXJhbC1jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvaHR0cC1jb21tb24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC11c2VyLXNpZGViYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLXNpZGViYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VzZXItc2lkZWJhci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW0RpYWxvZ1NlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlclNpZGViYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gQElucHV0KCkgYXBpVVJMOiBzdHJpbmcgPSAnJztcclxuICAvLyBAT3V0cHV0KCdsYW5nQ2hhbmdlJykgbGFuZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwdWJsaWMgdXNlckRldGFpbHM6IGFueSA9IHt9O1xyXG4gIHB1YmxpYyBzaG93UHJvZmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VyZGlzcGxheU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyB1c2VyRmlyc3ROYW1lOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgdXNlckxhc3ROYW1lOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgdXNlckxhc3RMb2dnZWRJbjogc3RyaW5nID0gJyc7XHJcbiAgLy8gcHJpdmF0ZSBMb2dnZWRJblVzZXJJRDogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhOiBTdWJqZWN0PEJvb2xlYW4+ID1cclxuICAgIG5ldyBTdWJqZWN0PEJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlRGlhbG9nQm94ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIHByaXZhdGUgcmVmOiBEeW5hbWljRGlhbG9nUmVmIHwgdW5kZWZpbmVkO1xyXG4gIC8vIHB1YmxpYyB1c2VyU2Vzc2lvbklEOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgc2VjOiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBtaW46IG51bWJlciA9IDI7XHJcbiAgcHVibGljIEhyOiBudW1iZXIgPSAzMDtcclxuICBpc09wZW5TaWRlUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93VXNlckRldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Nvb2tpZVNlcnZpY2U6IENvb2tpZVN0b3JhZ2VNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbXNnU2VydmljZTogVG9hc3RNc2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbG9jYWxTdG9yYWdlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGliU2VydmljZTogQ29tbW9uSGVhZGVyTGliU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cENvbW1vblNlcnZpY2U6IEh0dHBDb21tb25TZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgLy8gcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSxcclxuICAgIC8vIHByaXZhdGUgZm9udFNlcnZpY2U6IEZvbnRTZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxyXG4gICAgLy8gdGhpcy5mZXRjaGVkU2F2ZWREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0TG9nZ2VkSW51c2VyRHRlaWxzKCk7XHJcbiAgfVxyXG5cclxuICAvL01ldGhvZDogT3BlbiBVc2VyIFNldHRpbmcgUGFuZWxcclxuICBvcGVuVXNlclNldHRpbmdQYW5lbCgpIHtcclxuICAgIHRoaXMucmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oR2VuZXJhbENvbmZpZ3VyYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnR2VuZXJpY19saWIuR2VuZXJhbENvbmZpZ3VyYXRpb24nKSxcclxuICAgICAgc3R5bGVDbGFzczogJ2dlbmVyYWwtY29uZmlndXJhdGlvbicsXHJcbiAgICAgIC8vIGRhdGE6IHtcclxuICAgICAgLy8gICBhcGlVUkw6IHRoaXMuYXBpVVJMLFxyXG4gICAgICAvLyB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRMb2dnZWRJbnVzZXJEdGVpbHMoKSB7XHJcbiAgICB0aGlzLmh0dHBDb21tb25TZXJ2aWNlXHJcbiAgICAgIC5nZXRMb2dnZWRJblVzZXJEZXRhaWxzKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVBUElFdmVudExpc3RlbmVyRGF0YSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0WydzdWNjZXNzJ10gJiYgcmVzdWx0WydyZXN1bHQnXSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1VzZXJEZXRhaWxzOiAnLCB0aGlzLnVzZXJEZXRhaWxzKTtcclxuICAgICAgICAgIHRoaXMudXNlckRldGFpbHMgPSByZXN1bHRbJ3Jlc3VsdCddO1xyXG4gICAgICAgICAgdGhpcy51c2VyZGlzcGxheU5hbWUgPSB0aGlzLnVzZXJEZXRhaWxzWyd1c2VyRGlzcGxheU5hbWUnXTtcclxuICAgICAgICAgIHRoaXMuc2hvd1Byb2ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5nZXRUb3RhbFNlc3Npb25UaW1lKCk7XHJcbiAgICAgICAgICB0aGlzLnNldExvZ2dlZEluVXNlck5hbWUodGhpcy51c2VyZGlzcGxheU5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dQcm9maWxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVzZXJEZXRhaWxzID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldExvZ2dlZEluVXNlck5hbWUodXNlcmRpc3BsYXlOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICh1c2VyZGlzcGxheU5hbWUgJiYgdXNlcmRpc3BsYXlOYW1lLmluY2x1ZGVzKCcgJykpIHtcclxuICAgICAgbGV0IHNwbGl0U3RyaW5nQXJyID0gdXNlcmRpc3BsYXlOYW1lLnNwbGl0KCcgJyk7XHJcbiAgICAgIHRoaXMudXNlckZpcnN0TmFtZSA9IHNwbGl0U3RyaW5nQXJyWzBdO1xyXG4gICAgICB0aGlzLnVzZXJMYXN0TmFtZSA9IHNwbGl0U3RyaW5nQXJyWzFdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51c2VyZGlzcGxheU5hbWUgPSB1c2VyZGlzcGxheU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRjbG9zZURpYWxvZ0JveCgpIHtcclxuICAgIHRoaXMuY2xvc2VEaWFsb2dCb3guZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJMb2dnZWRJblRpbWUoKSB7XHJcbiAgICBsZXQgTGFzdExvZ2dlZEluID0gdGhpcy5jb252ZXJ0VVRDVG9Mb2NhbCh0aGlzLnVzZXJEZXRhaWxzWydsYXN0TG9nSW4nXSk7XHJcbiAgICBsZXQgTGFzdExvZ2dlZEluRGF0ZSA9IG5ldyBEYXRlKExhc3RMb2dnZWRJbik7XHJcbiAgICB0aGlzLnVzZXJMYXN0TG9nZ2VkSW4gPSBMYXN0TG9nZ2VkSW5EYXRlLnRvTG9jYWxlU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0Q3VycmVudFVzZXIoKSB7XHJcbiAgICB0aGlzLmxpYlNlcnZpY2VcclxuICAgICAgLmdldEluaXRpYXRlVXNlckxvZ291dCgpXHJcbiAgICAgIC5waXBlKClcclxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICB0aGlzLl9jb29raWVTZXJ2aWNlLmNsZWFyQWxsQ29va2llcygpO1xyXG4gICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlLmNsZWFyRGF0YSgpO1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXNbJ3NwTG9nb3V0VXJscyddICYmIHJlc1snc3BMb2dvdXRVcmxzJ10ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlc3RvcnlBbGxTZXNzaW9ucyhyZXNbJ3NwTG9nb3V0VXJscyddKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzPy5bJ2lkZW50aXR5J10pIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyV2l0aFdpbmRvd0F1dGhlbnRpY2F0aW9uKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwYXRoID0gJy8nICsgUm91dGVQYXRocy5MT0dJTlBHX1BBVEg7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybG5ldyA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLm9yaWdpbiArICcvIycgKyBwYXRoO1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybG5ldztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tc2dTZXJ2aWNlLmVycm9yKGVycm9yTXNnLkxPR09VVEVSUk9SKTtcclxuICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikub3JpZ2luICsgJy8jL2xvZ2luJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyBhbGwgdXNlciBzZXNzaW9ucyBieSBvcGVuaW5nIG11bHRpcGxlIFNBTUwgbG9nb3V0IFVSTHMgaW4gbmV3IGJyb3dzZXIgdGFicy5cclxuICAgKi9cclxuICBwcml2YXRlIGRlc3RvcnlBbGxTZXNzaW9ucyhzYW1sVXJsczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHNhbWxVcmxzLmZvckVhY2goKHVybCkgPT4ge1xyXG4gICAgICAvLyBsZXQgZW5Db2RlZFVSTCA9IGVuY29kZVVSSSh1cmwpO1xyXG4gICAgICBjb25zb2xlLmxvZygnVVJMOiAnLCB1cmwpO1xyXG4gICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1c2VyV2l0aFdpbmRvd0F1dGhlbnRpY2F0aW9uKCkge1xyXG4gICAgY29uc3QgcGF0aCA9ICcvJyArIFJvdXRlUGF0aHMuTE9HT1VUX1BBVEg7XHJcbiAgICB0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwocGF0aCk7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbFNlc3Npb25UaW1lKCkge1xyXG4gICAgLy8gbGV0IExhc3RMb2dpbiA9IHRoaXMudXNlckRldGFpbHNbJ2xhc3RMb2dJbiddO1xyXG4gICAgLy8gTGFzdExvZ2luID0gTGFzdExvZ2luLnRvTG9jYWxlU3RyaW5nKCk7XHJcblxyXG4gICAgLy8gbGV0IGRhdGVQYXJ0cyA9IHRoaXMudXNlckRldGFpbHNbJ2N1cnJlbnRMb2dJbiddLnNwbGl0KCcgJylbMF0uc3BsaXQoJy8nKTtcclxuICAgIC8vIGxldCB0aW1lUGFydHMgPSB0aGlzLnVzZXJEZXRhaWxzWydjdXJyZW50TG9nSW4nXS5zcGxpdCgnICcpWzFdLnNwbGl0KCc6Jyk7XHJcbiAgICAvLyBsZXQgbG9naW5UaW1lID0gbmV3IERhdGUoXHJcbiAgICAvLyAgIGRhdGVQYXJ0c1syXSxcclxuICAgIC8vICAgZGF0ZVBhcnRzWzFdIC0gMSxcclxuICAgIC8vICAgZGF0ZVBhcnRzWzBdLFxyXG4gICAgLy8gICB0aW1lUGFydHNbMF0sXHJcbiAgICAvLyAgIHRpbWVQYXJ0c1sxXVxyXG4gICAgLy8gKTtcclxuICAgIC8vIGxvZ2luVGltZSA9IG5ldyBEYXRlKGxvZ2luVGltZSkudG9Mb2NhbGVTdHJpbmcoKTtcclxuICAgIC8vIENvbnZlcnQgbG9jYWwgdGltZSB0byBVVENcclxuICAgIC8vIGN1cnJlbnRUaW1lID0gbmV3IERhdGUoXHJcbiAgICAvLyAgIGN1cnJlbnRUaW1lLmdldFRpbWUoKSArIGN1cnJlbnRUaW1lLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMFxyXG4gICAgLy8gKTtcclxuXHJcbiAgICBsZXQgbG9naW5UaW1lID0gdGhpcy5jb252ZXJ0VVRDVG9Mb2NhbCh0aGlzLnVzZXJEZXRhaWxzWydjdXJyZW50TG9nSW4nXSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnbG9naW5UaW1lOiAnLCBsb2dpblRpbWUpO1xyXG5cclxuICAgIGxldCBsb2dpblRpbWVEYXRlID0gbmV3IERhdGUobG9naW5UaW1lKTtcclxuXHJcbiAgICBsZXQgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ0xvZ2luIFRpbWUgRGF0ZTogJywgbG9naW5UaW1lRGF0ZSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBUaW1lOiAnLCBjdXJyZW50VGltZSk7XHJcblxyXG4gICAgbGV0IG1pbGxpc2Vjb25kcyA9IGN1cnJlbnRUaW1lLnZhbHVlT2YoKSAtIGxvZ2luVGltZURhdGUudmFsdWVPZigpO1xyXG4gICAgbGV0IHNlY29uZHMgPSBNYXRoLmZsb29yKG1pbGxpc2Vjb25kcyAvIDEwMDApO1xyXG4gICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7XHJcbiAgICBsZXQgaG91cnMgPSBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MCk7XHJcblxyXG4gICAgc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcclxuICAgIG1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XHJcbiAgICB0aGlzLkhyID0gaG91cnM7XHJcbiAgICB0aGlzLm1pbiA9IG1pbnV0ZXM7XHJcbiAgICB0aGlzLnNlYyA9IHNlY29uZHM7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnU2Vzc2lvbiBUb3RhbCcsIHRoaXMuSHIsIHRoaXMubWluLCB0aGlzLnNlYyk7XHJcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlVGltZXIoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVGltZXIoKSB7XHJcbiAgICBpZiAodGhpcy5zZWMgPCA1OSkge1xyXG4gICAgICB0aGlzLnNlYyArPSAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWMgPSAwO1xyXG4gICAgICBpZiAodGhpcy5taW4gPCA1OSkge1xyXG4gICAgICAgIHRoaXMubWluICs9IDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5taW4gPSAwO1xyXG4gICAgICAgIHRoaXMuSHIgKz0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydFVUQ1RvTG9jYWwobmV3ZGF0ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBsb2NhbERhdGU6IHN0cmluZyA9IG5ld2RhdGUgKyAnWic7XHJcbiAgICBsb2NhbERhdGUgPSBsb2NhbERhdGUudG9Mb2NhbGVTdHJpbmcoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdMT2NhbDogJywgbG9jYWxEYXRlKTtcclxuXHJcbiAgICByZXR1cm4gbG9jYWxEYXRlO1xyXG4gIH1cclxuXHJcbiAgT3BlbkFyY29uTGVhcm5pbmdDZW50ZXIoKSB7XHJcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IEdsb2JhbENvbnN0YW50cy5QbHVnSW5Eb3dubG9hZFVSTDtcclxuICAgIGNvbnNvbGUubG9nKHVybCk7XHJcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIC8vY2xvc2UgUG9wdXBcclxuICBjbG9zZVVzZXJTZXR0aW5nUGFuZWwoKSB7XHJcbiAgICBpZiAodGhpcy5yZWYpIHtcclxuICAgICAgdGhpcy5yZWYuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGxhbmd1YWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIGlmICghZXZlbnQpIHJldHVybjtcclxuICAvLyAgIC8vIHRoaXMubGFuZ0NoYW5nZS5lbWl0KGV2ZW50KTtcclxuICAvLyB9XHJcblxyXG4gIC8vKkdsb2JhbCBGb250IGFuZCBUaGVtZVxyXG4gIGdldFJlZFRoZW1lKCkge1xyXG4gICAgLy8gY29uc3QgYWN0aXZlID0gdGhpcy50aGVtZVNlcnZpY2UuZ2V0QWN0aXZlVGhlbWUoKTtcclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgYWN0aXZlLm5hbWUgPT09IFwiYmx1ZVwiIHx8XHJcbiAgICAvLyAgIGFjdGl2ZS5uYW1lID09PSBcImJsYWNrXCIgfHxcclxuICAgIC8vICAgYWN0aXZlLm5hbWUgPT09IFwicmVkXCJcclxuICAgIC8vICkge1xyXG4gICAgLy8gICB0aGlzLnRoZW1lU2VydmljZS5zZXRUaGVtZShcInJlZFwiKTtcclxuICAgIC8vICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChcInRoZW1lQ29sb3JcIiwgXCJyZWRcIik7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIGdldEJsYWNrVGhlbWUoKSB7XHJcbiAgICAvLyBjb25zdCBhY3RpdmUgPSB0aGlzLnRoZW1lU2VydmljZS5nZXRBY3RpdmVUaGVtZSgpO1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICBhY3RpdmUubmFtZSA9PT0gXCJibHVlXCIgfHxcclxuICAgIC8vICAgYWN0aXZlLm5hbWUgPT09IFwiYmxhY2tcIiB8fFxyXG4gICAgLy8gICBhY3RpdmUubmFtZSA9PT0gXCJyZWRcIlxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIHRoaXMudGhlbWVTZXJ2aWNlLnNldFRoZW1lKFwiYmx1ZVwiKTtcclxuICAgIC8vICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChcInRoZW1lQ29sb3JcIiwgXCJibHVlXCIpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuICBnZXRCbHVlVGhlbWUoKSB7XHJcbiAgICAvLyBjb25zdCBhY3RpdmUgPSB0aGlzLnRoZW1lU2VydmljZS5nZXRBY3RpdmVUaGVtZSgpO1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICBhY3RpdmUubmFtZSA9PT0gXCJibHVlXCIgfHxcclxuICAgIC8vICAgYWN0aXZlLm5hbWUgPT09IFwiYmxhY2tcIiB8fFxyXG4gICAgLy8gICBhY3RpdmUubmFtZSA9PT0gXCJyZWRcIlxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIHRoaXMudGhlbWVTZXJ2aWNlLnNldFRoZW1lKFwiYmxhY2tcIik7XHJcbiAgICAvLyAgIHRoaXMuY29va2llU2VydmljZS5zZXQoXCJ0aGVtZUNvbG9yXCIsIFwiYmxhY2tcIik7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICAvLyBBY2Nlc3NpYmlsaXR5IEZvbnRzIHNpemVzXHJcbiAgZ2V0U21hbGxGb250KCkge1xyXG4gICAgLy8gdGhpcy5mb250U2VydmljZS5zZXRGb250KFwic21Gb250XCIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWVkaXVtRm9udCgpIHtcclxuICAgIC8vIHRoaXMuZm9udFNlcnZpY2Uuc2V0Rm9udChcIm1kRm9udFwiKTtcclxuICB9XHJcblxyXG4gIGdldExhcmdlRm9udCgpIHtcclxuICAgIC8vIHRoaXMuZm9udFNlcnZpY2Uuc2V0Rm9udChcImxnRm9udFwiKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbG9zZVVzZXJTZXR0aW5nUGFuZWwoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVBUElFdmVudExpc3RlbmVyRGF0YS5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ3aGl0ZS1iZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCIgc2lkZWJhci1vdXRlciB3aGl0ZS1iZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNpZGViYXItaGVhZGVyIGdyZXktYmFja2dyb3VuZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2gtdG9wXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoLXRvcC1sZWZ0IGQtZmxleFwiPlxyXG4gICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2xvZ291dC5zdmdcIiBjbGFzcz1cImltZ3NcIiBhbHQ9XCJ1c2VyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiBsb2ctdGV4dFwiIChjbGljayk9XCJsb2dvdXRDdXJyZW50VXNlcigpXCI+e3tcIkdlbmVyaWNfbGliLkxvZ291dFwiIHwgdHJhbnNsYXRlfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2gtdG9wLXJpZ2h0XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNvbW1vbi1ibiB0ZXJ0aWFyeS1idG5cIj5cclxuICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2Nsb3NlLnN2Z1wiIGNsYXNzPVwiaW1nc1wiIGFsdD1cImNsb3NlIGljb25cIiB0aXRsZT1cIkNsb3NlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0Y2xvc2VEaWFsb2dCb3goKVwiPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1Byb2ZpbGU7IGVsc2UgTG9hZGluZ0FuaW1hdGlvblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaC1ib3R0b20gZC1mbGV4IHB0LTNcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VyZGlzcGxheU5hbWUgJiYgdXNlcmRpc3BsYXlOYW1lLmxlbmd0aCA+IDA7IGVsc2UgZGVmYXVsdE5hbWVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluaXRpYWwtdGV4dFwiPlxyXG4gICAgICAgICAgICAgIHt7IHVzZXJkaXNwbGF5TmFtZSB8IHNsaWNlVG9Ud28gfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE5hbWU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbml0aWFsLXRleHRcIj5cclxuICAgICAgICAgICAgICB7eyAnTkEnIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaC1ib3R0b20tY29udGVudFwiPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJ0aXRsZVwiPnt7IHVzZXJEZXRhaWxzWyd1c2VyRGlzcGxheU5hbWUnXX19PC9oND5cclxuICAgICAgICAgICAgPHA+e3sgdXNlckRldGFpbHNbJ2VtYWlsSUQnXX19PC9wPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2gtYm90dG9tLWNvbnRlbnQtbHNcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInVzZXJEZXRhaWxzWydsYXN0TG9nSW4nXSAmJiAhdXNlckRldGFpbHNbJ2xhc3RMb2dJbiddLmluY2x1ZGVzKCdOQScpOyBlbHNlIEludmFsaWREYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiPnt7XCJHZW5lcmljX2xpYi5MYXN0U2Vzc2lvblwiIHwgdHJhbnNsYXRlfX0gOiA8L3A+XHJcbiAgICAgICAgICAgICAgICA8cD57e3VzZXJEZXRhaWxzWydsYXN0TG9nSW4nXX19PC9wPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjSW52YWxpZERhdGU+XHJcbiAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiPnt7XCJHZW5lcmljX2xpYi5MYXN0U2Vzc2lvblwiIHwgdHJhbnNsYXRlfX0gOiA8L3A+XHJcbiAgICAgICAgICAgICAgICA8cD5OQTwvcD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoLWJvdHRvbS1jb250ZW50LWxzIHNlc3Npb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgIDxwIHR5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIj57e1wiR2VuZXJpY19saWIuQ3VycmVudFNlc3Npb25cIiB8IHRyYW5zbGF0ZX19IDogPC9wPlxyXG4gICAgICAgICAgICAgIDxwPnt7SHJ9fSB7e1wiR2VuZXJpY19saWIuaHJzXCIgfCB0cmFuc2xhdGV9fSB7e21pbn19IHt7XCJHZW5lcmljX2xpYi5taW5cIiB8IHRyYW5zbGF0ZX19IHt7c2VjfX1cclxuICAgICAgICAgICAgICAgIHt7XCJHZW5lcmljX2xpYi5zZWNzXCIgfCB0cmFuc2xhdGV9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjTG9hZGluZ0FuaW1hdGlvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1za2VsZXRvbiBkLWZsZXggcC0zXCI+XHJcbiAgICAgICAgICA8cC1za2VsZXRvbiBzaGFwZT1cImNpcmNsZVwiIHNpemU9XCI0cmVtXCIgc3R5bGVDbGFzcz1cIm1yLTJcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXMtMVwiPlxyXG4gICAgICAgICAgICA8cC1za2VsZXRvbiB3aWR0aD1cIjEwcmVtXCIgc3R5bGVDbGFzcz1cIm1iLTJcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiOHJlbVwiIGhlaWdodD1cIi43cmVtXCIgc3R5bGVDbGFzcz1cIm1iLTJcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiNXJlbVwiIHN0eWxlQ2xhc3M9XCJtYi0yXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICA8cC1za2VsZXRvbiBoZWlnaHQ9XCIuNXJlbVwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1ib2R5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzYi1saXN0ICBwYi0yMHB4XCI+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwiZ3JleS1iZy1ob3ZlclwiPlxyXG4gICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9jb21tb24taGVhZGVyLWxpYi9pbWFnZXMvZG9tYWluX2ltZy5zdmdcIiBsb2FkaW5nPVwibGF6eVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiBsYW5nLWRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRyYW5zbGF0aW9uPjwvbmctdHJhbnNsYXRpb24+IDwhLS0gKGxhbmdDaGFuZ2UpPVwibGFuZ3VhZ2VDaGFuZ2UoJGV2ZW50KVwiIC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJncmV5LWJnLWhvdmVyXCIgKGNsaWNrKT1cIk9wZW5BcmNvbkxlYXJuaW5nQ2VudGVyKClcIj5cclxuICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2xvY2FsLnN2Z1wiIGNsYXNzPVwiaW1nc1wiIGFsdD1cIkFyY29uXCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwibXgtMlwiPnt7XCJHZW5lcmljX2xpYi5BcmNvbkxlYXJuaW5nQ2VudGVyXCIgfCB0cmFuc2xhdGV9fTwvcD5cclxuICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwiZ3JleS1iZy1ob3ZlclwiPlxyXG4gICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9jb21tb24taGVhZGVyLWxpYi9pbWFnZXMvc2V0dGluZ3Muc3ZnXCIgYWx0PVwic2V0dGluZ3NcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJteC0yXCIgKGNsaWNrKT1cIm9wZW5Vc2VyU2V0dGluZ1BhbmVsKClcIj57e1wiR2VuZXJpY19saWIuR2VuZXJhbENvbmZpZ3VyYXRpb25cIiB8IHRyYW5zbGF0ZX19PC9wPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gR2xvYmFsIEZvbnQgYW5kIFRoZW1lICAtLT5cclxuICA8IS0tIDxkaXYgY2xhc3M9XCJhY2Nlc3NpYmlsaXR5LWNvbnRhaW5lciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtYWxsIHJvdW5kZWQtY2lyY2xlXCIgKGNsaWNrKT1cImdldFNtYWxsRm9udCgpXCI+XHJcbiAgICAgICAgPHNwYW4+QS08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc21hbGwgcm91bmRlZC1jaXJjbGVcIiAoY2xpY2spPVwiZ2V0TWVkaXVtRm9udCgpXCI+XHJcbiAgICAgICAgPHNwYW4+QTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbWFsbCByb3VuZGVkLWNpcmNsZVwiIChjbGljayk9XCJnZXRMYXJnZUZvbnQoKVwiPlxyXG4gICAgICAgIDxzcGFuPkErPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc21hbGwgcm91bmRlZC1jaXJjbGVcIiAoY2xpY2spPVwiZ2V0UmVkVGhlbWUoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGhlbWUgdGhlbWUtcmVkXCI+PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtYWxsIHJvdW5kZWQtY2lyY2xlXCIgKGNsaWNrKT1cImdldEJsYWNrVGhlbWUoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGhlbWUgdGhlbWUtYmxhY2tcIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc21hbGwgcm91bmRlZC1jaXJjbGVcIiAoY2xpY2spPVwiZ2V0Qmx1ZVRoZW1lKClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRoZW1lIHRoZW1lLWJsdWVcIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+IC0tPlxyXG48L2Rpdj5cclxuIl19