cax-design-system 2.5.0 → 2.6.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 (70) hide show
  1. package/README.md +1 -1
  2. package/api/confirmation.d.ts +5 -0
  3. package/chips/chips.d.ts +12 -1
  4. package/chips/chips.module.d.ts +2 -1
  5. package/confirmdialog/confirmdialog.d.ts +9 -1
  6. package/dialog/dialog.d.ts +4 -0
  7. package/esm2022/api/confirmation.mjs +1 -1
  8. package/esm2022/autocomplete/autocomplete.mjs +3 -3
  9. package/esm2022/calendar/calendar.mjs +4 -4
  10. package/esm2022/chips/chips.mjs +56 -17
  11. package/esm2022/chips/chips.module.mjs +5 -4
  12. package/esm2022/confirmdialog/confirmdialog.mjs +31 -6
  13. package/esm2022/dialog/dialog.mjs +18 -3
  14. package/esm2022/dropdown/dropdown.mjs +3 -3
  15. package/esm2022/dynamicdialog/dynamicdialog.mjs +3 -3
  16. package/esm2022/inputtext/inputtext.component.mjs +2 -2
  17. package/esm2022/navigation/navigation.interface.mjs +1 -1
  18. package/esm2022/navigation/navigation.mjs +93 -19
  19. package/esm2022/sidebar/sidebar.mjs +10 -3
  20. package/esm2022/table/components/column-filter/column-filter.mjs +191 -11
  21. package/esm2022/table/components/column-filter-form-element/column-filter-form-element.mjs +8 -7
  22. package/esm2022/table/components/sort-icon/sort-icon.mjs +10 -7
  23. package/esm2022/table/directives/sortable-column.directive.mjs +6 -6
  24. package/esm2022/table/table.mjs +201 -139
  25. package/esm2022/timeline/timeline.mjs +2 -2
  26. package/esm2022/tooltip/tooltip.module.mjs +6 -4
  27. package/fesm2022/cax-design-system-autocomplete.mjs +2 -2
  28. package/fesm2022/cax-design-system-autocomplete.mjs.map +1 -1
  29. package/fesm2022/cax-design-system-calendar.mjs +3 -3
  30. package/fesm2022/cax-design-system-calendar.mjs.map +1 -1
  31. package/fesm2022/cax-design-system-chips.mjs +58 -19
  32. package/fesm2022/cax-design-system-chips.mjs.map +1 -1
  33. package/fesm2022/cax-design-system-confirmdialog.mjs +31 -6
  34. package/fesm2022/cax-design-system-confirmdialog.mjs.map +1 -1
  35. package/fesm2022/cax-design-system-dialog.mjs +17 -2
  36. package/fesm2022/cax-design-system-dialog.mjs.map +1 -1
  37. package/fesm2022/cax-design-system-dropdown.mjs +2 -2
  38. package/fesm2022/cax-design-system-dropdown.mjs.map +1 -1
  39. package/fesm2022/cax-design-system-dynamicdialog.mjs +2 -2
  40. package/fesm2022/cax-design-system-dynamicdialog.mjs.map +1 -1
  41. package/fesm2022/cax-design-system-inputtext.mjs +1 -1
  42. package/fesm2022/cax-design-system-inputtext.mjs.map +1 -1
  43. package/fesm2022/cax-design-system-navigation.mjs +92 -18
  44. package/fesm2022/cax-design-system-navigation.mjs.map +1 -1
  45. package/fesm2022/cax-design-system-sidebar.mjs +9 -2
  46. package/fesm2022/cax-design-system-sidebar.mjs.map +1 -1
  47. package/fesm2022/cax-design-system-table.mjs +404 -165
  48. package/fesm2022/cax-design-system-table.mjs.map +1 -1
  49. package/fesm2022/cax-design-system-timeline.mjs +2 -2
  50. package/fesm2022/cax-design-system-timeline.mjs.map +1 -1
  51. package/fesm2022/cax-design-system-tooltip.mjs +5 -3
  52. package/fesm2022/cax-design-system-tooltip.mjs.map +1 -1
  53. package/navigation/navigation.d.ts +14 -7
  54. package/navigation/navigation.interface.d.ts +8 -5
  55. package/package.json +122 -122
  56. package/resources/cax.min.scss +1 -1
  57. package/resources/cax.scss +961 -573
  58. package/resources/components/autocomplete/autocomplete.scss +32 -33
  59. package/resources/components/calendar/calendar.scss +9 -10
  60. package/resources/components/chips/chips.scss +110 -62
  61. package/resources/components/dialog/dialog.scss +2 -2
  62. package/resources/components/dropdown/dropdown.scss +6 -0
  63. package/resources/components/table/table.scss +58 -2
  64. package/resources/components/timeline/timeline.scss +0 -1
  65. package/sidebar/sidebar.d.ts +8 -1
  66. package/table/components/column-filter/column-filter.d.ts +36 -1
  67. package/table/components/sort-icon/sort-icon.d.ts +2 -1
  68. package/table/directives/sortable-column.directive.d.ts +2 -2
  69. package/table/table.d.ts +4 -1
  70. package/tooltip/tooltip.module.d.ts +3 -1
@@ -16,6 +16,8 @@ import * as i3 from "cax-design-system/divider";
16
16
  import * as i4 from "cax-design-system/image";
17
17
  import * as i5 from "cax-design-system/avatar";
18
18
  import * as i6 from "cax-design-system/overlaypanel";
19
+ import * as i7 from "cax-design-system/radiobutton";
20
+ import * as i8 from "@angular/forms";
19
21
  export class Navigation {
20
22
  header;
21
23
  topNavList;
@@ -30,10 +32,13 @@ export class Navigation {
30
32
  settings = true;
31
33
  userName;
32
34
  userImage;
33
- userRole;
34
- organisationDetails;
35
35
  headerLogo;
36
36
  headerInitials;
37
+ subscriptionMode = 'default';
38
+ subscriptionList;
39
+ selectedSubscription;
40
+ advanceSubscriptionList;
41
+ displaySubscriptionName;
37
42
  onNavListItemChange = new EventEmitter();
38
43
  onNotificationClick = new EventEmitter();
39
44
  onHelpCentreClick = new EventEmitter();
@@ -41,13 +46,14 @@ export class Navigation {
41
46
  onProfileClick = new EventEmitter();
42
47
  onSettingsClick = new EventEmitter();
43
48
  onLogoClick = new EventEmitter();
44
- onPlanChange = new EventEmitter();
49
+ onSubscriptionChange = new EventEmitter();
50
+ onNavExpanded = new EventEmitter(false);
45
51
  isHovered = false;
46
52
  isNavExpanded = false;
47
53
  notificationActive = false;
48
54
  helpCentreActive = false;
49
55
  accountDetailsActive = false;
50
- selectedOrganisastionPlan;
56
+ checkRadio = 1;
51
57
  bottomContainer;
52
58
  headerContainer;
53
59
  ngOnChanges() {
@@ -108,9 +114,44 @@ export class Navigation {
108
114
  this.topNavList[0].active = true;
109
115
  }
110
116
  }
111
- this.selectedOrganisastionPlan = 0;
112
117
  }
113
118
  ngAfterViewInit() {
119
+ if (this.advanceSubscriptionList)
120
+ this.advanceSubscriptionList = this.advanceSubscriptionList.map((item) => {
121
+ return { ...item, check: false };
122
+ });
123
+ if (this.subscriptionMode === 'advance') {
124
+ if (this.advanceSubscriptionList.length) {
125
+ if (!(typeof this.selectedSubscription === 'object' &&
126
+ this.selectedSubscription?.name &&
127
+ this.selectedSubscription?.selected &&
128
+ this.advanceSubscriptionList.find((item) => typeof this.selectedSubscription === 'object' && item.name === this.selectedSubscription.name)?.subscription.includes(this.selectedSubscription.selected))) {
129
+ this.advanceSubscriptionList.some((list) => {
130
+ if (list.subscription.length) {
131
+ this.selectedSubscription = {
132
+ name: list.name,
133
+ selected: list.subscription[0]
134
+ };
135
+ return true;
136
+ }
137
+ });
138
+ }
139
+ }
140
+ }
141
+ else {
142
+ if (this.subscriptionList?.length) {
143
+ if (!this.subscriptionList.some((a) => a == this.selectedSubscription))
144
+ this.selectedSubscription = this.subscriptionList[0];
145
+ }
146
+ }
147
+ if (!this.displaySubscriptionName?.length) {
148
+ if (this.selectedSubscription && typeof this.selectedSubscription === 'object') {
149
+ this.displaySubscriptionName = this.selectedSubscription.name + ' - ' + this.selectedSubscription.selected;
150
+ }
151
+ else if (this.selectedSubscription && typeof this.selectedSubscription === 'string') {
152
+ this.displaySubscriptionName = this.selectedSubscription;
153
+ }
154
+ }
114
155
  this.adjustUpDivHeight();
115
156
  }
116
157
  onItemClick(e, item, index, position) {
@@ -164,10 +205,6 @@ export class Navigation {
164
205
  emitLogoClick() {
165
206
  this.onLogoClick.emit();
166
207
  }
167
- onPlanClick(orgDetails, index) {
168
- this.selectedOrganisastionPlan = index;
169
- this.onPlanChange.emit(orgDetails);
170
- }
171
208
  onResize() {
172
209
  this.adjustUpDivHeight();
173
210
  }
@@ -177,21 +214,50 @@ export class Navigation {
177
214
  const containerHeight = window.innerHeight;
178
215
  return containerHeight - bottomHeight - headerHeight - 56;
179
216
  }
217
+ onMouseEnter() {
218
+ this.isHovered = true;
219
+ this.isNavExpanded = true;
220
+ this.onNavExpanded.emit(true);
221
+ }
180
222
  onMouseLeave() {
181
223
  this.isHovered = false;
182
224
  if (!this.accountDetailsActive) {
183
225
  this.isNavExpanded = false;
226
+ this.onNavExpanded.emit(false);
184
227
  }
185
228
  }
186
229
  hideAccountDetails() {
187
230
  this.accountDetailsActive = false;
188
- if (this.isHovered)
231
+ if (this.isHovered) {
189
232
  this.isNavExpanded = true;
190
- else
233
+ this.onNavExpanded.emit(true);
234
+ }
235
+ else {
191
236
  this.isNavExpanded = false;
237
+ this.onNavExpanded.emit(false);
238
+ }
239
+ }
240
+ changeActiveSusbcription(item) {
241
+ this.selectedSubscription = item;
242
+ this.onSubscriptionChange.emit({ selected: item });
243
+ }
244
+ updateSubscription(item, child) {
245
+ this.selectedSubscription = { name: item.name, selected: child };
246
+ this.onSubscriptionChange.emit(this.selectedSubscription);
247
+ }
248
+ toggleSubscriptionList(index) {
249
+ if (this.advanceSubscriptionList[index].check) {
250
+ this.advanceSubscriptionList[index].check = false;
251
+ }
252
+ else {
253
+ this.advanceSubscriptionList = this.advanceSubscriptionList.map((item) => {
254
+ return { ...item, check: false };
255
+ });
256
+ this.advanceSubscriptionList[index].check = true;
257
+ }
192
258
  }
193
259
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Navigation, deps: [], target: i0.ɵɵFactoryTarget.Component });
194
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: Navigation, isStandalone: true, selector: "cax-navigation", inputs: { header: "header", topNavList: "topNavList", bottomNavList: "bottomNavList", activeTab: "activeTab", notifications: "notifications", helpCentre: "helpCentre", copyrightYear: "copyrightYear", version: "version", logout: "logout", profile: "profile", settings: "settings", userName: "userName", userImage: "userImage", userRole: "userRole", organisationDetails: "organisationDetails", headerLogo: "headerLogo", headerInitials: "headerInitials" }, outputs: { onNavListItemChange: "onNavListItemChange", onNotificationClick: "onNotificationClick", onHelpCentreClick: "onHelpCentreClick", onLogoutClick: "onLogoutClick", onProfileClick: "onProfileClick", onSettingsClick: "onSettingsClick", onLogoClick: "onLogoClick", onPlanChange: "onPlanChange" }, host: { listeners: { "window:resize": "onResize()" }, classAttribute: "cax-element" }, viewQueries: [{ propertyName: "bottomContainer", first: true, predicate: ["bottomContainer"], descendants: true }, { propertyName: "headerContainer", first: true, predicate: ["headerContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"accountDetailsActive\" class=\"cax-nav-backdrop\"></div>\r\n<div class=\"cax-nav\" [ngClass]=\"{ 'cax-nav-expand': isNavExpanded }\" (mouseenter)=\"isHovered = true; isNavExpanded = true\" (mouseleave)=\"onMouseLeave()\">\r\n <div class=\"cax-nav-header-container\" #headerContainer>\r\n <div [@rightFade] *ngIf=\"!isNavExpanded\" class=\"cax-nav-header\">\r\n <cax-logo *ngIf=\"!headerLogo?.collapsed\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [iconOnly]=\"true\" />\r\n <cax-image *ngIf=\"headerLogo?.collapsed\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [src]=\"headerLogo.collapsed\" />\r\n <cax-divider layout=\"vertical\"></cax-divider>\r\n <span *ngIf=\"headerInitials\">{{ headerInitials }}</span>\r\n <span *ngIf=\"!headerInitials\">{{ getInitials(header) }}</span>\r\n </div>\r\n <div *ngIf=\"isNavExpanded\" class=\"cax-nav-header\" [@leftFade]>\r\n <cax-logo *ngIf=\"!headerLogo?.expanded\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" />\r\n <cax-image *ngIf=\"headerLogo?.expanded\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [src]=\"headerLogo.expanded\" />\r\n <cax-divider layout=\"vertical\"></cax-divider>\r\n <span>{{ header }}</span>\r\n </div>\r\n </div>\r\n <div class=\"cax-nav-list-container\" [style.maxHeight.px]=\"adjustUpDivHeight()\">\r\n <ul>\r\n <li *ngFor=\"let nav of topNavList, let i = index\" [ngClass]=\"{ active: nav.active }\" (click)=\"onItemClick($event, nav, i, 'top')\">\r\n <i *ngIf=\"nav.icon; else imageTemplate\" [class]=\"'cax pi ' + nav.icon\"></i>\r\n <ng-template #imageTemplate>\r\n <cax-image [src]=\"nav.image\" width=\"24px\" height=\"24px\"></cax-image>\r\n </ng-template>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">{{ nav.label }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"cax-nav-bottom-container\" #bottomContainer>\r\n <div class=\"cax-nav-bottom-list\">\r\n <ul>\r\n <li *ngFor=\"let nav of bottomNavList, let i = index\" [ngClass]=\"{ active: nav.active }\" (click)=\"onItemClick($event, nav, i, 'bottom')\">\r\n <i *ngIf=\"nav.icon; else imageTemplate\" [class]=\"'cax pi ' + nav.icon\"></i>\r\n <ng-template #imageTemplate>\r\n <cax-image [src]=\"nav.image\" width=\"24px\" height=\"24px\"></cax-image>\r\n </ng-template>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">{{ nav.label }}</span>\r\n </li>\r\n <li *ngIf=\"notifications\" (click)=\"emitNotification()\" [ngClass]=\"{ active: notificationActive }\">\r\n <i class=\"cax cax-bell\"></i>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">Notifications</span>\r\n </li>\r\n <li *ngIf=\"helpCentre\" (click)=\"emitHelpCentre()\" [ngClass]=\"{ active: helpCentreActive }\">\r\n <i class=\"cax cax-shield-warning\"></i>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">Help Centre</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"userName\" (click)=\"op.toggle($event);\" [ngClass]=\"{ active: accountDetailsActive }\" class=\"cax-nav-account-details\">\r\n <cax-avatar *ngIf=\"userImage\" [image]=\"userImage\" avatarSize=\"lg\"></cax-avatar>\r\n <cax-avatar *ngIf=\"!userImage\" [label]=\"getInitials(userName)\" avatarSize=\"lg\"></cax-avatar>\r\n <div [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-user\">\r\n <span class=\"cax-nav-user-name\">{{ userName }}</span>\r\n <span class=\"cax-nav-user-role\">{{ userRole }}</span>\r\n </div>\r\n <div [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-account-icon\">\r\n <i class=\"cax cax-alt-arrow-up\"></i>\r\n <i class=\"cax cax-alt-arrow-down\"></i>\r\n </div>\r\n <cax-overlayPanel #op (onShow)=\"accountDetailsActive = true\" [styleClass]=\"isNavExpanded ? 'cax-nav-overlay-expand' : 'cax-nav-overlay'\" (onHide)=\"hideAccountDetails()\">\r\n <div *ngIf=\"profile\" class=\"cax-nav-profile-options\" (click)=\"emitProfile()\">\r\n <i class=\"cax cax-user-rounded\"></i>\r\n <span>View Profile</span>\r\n </div>\r\n <div *ngIf=\"settings\" class=\"cax-nav-profile-options\" (click)=\"emitSettings()\">\r\n <i class=\"cax cax-settings\"></i>\r\n <span>Account Settings</span>\r\n </div>\r\n <div *ngIf=\"logout\" class=\"cax-nav-profile-options cax-nav-logout\" (click)=\"emitLogout()\">\r\n <i class=\"cax cax-logout\"></i>\r\n <span>Logout</span>\r\n </div>\r\n <div class=\"cax-nav-copyright-container\">\r\n <cax-logo width=\"55px\" height=\"17px\"></cax-logo>\r\n <div class=\"cax-nav-copyright\">\r\n <span *ngIf=\"copyrightYear\">&copy; {{ copyrightYear }}</span>\r\n <span *ngIf=\"version\">{{ version }}</span>\r\n </div>\r\n </div>\r\n </cax-overlayPanel>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@layer cax{.cax-nav{width:88px;height:100vh;transition:width .3s ease-in-out;overflow:hidden;padding:16px 8px;position:absolute;left:0;top:0;z-index:1200}.cax-nav .cax-nav-header .cax-image img{max-width:26px;object-fit:cover}.cax-nav.cax-nav-expand{width:264px}.cax-nav.cax-nav-expand .cax-nav-bottom-container{width:248px}.cax-nav.cax-nav-expand .cax-nav-header .cax-image img{max-width:100px;object-fit:cover}.cax-nav-header-container{display:flex;align-items:center;justify-content:center;height:64px}.cax-nav-header{display:flex;align-items:center;justify-content:center}.cax-nav-header span{font-weight:700;font-size:12px}.cax-nav .cax-divider.cax-divider-vertical{margin:0 8px;height:36px}.cax-nav-list-container,.cax-nav-bottom-list{margin:24px 0}.cax-nav-list-container ul,.cax-nav-bottom-list ul{margin:0;padding:0;list-style-type:none;display:flex;flex-direction:column;gap:16px}.cax-nav-list-container ul li,.cax-nav-bottom-list ul li{padding:12px 24px;border-radius:12px;display:flex;align-items:center;cursor:pointer;height:56px;line-height:24px}.cax-nav-list-container{overflow-y:auto}.cax-nav-list-container::-webkit-scrollbar{display:none}.cax-nav-bottom-container{position:absolute;bottom:16px}.cax-nav-account-details{border-radius:12px;padding:12px;cursor:pointer;transition:width .3s ease-in-out;display:flex;align-items:flex-start}.cax-nav-account-details .cax-nav-account-icon{display:grid;margin-left:auto}.cax-nav.cax-nav-expand .cax-nav-account-details{width:248px}.cax-nav-user{display:grid;margin:0 8px;white-space:nowrap}.cax-nav-user .cax-nav-user-name{font-size:16px;font-weight:500;line-height:24px}.cax-nav-user .cax-nav-user-role{font-size:14px;font-weight:400;line-height:21px}.cax-overlaypanel{width:320px}.cax-overlaypanel .cax-overlaypanel-content{padding:8px}.cax-nav-copyright-container{display:flex;align-items:center;justify-content:space-between}.cax-nav-copyright-container .cax-nav-copyright{font-size:12px;font-weight:500}.cax-nav-copyright-container .cax-nav-copyright span{margin:0 0 0 16px}.cax-nav-profile-options{padding:12px 24px;font-weight:600;line-height:24px;display:flex;align-items:center;cursor:pointer;border-radius:12px;margin-bottom:8px;font-size:16px}.cax-nav-profile-options span{margin-left:8px}.cax-nav-overlay-expand{left:270px!important;top:auto!important;bottom:6px}.cax-nav-overlay{left:94px!important;top:auto!important;bottom:6px}}.c-pointer{cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: LogoModule }, { kind: "component", type: i1.Logo, selector: "cax-logo", inputs: ["size", "width", "height", "iconOnly", "darkMode"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: DividerModule }, { kind: "component", type: i3.Divider, selector: "cax-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "ngmodule", type: ImageModule }, { kind: "component", type: i4.Image, selector: "cax-image", inputs: ["imageClass", "imageStyle", "styleClass", "style", "src", "srcSet", "sizes", "size", "previewImageSrc", "previewImageSrcSet", "previewImageSizes", "alt", "width", "height", "loading", "appendTo", "preview", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide", "onImageError"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i5.Avatar, selector: "cax-avatar", inputs: ["label", "icon", "image", "avatarSize", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: OverlayPanelModule }, { kind: "component", type: i6.OverlayPanel, selector: "cax-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "ngmodule", type: RadioButtonModule }, { kind: "ngmodule", type: FormsModule }], animations: [
260
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: Navigation, isStandalone: true, selector: "cax-navigation", inputs: { header: "header", topNavList: "topNavList", bottomNavList: "bottomNavList", activeTab: "activeTab", notifications: "notifications", helpCentre: "helpCentre", copyrightYear: "copyrightYear", version: "version", logout: "logout", profile: "profile", settings: "settings", userName: "userName", userImage: "userImage", headerLogo: "headerLogo", headerInitials: "headerInitials", subscriptionMode: "subscriptionMode", subscriptionList: "subscriptionList", selectedSubscription: "selectedSubscription", advanceSubscriptionList: "advanceSubscriptionList", displaySubscriptionName: "displaySubscriptionName" }, outputs: { onNavListItemChange: "onNavListItemChange", onNotificationClick: "onNotificationClick", onHelpCentreClick: "onHelpCentreClick", onLogoutClick: "onLogoutClick", onProfileClick: "onProfileClick", onSettingsClick: "onSettingsClick", onLogoClick: "onLogoClick", onSubscriptionChange: "onSubscriptionChange", onNavExpanded: "onNavExpanded" }, host: { listeners: { "window:resize": "onResize()" }, classAttribute: "cax-element" }, viewQueries: [{ propertyName: "bottomContainer", first: true, predicate: ["bottomContainer"], descendants: true }, { propertyName: "headerContainer", first: true, predicate: ["headerContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"accountDetailsActive\" class=\"cax-nav-backdrop\"></div>\r\n<div class=\"cax-nav\" [ngClass]=\"{ 'cax-nav-expand': isNavExpanded }\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n <div class=\"cax-nav-header-container\" #headerContainer>\r\n <div [@rightFade] *ngIf=\"!isNavExpanded\" class=\"cax-nav-header\">\r\n <cax-logo *ngIf=\"!headerLogo?.collapsed\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [iconOnly]=\"true\" />\r\n <cax-image *ngIf=\"headerLogo?.collapsed\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [src]=\"headerLogo.collapsed\" />\r\n <cax-divider layout=\"vertical\"></cax-divider>\r\n <span *ngIf=\"headerInitials\">{{ headerInitials }}</span>\r\n <span *ngIf=\"!headerInitials\">{{ getInitials(header) }}</span>\r\n </div>\r\n <div *ngIf=\"isNavExpanded\" class=\"cax-nav-header\" [@leftFade]>\r\n <cax-logo *ngIf=\"!headerLogo?.expanded\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" />\r\n <cax-image *ngIf=\"headerLogo?.expanded\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [src]=\"headerLogo.expanded\" />\r\n <cax-divider layout=\"vertical\"></cax-divider>\r\n <span>{{ header }}</span>\r\n </div>\r\n </div>\r\n <div class=\"cax-nav-list-container\" [style.maxHeight.px]=\"adjustUpDivHeight()\">\r\n <ul>\r\n <li *ngFor=\"let nav of topNavList, let i = index\" [ngClass]=\"{ active: nav.active }\" (click)=\"onItemClick($event, nav, i, 'top')\">\r\n <i *ngIf=\"nav.icon; else imageTemplate\" [class]=\"'cax pi ' + nav.icon\"></i>\r\n <ng-template #imageTemplate>\r\n <cax-image [src]=\"nav.image\" width=\"24px\" height=\"24px\"></cax-image>\r\n </ng-template>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">{{ nav.label }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"cax-nav-bottom-container\" #bottomContainer>\r\n <div class=\"cax-nav-bottom-list\">\r\n <ul>\r\n <li *ngFor=\"let nav of bottomNavList, let i = index\" [ngClass]=\"{ active: nav.active }\" (click)=\"onItemClick($event, nav, i, 'bottom')\">\r\n <i *ngIf=\"nav.icon; else imageTemplate\" [class]=\"'cax pi ' + nav.icon\"></i>\r\n <ng-template #imageTemplate>\r\n <cax-image [src]=\"nav.image\" width=\"24px\" height=\"24px\"></cax-image>\r\n </ng-template>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">{{ nav.label }}</span>\r\n </li>\r\n <li *ngIf=\"notifications\" (click)=\"emitNotification()\" [ngClass]=\"{ active: notificationActive }\">\r\n <i class=\"cax cax-bell\"></i>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">Notifications</span>\r\n </li>\r\n <li *ngIf=\"helpCentre\" (click)=\"emitHelpCentre()\" [ngClass]=\"{ active: helpCentreActive }\">\r\n <i class=\"cax cax-shield-warning\"></i>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">Help Centre</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"userName\" (click)=\"op.toggle($event);\" [ngClass]=\"{ active: accountDetailsActive }\" class=\"cax-nav-account-details\">\r\n <cax-avatar *ngIf=\"userImage\" [image]=\"userImage\" avatarSize=\"lg\"></cax-avatar>\r\n <cax-avatar *ngIf=\"!userImage\" [label]=\"getInitials(userName)\" avatarSize=\"lg\"></cax-avatar>\r\n <div [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-user\">\r\n <span class=\"cax-nav-user-name\">{{ userName }}</span>\r\n <span class=\"cax-nav-user-role\">{{ displaySubscriptionName }}</span>\r\n </div>\r\n <div [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-account-icon\">\r\n <i class=\"cax cax-alt-arrow-up\"></i>\r\n <i class=\"cax cax-alt-arrow-down\"></i>\r\n </div>\r\n <cax-overlayPanel #op (onShow)=\"accountDetailsActive = true\" [styleClass]=\"isNavExpanded ? 'cax-nav-overlay-expand' : 'cax-nav-overlay'\" (onHide)=\"hideAccountDetails()\">\r\n <div class=\"cax-nav-subscription-list\" *ngIf=\"subscriptionMode === 'default' && subscriptionList?.length\">\r\n <li class=\"cax-nav-subscription-list-item\" [class.active]=\"selectedSubscription === item\" *ngFor=\"let item of subscriptionList\" (click)=\"changeActiveSusbcription(item)\">\r\n <span>{{ item }}</span>\r\n <cax-radioButton *ngIf=\"selectedSubscription === item\" value=\"1\" [(ngModel)]=\"checkRadio\"></cax-radioButton>\r\n </li>\r\n </div>\r\n <div class=\"cax-nav-subscription-list\" *ngIf=\"subscriptionMode === 'advance' && advanceSubscriptionList?.length\">\r\n <div *ngFor=\"let item of advanceSubscriptionList, let i = index\">\r\n <li [class.active]=\"selectedSubscription?.name === item.name\" class=\"cax-nav-advance-subscription-list-item\" (click)=\"toggleSubscriptionList(i)\">\r\n <span>{{ item.name }}</span>\r\n <i *ngIf=\"!item.check\" class=\"cax cax-alt-arrow-down\"></i>\r\n <i *ngIf=\"item.check\" class=\"cax cax-alt-arrow-up\"></i>\r\n </li>\r\n <div *ngIf=\"item.check\" class=\"cax-nav-advance-subscription-child-list\">\r\n <li [class.active]=\"selectedSubscription?.selected === child\" class=\"cax-nav-advance-subscription-child-list-item\" *ngFor=\"let child of item.subscription\" (click)=\"updateSubscription(item, child)\">\r\n <span>{{ child }}</span>\r\n <cax-radioButton [size]=\"'sm'\" *ngIf=\"selectedSubscription?.selected === child\" value=\"1\" [(ngModel)]=\"checkRadio\"></cax-radioButton>\r\n </li>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"profile\" class=\"cax-nav-profile-options\" (click)=\"emitProfile()\">\r\n <i class=\"cax cax-user-rounded\"></i>\r\n <span>View Profile</span>\r\n </div>\r\n <div *ngIf=\"settings\" class=\"cax-nav-profile-options\" (click)=\"emitSettings()\">\r\n <i class=\"cax cax-settings\"></i>\r\n <span>Account Settings</span>\r\n </div>\r\n <div *ngIf=\"logout\" class=\"cax-nav-profile-options cax-nav-logout\" (click)=\"emitLogout()\">\r\n <i class=\"cax cax-logout\"></i>\r\n <span>Logout</span>\r\n </div>\r\n <div class=\"cax-nav-copyright-container\">\r\n <cax-logo width=\"55px\" height=\"17px\"></cax-logo>\r\n <div class=\"cax-nav-copyright\">\r\n <span *ngIf=\"copyrightYear\">&copy; {{ copyrightYear }}</span>\r\n <span *ngIf=\"version\">{{ version }}</span>\r\n </div>\r\n </div>\r\n </cax-overlayPanel>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@layer cax{.cax-nav{width:88px;height:100vh;transition:width .3s ease-in-out;overflow:hidden;padding:16px 8px;position:absolute;left:0;top:0;z-index:1200}.cax-nav .cax-nav-header .cax-image img{max-width:26px;object-fit:cover}.cax-nav.cax-nav-expand{width:264px}.cax-nav.cax-nav-expand .cax-nav-bottom-container{width:248px}.cax-nav.cax-nav-expand .cax-nav-header .cax-image img{max-width:100px;object-fit:cover}.cax-nav-header-container{display:flex;align-items:center;justify-content:center;height:64px}.cax-nav-header{display:flex;align-items:center;justify-content:center}.cax-nav-header span{font-weight:700;font-size:12px}.cax-nav .cax-divider.cax-divider-vertical{margin:0 8px;height:36px}.cax-nav-list-container,.cax-nav-bottom-list{margin:24px 0}.cax-nav-list-container ul,.cax-nav-bottom-list ul{margin:0;padding:0;list-style-type:none;display:flex;flex-direction:column;gap:16px}.cax-nav-list-container ul li,.cax-nav-bottom-list ul li{padding:12px 24px;border-radius:12px;display:flex;align-items:center;cursor:pointer;height:56px;line-height:24px}.cax-nav-list-container{overflow-y:auto}.cax-nav-list-container::-webkit-scrollbar{display:none}.cax-nav-bottom-container{position:absolute;bottom:16px}.cax-nav-account-details{border-radius:12px;padding:12px;cursor:pointer;transition:width .3s ease-in-out;display:flex;align-items:flex-start}.cax-nav-account-details .cax-nav-account-icon{display:grid;margin-left:auto}.cax-nav.cax-nav-expand .cax-nav-account-details{width:248px}.cax-nav-user{display:grid;margin:0 8px;white-space:nowrap}.cax-nav-user .cax-nav-user-name{font-size:16px;font-weight:500;line-height:24px}.cax-nav-user .cax-nav-user-role{font-size:14px;font-weight:400;line-height:21px}.cax-overlaypanel{width:320px}.cax-overlaypanel .cax-overlaypanel-content{padding:8px}.cax-nav-copyright-container{display:flex;align-items:center;justify-content:space-between}.cax-nav-copyright-container .cax-nav-copyright{font-size:12px;font-weight:500}.cax-nav-copyright-container .cax-nav-copyright span{margin:0 0 0 16px}.cax-nav-profile-options{padding:12px 24px;font-weight:600;line-height:24px;display:flex;align-items:center;cursor:pointer;border-radius:12px;margin-bottom:8px;font-size:16px}.cax-nav-profile-options span{margin-left:8px}.cax-nav-overlay-expand{left:270px!important;top:auto!important;bottom:6px}.cax-nav-overlay{left:94px!important;top:auto!important;bottom:6px}}.c-pointer{cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: LogoModule }, { kind: "component", type: i1.Logo, selector: "cax-logo", inputs: ["size", "width", "height", "iconOnly", "darkMode"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: DividerModule }, { kind: "component", type: i3.Divider, selector: "cax-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "ngmodule", type: ImageModule }, { kind: "component", type: i4.Image, selector: "cax-image", inputs: ["imageClass", "imageStyle", "styleClass", "style", "src", "srcSet", "sizes", "size", "previewImageSrc", "previewImageSrcSet", "previewImageSizes", "alt", "width", "height", "loading", "appendTo", "preview", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide", "onImageError"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i5.Avatar, selector: "cax-avatar", inputs: ["label", "icon", "image", "avatarSize", "shape", "style", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: OverlayPanelModule }, { kind: "component", type: i6.OverlayPanel, selector: "cax-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "ngmodule", type: RadioButtonModule }, { kind: "component", type: i7.RadioButton, selector: "cax-radioButton", inputs: ["value", "size", "formControlName", "name", "disabled", "label", "variant", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], animations: [
195
261
  trigger('leftFade', [
196
262
  transition(':enter', [style({ transform: 'translateX(-100%)', opacity: 0 }), animate('300ms', style({ transform: 'translateX(0)', opacity: 1 }))]),
197
263
  transition(':leave', [style({ transform: 'translateX(0)', opacity: 0.5 }), animate('300ms', style({ transform: 'translateX(-100%)', opacity: 0 }))])
@@ -215,7 +281,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
215
281
  ])
216
282
  ], host: {
217
283
  class: 'cax-element'
218
- }, template: "<div *ngIf=\"accountDetailsActive\" class=\"cax-nav-backdrop\"></div>\r\n<div class=\"cax-nav\" [ngClass]=\"{ 'cax-nav-expand': isNavExpanded }\" (mouseenter)=\"isHovered = true; isNavExpanded = true\" (mouseleave)=\"onMouseLeave()\">\r\n <div class=\"cax-nav-header-container\" #headerContainer>\r\n <div [@rightFade] *ngIf=\"!isNavExpanded\" class=\"cax-nav-header\">\r\n <cax-logo *ngIf=\"!headerLogo?.collapsed\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [iconOnly]=\"true\" />\r\n <cax-image *ngIf=\"headerLogo?.collapsed\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [src]=\"headerLogo.collapsed\" />\r\n <cax-divider layout=\"vertical\"></cax-divider>\r\n <span *ngIf=\"headerInitials\">{{ headerInitials }}</span>\r\n <span *ngIf=\"!headerInitials\">{{ getInitials(header) }}</span>\r\n </div>\r\n <div *ngIf=\"isNavExpanded\" class=\"cax-nav-header\" [@leftFade]>\r\n <cax-logo *ngIf=\"!headerLogo?.expanded\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" />\r\n <cax-image *ngIf=\"headerLogo?.expanded\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [src]=\"headerLogo.expanded\" />\r\n <cax-divider layout=\"vertical\"></cax-divider>\r\n <span>{{ header }}</span>\r\n </div>\r\n </div>\r\n <div class=\"cax-nav-list-container\" [style.maxHeight.px]=\"adjustUpDivHeight()\">\r\n <ul>\r\n <li *ngFor=\"let nav of topNavList, let i = index\" [ngClass]=\"{ active: nav.active }\" (click)=\"onItemClick($event, nav, i, 'top')\">\r\n <i *ngIf=\"nav.icon; else imageTemplate\" [class]=\"'cax pi ' + nav.icon\"></i>\r\n <ng-template #imageTemplate>\r\n <cax-image [src]=\"nav.image\" width=\"24px\" height=\"24px\"></cax-image>\r\n </ng-template>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">{{ nav.label }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"cax-nav-bottom-container\" #bottomContainer>\r\n <div class=\"cax-nav-bottom-list\">\r\n <ul>\r\n <li *ngFor=\"let nav of bottomNavList, let i = index\" [ngClass]=\"{ active: nav.active }\" (click)=\"onItemClick($event, nav, i, 'bottom')\">\r\n <i *ngIf=\"nav.icon; else imageTemplate\" [class]=\"'cax pi ' + nav.icon\"></i>\r\n <ng-template #imageTemplate>\r\n <cax-image [src]=\"nav.image\" width=\"24px\" height=\"24px\"></cax-image>\r\n </ng-template>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">{{ nav.label }}</span>\r\n </li>\r\n <li *ngIf=\"notifications\" (click)=\"emitNotification()\" [ngClass]=\"{ active: notificationActive }\">\r\n <i class=\"cax cax-bell\"></i>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">Notifications</span>\r\n </li>\r\n <li *ngIf=\"helpCentre\" (click)=\"emitHelpCentre()\" [ngClass]=\"{ active: helpCentreActive }\">\r\n <i class=\"cax cax-shield-warning\"></i>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">Help Centre</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"userName\" (click)=\"op.toggle($event);\" [ngClass]=\"{ active: accountDetailsActive }\" class=\"cax-nav-account-details\">\r\n <cax-avatar *ngIf=\"userImage\" [image]=\"userImage\" avatarSize=\"lg\"></cax-avatar>\r\n <cax-avatar *ngIf=\"!userImage\" [label]=\"getInitials(userName)\" avatarSize=\"lg\"></cax-avatar>\r\n <div [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-user\">\r\n <span class=\"cax-nav-user-name\">{{ userName }}</span>\r\n <span class=\"cax-nav-user-role\">{{ userRole }}</span>\r\n </div>\r\n <div [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-account-icon\">\r\n <i class=\"cax cax-alt-arrow-up\"></i>\r\n <i class=\"cax cax-alt-arrow-down\"></i>\r\n </div>\r\n <cax-overlayPanel #op (onShow)=\"accountDetailsActive = true\" [styleClass]=\"isNavExpanded ? 'cax-nav-overlay-expand' : 'cax-nav-overlay'\" (onHide)=\"hideAccountDetails()\">\r\n <div *ngIf=\"profile\" class=\"cax-nav-profile-options\" (click)=\"emitProfile()\">\r\n <i class=\"cax cax-user-rounded\"></i>\r\n <span>View Profile</span>\r\n </div>\r\n <div *ngIf=\"settings\" class=\"cax-nav-profile-options\" (click)=\"emitSettings()\">\r\n <i class=\"cax cax-settings\"></i>\r\n <span>Account Settings</span>\r\n </div>\r\n <div *ngIf=\"logout\" class=\"cax-nav-profile-options cax-nav-logout\" (click)=\"emitLogout()\">\r\n <i class=\"cax cax-logout\"></i>\r\n <span>Logout</span>\r\n </div>\r\n <div class=\"cax-nav-copyright-container\">\r\n <cax-logo width=\"55px\" height=\"17px\"></cax-logo>\r\n <div class=\"cax-nav-copyright\">\r\n <span *ngIf=\"copyrightYear\">&copy; {{ copyrightYear }}</span>\r\n <span *ngIf=\"version\">{{ version }}</span>\r\n </div>\r\n </div>\r\n </cax-overlayPanel>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@layer cax{.cax-nav{width:88px;height:100vh;transition:width .3s ease-in-out;overflow:hidden;padding:16px 8px;position:absolute;left:0;top:0;z-index:1200}.cax-nav .cax-nav-header .cax-image img{max-width:26px;object-fit:cover}.cax-nav.cax-nav-expand{width:264px}.cax-nav.cax-nav-expand .cax-nav-bottom-container{width:248px}.cax-nav.cax-nav-expand .cax-nav-header .cax-image img{max-width:100px;object-fit:cover}.cax-nav-header-container{display:flex;align-items:center;justify-content:center;height:64px}.cax-nav-header{display:flex;align-items:center;justify-content:center}.cax-nav-header span{font-weight:700;font-size:12px}.cax-nav .cax-divider.cax-divider-vertical{margin:0 8px;height:36px}.cax-nav-list-container,.cax-nav-bottom-list{margin:24px 0}.cax-nav-list-container ul,.cax-nav-bottom-list ul{margin:0;padding:0;list-style-type:none;display:flex;flex-direction:column;gap:16px}.cax-nav-list-container ul li,.cax-nav-bottom-list ul li{padding:12px 24px;border-radius:12px;display:flex;align-items:center;cursor:pointer;height:56px;line-height:24px}.cax-nav-list-container{overflow-y:auto}.cax-nav-list-container::-webkit-scrollbar{display:none}.cax-nav-bottom-container{position:absolute;bottom:16px}.cax-nav-account-details{border-radius:12px;padding:12px;cursor:pointer;transition:width .3s ease-in-out;display:flex;align-items:flex-start}.cax-nav-account-details .cax-nav-account-icon{display:grid;margin-left:auto}.cax-nav.cax-nav-expand .cax-nav-account-details{width:248px}.cax-nav-user{display:grid;margin:0 8px;white-space:nowrap}.cax-nav-user .cax-nav-user-name{font-size:16px;font-weight:500;line-height:24px}.cax-nav-user .cax-nav-user-role{font-size:14px;font-weight:400;line-height:21px}.cax-overlaypanel{width:320px}.cax-overlaypanel .cax-overlaypanel-content{padding:8px}.cax-nav-copyright-container{display:flex;align-items:center;justify-content:space-between}.cax-nav-copyright-container .cax-nav-copyright{font-size:12px;font-weight:500}.cax-nav-copyright-container .cax-nav-copyright span{margin:0 0 0 16px}.cax-nav-profile-options{padding:12px 24px;font-weight:600;line-height:24px;display:flex;align-items:center;cursor:pointer;border-radius:12px;margin-bottom:8px;font-size:16px}.cax-nav-profile-options span{margin-left:8px}.cax-nav-overlay-expand{left:270px!important;top:auto!important;bottom:6px}.cax-nav-overlay{left:94px!important;top:auto!important;bottom:6px}}.c-pointer{cursor:pointer}\n"] }]
284
+ }, template: "<div *ngIf=\"accountDetailsActive\" class=\"cax-nav-backdrop\"></div>\r\n<div class=\"cax-nav\" [ngClass]=\"{ 'cax-nav-expand': isNavExpanded }\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n <div class=\"cax-nav-header-container\" #headerContainer>\r\n <div [@rightFade] *ngIf=\"!isNavExpanded\" class=\"cax-nav-header\">\r\n <cax-logo *ngIf=\"!headerLogo?.collapsed\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [iconOnly]=\"true\" />\r\n <cax-image *ngIf=\"headerLogo?.collapsed\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [src]=\"headerLogo.collapsed\" />\r\n <cax-divider layout=\"vertical\"></cax-divider>\r\n <span *ngIf=\"headerInitials\">{{ headerInitials }}</span>\r\n <span *ngIf=\"!headerInitials\">{{ getInitials(header) }}</span>\r\n </div>\r\n <div *ngIf=\"isNavExpanded\" class=\"cax-nav-header\" [@leftFade]>\r\n <cax-logo *ngIf=\"!headerLogo?.expanded\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" />\r\n <cax-image *ngIf=\"headerLogo?.expanded\" class=\"c-pointer\" (click)=\"emitLogoClick()\" size=\"sm\" [src]=\"headerLogo.expanded\" />\r\n <cax-divider layout=\"vertical\"></cax-divider>\r\n <span>{{ header }}</span>\r\n </div>\r\n </div>\r\n <div class=\"cax-nav-list-container\" [style.maxHeight.px]=\"adjustUpDivHeight()\">\r\n <ul>\r\n <li *ngFor=\"let nav of topNavList, let i = index\" [ngClass]=\"{ active: nav.active }\" (click)=\"onItemClick($event, nav, i, 'top')\">\r\n <i *ngIf=\"nav.icon; else imageTemplate\" [class]=\"'cax pi ' + nav.icon\"></i>\r\n <ng-template #imageTemplate>\r\n <cax-image [src]=\"nav.image\" width=\"24px\" height=\"24px\"></cax-image>\r\n </ng-template>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">{{ nav.label }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"cax-nav-bottom-container\" #bottomContainer>\r\n <div class=\"cax-nav-bottom-list\">\r\n <ul>\r\n <li *ngFor=\"let nav of bottomNavList, let i = index\" [ngClass]=\"{ active: nav.active }\" (click)=\"onItemClick($event, nav, i, 'bottom')\">\r\n <i *ngIf=\"nav.icon; else imageTemplate\" [class]=\"'cax pi ' + nav.icon\"></i>\r\n <ng-template #imageTemplate>\r\n <cax-image [src]=\"nav.image\" width=\"24px\" height=\"24px\"></cax-image>\r\n </ng-template>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">{{ nav.label }}</span>\r\n </li>\r\n <li *ngIf=\"notifications\" (click)=\"emitNotification()\" [ngClass]=\"{ active: notificationActive }\">\r\n <i class=\"cax cax-bell\"></i>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">Notifications</span>\r\n </li>\r\n <li *ngIf=\"helpCentre\" (click)=\"emitHelpCentre()\" [ngClass]=\"{ active: helpCentreActive }\">\r\n <i class=\"cax cax-shield-warning\"></i>\r\n <span [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-list-label\">Help Centre</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"userName\" (click)=\"op.toggle($event);\" [ngClass]=\"{ active: accountDetailsActive }\" class=\"cax-nav-account-details\">\r\n <cax-avatar *ngIf=\"userImage\" [image]=\"userImage\" avatarSize=\"lg\"></cax-avatar>\r\n <cax-avatar *ngIf=\"!userImage\" [label]=\"getInitials(userName)\" avatarSize=\"lg\"></cax-avatar>\r\n <div [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-user\">\r\n <span class=\"cax-nav-user-name\">{{ userName }}</span>\r\n <span class=\"cax-nav-user-role\">{{ displaySubscriptionName }}</span>\r\n </div>\r\n <div [@leftFade] *ngIf=\"isNavExpanded\" class=\"cax-nav-account-icon\">\r\n <i class=\"cax cax-alt-arrow-up\"></i>\r\n <i class=\"cax cax-alt-arrow-down\"></i>\r\n </div>\r\n <cax-overlayPanel #op (onShow)=\"accountDetailsActive = true\" [styleClass]=\"isNavExpanded ? 'cax-nav-overlay-expand' : 'cax-nav-overlay'\" (onHide)=\"hideAccountDetails()\">\r\n <div class=\"cax-nav-subscription-list\" *ngIf=\"subscriptionMode === 'default' && subscriptionList?.length\">\r\n <li class=\"cax-nav-subscription-list-item\" [class.active]=\"selectedSubscription === item\" *ngFor=\"let item of subscriptionList\" (click)=\"changeActiveSusbcription(item)\">\r\n <span>{{ item }}</span>\r\n <cax-radioButton *ngIf=\"selectedSubscription === item\" value=\"1\" [(ngModel)]=\"checkRadio\"></cax-radioButton>\r\n </li>\r\n </div>\r\n <div class=\"cax-nav-subscription-list\" *ngIf=\"subscriptionMode === 'advance' && advanceSubscriptionList?.length\">\r\n <div *ngFor=\"let item of advanceSubscriptionList, let i = index\">\r\n <li [class.active]=\"selectedSubscription?.name === item.name\" class=\"cax-nav-advance-subscription-list-item\" (click)=\"toggleSubscriptionList(i)\">\r\n <span>{{ item.name }}</span>\r\n <i *ngIf=\"!item.check\" class=\"cax cax-alt-arrow-down\"></i>\r\n <i *ngIf=\"item.check\" class=\"cax cax-alt-arrow-up\"></i>\r\n </li>\r\n <div *ngIf=\"item.check\" class=\"cax-nav-advance-subscription-child-list\">\r\n <li [class.active]=\"selectedSubscription?.selected === child\" class=\"cax-nav-advance-subscription-child-list-item\" *ngFor=\"let child of item.subscription\" (click)=\"updateSubscription(item, child)\">\r\n <span>{{ child }}</span>\r\n <cax-radioButton [size]=\"'sm'\" *ngIf=\"selectedSubscription?.selected === child\" value=\"1\" [(ngModel)]=\"checkRadio\"></cax-radioButton>\r\n </li>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"profile\" class=\"cax-nav-profile-options\" (click)=\"emitProfile()\">\r\n <i class=\"cax cax-user-rounded\"></i>\r\n <span>View Profile</span>\r\n </div>\r\n <div *ngIf=\"settings\" class=\"cax-nav-profile-options\" (click)=\"emitSettings()\">\r\n <i class=\"cax cax-settings\"></i>\r\n <span>Account Settings</span>\r\n </div>\r\n <div *ngIf=\"logout\" class=\"cax-nav-profile-options cax-nav-logout\" (click)=\"emitLogout()\">\r\n <i class=\"cax cax-logout\"></i>\r\n <span>Logout</span>\r\n </div>\r\n <div class=\"cax-nav-copyright-container\">\r\n <cax-logo width=\"55px\" height=\"17px\"></cax-logo>\r\n <div class=\"cax-nav-copyright\">\r\n <span *ngIf=\"copyrightYear\">&copy; {{ copyrightYear }}</span>\r\n <span *ngIf=\"version\">{{ version }}</span>\r\n </div>\r\n </div>\r\n </cax-overlayPanel>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@layer cax{.cax-nav{width:88px;height:100vh;transition:width .3s ease-in-out;overflow:hidden;padding:16px 8px;position:absolute;left:0;top:0;z-index:1200}.cax-nav .cax-nav-header .cax-image img{max-width:26px;object-fit:cover}.cax-nav.cax-nav-expand{width:264px}.cax-nav.cax-nav-expand .cax-nav-bottom-container{width:248px}.cax-nav.cax-nav-expand .cax-nav-header .cax-image img{max-width:100px;object-fit:cover}.cax-nav-header-container{display:flex;align-items:center;justify-content:center;height:64px}.cax-nav-header{display:flex;align-items:center;justify-content:center}.cax-nav-header span{font-weight:700;font-size:12px}.cax-nav .cax-divider.cax-divider-vertical{margin:0 8px;height:36px}.cax-nav-list-container,.cax-nav-bottom-list{margin:24px 0}.cax-nav-list-container ul,.cax-nav-bottom-list ul{margin:0;padding:0;list-style-type:none;display:flex;flex-direction:column;gap:16px}.cax-nav-list-container ul li,.cax-nav-bottom-list ul li{padding:12px 24px;border-radius:12px;display:flex;align-items:center;cursor:pointer;height:56px;line-height:24px}.cax-nav-list-container{overflow-y:auto}.cax-nav-list-container::-webkit-scrollbar{display:none}.cax-nav-bottom-container{position:absolute;bottom:16px}.cax-nav-account-details{border-radius:12px;padding:12px;cursor:pointer;transition:width .3s ease-in-out;display:flex;align-items:flex-start}.cax-nav-account-details .cax-nav-account-icon{display:grid;margin-left:auto}.cax-nav.cax-nav-expand .cax-nav-account-details{width:248px}.cax-nav-user{display:grid;margin:0 8px;white-space:nowrap}.cax-nav-user .cax-nav-user-name{font-size:16px;font-weight:500;line-height:24px}.cax-nav-user .cax-nav-user-role{font-size:14px;font-weight:400;line-height:21px}.cax-overlaypanel{width:320px}.cax-overlaypanel .cax-overlaypanel-content{padding:8px}.cax-nav-copyright-container{display:flex;align-items:center;justify-content:space-between}.cax-nav-copyright-container .cax-nav-copyright{font-size:12px;font-weight:500}.cax-nav-copyright-container .cax-nav-copyright span{margin:0 0 0 16px}.cax-nav-profile-options{padding:12px 24px;font-weight:600;line-height:24px;display:flex;align-items:center;cursor:pointer;border-radius:12px;margin-bottom:8px;font-size:16px}.cax-nav-profile-options span{margin-left:8px}.cax-nav-overlay-expand{left:270px!important;top:auto!important;bottom:6px}.cax-nav-overlay{left:94px!important;top:auto!important;bottom:6px}}.c-pointer{cursor:pointer}\n"] }]
219
285
  }], propDecorators: { header: [{
220
286
  type: Input
221
287
  }], topNavList: [{
@@ -242,14 +308,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
242
308
  type: Input
243
309
  }], userImage: [{
244
310
  type: Input
245
- }], userRole: [{
246
- type: Input
247
- }], organisationDetails: [{
248
- type: Input
249
311
  }], headerLogo: [{
250
312
  type: Input
251
313
  }], headerInitials: [{
252
314
  type: Input
315
+ }], subscriptionMode: [{
316
+ type: Input
317
+ }], subscriptionList: [{
318
+ type: Input
319
+ }], selectedSubscription: [{
320
+ type: Input
321
+ }], advanceSubscriptionList: [{
322
+ type: Input
323
+ }], displaySubscriptionName: [{
324
+ type: Input
253
325
  }], onNavListItemChange: [{
254
326
  type: Output
255
327
  }], onNotificationClick: [{
@@ -264,7 +336,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
264
336
  type: Output
265
337
  }], onLogoClick: [{
266
338
  type: Output
267
- }], onPlanChange: [{
339
+ }], onSubscriptionChange: [{
340
+ type: Output
341
+ }], onNavExpanded: [{
268
342
  type: Output
269
343
  }], bottomContainer: [{
270
344
  type: ViewChild,
@@ -276,4 +350,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
276
350
  type: HostListener,
277
351
  args: ['window:resize']
278
352
  }] } });
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9uYXZpZ2F0aW9uL25hdmlnYXRpb24udHMiLCIuLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQ2xMLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQXdCN0MsTUFBTSxPQUFPLFVBQVU7SUFDVixNQUFNLENBQXFCO0lBQzNCLFVBQVUsQ0FBZ0I7SUFDMUIsYUFBYSxDQUFnQjtJQUM3QixTQUFTLENBQWlEO0lBQzFELGFBQWEsR0FBWSxJQUFJLENBQUM7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UUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0cmlnZ2VyLCB0cmFuc2l0aW9uLCBzdHlsZSwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdFbmNhcHN1bGF0aW9uLCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpdmlkZXJNb2R1bGUgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9kaXZpZGVyJztcbmltcG9ydCB7IExvZ29Nb2R1bGUgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9sb2dvJztcbmltcG9ydCB7IE5hdkxpc3RJdGVtLCBPcmdhbmlzYXRpb25EZXRhaWxzLCBUYWJJbmRleFR5cGUgfSBmcm9tICcuL25hdmlnYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEltYWdlTW9kdWxlIH0gZnJvbSAnY2F4LWRlc2lnbi1zeXN0ZW0vaW1hZ2UnO1xuaW1wb3J0IHsgQXZhdGFyTW9kdWxlIH0gZnJvbSAnY2F4LWRlc2lnbi1zeXN0ZW0vYXZhdGFyJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbE1vZHVsZSB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL292ZXJsYXlwYW5lbCc7XG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnY2F4LWRlc2lnbi1zeXN0ZW0vb3ZlcmxheSc7XG5pbXBvcnQgeyBSYWRpb0J1dHRvbk1vZHVsZSB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL3JhZGlvYnV0dG9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NheC1uYXZpZ2F0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmF2aWdhdGlvbi5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL25hdmlnYXRpb24uc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0xvZ29Nb2R1bGUsIENvbW1vbk1vZHVsZSwgRGl2aWRlck1vZHVsZSwgSW1hZ2VNb2R1bGUsIEF2YXRhck1vZHVsZSwgT3ZlcmxheVBhbmVsTW9kdWxlLCBPdmVybGF5TW9kdWxlLCBSYWRpb0J1dHRvbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignbGVmdEZhZGUnLCBbXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKC0xMDAlKScsIG9wYWNpdHk6IDAgfSksIGFuaW1hdGUoJzMwMG1zJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJywgb3BhY2l0eTogMSB9KSldKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknLCBvcGFjaXR5OiAwLjUgfSksIGFuaW1hdGUoJzMwMG1zJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKC0xMDAlKScsIG9wYWNpdHk6IDAgfSkpXSlcbiAgICAgICAgXSksXG4gICAgICAgIHRyaWdnZXIoJ3JpZ2h0RmFkZScsIFtcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMjAwJSknLCBvcGFjaXR5OiAwIH0pLCBhbmltYXRlKCczMDBtcycsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsIG9wYWNpdHk6IDEgfSkpXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJywgb3BhY2l0eTogMSB9KSwgYW5pbWF0ZSgnMzAwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMTAwJSknLCBvcGFjaXR5OiAwIH0pKV0pXG4gICAgICAgIF0pXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnY2F4LWVsZW1lbnQnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgICBASW5wdXQoKSBoZWFkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSB0b3BOYXZMaXN0OiBOYXZMaXN0SXRlbVtdO1xuICAgIEBJbnB1dCgpIGJvdHRvbU5hdkxpc3Q6IE5hdkxpc3RJdGVtW107XG4gICAgQElucHV0KCkgYWN0aXZlVGFiOiBUYWJJbmRleFR5cGUgfCAnbm90aWZpY2F0aW9ucycgfCAnaGVscC1jZW50cmUnO1xuICAgIEBJbnB1dCgpIG5vdGlmaWNhdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGhlbHBDZW50cmU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGNvcHlyaWdodFllYXI6IG51bWJlciB8IHVuZGVmaW5lZCA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBASW5wdXQoKSB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgQElucHV0KCkgbG9nb3V0OiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwcm9maWxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzZXR0aW5nczogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgdXNlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSB1c2VySW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSB1c2VyUm9sZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIEBJbnB1dCgpIG9yZ2FuaXNhdGlvbkRldGFpbHM6IE9yZ2FuaXNhdGlvbkRldGFpbHNbXTtcbiAgICBASW5wdXQoKSBoZWFkZXJMb2dvOiB7IGV4cGFuZGVkOiBzdHJpbmc7IGNvbGxhcHNlZDogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG4gICAgQElucHV0KCkgaGVhZGVySW5pdGlhbHM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBPdXRwdXQoKSBvbk5hdkxpc3RJdGVtQ2hhbmdlOiBFdmVudEVtaXR0ZXI8eyBhY3RpdmVUYWI6IFRhYkluZGV4VHlwZSB8ICdub3RpZmljYXRpb25zJyB8ICdoZWxwLWNlbnRyZScgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uTm90aWZpY2F0aW9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvbkhlbHBDZW50cmVDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uTG9nb3V0Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvblByb2ZpbGVDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uU2V0dGluZ3NDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uTG9nb0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25QbGFuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8T3JnYW5pc2F0aW9uRGV0YWlscz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBpc0hvdmVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpc05hdkV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgbm90aWZpY2F0aW9uQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gICAgaGVscENlbnRyZUFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGFjY291bnREZXRhaWxzQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gICAgc2VsZWN0ZWRPcmdhbmlzYXN0aW9uUGxhbjogbnVtYmVyO1xuICAgIEBWaWV3Q2hpbGQoJ2JvdHRvbUNvbnRhaW5lcicpIGJvdHRvbUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlckNvbnRhaW5lcicpIGhlYWRlckNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYiA9PSAnbm90aWZpY2F0aW9ucycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbnMpIHRoaXMubm90aWZpY2F0aW9uQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2UgdGhpcy50b3BOYXZMaXN0WzBdLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVUYWIgPT0gJ2hlbHAtY2VudHJlJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGVscENlbnRyZSkgdGhpcy5oZWxwQ2VudHJlQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2UgdGhpcy50b3BOYXZMaXN0WzBdLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVUYWI/LnBvc2l0aW9uID09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiLmluZGV4ID4gLTEgJiYgdGhpcy5hY3RpdmVUYWIuaW5kZXggPCB0aGlzLnRvcE5hdkxpc3Q/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcE5hdkxpc3Q/Lm1hcCgobGlzdDogTmF2TGlzdEl0ZW0pID0+IChsaXN0LmFjdGl2ZSA9IGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9wTmF2TGlzdFt0aGlzLmFjdGl2ZVRhYi5pbmRleF0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50b3BOYXZMaXN0Py5maWx0ZXIoKGxpc3Q6IE5hdkxpc3RJdGVtKSA9PiBsaXN0LmFjdGl2ZSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9wTmF2TGlzdD8uZm9yRWFjaCgobGlzdDogTmF2TGlzdEl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5hY3RpdmUgJiYgY291bnQgPT0gMCkgY291bnQgPSBjb3VudCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBsaXN0LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMudG9wTmF2TGlzdD8uZmlsdGVyKChsaXN0OiBOYXZMaXN0SXRlbSkgPT4gbGlzdC5hY3RpdmUpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b3BOYXZMaXN0WzBdLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVGFiPy5wb3NpdGlvbiA9PSAnYm90dG9tJykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYi5pbmRleCA+IC0xICYmIHRoaXMuYWN0aXZlVGFiLmluZGV4IDwgdGhpcy5ib3R0b21OYXZMaXN0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3R0b21OYXZMaXN0Py5tYXAoKGxpc3Q6IE5hdkxpc3RJdGVtKSA9PiAobGlzdC5hY3RpdmUgPSBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdHRvbU5hdkxpc3RbdGhpcy5hY3RpdmVUYWIuaW5kZXhdLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYm90dG9tTmF2TGlzdD8uZmlsdGVyKChsaXN0OiBOYXZMaXN0SXRlbSkgPT4gbGlzdC5hY3RpdmUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdHRvbU5hdkxpc3Q/LmZvckVhY2goKGxpc3Q6IE5hdkxpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QuYWN0aXZlICYmIGNvdW50ID09IDApIGNvdW50ID0gY291bnQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgbGlzdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmJvdHRvbU5hdkxpc3Q/LmZpbHRlcigobGlzdDogTmF2TGlzdEl0ZW0pID0+IGxpc3QuYWN0aXZlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYm90dG9tTmF2TGlzdFswXS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvcE5hdkxpc3RbMF0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkT3JnYW5pc2FzdGlvblBsYW4gPSAwO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZGp1c3RVcERpdkhlaWdodCgpO1xuICAgIH1cblxuICAgIG9uSXRlbUNsaWNrKGU6IE1vdXNlRXZlbnQsIGl0ZW06IE5hdkxpc3RJdGVtLCBpbmRleDogbnVtYmVyLCBwb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJykge1xuICAgICAgICB0aGlzLnRvcE5hdkxpc3Q/Lm1hcCgobGlzdDogTmF2TGlzdEl0ZW0pID0+IChsaXN0LmFjdGl2ZSA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMuYm90dG9tTmF2TGlzdD8ubWFwKChsaXN0OiBOYXZMaXN0SXRlbSkgPT4gKGxpc3QuYWN0aXZlID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25BY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oZWxwQ2VudHJlQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PSAndG9wJykgdGhpcy50b3BOYXZMaXN0W2luZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChwb3NpdGlvbiA9PSAnYm90dG9tJykgdGhpcy5ib3R0b21OYXZMaXN0W2luZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uTmF2TGlzdEl0ZW1DaGFuZ2UuZW1pdCh7IGFjdGl2ZVRhYjogeyBwb3NpdGlvbjogcG9zaXRpb24sIGluZGV4OiBpbmRleCB9IH0pO1xuICAgICAgICBpZiAoaXRlbS5jb21tYW5kKSB7XG4gICAgICAgICAgICBpdGVtLmNvbW1hbmQoeyBvcmlnaW5hbEV2ZW50OiBlLCBpdGVtIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0SW5pdGlhbHMobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gICAgICAgIGNvbnN0IG5hbWVQYXJ0cyA9IG5hbWUudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgIGlmIChuYW1lUGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZVBhcnRzWzBdWzBdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuYW1lUGFydHNbMF1bMF0gKyBuYW1lUGFydHNbbmFtZVBhcnRzLmxlbmd0aCAtIDFdWzBdKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cblxuICAgIGVtaXROb3RpZmljYXRpb24oKSB7XG4gICAgICAgIHRoaXMudG9wTmF2TGlzdD8ubWFwKChsaXN0OiBOYXZMaXN0SXRlbSkgPT4gKGxpc3QuYWN0aXZlID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5ib3R0b21OYXZMaXN0Py5tYXAoKGxpc3Q6IE5hdkxpc3RJdGVtKSA9PiAobGlzdC5hY3RpdmUgPSBmYWxzZSkpO1xuICAgICAgICB0aGlzLmhlbHBDZW50cmVBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25BY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uTmF2TGlzdEl0ZW1DaGFuZ2UuZW1pdCh7IGFjdGl2ZVRhYjogJ25vdGlmaWNhdGlvbnMnIH0pO1xuICAgICAgICB0aGlzLm9uTm90aWZpY2F0aW9uQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIGVtaXRIZWxwQ2VudHJlKCkge1xuICAgICAgICB0aGlzLnRvcE5hdkxpc3Q/Lm1hcCgobGlzdDogTmF2TGlzdEl0ZW0pID0+IChsaXN0LmFjdGl2ZSA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMuYm90dG9tTmF2TGlzdD8ubWFwKChsaXN0OiBOYXZMaXN0SXRlbSkgPT4gKGxpc3QuYWN0aXZlID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5oZWxwQ2VudHJlQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25BY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbk5hdkxpc3RJdGVtQ2hhbmdlLmVtaXQoeyBhY3RpdmVUYWI6ICdoZWxwLWNlbnRyZScgfSk7XG4gICAgICAgIHRoaXMub25IZWxwQ2VudHJlQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIGVtaXRMb2dvdXQoKSB7XG4gICAgICAgIHRoaXMub25Mb2dvdXRDbGljay5lbWl0KCk7XG4gICAgfVxuXG4gICAgZW1pdFByb2ZpbGUoKSB7XG4gICAgICAgIHRoaXMub25Qcm9maWxlQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIGVtaXRTZXR0aW5ncygpIHtcbiAgICAgICAgdGhpcy5vblNldHRpbmdzQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIGVtaXRMb2dvQ2xpY2soKSB7XG4gICAgICAgIHRoaXMub25Mb2dvQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIG9uUGxhbkNsaWNrKG9yZ0RldGFpbHM6IE9yZ2FuaXNhdGlvbkRldGFpbHMsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9yZ2FuaXNhc3Rpb25QbGFuID0gaW5kZXg7XG4gICAgICAgIHRoaXMub25QbGFuQ2hhbmdlLmVtaXQob3JnRGV0YWlscyk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gICAgb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRqdXN0VXBEaXZIZWlnaHQoKTtcbiAgICB9XG5cbiAgICBhZGp1c3RVcERpdkhlaWdodCgpIHtcbiAgICAgICAgY29uc3QgYm90dG9tSGVpZ2h0ID0gdGhpcy5ib3R0b21Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSB0aGlzLmhlYWRlckNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lckhlaWdodCAtIGJvdHRvbUhlaWdodCAtIGhlYWRlckhlaWdodCAtIDU2O1xuICAgIH1cblxuICAgIG9uTW91c2VMZWF2ZSgpIHtcbiAgICAgICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmFjY291bnREZXRhaWxzQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmlzTmF2RXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGVBY2NvdW50RGV0YWlscygpIHtcbiAgICAgICAgdGhpcy5hY2NvdW50RGV0YWlsc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pc0hvdmVyZWQpIHRoaXMuaXNOYXZFeHBhbmRlZCA9IHRydWU7XG4gICAgICAgIGVsc2UgdGhpcy5pc05hdkV4cGFuZGVkID0gZmFsc2U7XG4gICAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImFjY291bnREZXRhaWxzQWN0aXZlXCIgY2xhc3M9XCJjYXgtbmF2LWJhY2tkcm9wXCI+PC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJjYXgtbmF2XCIgW25nQ2xhc3NdPVwieyAnY2F4LW5hdi1leHBhbmQnOiBpc05hdkV4cGFuZGVkIH1cIiAobW91c2VlbnRlcik9XCJpc0hvdmVyZWQgPSB0cnVlOyBpc05hdkV4cGFuZGVkID0gdHJ1ZVwiIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2F4LW5hdi1oZWFkZXItY29udGFpbmVyXCIgI2hlYWRlckNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IFtAcmlnaHRGYWRlXSAqbmdJZj1cIiFpc05hdkV4cGFuZGVkXCIgY2xhc3M9XCJjYXgtbmF2LWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8Y2F4LWxvZ28gKm5nSWY9XCIhaGVhZGVyTG9nbz8uY29sbGFwc2VkXCIgY2xhc3M9XCJjLXBvaW50ZXJcIiAoY2xpY2spPVwiZW1pdExvZ29DbGljaygpXCIgc2l6ZT1cInNtXCIgW2ljb25Pbmx5XT1cInRydWVcIiAvPlxyXG4gICAgICAgICAgICA8Y2F4LWltYWdlICpuZ0lmPVwiaGVhZGVyTG9nbz8uY29sbGFwc2VkXCIgY2xhc3M9XCJjLXBvaW50ZXJcIiAoY2xpY2spPVwiZW1pdExvZ29DbGljaygpXCIgc2l6ZT1cInNtXCIgW3NyY109XCJoZWFkZXJMb2dvLmNvbGxhcHNlZFwiIC8+XHJcbiAgICAgICAgICAgIDxjYXgtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvY2F4LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaGVhZGVySW5pdGlhbHNcIj57eyBoZWFkZXJJbml0aWFscyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaGVhZGVySW5pdGlhbHNcIj57eyBnZXRJbml0aWFscyhoZWFkZXIpIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc05hdkV4cGFuZGVkXCIgY2xhc3M9XCJjYXgtbmF2LWhlYWRlclwiIFtAbGVmdEZhZGVdPlxyXG4gICAgICAgICAgICA8Y2F4LWxvZ28gKm5nSWY9XCIhaGVhZGVyTG9nbz8uZXhwYW5kZWRcIiBjbGFzcz1cImMtcG9pbnRlclwiIChjbGljayk9XCJlbWl0TG9nb0NsaWNrKClcIiBzaXplPVwic21cIiAvPlxyXG4gICAgICAgICAgICA8Y2F4LWltYWdlICpuZ0lmPVwiaGVhZGVyTG9nbz8uZXhwYW5kZWRcIiBjbGFzcz1cImMtcG9pbnRlclwiIChjbGljayk9XCJlbWl0TG9nb0NsaWNrKClcIiBzaXplPVwic21cIiBbc3JjXT1cImhlYWRlckxvZ28uZXhwYW5kZWRcIiAvPlxyXG4gICAgICAgICAgICA8Y2F4LWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L2NheC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBoZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXgtbmF2LWxpc3QtY29udGFpbmVyXCIgW3N0eWxlLm1heEhlaWdodC5weF09XCJhZGp1c3RVcERpdkhlaWdodCgpXCI+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG5hdiBvZiB0b3BOYXZMaXN0LCBsZXQgaSA9IGluZGV4XCIgW25nQ2xhc3NdPVwieyBhY3RpdmU6IG5hdi5hY3RpdmUgfVwiIChjbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQsIG5hdiwgaSwgJ3RvcCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIm5hdi5pY29uOyBlbHNlIGltYWdlVGVtcGxhdGVcIiBbY2xhc3NdPVwiJ2NheCBwaSAnICsgbmF2Lmljb25cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ltYWdlVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNheC1pbWFnZSBbc3JjXT1cIm5hdi5pbWFnZVwiIHdpZHRoPVwiMjRweFwiIGhlaWdodD1cIjI0cHhcIj48L2NheC1pbWFnZT5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbQGxlZnRGYWRlXSAqbmdJZj1cImlzTmF2RXhwYW5kZWRcIiBjbGFzcz1cImNheC1uYXYtbGlzdC1sYWJlbFwiPnt7IG5hdi5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2F4LW5hdi1ib3R0b20tY29udGFpbmVyXCIgI2JvdHRvbUNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2F4LW5hdi1ib3R0b20tbGlzdFwiPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG5hdiBvZiBib3R0b21OYXZMaXN0LCBsZXQgaSA9IGluZGV4XCIgW25nQ2xhc3NdPVwieyBhY3RpdmU6IG5hdi5hY3RpdmUgfVwiIChjbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQsIG5hdiwgaSwgJ2JvdHRvbScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJuYXYuaWNvbjsgZWxzZSBpbWFnZVRlbXBsYXRlXCIgW2NsYXNzXT1cIidjYXggcGkgJyArIG5hdi5pY29uXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW1hZ2VUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNheC1pbWFnZSBbc3JjXT1cIm5hdi5pbWFnZVwiIHdpZHRoPVwiMjRweFwiIGhlaWdodD1cIjI0cHhcIj48L2NheC1pbWFnZT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtAbGVmdEZhZGVdICpuZ0lmPVwiaXNOYXZFeHBhbmRlZFwiIGNsYXNzPVwiY2F4LW5hdi1saXN0LWxhYmVsXCI+e3sgbmF2LmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cIm5vdGlmaWNhdGlvbnNcIiAoY2xpY2spPVwiZW1pdE5vdGlmaWNhdGlvbigpXCIgW25nQ2xhc3NdPVwieyBhY3RpdmU6IG5vdGlmaWNhdGlvbkFjdGl2ZSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJjYXggY2F4LWJlbGxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW0BsZWZ0RmFkZV0gKm5nSWY9XCJpc05hdkV4cGFuZGVkXCIgY2xhc3M9XCJjYXgtbmF2LWxpc3QtbGFiZWxcIj5Ob3RpZmljYXRpb25zPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhlbHBDZW50cmVcIiAoY2xpY2spPVwiZW1pdEhlbHBDZW50cmUoKVwiIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBoZWxwQ2VudHJlQWN0aXZlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImNheCBjYXgtc2hpZWxkLXdhcm5pbmdcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW0BsZWZ0RmFkZV0gKm5nSWY9XCJpc05hdkV4cGFuZGVkXCIgY2xhc3M9XCJjYXgtbmF2LWxpc3QtbGFiZWxcIj5IZWxwIENlbnRyZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInVzZXJOYW1lXCIgKGNsaWNrKT1cIm9wLnRvZ2dsZSgkZXZlbnQpO1wiIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBhY2NvdW50RGV0YWlsc0FjdGl2ZSB9XCIgY2xhc3M9XCJjYXgtbmF2LWFjY291bnQtZGV0YWlsc1wiPlxyXG4gICAgICAgICAgICA8Y2F4LWF2YXRhciAqbmdJZj1cInVzZXJJbWFnZVwiIFtpbWFnZV09XCJ1c2VySW1hZ2VcIiBhdmF0YXJTaXplPVwibGdcIj48L2NheC1hdmF0YXI+XHJcbiAgICAgICAgICAgIDxjYXgtYXZhdGFyICpuZ0lmPVwiIXVzZXJJbWFnZVwiIFtsYWJlbF09XCJnZXRJbml0aWFscyh1c2VyTmFtZSlcIiBhdmF0YXJTaXplPVwibGdcIj48L2NheC1hdmF0YXI+XHJcbiAgICAgICAgICAgIDxkaXYgW0BsZWZ0RmFkZV0gKm5nSWY9XCJpc05hdkV4cGFuZGVkXCIgY2xhc3M9XCJjYXgtbmF2LXVzZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F4LW5hdi11c2VyLW5hbWVcIj57eyB1c2VyTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F4LW5hdi11c2VyLXJvbGVcIj57eyB1c2VyUm9sZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgW0BsZWZ0RmFkZV0gKm5nSWY9XCJpc05hdkV4cGFuZGVkXCIgY2xhc3M9XCJjYXgtbmF2LWFjY291bnQtaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJjYXggY2F4LWFsdC1hcnJvdy11cFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiY2F4IGNheC1hbHQtYXJyb3ctZG93blwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxjYXgtb3ZlcmxheVBhbmVsICNvcCAob25TaG93KT1cImFjY291bnREZXRhaWxzQWN0aXZlID0gdHJ1ZVwiIFtzdHlsZUNsYXNzXT1cImlzTmF2RXhwYW5kZWQgPyAnY2F4LW5hdi1vdmVybGF5LWV4cGFuZCcgOiAnY2F4LW5hdi1vdmVybGF5J1wiIChvbkhpZGUpPVwiaGlkZUFjY291bnREZXRhaWxzKClcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9maWxlXCIgY2xhc3M9XCJjYXgtbmF2LXByb2ZpbGUtb3B0aW9uc1wiIChjbGljayk9XCJlbWl0UHJvZmlsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJjYXggY2F4LXVzZXItcm91bmRlZFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5WaWV3IFByb2ZpbGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZXR0aW5nc1wiIGNsYXNzPVwiY2F4LW5hdi1wcm9maWxlLW9wdGlvbnNcIiAoY2xpY2spPVwiZW1pdFNldHRpbmdzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImNheCBjYXgtc2V0dGluZ3NcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+QWNjb3VudCBTZXR0aW5nczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxvZ291dFwiIGNsYXNzPVwiY2F4LW5hdi1wcm9maWxlLW9wdGlvbnMgY2F4LW5hdi1sb2dvdXRcIiAoY2xpY2spPVwiZW1pdExvZ291dCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJjYXggY2F4LWxvZ291dFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Mb2dvdXQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtbmF2LWNvcHlyaWdodC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2F4LWxvZ28gd2lkdGg9XCI1NXB4XCIgaGVpZ2h0PVwiMTdweFwiPjwvY2F4LWxvZ28+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1uYXYtY29weXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29weXJpZ2h0WWVhclwiPiZjb3B5OyB7eyBjb3B5cmlnaHRZZWFyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInZlcnNpb25cIj57eyB2ZXJzaW9uIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvY2F4LW92ZXJsYXlQYW5lbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9uYXZpZ2F0aW9uL25hdmlnYXRpb24udHMiLCIuLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQ2xMLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBd0I3QyxNQUFNLE9BQU8sVUFBVTtJQUNWLE1BQU0sQ0FBcUI7SUFDM0IsVUFBVSxDQUFnQjtJQUMxQixhQUFhLENBQWdCO0lBQzdCLFNBQVMsQ0FBaUQ7SUFDMUQsYUFBYSxHQUFZLElBQUksQ0FB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QkFBQyxpQkFBaUI7Z0JBZ0o1QixRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRyaWdnZXIsIHRyYW5zaXRpb24sIHN0eWxlLCBhbmltYXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGl2aWRlck1vZHVsZSB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2RpdmlkZXInO1xuaW1wb3J0IHsgTG9nb01vZHVsZSB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2xvZ28nO1xuaW1wb3J0IHsgQWN0aXZlU3Vic2NyaXB0aW9uLCBOYXZMaXN0SXRlbSwgU3Vic2NyaXB0aW9uTGlzdCwgVGFiSW5kZXhUeXBlIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbWFnZU1vZHVsZSB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2ltYWdlJztcbmltcG9ydCB7IEF2YXRhck1vZHVsZSB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2F2YXRhcic7XG5pbXBvcnQgeyBPdmVybGF5UGFuZWxNb2R1bGUgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9vdmVybGF5cGFuZWwnO1xuaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL292ZXJsYXknO1xuaW1wb3J0IHsgUmFkaW9CdXR0b25Nb2R1bGUgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9yYWRpb2J1dHRvbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjYXgtbmF2aWdhdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25hdmlnYXRpb24uaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdHlsZVVybHM6IFsnLi9uYXZpZ2F0aW9uLnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtMb2dvTW9kdWxlLCBDb21tb25Nb2R1bGUsIERpdmlkZXJNb2R1bGUsIEltYWdlTW9kdWxlLCBBdmF0YXJNb2R1bGUsIE92ZXJsYXlQYW5lbE1vZHVsZSwgT3ZlcmxheU1vZHVsZSwgUmFkaW9CdXR0b25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2xlZnRGYWRlJywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW3N0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtMTAwJSknLCBvcGFjaXR5OiAwIH0pLCBhbmltYXRlKCczMDBtcycsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsIG9wYWNpdHk6IDEgfSkpXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJywgb3BhY2l0eTogMC41IH0pLCBhbmltYXRlKCczMDBtcycsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtMTAwJSknLCBvcGFjaXR5OiAwIH0pKV0pXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdyaWdodEZhZGUnLCBbXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDIwMCUpJywgb3BhY2l0eTogMCB9KSwgYW5pbWF0ZSgnMzAwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknLCBvcGFjaXR5OiAxIH0pKV0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW3N0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsIG9wYWNpdHk6IDEgfSksIGFuaW1hdGUoJzMwMG1zJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJywgb3BhY2l0eTogMCB9KSldKVxuICAgICAgICBdKVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2NheC1lbGVtZW50J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvbiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQElucHV0KCkgaGVhZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgQElucHV0KCkgdG9wTmF2TGlzdDogTmF2TGlzdEl0ZW1bXTtcbiAgICBASW5wdXQoKSBib3R0b21OYXZMaXN0OiBOYXZMaXN0SXRlbVtdO1xuICAgIEBJbnB1dCgpIGFjdGl2ZVRhYjogVGFiSW5kZXhUeXBlIHwgJ25vdGlmaWNhdGlvbnMnIHwgJ2hlbHAtY2VudHJlJztcbiAgICBASW5wdXQoKSBub3RpZmljYXRpb25zOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBoZWxwQ2VudHJlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBjb3B5cmlnaHRZZWFyOiBudW1iZXIgfCB1bmRlZmluZWQgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gICAgQElucHV0KCkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIEBJbnB1dCgpIGxvZ291dDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHJvZmlsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgc2V0dGluZ3M6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHVzZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgQElucHV0KCkgdXNlckltYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgQElucHV0KCkgaGVhZGVyTG9nbzogeyBleHBhbmRlZDogc3RyaW5nOyBjb2xsYXBzZWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgIEBJbnB1dCgpIGhlYWRlckluaXRpYWxzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgQElucHV0KCkgc3Vic2NyaXB0aW9uTW9kZTogJ2FkdmFuY2UnIHwgJ2RlZmF1bHQnID0gJ2RlZmF1bHQnO1xuICAgIEBJbnB1dCgpIHN1YnNjcmlwdGlvbkxpc3Q6IHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkU3Vic2NyaXB0aW9uOiBzdHJpbmcgfCBBY3RpdmVTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gICAgQElucHV0KCkgYWR2YW5jZVN1YnNjcmlwdGlvbkxpc3Q6IFN1YnNjcmlwdGlvbkxpc3RbXTtcbiAgICBASW5wdXQoKSBkaXNwbGF5U3Vic2NyaXB0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQE91dHB1dCgpIG9uTmF2TGlzdEl0ZW1DaGFuZ2U6IEV2ZW50RW1pdHRlcjx7IGFjdGl2ZVRhYjogVGFiSW5kZXhUeXBlIHwgJ25vdGlmaWNhdGlvbnMnIHwgJ2hlbHAtY2VudHJlJyB9PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25Ob3RpZmljYXRpb25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uSGVscENlbnRyZUNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25Mb2dvdXRDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uUHJvZmlsZUNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25TZXR0aW5nc0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25Mb2dvQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvblN1YnNjcmlwdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uTmF2RXhwYW5kZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoZmFsc2UpO1xuXG4gICAgaXNIb3ZlcmVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgaXNOYXZFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIG5vdGlmaWNhdGlvbkFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGhlbHBDZW50cmVBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBhY2NvdW50RGV0YWlsc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNoZWNrUmFkaW8gPSAxO1xuICAgIEBWaWV3Q2hpbGQoJ2JvdHRvbUNvbnRhaW5lcicpIGJvdHRvbUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlckNvbnRhaW5lcicpIGhlYWRlckNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYiA9PSAnbm90aWZpY2F0aW9ucycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbnMpIHRoaXMubm90aWZpY2F0aW9uQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2UgdGhpcy50b3BOYXZMaXN0WzBdLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVUYWIgPT0gJ2hlbHAtY2VudHJlJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGVscENlbnRyZSkgdGhpcy5oZWxwQ2VudHJlQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2UgdGhpcy50b3BOYXZMaXN0WzBdLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVUYWI/LnBvc2l0aW9uID09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiLmluZGV4ID4gLTEgJiYgdGhpcy5hY3RpdmVUYWIuaW5kZXggPCB0aGlzLnRvcE5hdkxpc3Q/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcE5hdkxpc3Q/Lm1hcCgobGlzdDogTmF2TGlzdEl0ZW0pID0+IChsaXN0LmFjdGl2ZSA9IGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9wTmF2TGlzdFt0aGlzLmFjdGl2ZVRhYi5pbmRleF0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50b3BOYXZMaXN0Py5maWx0ZXIoKGxpc3Q6IE5hdkxpc3RJdGVtKSA9PiBsaXN0LmFjdGl2ZSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9wTmF2TGlzdD8uZm9yRWFjaCgobGlzdDogTmF2TGlzdEl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5hY3RpdmUgJiYgY291bnQgPT0gMCkgY291bnQgPSBjb3VudCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBsaXN0LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMudG9wTmF2TGlzdD8uZmlsdGVyKChsaXN0OiBOYXZMaXN0SXRlbSkgPT4gbGlzdC5hY3RpdmUpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b3BOYXZMaXN0WzBdLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVGFiPy5wb3NpdGlvbiA9PSAnYm90dG9tJykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYi5pbmRleCA+IC0xICYmIHRoaXMuYWN0aXZlVGFiLmluZGV4IDwgdGhpcy5ib3R0b21OYXZMaXN0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3R0b21OYXZMaXN0Py5tYXAoKGxpc3Q6IE5hdkxpc3RJdGVtKSA9PiAobGlzdC5hY3RpdmUgPSBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdHRvbU5hdkxpc3RbdGhpcy5hY3RpdmVUYWIuaW5kZXhdLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYm90dG9tTmF2TGlzdD8uZmlsdGVyKChsaXN0OiBOYXZMaXN0SXRlbSkgPT4gbGlzdC5hY3RpdmUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdHRvbU5hdkxpc3Q/LmZvckVhY2goKGxpc3Q6IE5hdkxpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QuYWN0aXZlICYmIGNvdW50ID09IDApIGNvdW50ID0gY291bnQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgbGlzdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmJvdHRvbU5hdkxpc3Q/LmZpbHRlcigobGlzdDogTmF2TGlzdEl0ZW0pID0+IGxpc3QuYWN0aXZlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYm90dG9tTmF2TGlzdFswXS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvcE5hdkxpc3RbMF0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWR2YW5jZVN1YnNjcmlwdGlvbkxpc3QpXG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VTdWJzY3JpcHRpb25MaXN0ID0gdGhpcy5hZHZhbmNlU3Vic2NyaXB0aW9uTGlzdC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjaGVjazogZmFsc2UgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25Nb2RlID09PSAnYWR2YW5jZScpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFkdmFuY2VTdWJzY3JpcHRpb25MaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkU3Vic2NyaXB0aW9uID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbj8ubmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uc2VsZWN0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWR2YW5jZVN1YnNjcmlwdGlvbkxpc3QuZmluZCgoaXRlbSkgPT4gdHlwZW9mIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24gPT09ICdvYmplY3QnICYmIGl0ZW0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbi5uYW1lKT8uc3Vic2NyaXB0aW9uLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24uc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZHZhbmNlU3Vic2NyaXB0aW9uTGlzdC5zb21lKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LnN1YnNjcmlwdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3Vic2NyaXB0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBsaXN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBsaXN0LnN1YnNjcmlwdGlvblswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbkxpc3Q/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25MaXN0LnNvbWUoKGEpID0+IGEgPT0gdGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbikpIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24gPSB0aGlzLnN1YnNjcmlwdGlvbkxpc3RbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmRpc3BsYXlTdWJzY3JpcHRpb25OYW1lPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3Vic2NyaXB0aW9uICYmIHR5cGVvZiB0aGlzLnNlbGVjdGVkU3Vic2NyaXB0aW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVN1YnNjcmlwdGlvbk5hbWUgPSB0aGlzLnNlbGVjdGVkU3Vic2NyaXB0aW9uLm5hbWUgKyAnIC0gJyArIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24uc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24gJiYgdHlwZW9mIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5U3Vic2NyaXB0aW9uTmFtZSA9IHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGp1c3RVcERpdkhlaWdodCgpO1xuICAgIH1cblxuICAgIG9uSXRlbUNsaWNrKGU6IE1vdXNlRXZlbnQsIGl0ZW06IE5hdkxpc3RJdGVtLCBpbmRleDogbnVtYmVyLCBwb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJykge1xuICAgICAgICB0aGlzLnRvcE5hdkxpc3Q/Lm1hcCgobGlzdDogTmF2TGlzdEl0ZW0pID0+IChsaXN0LmFjdGl2ZSA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMuYm90dG9tTmF2TGlzdD8ubWFwKChsaXN0OiBOYXZMaXN0SXRlbSkgPT4gKGxpc3QuYWN0aXZlID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25BY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oZWxwQ2VudHJlQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PSAndG9wJykgdGhpcy50b3BOYXZMaXN0W2luZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChwb3NpdGlvbiA9PSAnYm90dG9tJykgdGhpcy5ib3R0b21OYXZMaXN0W2luZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uTmF2TGlzdEl0ZW1DaGFuZ2UuZW1pdCh7IGFjdGl2ZVRhYjogeyBwb3NpdGlvbjogcG9zaXRpb24sIGluZGV4OiBpbmRleCB9IH0pO1xuICAgICAgICBpZiAoaXRlbS5jb21tYW5kKSB7XG4gICAgICAgICAgICBpdGVtLmNvbW1hbmQoeyBvcmlnaW5hbEV2ZW50OiBlLCBpdGVtIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0SW5pdGlhbHMobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gICAgICAgIGNvbnN0IG5hbWVQYXJ0cyA9IG5hbWUudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgIGlmIChuYW1lUGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZVBhcnRzWzBdWzBdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuYW1lUGFydHNbMF1bMF0gKyBuYW1lUGFydHNbbmFtZVBhcnRzLmxlbmd0aCAtIDFdWzBdKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cblxuICAgIGVtaXROb3RpZmljYXRpb24oKSB7XG4gICAgICAgIHRoaXMudG9wTmF2TGlzdD8ubWFwKChsaXN0OiBOYXZMaXN0SXRlbSkgPT4gKGxpc3QuYWN0aXZlID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5ib3R0b21OYXZMaXN0Py5tYXAoKGxpc3Q6IE5hdkxpc3RJdGVtKSA9PiAobGlzdC5hY3RpdmUgPSBmYWxzZSkpO1xuICAgICAgICB0aGlzLmhlbHBDZW50cmVBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25BY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uTmF2TGlzdEl0ZW1DaGFuZ2UuZW1pdCh7IGFjdGl2ZVRhYjogJ25vdGlmaWNhdGlvbnMnIH0pO1xuICAgICAgICB0aGlzLm9uTm90aWZpY2F0aW9uQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIGVtaXRIZWxwQ2VudHJlKCkge1xuICAgICAgICB0aGlzLnRvcE5hdkxpc3Q/Lm1hcCgobGlzdDogTmF2TGlzdEl0ZW0pID0+IChsaXN0LmFjdGl2ZSA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMuYm90dG9tTmF2TGlzdD8ubWFwKChsaXN0OiBOYXZMaXN0SXRlbSkgPT4gKGxpc3QuYWN0aXZlID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5oZWxwQ2VudHJlQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25BY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbk5hdkxpc3RJdGVtQ2hhbmdlLmVtaXQoeyBhY3RpdmVUYWI6ICdoZWxwLWNlbnRyZScgfSk7XG4gICAgICAgIHRoaXMub25IZWxwQ2VudHJlQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIGVtaXRMb2dvdXQoKSB7XG4gICAgICAgIHRoaXMub25Mb2dvdXRDbGljay5lbWl0KCk7XG4gICAgfVxuXG4gICAgZW1pdFByb2ZpbGUoKSB7XG4gICAgICAgIHRoaXMub25Qcm9maWxlQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIGVtaXRTZXR0aW5ncygpIHtcbiAgICAgICAgdGhpcy5vblNldHRpbmdzQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIGVtaXRMb2dvQ2xpY2soKSB7XG4gICAgICAgIHRoaXMub25Mb2dvQ2xpY2suZW1pdCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICAgIG9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFkanVzdFVwRGl2SGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgYWRqdXN0VXBEaXZIZWlnaHQoKSB7XG4gICAgICAgIGNvbnN0IGJvdHRvbUhlaWdodCA9IHRoaXMuYm90dG9tQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gdGhpcy5oZWFkZXJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICAgIHJldHVybiBjb250YWluZXJIZWlnaHQgLSBib3R0b21IZWlnaHQgLSBoZWFkZXJIZWlnaHQgLSA1NjtcbiAgICB9XG5cbiAgICBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICAgIHRoaXMuaXNIb3ZlcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc05hdkV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vbk5hdkV4cGFuZGVkLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUxlYXZlKCkge1xuICAgICAgICB0aGlzLmlzSG92ZXJlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuYWNjb3VudERldGFpbHNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNOYXZFeHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vbk5hdkV4cGFuZGVkLmVtaXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGlkZUFjY291bnREZXRhaWxzKCkge1xuICAgICAgICB0aGlzLmFjY291bnREZXRhaWxzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmlzSG92ZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5pc05hdkV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMub25OYXZFeHBhbmRlZC5lbWl0KHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc05hdkV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9uTmF2RXhwYW5kZWQuZW1pdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VBY3RpdmVTdXNiY3JpcHRpb24oaXRlbTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24gPSBpdGVtO1xuICAgICAgICB0aGlzLm9uU3Vic2NyaXB0aW9uQ2hhbmdlLmVtaXQoeyBzZWxlY3RlZDogaXRlbSB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVTdWJzY3JpcHRpb24oaXRlbTogU3Vic2NyaXB0aW9uTGlzdCwgY2hpbGQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkU3Vic2NyaXB0aW9uID0geyBuYW1lOiBpdGVtLm5hbWUsIHNlbGVjdGVkOiBjaGlsZCB9O1xuICAgICAgICB0aGlzLm9uU3Vic2NyaXB0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgdG9nZ2xlU3Vic2NyaXB0aW9uTGlzdChpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmFkdmFuY2VTdWJzY3JpcHRpb25MaXN0W2luZGV4XS5jaGVjaykge1xuICAgICAgICAgICAgdGhpcy5hZHZhbmNlU3Vic2NyaXB0aW9uTGlzdFtpbmRleF0uY2hlY2sgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZVN1YnNjcmlwdGlvbkxpc3QgPSB0aGlzLmFkdmFuY2VTdWJzY3JpcHRpb25MaXN0Lm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0sIGNoZWNrOiBmYWxzZSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VTdWJzY3JpcHRpb25MaXN0W2luZGV4XS5jaGVjayA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiYWNjb3VudERldGFpbHNBY3RpdmVcIiBjbGFzcz1cImNheC1uYXYtYmFja2Ryb3BcIj48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImNheC1uYXZcIiBbbmdDbGFzc109XCJ7ICdjYXgtbmF2LWV4cGFuZCc6IGlzTmF2RXhwYW5kZWQgfVwiIChtb3VzZWVudGVyKT1cIm9uTW91c2VFbnRlcigpXCIgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXgtbmF2LWhlYWRlci1jb250YWluZXJcIiAjaGVhZGVyQ29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgW0ByaWdodEZhZGVdICpuZ0lmPVwiIWlzTmF2RXhwYW5kZWRcIiBjbGFzcz1cImNheC1uYXYtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxjYXgtbG9nbyAqbmdJZj1cIiFoZWFkZXJMb2dvPy5jb2xsYXBzZWRcIiBjbGFzcz1cImMtcG9pbnRlclwiIChjbGljayk9XCJlbWl0TG9nb0NsaWNrKClcIiBzaXplPVwic21cIiBbaWNvbk9ubHldPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgICAgIDxjYXgtaW1hZ2UgKm5nSWY9XCJoZWFkZXJMb2dvPy5jb2xsYXBzZWRcIiBjbGFzcz1cImMtcG9pbnRlclwiIChjbGljayk9XCJlbWl0TG9nb0NsaWNrKClcIiBzaXplPVwic21cIiBbc3JjXT1cImhlYWRlckxvZ28uY29sbGFwc2VkXCIgLz5cclxuICAgICAgICAgICAgPGNheC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9jYXgtZGl2aWRlcj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJoZWFkZXJJbml0aWFsc1wiPnt7IGhlYWRlckluaXRpYWxzIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFoZWFkZXJJbml0aWFsc1wiPnt7IGdldEluaXRpYWxzKGhlYWRlcikgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImlzTmF2RXhwYW5kZWRcIiBjbGFzcz1cImNheC1uYXYtaGVhZGVyXCIgW0BsZWZ0RmFkZV0+XHJcbiAgICAgICAgICAgIDxjYXgtbG9nbyAqbmdJZj1cIiFoZWFkZXJMb2dvPy5leHBhbmRlZFwiIGNsYXNzPVwiYy1wb2ludGVyXCIgKGNsaWNrKT1cImVtaXRMb2dvQ2xpY2soKVwiIHNpemU9XCJzbVwiIC8+XHJcbiAgICAgICAgICAgIDxjYXgtaW1hZ2UgKm5nSWY9XCJoZWFkZXJMb2dvPy5leHBhbmRlZFwiIGNsYXNzPVwiYy1wb2ludGVyXCIgKGNsaWNrKT1cImVtaXRMb2dvQ2xpY2soKVwiIHNpemU9XCJzbVwiIFtzcmNdPVwiaGVhZGVyTG9nby5leHBhbmRlZFwiIC8+XHJcbiAgICAgICAgICAgIDxjYXgtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvY2F4LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNheC1uYXYtbGlzdC1jb250YWluZXJcIiBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImFkanVzdFVwRGl2SGVpZ2h0KClcIj5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbmF2IG9mIHRvcE5hdkxpc3QsIGxldCBpID0gaW5kZXhcIiBbbmdDbGFzc109XCJ7IGFjdGl2ZTogbmF2LmFjdGl2ZSB9XCIgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKCRldmVudCwgbmF2LCBpLCAndG9wJylcIj5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibmF2Lmljb247IGVsc2UgaW1hZ2VUZW1wbGF0ZVwiIFtjbGFzc109XCInY2F4IHBpICcgKyBuYXYuaWNvblwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW1hZ2VUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8Y2F4LWltYWdlIFtzcmNdPVwibmF2LmltYWdlXCIgd2lkdGg9XCIyNHB4XCIgaGVpZ2h0PVwiMjRweFwiPjwvY2F4LWltYWdlPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtAbGVmdEZhZGVdICpuZ0lmPVwiaXNOYXZFeHBhbmRlZFwiIGNsYXNzPVwiY2F4LW5hdi1saXN0LWxhYmVsXCI+e3sgbmF2LmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXgtbmF2LWJvdHRvbS1jb250YWluZXJcIiAjYm90dG9tQ29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtbmF2LWJvdHRvbS1saXN0XCI+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbmF2IG9mIGJvdHRvbU5hdkxpc3QsIGxldCBpID0gaW5kZXhcIiBbbmdDbGFzc109XCJ7IGFjdGl2ZTogbmF2LmFjdGl2ZSB9XCIgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKCRldmVudCwgbmF2LCBpLCAnYm90dG9tJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIm5hdi5pY29uOyBlbHNlIGltYWdlVGVtcGxhdGVcIiBbY2xhc3NdPVwiJ2NheCBwaSAnICsgbmF2Lmljb25cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbWFnZVRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2F4LWltYWdlIFtzcmNdPVwibmF2LmltYWdlXCIgd2lkdGg9XCIyNHB4XCIgaGVpZ2h0PVwiMjRweFwiPjwvY2F4LWltYWdlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW0BsZWZ0RmFkZV0gKm5nSWY9XCJpc05hdkV4cGFuZGVkXCIgY2xhc3M9XCJjYXgtbmF2LWxpc3QtbGFiZWxcIj57eyBuYXYubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwibm90aWZpY2F0aW9uc1wiIChjbGljayk9XCJlbWl0Tm90aWZpY2F0aW9uKClcIiBbbmdDbGFzc109XCJ7IGFjdGl2ZTogbm90aWZpY2F0aW9uQWN0aXZlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImNheCBjYXgtYmVsbFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbQGxlZnRGYWRlXSAqbmdJZj1cImlzTmF2RXhwYW5kZWRcIiBjbGFzcz1cImNheC1uYXYtbGlzdC1sYWJlbFwiPk5vdGlmaWNhdGlvbnM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiaGVscENlbnRyZVwiIChjbGljayk9XCJlbWl0SGVscENlbnRyZSgpXCIgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGhlbHBDZW50cmVBY3RpdmUgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiY2F4IGNheC1zaGllbGQtd2FybmluZ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbQGxlZnRGYWRlXSAqbmdJZj1cImlzTmF2RXhwYW5kZWRcIiBjbGFzcz1cImNheC1uYXYtbGlzdC1sYWJlbFwiPkhlbHAgQ2VudHJlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwidXNlck5hbWVcIiAoY2xpY2spPVwib3AudG9nZ2xlKCRldmVudCk7XCIgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGFjY291bnREZXRhaWxzQWN0aXZlIH1cIiBjbGFzcz1cImNheC1uYXYtYWNjb3VudC1kZXRhaWxzXCI+XHJcbiAgICAgICAgICAgIDxjYXgtYXZhdGFyICpuZ0lmPVwidXNlckltYWdlXCIgW2ltYWdlXT1cInVzZXJJbWFnZVwiIGF2YXRhclNpemU9XCJsZ1wiPjwvY2F4LWF2YXRhcj5cclxuICAgICAgICAgICAgPGNheC1hdmF0YXIgKm5nSWY9XCIhdXNlckltYWdlXCIgW2xhYmVsXT1cImdldEluaXRpYWxzKHVzZXJOYW1lKVwiIGF2YXRhclNpemU9XCJsZ1wiPjwvY2F4LWF2YXRhcj5cclxuICAgICAgICAgICAgPGRpdiBbQGxlZnRGYWRlXSAqbmdJZj1cImlzTmF2RXhwYW5kZWRcIiBjbGFzcz1cImNheC1uYXYtdXNlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXgtbmF2LXVzZXItbmFtZVwiPnt7IHVzZXJOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXgtbmF2LXVzZXItcm9sZVwiPnt7IGRpc3BsYXlTdWJzY3JpcHRpb25OYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBbQGxlZnRGYWRlXSAqbmdJZj1cImlzTmF2RXhwYW5kZWRcIiBjbGFzcz1cImNheC1uYXYtYWNjb3VudC1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImNheCBjYXgtYWx0LWFycm93LXVwXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJjYXggY2F4LWFsdC1hcnJvdy1kb3duXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGNheC1vdmVybGF5UGFuZWwgI29wIChvblNob3cpPVwiYWNjb3VudERldGFpbHNBY3RpdmUgPSB0cnVlXCIgW3N0eWxlQ2xhc3NdPVwiaXNOYXZFeHBhbmRlZCA/ICdjYXgtbmF2LW92ZXJsYXktZXhwYW5kJyA6ICdjYXgtbmF2LW92ZXJsYXknXCIgKG9uSGlkZSk9XCJoaWRlQWNjb3VudERldGFpbHMoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1uYXYtc3Vic2NyaXB0aW9uLWxpc3RcIiAqbmdJZj1cInN1YnNjcmlwdGlvbk1vZGUgPT09ICdkZWZhdWx0JyAmJiBzdWJzY3JpcHRpb25MaXN0Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJjYXgtbmF2LXN1YnNjcmlwdGlvbi1saXN0LWl0ZW1cIiBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkU3Vic2NyaXB0aW9uID09PSBpdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3Vic2NyaXB0aW9uTGlzdFwiIChjbGljayk9XCJjaGFuZ2VBY3RpdmVTdXNiY3JpcHRpb24oaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNheC1yYWRpb0J1dHRvbiAqbmdJZj1cInNlbGVjdGVkU3Vic2NyaXB0aW9uID09PSBpdGVtXCIgdmFsdWU9XCIxXCIgWyhuZ01vZGVsKV09XCJjaGVja1JhZGlvXCI+PC9jYXgtcmFkaW9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1uYXYtc3Vic2NyaXB0aW9uLWxpc3RcIiAqbmdJZj1cInN1YnNjcmlwdGlvbk1vZGUgPT09ICdhZHZhbmNlJyAmJiBhZHZhbmNlU3Vic2NyaXB0aW9uTGlzdD8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhZHZhbmNlU3Vic2NyaXB0aW9uTGlzdCwgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZFN1YnNjcmlwdGlvbj8ubmFtZSA9PT0gaXRlbS5uYW1lXCIgY2xhc3M9XCJjYXgtbmF2LWFkdmFuY2Utc3Vic2NyaXB0aW9uLWxpc3QtaXRlbVwiIChjbGljayk9XCJ0b2dnbGVTdWJzY3JpcHRpb25MaXN0KGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFpdGVtLmNoZWNrXCIgY2xhc3M9XCJjYXggY2F4LWFsdC1hcnJvdy1kb3duXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJpdGVtLmNoZWNrXCIgY2xhc3M9XCJjYXggY2F4LWFsdC1hcnJvdy11cFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uY2hlY2tcIiBjbGFzcz1cImNheC1uYXYtYWR2YW5jZS1zdWJzY3JpcHRpb24tY2hpbGQtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRTdWJzY3JpcHRpb24/LnNlbGVjdGVkID09PSBjaGlsZFwiIGNsYXNzPVwiY2F4LW5hdi1hZHZhbmNlLXN1YnNjcmlwdGlvbi1jaGlsZC1saXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgaXRlbS5zdWJzY3JpcHRpb25cIiAoY2xpY2spPVwidXBkYXRlU3Vic2NyaXB0aW9uKGl0ZW0sIGNoaWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNoaWxkIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjYXgtcmFkaW9CdXR0b24gW3NpemVdPVwiJ3NtJ1wiICpuZ0lmPVwic2VsZWN0ZWRTdWJzY3JpcHRpb24/LnNlbGVjdGVkID09PSBjaGlsZFwiIHZhbHVlPVwiMVwiIFsobmdNb2RlbCldPVwiY2hlY2tSYWRpb1wiPjwvY2F4LXJhZGlvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9maWxlXCIgY2xhc3M9XCJjYXgtbmF2LXByb2ZpbGUtb3B0aW9uc1wiIChjbGljayk9XCJlbWl0UHJvZmlsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJjYXggY2F4LXVzZXItcm91bmRlZFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5WaWV3IFByb2ZpbGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZXR0aW5nc1wiIGNsYXNzPVwiY2F4LW5hdi1wcm9maWxlLW9wdGlvbnNcIiAoY2xpY2spPVwiZW1pdFNldHRpbmdzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImNheCBjYXgtc2V0dGluZ3NcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+QWNjb3VudCBTZXR0aW5nczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxvZ291dFwiIGNsYXNzPVwiY2F4LW5hdi1wcm9maWxlLW9wdGlvbnMgY2F4LW5hdi1sb2dvdXRcIiAoY2xpY2spPVwiZW1pdExvZ291dCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJjYXggY2F4LWxvZ291dFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Mb2dvdXQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtbmF2LWNvcHlyaWdodC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2F4LWxvZ28gd2lkdGg9XCI1NXB4XCIgaGVpZ2h0PVwiMTdweFwiPjwvY2F4LWxvZ28+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1uYXYtY29weXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29weXJpZ2h0WWVhclwiPiZjb3B5OyB7eyBjb3B5cmlnaHRZZWFyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInZlcnNpb25cIj57eyB2ZXJzaW9uIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvY2F4LW92ZXJsYXlQYW5lbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19