mis-crystal-design-system 2.4.7 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/action-list/action-list.component.d.ts +50 -0
  2. package/action-list/action-list.module.d.ts +4 -0
  3. package/action-list/index.d.ts +1 -0
  4. package/action-list/mis-crystal-design-system-action-list.d.ts +4 -0
  5. package/action-list/mis-crystal-design-system-action-list.metadata.json +1 -0
  6. package/action-list/package.json +11 -0
  7. package/action-list/public_api.d.ts +2 -0
  8. package/bundles/mis-crystal-design-system-action-list.umd.js +516 -0
  9. package/bundles/mis-crystal-design-system-action-list.umd.js.map +1 -0
  10. package/bundles/mis-crystal-design-system-action-list.umd.min.js +16 -0
  11. package/bundles/mis-crystal-design-system-action-list.umd.min.js.map +1 -0
  12. package/bundles/mis-crystal-design-system-checkbox.umd.js +1 -1
  13. package/bundles/mis-crystal-design-system-checkbox.umd.min.js +1 -1
  14. package/bundles/mis-crystal-design-system-checkbox.umd.min.js.map +1 -1
  15. package/bundles/mis-crystal-design-system-datepicker_v2.umd.js +0 -11
  16. package/bundles/mis-crystal-design-system-datepicker_v2.umd.js.map +1 -1
  17. package/bundles/mis-crystal-design-system-datepicker_v2.umd.min.js +2 -2
  18. package/bundles/mis-crystal-design-system-datepicker_v2.umd.min.js.map +1 -1
  19. package/bundles/mis-crystal-design-system-dropdown.umd.js +384 -22
  20. package/bundles/mis-crystal-design-system-dropdown.umd.js.map +1 -1
  21. package/bundles/mis-crystal-design-system-dropdown.umd.min.js +15 -1
  22. package/bundles/mis-crystal-design-system-dropdown.umd.min.js.map +1 -1
  23. package/bundles/mis-crystal-design-system-menu.umd.js +119 -0
  24. package/bundles/mis-crystal-design-system-menu.umd.js.map +1 -0
  25. package/bundles/mis-crystal-design-system-menu.umd.min.js +2 -0
  26. package/bundles/mis-crystal-design-system-menu.umd.min.js.map +1 -0
  27. package/bundles/mis-crystal-design-system-multi-select-dropdown.umd.js +61 -22
  28. package/bundles/mis-crystal-design-system-multi-select-dropdown.umd.js.map +1 -1
  29. package/bundles/mis-crystal-design-system-multi-select-dropdown.umd.min.js +2 -2
  30. package/bundles/mis-crystal-design-system-multi-select-dropdown.umd.min.js.map +1 -1
  31. package/bundles/mis-crystal-design-system-nested-multi-select-dropdown.umd.js +72 -26
  32. package/bundles/mis-crystal-design-system-nested-multi-select-dropdown.umd.js.map +1 -1
  33. package/bundles/mis-crystal-design-system-nested-multi-select-dropdown.umd.min.js +2 -2
  34. package/bundles/mis-crystal-design-system-nested-multi-select-dropdown.umd.min.js.map +1 -1
  35. package/bundles/mis-crystal-design-system-table.umd.js +1 -1
  36. package/bundles/mis-crystal-design-system-table.umd.js.map +1 -1
  37. package/bundles/mis-crystal-design-system-table.umd.min.js +1 -1
  38. package/bundles/mis-crystal-design-system-table.umd.min.js.map +1 -1
  39. package/checkbox/mis-crystal-design-system-checkbox.metadata.json +1 -1
  40. package/datepicker_v2/mis-crystal-design-system-datepicker_v2.metadata.json +1 -1
  41. package/datepicker_v2/tz-datepicker.directive.d.ts +0 -1
  42. package/dropdown/dropdown.component.d.ts +10 -3
  43. package/dropdown/mis-crystal-design-system-dropdown.metadata.json +1 -1
  44. package/esm2015/action-list/action-list.component.js +168 -0
  45. package/esm2015/action-list/action-list.module.js +18 -0
  46. package/esm2015/action-list/index.js +2 -0
  47. package/esm2015/action-list/mis-crystal-design-system-action-list.js +5 -0
  48. package/esm2015/action-list/public_api.js +3 -0
  49. package/esm2015/checkbox/checkbox.component.js +1 -1
  50. package/esm2015/datepicker_v2/tz-datepicker.directive.js +2 -13
  51. package/esm2015/dropdown/dropdown.component.js +68 -20
  52. package/esm2015/menu/index.js +2 -0
  53. package/esm2015/menu/menu-close.directive.js +18 -0
  54. package/esm2015/menu/menu.directive.js +70 -0
  55. package/esm2015/menu/menu.module.js +17 -0
  56. package/esm2015/menu/mis-crystal-design-system-menu.js +5 -0
  57. package/esm2015/menu/public_api.js +4 -0
  58. package/esm2015/multi-select-dropdown/multi-select-dropdown.component.js +81 -38
  59. package/esm2015/nested-multi-select-dropdown/nested-multi-select-dropdown.component.js +74 -24
  60. package/esm2015/table/table.component.js +2 -2
  61. package/fesm2015/mis-crystal-design-system-action-list.js +191 -0
  62. package/fesm2015/mis-crystal-design-system-action-list.js.map +1 -0
  63. package/fesm2015/mis-crystal-design-system-checkbox.js +1 -1
  64. package/fesm2015/mis-crystal-design-system-datepicker_v2.js +1 -12
  65. package/fesm2015/mis-crystal-design-system-datepicker_v2.js.map +1 -1
  66. package/fesm2015/mis-crystal-design-system-dropdown.js +67 -19
  67. package/fesm2015/mis-crystal-design-system-dropdown.js.map +1 -1
  68. package/fesm2015/mis-crystal-design-system-menu.js +106 -0
  69. package/fesm2015/mis-crystal-design-system-menu.js.map +1 -0
  70. package/fesm2015/mis-crystal-design-system-multi-select-dropdown.js +80 -37
  71. package/fesm2015/mis-crystal-design-system-multi-select-dropdown.js.map +1 -1
  72. package/fesm2015/mis-crystal-design-system-nested-multi-select-dropdown.js +73 -23
  73. package/fesm2015/mis-crystal-design-system-nested-multi-select-dropdown.js.map +1 -1
  74. package/fesm2015/mis-crystal-design-system-table.js +1 -1
  75. package/fesm2015/mis-crystal-design-system-table.js.map +1 -1
  76. package/menu/index.d.ts +1 -0
  77. package/menu/menu-close.directive.d.ts +6 -0
  78. package/menu/menu.directive.d.ts +18 -0
  79. package/menu/menu.module.d.ts +3 -0
  80. package/menu/mis-crystal-design-system-menu.d.ts +4 -0
  81. package/menu/mis-crystal-design-system-menu.metadata.json +1 -0
  82. package/menu/package.json +11 -0
  83. package/menu/public_api.d.ts +3 -0
  84. package/multi-select-dropdown/mis-crystal-design-system-multi-select-dropdown.metadata.json +1 -1
  85. package/multi-select-dropdown/multi-select-dropdown.component.d.ts +10 -3
  86. package/nested-multi-select-dropdown/mis-crystal-design-system-nested-multi-select-dropdown.metadata.json +1 -1
  87. package/nested-multi-select-dropdown/nested-multi-select-dropdown.component.d.ts +11 -4
  88. package/package.json +1 -1
  89. package/table/mis-crystal-design-system-table.metadata.json +1 -1
@@ -1,8 +1,12 @@
1
1
  import { __rest } from "tslib";
2
- import { Component, ElementRef, EventEmitter, HostListener, Input, Output, } from "@angular/core";
2
+ import { Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, ViewContainerRef } from "@angular/core";
3
+ import { TemplatePortal } from "@angular/cdk/portal";
4
+ import { Overlay, ConnectionPositionPair, OverlayConfig } from "@angular/cdk/overlay";
3
5
  export class MultiSelectDropdownComponent {
4
- constructor(eRef) {
6
+ constructor(eRef, overlay, viewContainerRef) {
5
7
  this.eRef = eRef;
8
+ this.overlay = overlay;
9
+ this.viewContainerRef = viewContainerRef;
6
10
  this.searchInput = "";
7
11
  this.isOpen = false;
8
12
  this.localSelectedItems = [];
@@ -21,34 +25,33 @@ export class MultiSelectDropdownComponent {
21
25
  this.showSelectedCount = false;
22
26
  this.noDataMessage = "No Data";
23
27
  this.options = {
24
- sortLabels: true,
28
+ sortLabels: true
25
29
  };
26
30
  this.hideApplyButton = false;
27
31
  this.onChange = new EventEmitter();
28
32
  }
29
33
  set data(values) {
30
- this.localData = values.map((item) => {
34
+ this.localData = values.map(item => {
31
35
  return Object.assign(Object.assign({}, item), { checked: false });
32
36
  });
33
37
  }
34
38
  set selectedItems(values) {
35
39
  this.handlerSetLocalSelectedItems(values);
36
40
  }
41
+ ngOnInit() { }
37
42
  clickout(event) {
38
43
  const isClickedOutside = !this.eRef.nativeElement.contains(event.target);
39
44
  if (isClickedOutside) {
40
45
  this.onCancel();
41
46
  }
42
47
  }
43
- ngOnInit() { }
44
48
  handlerSetLocalSelectedItems(values) {
45
49
  this.localSelectedItems = values;
46
- this.localData = this.localData.map((item) => {
47
- if (item.value === this.SELECT_ALL_ENUM &&
48
- this.localData.every((a) => a.checked)) {
50
+ this.localData = this.localData.map(item => {
51
+ if (item.value === this.SELECT_ALL_ENUM && this.localData.every(a => a.checked)) {
49
52
  return Object.assign(Object.assign({}, item), { checked: true });
50
53
  }
51
- if (values.some((base) => base.value === item.value)) {
54
+ if (values.some(base => base.value === item.value)) {
52
55
  return Object.assign(Object.assign({}, item), { checked: true });
53
56
  }
54
57
  else {
@@ -71,9 +74,47 @@ export class MultiSelectDropdownComponent {
71
74
  this.handlerSetLocalSelectedItems(this.localSelectedItems);
72
75
  this.localData = this.formatValues(this.localData);
73
76
  }
77
+ if (this.isOpen)
78
+ this.openDropdown(this.popupContainer, this.selectElement.nativeElement);
79
+ else
80
+ this.onCancel();
81
+ }
82
+ openDropdown(template, origin) {
83
+ const positionsBottom = [
84
+ new ConnectionPositionPair({ originX: "start", originY: "bottom" }, { overlayX: "start", overlayY: "top" }, 0, 4),
85
+ new ConnectionPositionPair({ originX: "end", originY: "bottom" }, { overlayX: "end", overlayY: "top" }, 0, 4)
86
+ ];
87
+ const positionsTop = [
88
+ new ConnectionPositionPair({ originX: "start", originY: "top" }, { overlayX: "start", overlayY: "bottom" }, 0, -4),
89
+ new ConnectionPositionPair({ originX: "end", originY: "top" }, { overlayX: "end", overlayY: "bottom" }, 0, -4)
90
+ ];
91
+ const positionStrategy = this.overlay
92
+ .position()
93
+ .flexibleConnectedTo(origin)
94
+ .withPositions([
95
+ ...(this.dropdownListPosition === "Right" ? positionsBottom.reverse() : positionsBottom),
96
+ ...(this.dropdownListPosition === "Right" ? positionsTop.reverse() : positionsTop)
97
+ ])
98
+ .withPush(true);
99
+ const configs = new OverlayConfig({
100
+ hasBackdrop: true,
101
+ backdropClass: "cdk-overlay-transparent-backdrop",
102
+ scrollStrategy: this.overlay.scrollStrategies.reposition(),
103
+ positionStrategy,
104
+ width: origin.clientWidth
105
+ });
106
+ this.overlayRef = this.overlay.create(configs);
107
+ if (this.dropdownListWidth)
108
+ this.overlayRef.updateSize({ width: this.dropdownListWidth });
109
+ if (this.dropdownListHeight)
110
+ this.overlayRef.updateSize({ height: this.dropdownListHeight });
111
+ this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));
112
+ this.overlayRef.backdropClick().subscribe(res => {
113
+ this.onCancel();
114
+ });
74
115
  }
75
116
  filterByValue(array, string) {
76
- return array.filter((o) => o.label.toLowerCase().includes(string.toLowerCase()));
117
+ return array.filter(o => o.label.toLowerCase().includes(string.toLowerCase()));
77
118
  }
78
119
  searchInputOnChange(newValue) {
79
120
  this.searchInput = newValue;
@@ -89,20 +130,18 @@ export class MultiSelectDropdownComponent {
89
130
  let sortedArray = array;
90
131
  if (this.options.sortLabels) {
91
132
  const checkedValues = array
92
- .filter((a) => a.checked)
93
- .sort((a, b) => a.label > b.label ? 1 : b.label > a.label ? -1 : 0);
133
+ .filter(a => a.checked)
134
+ .sort((a, b) => (a.label > b.label ? 1 : b.label > a.label ? -1 : 0));
94
135
  const unCheckedValues = array
95
- .filter((a) => !a.checked)
96
- .sort((a, b) => a.label > b.label ? 1 : b.label > a.label ? -1 : 0);
97
- sortedArray = [...checkedValues, ...unCheckedValues].filter((t) => t.value !== this.SELECT_ALL_ENUM);
136
+ .filter(a => !a.checked)
137
+ .sort((a, b) => (a.label > b.label ? 1 : b.label > a.label ? -1 : 0));
138
+ sortedArray = [...checkedValues, ...unCheckedValues].filter(t => t.value !== this.SELECT_ALL_ENUM);
98
139
  }
99
- if (!sortedArray.some((option) => option.value === this.SELECT_ALL_ENUM) &&
100
- this.enableSelectAll &&
101
- sortedArray.length > 0) {
140
+ if (!sortedArray.some(option => option.value === this.SELECT_ALL_ENUM) && this.enableSelectAll && sortedArray.length > 0) {
102
141
  sortedArray.unshift({
103
142
  label: "Select all",
104
143
  value: this.SELECT_ALL_ENUM,
105
- checked: sortedArray.every((y) => y.checked),
144
+ checked: sortedArray.every(y => y.checked)
106
145
  });
107
146
  }
108
147
  return sortedArray;
@@ -110,7 +149,7 @@ export class MultiSelectDropdownComponent {
110
149
  toggleSelectedItems(event, item) {
111
150
  event.stopPropagation();
112
151
  if (this.enableSelectAll && item.value === this.SELECT_ALL_ENUM) {
113
- this.localData = this.localData.map((t) => (Object.assign(Object.assign({}, t), { checked: !item.checked })));
152
+ this.localData = this.localData.map(t => (Object.assign(Object.assign({}, t), { checked: !item.checked })));
114
153
  if (this.hideApplyButton) {
115
154
  this.applyFilters();
116
155
  }
@@ -118,34 +157,31 @@ export class MultiSelectDropdownComponent {
118
157
  }
119
158
  if (item.checked) {
120
159
  this.localData = [
121
- ...this.localData.map((a) => {
160
+ ...this.localData.map(a => {
122
161
  if (a.value === item.value || a.value === this.SELECT_ALL_ENUM) {
123
162
  return Object.assign(Object.assign({}, a), { checked: false });
124
163
  }
125
164
  return a;
126
- }),
165
+ })
127
166
  ];
128
167
  }
129
168
  else {
130
169
  this.localData = [
131
- ...this.localData.map((a) => {
170
+ ...this.localData.map(a => {
132
171
  if (a.value === item.value) {
133
172
  return Object.assign(Object.assign({}, a), { checked: true });
134
173
  }
135
174
  return a;
136
- }),
175
+ })
137
176
  ];
138
- if (this.enableSelectAll &&
139
- this.localData
140
- .filter((r) => r.value !== this.SELECT_ALL_ENUM)
141
- .every((t) => t.checked)) {
177
+ if (this.enableSelectAll && this.localData.filter(r => r.value !== this.SELECT_ALL_ENUM).every(t => t.checked)) {
142
178
  this.localData = [
143
- ...this.localData.map((a) => {
179
+ ...this.localData.map(a => {
144
180
  if (a.value === this.SELECT_ALL_ENUM) {
145
181
  return Object.assign(Object.assign({}, a), { checked: true });
146
182
  }
147
183
  return a;
148
- }),
184
+ })
149
185
  ];
150
186
  }
151
187
  }
@@ -158,10 +194,10 @@ export class MultiSelectDropdownComponent {
158
194
  }
159
195
  applyFilters() {
160
196
  this.onChange.emit(this.localData
161
- .filter((a) => {
197
+ .filter(a => {
162
198
  return a.checked && a.value !== this.SELECT_ALL_ENUM;
163
199
  })
164
- .map((item) => {
200
+ .map(item => {
165
201
  const { checked } = item, data = __rest(item, ["checked"]);
166
202
  return data;
167
203
  }));
@@ -176,9 +212,10 @@ export class MultiSelectDropdownComponent {
176
212
  this.searchInput = "";
177
213
  }
178
214
  onCancel() {
215
+ var _a;
179
216
  this.isSearchInputFocused = false;
180
- this.localData = this.localData.map((a) => {
181
- if (this.localSelectedItems.some((b) => b.value === a.value && String(b.checked) !== String(a.checked))) {
217
+ this.localData = this.localData.map(a => {
218
+ if (this.localSelectedItems.some(b => b.value === a.value && String(b.checked) !== String(a.checked))) {
182
219
  return a;
183
220
  }
184
221
  else {
@@ -187,17 +224,21 @@ export class MultiSelectDropdownComponent {
187
224
  });
188
225
  this.isOpen = false;
189
226
  this.searchInput = "";
227
+ (_a = this.overlayRef) === null || _a === void 0 ? void 0 : _a.detach();
228
+ this.searchInput = "";
190
229
  }
191
230
  }
192
231
  MultiSelectDropdownComponent.decorators = [
193
232
  { type: Component, args: [{
194
233
  selector: "mis-multi-select-dropdown",
195
- template: "<div class=\"container\" [ngStyle]=\"{\n 'height': height.length > 0? height: '',\n 'width': width.length > 0? width: ''\n }\"\n>\n <div class=\"dropdown\" (click)=\"toggleDropdown()\" [ngStyle]=\"{'background': isOpen ? '#E6EBF7': ''}\">\n <div class=\"label\">\n <p class=\"text\">{{ label }}</p>\n <p *ngIf=\"showSelectedCount && localSelectedItems?.length > 0\" class=\"count\">\n {{ localSelectedItems?.length }}\n </p>\n </div>\n <svg class=\"handle\" [ngStyle]=\"{ transform: isOpen ? 'rotate(180deg)': 'rotate(0deg)' }\" width=\"20\" height=\"20\"\n viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M13.825 7.15845L10 10.9751L6.175 7.15845L5 8.33345L10 13.3334L15 8.33345L13.825 7.15845Z\" fill=\"#181F33\" />\n </svg>\n </div>\n <div style=\"flex-basis: 0;\"></div>\n <div style=\"width: 100%; position: relative;\">\n <div *ngIf=\"isOpen\" class=\"popup-container\"\n [ngStyle]=\"{\n 'height': dropdownListHeight,\n 'width': dropdownListWidth\n }\"\n [ngClass]=\"{\n 'position-left': dropdownListPosition === 'Left',\n 'position-right': dropdownListPosition === 'Right'\n }\"\n >\n <div *ngIf=\"searchEnabled\" class=\"search-container\">\n <svg *ngIf=\"!isSearchInputFocused\" class=\"search-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M4.21508 11.1456C4.21508 7.3179 7.33722 4.21165 11.1926 4.21165C15.048 4.21165 18.1702 7.3179 18.1702 11.1456C18.1702 12.6931 17.6599 14.1226 16.7972 15.2767L15.3685 16.7013C14.2044 17.5668 12.759 18.0796 11.1926 18.0796C7.33722 18.0796 4.21508 14.9734 4.21508 11.1456ZM15.9421 17.7835C14.6021 18.7329 12.9627 19.2913 11.1926 19.2913C6.66977 19.2913 3 15.6461 3 11.1456C3 6.64512 6.66977 3 11.1926 3C15.7155 3 19.3852 6.64512 19.3852 11.1456C19.3852 12.9371 18.8037 14.5931 17.8184 15.9375L19.8361 17.4048C20.6705 17.912 21.7554 18.6543 20.2454 20.215C18.7353 21.7756 18.0099 20.6663 17.4991 19.8364L15.9421 17.7835Z\"\n fill=\"#6A737D\" />\n </svg>\n <input\n [ngModel]=\"searchInput\"\n [ngStyle]=\"{ paddingLeft: isSearchInputFocused ? '12px' : '45px', border:isSearchInputFocused? '1px solid #0937B2':'1px solid #e0e0e0', paddingRight: isSearchInputFocused ? '45px' : '10px' }\"\n (ngModelChange)=\"searchInputOnChange($event)\"\n [placeholder]=\"isSearchInputFocused ? '' : 'Search Keyword'\"\n (focus)=\"searchInputFocused(true)\"\n class=\"search-input\"\n />\n <svg *ngIf=\"isSearchInputFocused\" class=\"cancel-icon\" (click)=\"searchInputCanceled($event)\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M8.87446 7.32144C8.44588 6.89285 7.751 6.89285 7.32242 7.32144C6.89383 7.75002 6.89383 8.4449 7.32242 8.87349L10.4488 11.9999L7.32357 15.1252C6.89498 15.5538 6.89498 16.2486 7.32357 16.6772C7.75215 17.1058 8.44703 17.1058 8.87561 16.6772L12.0009 13.552L15.1261 16.6772C15.5547 17.1058 16.2496 17.1058 16.6781 16.6772C17.1067 16.2486 17.1067 15.5537 16.6781 15.1251L13.5529 11.9999L16.6793 8.87354C17.1079 8.44496 17.1079 7.75008 16.6793 7.3215C16.2507 6.89291 15.5558 6.89291 15.1273 7.3215L12.0009 10.4479L8.87446 7.32144Z\"\n fill=\"#6A737D\" />\n </svg>\n </div>\n <div class=\"items\">\n <div class=\"item\" (click)=\"toggleSelectedItems($event, item)\" *ngFor=\"let item of searchInput ? searchData : localData\">\n <div class=\"checkbox-container-wrapper\">\n <div class=\"checkbox-container\">\n <mis-checkbox\n [checked]=\"item.checked\"\n ></mis-checkbox>\n </div>\n <p class=\"label\">\n {{ item.label }}\n </p>\n </div>\n <div class=\"icon-container\" *ngIf=\"item.icon\">\n <img class=\"icon\" [src]=\"item.icon\" alt=\"no img\">\n </div>\n </div>\n <div class=\"noData\" *ngIf=\"(searchInput ? searchData : localData).length === 0\">\n {{ searchInput === '' ? noDataMessage : 'No results' }}\n </div>\n </div>\n <div *ngIf=\"localData.length !== 0 && !hideApplyButton\" class=\"actions-container\">\n <div style=\"width: calc(50% - 4px)\">\n <mis-button\n [name]=\"'Reset'\"\n [type]=\"'Text'\"\n [width]=\"'100%'\"\n (click)=\"onReset()\"\n ></mis-button>\n </div>\n <div style=\"width: calc(50% - 4px)\">\n <mis-button\n [name]=\"'Apply'\"\n [type]=\"'Solid'\"\n [width]=\"'100%'\"\n (click)=\"applyFilters()\"\n ></mis-button>\n </div>\n </div>\n </div>\n </div>\n\n</div>\n",
196
- styles: [".container{position:relative;display:flex;justify-content:center;align-items:center;flex-wrap:wrap;height:32px;width:256px;font-family:Lato,sans-serif!important}.container .dropdown{height:inherit;border:1px solid #e0e0e0;border-radius:6px;background-color:#fff;cursor:pointer;display:flex;justify-content:space-between;align-items:center;width:100%;padding:0 12px;overflow:hidden}.container .dropdown:hover{background-color:#f5f7fc}.container .dropdown .label{display:flex;justify-content:flex-start;align-items:center;width:calc(100% - 32px)}.container .dropdown .label,.container .dropdown .label .text{font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.container .dropdown .label .text{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.container .dropdown .label .count{background-color:#e0e0e0;border-radius:50%;padding:2px 7px;margin:0 0 0 8px;font-style:normal;font-weight:400;font-size:14px;line-height:20px;text-align:center;letter-spacing:.2px;color:#181f33}.container .dropdown .handle{width:24px;height:24px;transition:.3s;position:absolute;right:12px;border-radius:50%;overflow:hidden}.container .popup-container{position:absolute;top:4px;width:100%;max-height:340px;padding-bottom:0;border:1px solid #e0e0e0;border-radius:8px;background-color:#fff;box-shadow:0 12px 24px 0 rgba(0,0,0,.12);overflow:scroll;overflow-x:hidden;display:flex;flex-direction:column;justify-content:space-between;z-index:100}.container .popup-container::-webkit-scrollbar{width:0;height:0}.container .popup-container .search-container{position:relative;box-sizing:border-box;padding:8px}.container .popup-container .search-container .search-icon{position:absolute;width:24px;height:24px;top:50%;transform:translateY(-50%);left:18px;z-index:1}.container .popup-container .search-container .search-input{height:40px;width:100%;padding:12px;border:1px solid #e0e0e0;box-sizing:border-box;border-radius:8px;outline:none;caret-color:#0937b2;font-style:normal;font-weight:400;font-size:12px;line-height:18px;display:flex;align-items:center;letter-spacing:.2px;color:#181f33}.container .popup-container .search-container .cancel-icon{position:absolute;cursor:pointer;width:24px;height:24px;top:50%;transform:translateY(-50%);right:18px;z-index:1}.container .popup-container .items{padding:8px 0 8px 8px;overflow-y:scroll;height:100%}.container .popup-container .items::-webkit-scrollbar{width:5px;height:0}.container .popup-container .items::-webkit-scrollbar-thumb{background:#9aa7b4;border-radius:10px}.container .popup-container .items .noData{display:flex;justify-content:center;align-items:center;font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.container .popup-container .items .item{cursor:pointer;display:flex;justify-content:flex-start;align-items:center;padding:8px 12px;border-radius:6px;height:auto}.container .popup-container .items .item:hover{background-color:#f5f7fc}.container .popup-container .items .item .checkbox-container-wrapper{display:flex;justify-content:flex-start;align-items:center;width:90%}.container .popup-container .items .item .checkbox-container-wrapper .checkbox-container{display:block;position:relative;cursor:pointer;font-size:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.container .popup-container .items .item .checkbox-container-wrapper .checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.container .popup-container .items .item .checkbox-container-wrapper .checkbox-container input:checked~.checkmark:after{display:block}.container .popup-container .items .item .checkbox-container-wrapper .checkbox-container .checkmark{position:absolute;top:-8px;left:0;height:15px;width:15px;border-radius:4px;background-color:#0079f1;border:1px solid #6a737d}.container .popup-container .items .item .checkbox-container-wrapper .checkbox-container .checkmark:after{content:\"\";position:absolute;display:none;left:5px;top:2px;width:3px;height:6px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}.container .popup-container .items .item .checkbox-container-wrapper .label{margin:0 0 0 8px;line-height:20px;font-size:14px;font-style:normal;font-weight:400;letter-spacing:.200000003px}.container .popup-container .items .item .icon-container{width:10%;display:flex;justify-content:flex-end}.container .popup-container .items .item .icon-container .icon{width:20px;height:20px}.container .popup-container .actions-container{display:flex;justify-content:space-between;bottom:0;align-items:center;position:-webkit-sticky;position:sticky;padding:16px;background-color:#fff;border-top:1px solid #e0e0e0}.container .popup-container .actions-container .cancel{cursor:pointer;padding:10px 32px;text-align:center;font-size:16px;line-height:24px;border-radius:8px}.container .popup-container .actions-container .cancel:hover{background:rgba(9,55,178,.04)}.container .popup-container .actions-container .apply{cursor:pointer;padding:10px 32px;text-align:center;color:#fff;font-size:16px;line-height:24px;background:#0937b2;border-radius:8px}.position-left{right:0}.position-right{left:0}"]
234
+ template: "<div\n class=\"container\"\n [ngStyle]=\"{\n height: height.length > 0 ? height : '',\n width: width.length > 0 ? width : ''\n }\"\n>\n <div\n class=\"dropdown\"\n #select\n tabindex=\"0\"\n (keyup.enter)=\"toggleDropdown()\"\n (click)=\"toggleDropdown()\"\n [ngStyle]=\"{ background: isOpen ? '#E6EBF7' : '' }\"\n >\n <div class=\"label\">\n <p class=\"text\">{{ label }}</p>\n <p *ngIf=\"showSelectedCount && localSelectedItems?.length > 0\" class=\"count\">\n {{ localSelectedItems?.length }}\n </p>\n </div>\n <svg\n class=\"handle\"\n [ngStyle]=\"{ transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)' }\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M13.825 7.15845L10 10.9751L6.175 7.15845L5 8.33345L10 13.3334L15 8.33345L13.825 7.15845Z\"\n fill=\"#181F33\"\n />\n </svg>\n </div>\n</div>\n<ng-template #popupContainer>\n <div\n class=\"popup-container\"\n [ngStyle]=\"{\n height: dropdownListHeight,\n width: dropdownListWidth\n }\"\n [ngClass]=\"{\n 'position-left': dropdownListPosition === 'Left',\n 'position-right': dropdownListPosition === 'Right'\n }\"\n >\n <div *ngIf=\"searchEnabled\" class=\"search-container\">\n <svg\n *ngIf=\"!isSearchInputFocused\"\n class=\"search-icon\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M4.21508 11.1456C4.21508 7.3179 7.33722 4.21165 11.1926 4.21165C15.048 4.21165 18.1702 7.3179 18.1702 11.1456C18.1702 12.6931 17.6599 14.1226 16.7972 15.2767L15.3685 16.7013C14.2044 17.5668 12.759 18.0796 11.1926 18.0796C7.33722 18.0796 4.21508 14.9734 4.21508 11.1456ZM15.9421 17.7835C14.6021 18.7329 12.9627 19.2913 11.1926 19.2913C6.66977 19.2913 3 15.6461 3 11.1456C3 6.64512 6.66977 3 11.1926 3C15.7155 3 19.3852 6.64512 19.3852 11.1456C19.3852 12.9371 18.8037 14.5931 17.8184 15.9375L19.8361 17.4048C20.6705 17.912 21.7554 18.6543 20.2454 20.215C18.7353 21.7756 18.0099 20.6663 17.4991 19.8364L15.9421 17.7835Z\"\n fill=\"#6A737D\"\n />\n </svg>\n <input\n [ngModel]=\"searchInput\"\n [ngStyle]=\"{\n paddingLeft: isSearchInputFocused ? '12px' : '45px',\n border: isSearchInputFocused ? '1px solid #0937B2' : '1px solid #e0e0e0',\n paddingRight: isSearchInputFocused ? '45px' : '10px'\n }\"\n (ngModelChange)=\"searchInputOnChange($event)\"\n [placeholder]=\"isSearchInputFocused ? '' : 'Search Keyword'\"\n (focus)=\"searchInputFocused(true)\"\n class=\"search-input\"\n />\n <svg\n *ngIf=\"isSearchInputFocused\"\n class=\"cancel-icon\"\n (click)=\"searchInputCanceled($event)\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8.87446 7.32144C8.44588 6.89285 7.751 6.89285 7.32242 7.32144C6.89383 7.75002 6.89383 8.4449 7.32242 8.87349L10.4488 11.9999L7.32357 15.1252C6.89498 15.5538 6.89498 16.2486 7.32357 16.6772C7.75215 17.1058 8.44703 17.1058 8.87561 16.6772L12.0009 13.552L15.1261 16.6772C15.5547 17.1058 16.2496 17.1058 16.6781 16.6772C17.1067 16.2486 17.1067 15.5537 16.6781 15.1251L13.5529 11.9999L16.6793 8.87354C17.1079 8.44496 17.1079 7.75008 16.6793 7.3215C16.2507 6.89291 15.5558 6.89291 15.1273 7.3215L12.0009 10.4479L8.87446 7.32144Z\"\n fill=\"#6A737D\"\n />\n </svg>\n </div>\n <div class=\"items\">\n <div\n class=\"item\"\n tabindex=\"0\"\n (keyup.enter)=\"toggleSelectedItems($event, item)\"\n (click)=\"toggleSelectedItems($event, item)\"\n *ngFor=\"let item of searchInput ? searchData : localData\"\n >\n <div class=\"checkbox-container-wrapper\">\n <div class=\"checkbox-container\">\n <mis-checkbox [checked]=\"item.checked\" tabindex=\"-1\"></mis-checkbox>\n </div>\n <p class=\"label\">\n {{ item.label }}\n </p>\n </div>\n <div class=\"icon-container\" *ngIf=\"item.icon\">\n <img class=\"icon\" [src]=\"item.icon\" alt=\"no img\" />\n </div>\n </div>\n <div class=\"noData\" *ngIf=\"(searchInput ? searchData : localData).length === 0\">\n {{ searchInput === \"\" ? noDataMessage : \"No results\" }}\n </div>\n </div>\n <div *ngIf=\"localData.length !== 0 && !hideApplyButton\" class=\"actions-container\">\n <div style=\"width: calc(50% - 4px)\">\n <mis-button [name]=\"'Reset'\" [type]=\"'Text'\" [width]=\"'100%'\" (click)=\"onReset()\"></mis-button>\n </div>\n <div style=\"width: calc(50% - 4px)\">\n <mis-button [name]=\"'Apply'\" [type]=\"'Solid'\" [width]=\"'100%'\" (click)=\"applyFilters()\"></mis-button>\n </div>\n </div>\n </div>\n</ng-template>\n",
235
+ styles: [".container{position:relative;display:flex;justify-content:center;align-items:center;flex-wrap:wrap;height:32px;width:256px;font-family:Lato,sans-serif!important}.container .dropdown{height:inherit;border:1px solid #e0e0e0;border-radius:6px;background-color:#fff;cursor:pointer;display:flex;justify-content:space-between;align-items:center;width:100%;padding:0 12px;overflow:hidden}.container .dropdown:focus-visible,.container .dropdown:hover{background-color:#f5f7fc;outline:none}.container .dropdown .label{display:flex;justify-content:flex-start;align-items:center;width:calc(100% - 32px)}.container .dropdown .label,.container .dropdown .label .text{font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.container .dropdown .label .text{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.container .dropdown .label .count{background-color:#e0e0e0;border-radius:50%;padding:2px 7px;margin:0 0 0 8px;font-style:normal;font-weight:400;font-size:14px;line-height:20px;text-align:center;letter-spacing:.2px;color:#181f33}.container .dropdown .handle{width:24px;height:24px;transition:.3s;position:absolute;right:12px;border-radius:50%;overflow:hidden}.popup-container{width:100%;max-height:340px;padding-bottom:0;border:1px solid #e0e0e0;border-radius:8px;background-color:#fff;box-shadow:0 12px 24px 0 rgba(0,0,0,.12);display:flex;flex-direction:column;overflow:hidden;justify-content:space-between}.popup-container::-webkit-scrollbar{width:0;height:0}.popup-container .search-container{position:relative;box-sizing:border-box;padding:8px}.popup-container .search-container .search-icon{position:absolute;width:24px;height:24px;top:50%;transform:translateY(-50%);left:18px;z-index:1}.popup-container .search-container .search-input{height:40px;width:100%;padding:12px;border:1px solid #e0e0e0;box-sizing:border-box;border-radius:8px;outline:none;caret-color:#0937b2;font-style:normal;font-weight:400;font-size:12px;line-height:18px;display:flex;align-items:center;letter-spacing:.2px;color:#181f33}.popup-container .search-container .cancel-icon{position:absolute;cursor:pointer;width:24px;height:24px;top:50%;transform:translateY(-50%);right:18px;z-index:1}.popup-container .items{padding:8px 0 8px 8px;overflow-y:scroll}.popup-container .items::-webkit-scrollbar{width:5px;height:0}.popup-container .items::-webkit-scrollbar-thumb{background:#9aa7b4;border-radius:10px}.popup-container .items .noData{display:flex;justify-content:center;align-items:center;font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.popup-container .items .item{cursor:pointer;display:flex;justify-content:flex-start;align-items:center;padding:8px 12px;border-radius:6px;height:auto}.popup-container .items .item:focus-visible,.popup-container .items .item:hover{background-color:#f5f7fc;outline:none}.popup-container .items .item .checkbox-container-wrapper{display:flex;justify-content:flex-start;align-items:center;width:90%}.popup-container .items .item .checkbox-container-wrapper .checkbox-container{display:block;position:relative;cursor:pointer;font-size:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.popup-container .items .item .checkbox-container-wrapper .checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.popup-container .items .item .checkbox-container-wrapper .checkbox-container input:checked~.checkmark:after{display:block}.popup-container .items .item .checkbox-container-wrapper .checkbox-container .checkmark{position:absolute;top:-8px;left:0;height:15px;width:15px;border-radius:4px;background-color:#0079f1;border:1px solid #6a737d}.popup-container .items .item .checkbox-container-wrapper .checkbox-container .checkmark:after{content:\"\";position:absolute;display:none;left:5px;top:2px;width:3px;height:6px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}.popup-container .items .item .checkbox-container-wrapper .label{margin:0 0 0 8px;line-height:20px;font-size:14px;font-style:normal;font-weight:400;letter-spacing:.2;text-overflow:ellipsis;overflow:hidden}.popup-container .items .item .icon-container{width:10%;display:flex;justify-content:flex-end}.popup-container .items .item .icon-container .icon{width:20px;height:20px}.popup-container .actions-container{display:flex;justify-content:space-between;bottom:0;align-items:center;position:-webkit-sticky;position:sticky;padding:16px;background-color:#fff;border-top:1px solid #e0e0e0}.popup-container .actions-container .cancel{cursor:pointer;padding:10px 32px;text-align:center;font-size:16px;line-height:24px;border-radius:8px}.popup-container .actions-container .cancel:hover{background:rgba(9,55,178,.04)}.popup-container .actions-container .apply{cursor:pointer;padding:10px 32px;text-align:center;color:#fff;font-size:16px;line-height:24px;background:#0937b2;border-radius:8px}"]
197
236
  },] }
198
237
  ];
199
238
  MultiSelectDropdownComponent.ctorParameters = () => [
200
- { type: ElementRef }
239
+ { type: ElementRef },
240
+ { type: Overlay },
241
+ { type: ViewContainerRef }
201
242
  ];
202
243
  MultiSelectDropdownComponent.propDecorators = {
203
244
  data: [{ type: Input }],
@@ -215,6 +256,8 @@ MultiSelectDropdownComponent.propDecorators = {
215
256
  selectedItems: [{ type: Input }],
216
257
  hideApplyButton: [{ type: Input }],
217
258
  onChange: [{ type: Output }],
259
+ selectElement: [{ type: ViewChild, args: ["select", { static: false },] }],
260
+ popupContainer: [{ type: ViewChild, args: ["popupContainer", { static: false },] }],
218
261
  clickout: [{ type: HostListener, args: ["document:click", ["$event"],] }]
219
262
  };
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL211bHRpLXNlbGVjdC1kcm9wZG93bi9tdWx0aS1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFNdkIsTUFBTSxPQUFPLDRCQUE0QjtJQXNDdkMsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXJDcEMsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLHVCQUFrQixHQUE4QixFQUFFLENBQUM7UUFDbkQsY0FBUyxHQUE4QixFQUFFLENBQUM7UUFDMUMsZUFBVSxHQUE4QixFQUFFLENBQUM7UUFDM0MseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQ3RDLG9CQUFlLEdBQUcsb0JBQW9CLENBQUM7UUFNOUIsVUFBSyxHQUFXLFFBQVEsQ0FBQztRQUN6QixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsdUJBQWtCLEdBQVcsRUFBRSxDQUFDO1FBQ2hDLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUMvQix5QkFBb0IsR0FBcUIsTUFBTSxDQUFDO1FBQ2hELG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxrQkFBYSxHQUFXLFNBQVMsQ0FBQztRQUNsQyxZQUFPLEdBQVk7WUFDMUIsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztRQUlPLG9CQUFlLEdBQVksS0FBSyxDQUFD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LEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4QyxJQUNFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQzFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUN0RSxFQUNEO2dCQUNBLE9BQU8sQ0FBQyxDQUFDO2FBQ1Y7aUJBQU07Z0JBQ0wsdUNBQ0ssQ0FBQyxLQUNKLE9BQU8sRUFBRSxLQUFLLElBQ2Q7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7O1lBMU9GLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMkJBQTJCO2dCQUNyQyxnMUxBQXFEOzthQUV0RDs7O1lBWEMsVUFBVTs7O21CQW9CVCxLQUFLO29CQUtMLEtBQUs7cUJBQ0wsS0FBSztvQkFDTCxLQUFLO2lDQUNMLEtBQUs7Z0NBQ0wsS0FBSzttQ0FDTCxLQUFLOzhCQUNMLEtBQUs7NEJBQ0wsS0FBSztnQ0FDTCxLQUFLOzRCQUNMLEtBQUs7c0JBQ0wsS0FBSzs0QkFHTCxLQUFLOzhCQUdMLEtBQUs7dUJBQ0wsTUFBTTt1QkFDTixZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWlzLW11bHRpLXNlbGVjdC1kcm9wZG93blwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL211bHRpLXNlbGVjdC1kcm9wZG93bi5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vbXVsdGktc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBNdWx0aVNlbGVjdERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc2VhcmNoSW5wdXQ6IHN0cmluZyA9IFwiXCI7XG4gIGlzT3BlbiA9IGZhbHNlO1xuICBsb2NhbFNlbGVjdGVkSXRlbXM6IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtW10gPSBbXTtcbiAgbG9jYWxEYXRhOiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdID0gW107XG4gIHNlYXJjaERhdGE6IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtW10gPSBbXTtcbiAgaXNTZWFyY2hJbnB1dEZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgU0VMRUNUX0FMTF9FTlVNID0gXCJTRUxFQ1RfQUxMX0VOQUJMRURcIjtcbiAgQElucHV0KCkgc2V0IGRhdGEodmFsdWVzOiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdKSB7XG4gICAgdGhpcy5sb2NhbERhdGEgPSB2YWx1ZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4geyAuLi5pdGVtLCBjaGVja2VkOiBmYWxzZSB9O1xuICAgIH0pO1xuICB9XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSBcIlNlbGVjdFwiO1xuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBkcm9wZG93bkxpc3RIZWlnaHQ6IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIGRyb3Bkb3duTGlzdFdpZHRoOiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBkcm9wZG93bkxpc3RQb3NpdGlvbjogXCJMZWZ0XCIgfCBcIlJpZ2h0XCIgPSBcIkxlZnRcIjtcbiAgQElucHV0KCkgZW5hYmxlU2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlYXJjaEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93U2VsZWN0ZWRDb3VudDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBub0RhdGFNZXNzYWdlOiBzdHJpbmcgPSBcIk5vIERhdGFcIjtcbiAgQElucHV0KCkgb3B0aW9uczogT1BUSU9OUyA9IHtcbiAgICBzb3J0TGFiZWxzOiB0cnVlLFxuICB9O1xuICBASW5wdXQoKSBzZXQgc2VsZWN0ZWRJdGVtcyh2YWx1ZXM6IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtW10pIHtcbiAgICB0aGlzLmhhbmRsZXJTZXRMb2NhbFNlbGVjdGVkSXRlbXModmFsdWVzKTtcbiAgfVxuICBASW5wdXQoKSBoaWRlQXBwbHlCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIsIFtcIiRldmVudFwiXSlcbiAgY2xpY2tvdXQoZXZlbnQpIHtcbiAgICBjb25zdCBpc0NsaWNrZWRPdXRzaWRlID0gIXRoaXMuZVJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGlzQ2xpY2tlZE91dHNpZGUpIHtcbiAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICB9XG4gIH1cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlUmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIG5nT25Jbml0KCkge31cblxuICBoYW5kbGVyU2V0TG9jYWxTZWxlY3RlZEl0ZW1zKHZhbHVlcykge1xuICAgIHRoaXMubG9jYWxTZWxlY3RlZEl0ZW1zID0gdmFsdWVzO1xuICAgIHRoaXMubG9jYWxEYXRhID0gdGhpcy5sb2NhbERhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW0udmFsdWUgPT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNICYmXG4gICAgICAgIHRoaXMubG9jYWxEYXRhLmV2ZXJ5KChhKSA9PiBhLmNoZWNrZWQpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgY2hlY2tlZDogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlcy5zb21lKChiYXNlKSA9PiBiYXNlLnZhbHVlID09PSBpdGVtLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjaGVja2VkOiB0cnVlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjaGVja2VkOiBmYWxzZSB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubG9jYWxEYXRhID0gdGhpcy5mb3JtYXRWYWx1ZXModGhpcy5sb2NhbERhdGEpO1xuICB9XG5cbiAgc2VhcmNoSW5wdXRGb2N1c2VkKGlzRm9jdXNlZDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNTZWFyY2hJbnB1dEZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gIH1cblxuICBzZWFyY2hJbnB1dENhbmNlbGVkKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IFwiXCI7XG4gICAgdGhpcy5pc1NlYXJjaElucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLmhhbmRsZXJTZXRMb2NhbFNlbGVjdGVkSXRlbXModGhpcy5sb2NhbFNlbGVjdGVkSXRlbXMpO1xuICAgICAgdGhpcy5sb2NhbERhdGEgPSB0aGlzLmZvcm1hdFZhbHVlcyh0aGlzLmxvY2FsRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyQnlWYWx1ZShhcnJheTogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW1bXSwgc3RyaW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKChvKSA9PlxuICAgICAgby5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHN0cmluZy50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gIH1cblxuICBzZWFyY2hJbnB1dE9uQ2hhbmdlKG5ld1ZhbHVlKSB7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IG5ld1ZhbHVlO1xuICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgdGhpcy5zZWFyY2hEYXRhID0gdGhpcy5maWx0ZXJCeVZhbHVlKHRoaXMubG9jYWxEYXRhLCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoRGF0YSA9IFtdO1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0VmFsdWVzKGFycmF5OiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdKSB7XG4gICAgbGV0IHNvcnRlZEFycmF5ID0gYXJyYXk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zb3J0TGFiZWxzKSB7XG4gICAgICBjb25zdCBjaGVja2VkVmFsdWVzID0gYXJyYXlcbiAgICAgICAgLmZpbHRlcigoYSkgPT4gYS5jaGVja2VkKVxuICAgICAgICAuc29ydCgoYTogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW0sIGI6IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtKSA9PlxuICAgICAgICAgIGEubGFiZWwgPiBiLmxhYmVsID8gMSA6IGIubGFiZWwgPiBhLmxhYmVsID8gLTEgOiAwXG4gICAgICAgICk7XG4gICAgICBjb25zdCB1bkNoZWNrZWRWYWx1ZXMgPSBhcnJheVxuICAgICAgICAuZmlsdGVyKChhKSA9PiAhYS5jaGVja2VkKVxuICAgICAgICAuc29ydCgoYTogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW0sIGI6IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtKSA9PlxuICAgICAgICAgIGEubGFiZWwgPiBiLmxhYmVsID8gMSA6IGIubGFiZWwgPiBhLmxhYmVsID8gLTEgOiAwXG4gICAgICAgICk7XG4gICAgICBzb3J0ZWRBcnJheSA9IFsuLi5jaGVja2VkVmFsdWVzLCAuLi51bkNoZWNrZWRWYWx1ZXNdLmZpbHRlcihcbiAgICAgICAgKHQpID0+IHQudmFsdWUgIT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhc29ydGVkQXJyYXkuc29tZSgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNKSAmJlxuICAgICAgdGhpcy5lbmFibGVTZWxlY3RBbGwgJiZcbiAgICAgIHNvcnRlZEFycmF5Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHNvcnRlZEFycmF5LnVuc2hpZnQoe1xuICAgICAgICBsYWJlbDogXCJTZWxlY3QgYWxsXCIsXG4gICAgICAgIHZhbHVlOiB0aGlzLlNFTEVDVF9BTExfRU5VTSxcbiAgICAgICAgY2hlY2tlZDogc29ydGVkQXJyYXkuZXZlcnkoKHkpID0+IHkuY2hlY2tlZCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRlZEFycmF5O1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0ZWRJdGVtcyhldmVudCwgaXRlbTogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW0pIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5lbmFibGVTZWxlY3RBbGwgJiYgaXRlbS52YWx1ZSA9PT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU0pIHtcbiAgICAgIHRoaXMubG9jYWxEYXRhID0gdGhpcy5sb2NhbERhdGEubWFwKCh0KSA9PiAoe1xuICAgICAgICAuLi50LFxuICAgICAgICBjaGVja2VkOiAhaXRlbS5jaGVja2VkLFxuICAgICAgfSkpO1xuICAgICAgaWYgKHRoaXMuaGlkZUFwcGx5QnV0dG9uKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpdGVtLmNoZWNrZWQpIHtcbiAgICAgIHRoaXMubG9jYWxEYXRhID0gW1xuICAgICAgICAuLi50aGlzLmxvY2FsRGF0YS5tYXAoKGEpID0+IHtcbiAgICAgICAgICBpZiAoYS52YWx1ZSA9PT0gaXRlbS52YWx1ZSB8fCBhLnZhbHVlID09PSB0aGlzLlNFTEVDVF9BTExfRU5VTSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uYSxcbiAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfSksXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvY2FsRGF0YSA9IFtcbiAgICAgICAgLi4udGhpcy5sb2NhbERhdGEubWFwKChhKSA9PiB7XG4gICAgICAgICAgaWYgKGEudmFsdWUgPT09IGl0ZW0udmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmEsXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfSksXG4gICAgICBdO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmVuYWJsZVNlbGVjdEFsbCAmJlxuICAgICAgICB0aGlzLmxvY2FsRGF0YVxuICAgICAgICAgIC5maWx0ZXIoKHIpID0+IHIudmFsdWUgIT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNKVxuICAgICAgICAgIC5ldmVyeSgodCkgPT4gdC5jaGVja2VkKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubG9jYWxEYXRhID0gW1xuICAgICAgICAgIC4uLnRoaXMubG9jYWxEYXRhLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgaWYgKGEudmFsdWUgPT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uYSxcbiAgICAgICAgICAgICAgICBjaGVja2VkOiB0cnVlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnNlYXJjaEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXRPbkNoYW5nZSh0aGlzLnNlYXJjaElucHV0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGlkZUFwcGx5QnV0dG9uKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5RmlsdGVycygpIHtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoXG4gICAgICB0aGlzLmxvY2FsRGF0YVxuICAgICAgICAuZmlsdGVyKChhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGEuY2hlY2tlZCAmJiBhLnZhbHVlICE9PSB0aGlzLlNFTEVDVF9BTExfRU5VTTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgY2hlY2tlZCwgLi4uZGF0YSB9ID0gaXRlbTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSlcbiAgICApO1xuICAgIGlmICghdGhpcy5oaWRlQXBwbHlCdXR0b24pIHtcbiAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuICBvblJlc2V0KCkge1xuICAgIHRoaXMuaXNTZWFyY2hJbnB1dEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoW10pO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IFwiXCI7XG4gIH1cblxuICBvbkNhbmNlbCgpIHtcbiAgICB0aGlzLmlzU2VhcmNoSW5wdXRGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5sb2NhbERhdGEgPSB0aGlzLmxvY2FsRGF0YS5tYXAoKGEpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkSXRlbXMuc29tZShcbiAgICAgICAgICAoYikgPT4gYi52YWx1ZSA9PT0gYS52YWx1ZSAmJiBTdHJpbmcoYi5jaGVja2VkKSAhPT0gU3RyaW5nKGEuY2hlY2tlZClcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hLFxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IFwiXCI7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlTZWxlY3REcm9wZG93bkl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgaWNvbj86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT1BUSU9OUyB7XG4gIHNvcnRMYWJlbHM6IGJvb2xlYW47XG59XG4iXX0=
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL211bHRpLXNlbGVjdC1kcm9wZG93bi9tdWx0aS1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25KLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQWMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBTWxHLE1BQU0sT0FBTyw0QkFBNEI7SUFvQ3ZDLFlBQW9CLElBQWdCLEVBQVUsT0FBZ0IsRUFBVSxnQkFBa0M7UUFBdEYsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFBVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBbkMxRyxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsdUJBQWtCLEdBQThCLEVBQUUsQ0FBQztRQUNuRCxjQUFTLEdBQThCLEVBQUUsQ0FBQztRQUMxQyxlQUFVLEdBQThCLEVBQUUsQ0FBQztRQUMzQyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsb0JBQWUsR0FBRyxvQkFBb0IsQ0FBQztRQU05QixVQUFLLEdBQVcsUUFBUSxDQUFDO1FBQ3pCLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDcEIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQix1QkFBa0IsR0FBVyxFQUFFLENBQUM7UUFDaEMsc0JBQWlCLEdBQVcsRUFBRSxDQUFDO1FB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LEtBQUs7c0JBQ0wsS0FBSzs0QkFHTCxLQUFLOzhCQUdMLEtBQUs7dUJBQ0wsTUFBTTs0QkFFTixTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs2QkFDckMsU0FBUyxTQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTt1QkFNN0MsWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcbmltcG9ydCB7IE92ZXJsYXlSZWYsIE92ZXJsYXksIENvbm5lY3Rpb25Qb3NpdGlvblBhaXIsIE92ZXJsYXlDb25maWcgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtbXVsdGktc2VsZWN0LWRyb3Bkb3duXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vbXVsdGktc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9tdWx0aS1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3REcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHNlYXJjaElucHV0OiBzdHJpbmcgPSBcIlwiO1xuICBpc09wZW4gPSBmYWxzZTtcbiAgbG9jYWxTZWxlY3RlZEl0ZW1zOiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdID0gW107XG4gIGxvY2FsRGF0YTogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW1bXSA9IFtdO1xuICBzZWFyY2hEYXRhOiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdID0gW107XG4gIGlzU2VhcmNoSW5wdXRGb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG4gIFNFTEVDVF9BTExfRU5VTSA9IFwiU0VMRUNUX0FMTF9FTkFCTEVEXCI7XG4gIEBJbnB1dCgpIHNldCBkYXRhKHZhbHVlczogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW1bXSkge1xuICAgIHRoaXMubG9jYWxEYXRhID0gdmFsdWVzLm1hcChpdGVtID0+IHtcbiAgICAgIHJldHVybiB7IC4uLml0ZW0sIGNoZWNrZWQ6IGZhbHNlIH07XG4gICAgfSk7XG4gIH1cbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9IFwiU2VsZWN0XCI7XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgd2lkdGg6IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIGRyb3Bkb3duTGlzdEhlaWdodDogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgZHJvcGRvd25MaXN0V2lkdGg6IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIGRyb3Bkb3duTGlzdFBvc2l0aW9uOiBcIkxlZnRcIiB8IFwiUmlnaHRcIiA9IFwiTGVmdFwiO1xuICBASW5wdXQoKSBlbmFibGVTZWxlY3RBbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VhcmNoRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dTZWxlY3RlZENvdW50OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG5vRGF0YU1lc3NhZ2U6IHN0cmluZyA9IFwiTm8gRGF0YVwiO1xuICBASW5wdXQoKSBvcHRpb25zOiBPUFRJT05TID0ge1xuICAgIHNvcnRMYWJlbHM6IHRydWVcbiAgfTtcbiAgQElucHV0KCkgc2V0IHNlbGVjdGVkSXRlbXModmFsdWVzOiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdKSB7XG4gICAgdGhpcy5oYW5kbGVyU2V0TG9jYWxTZWxlY3RlZEl0ZW1zKHZhbHVlcyk7XG4gIH1cbiAgQElucHV0KCkgaGlkZUFwcGx5QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZChcInNlbGVjdFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VsZWN0RWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChcInBvcHVwQ29udGFpbmVyXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBwb3B1cENvbnRhaW5lcjogVGVtcGxhdGVSZWY8RWxlbWVudD47XG4gIHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxuICBuZ09uSW5pdCgpIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIsIFtcIiRldmVudFwiXSlcbiAgY2xpY2tvdXQoZXZlbnQpIHtcbiAgICBjb25zdCBpc0NsaWNrZWRPdXRzaWRlID0gIXRoaXMuZVJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGlzQ2xpY2tlZE91dHNpZGUpIHtcbiAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVyU2V0TG9jYWxTZWxlY3RlZEl0ZW1zKHZhbHVlcykge1xuICAgIHRoaXMubG9jYWxTZWxlY3RlZEl0ZW1zID0gdmFsdWVzO1xuICAgIHRoaXMubG9jYWxEYXRhID0gdGhpcy5sb2NhbERhdGEubWFwKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0udmFsdWUgPT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNICYmIHRoaXMubG9jYWxEYXRhLmV2ZXJ5KGEgPT4gYS5jaGVja2VkKSkge1xuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjaGVja2VkOiB0cnVlIH07XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLnNvbWUoYmFzZSA9PiBiYXNlLnZhbHVlID09PSBpdGVtLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjaGVja2VkOiB0cnVlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjaGVja2VkOiBmYWxzZSB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubG9jYWxEYXRhID0gdGhpcy5mb3JtYXRWYWx1ZXModGhpcy5sb2NhbERhdGEpO1xuICB9XG5cbiAgc2VhcmNoSW5wdXRGb2N1c2VkKGlzRm9jdXNlZDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNTZWFyY2hJbnB1dEZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gIH1cblxuICBzZWFyY2hJbnB1dENhbmNlbGVkKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IFwiXCI7XG4gICAgdGhpcy5pc1NlYXJjaElucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLmhhbmRsZXJTZXRMb2NhbFNlbGVjdGVkSXRlbXModGhpcy5sb2NhbFNlbGVjdGVkSXRlbXMpO1xuICAgICAgdGhpcy5sb2NhbERhdGEgPSB0aGlzLmZvcm1hdFZhbHVlcyh0aGlzLmxvY2FsRGF0YSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT3BlbikgdGhpcy5vcGVuRHJvcGRvd24odGhpcy5wb3B1cENvbnRhaW5lciwgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIGVsc2UgdGhpcy5vbkNhbmNlbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRHJvcGRvd24odGVtcGxhdGU6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+LCBvcmlnaW46IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgcG9zaXRpb25zQm90dG9tID0gW1xuICAgICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoeyBvcmlnaW5YOiBcInN0YXJ0XCIsIG9yaWdpblk6IFwiYm90dG9tXCIgfSwgeyBvdmVybGF5WDogXCJzdGFydFwiLCBvdmVybGF5WTogXCJ0b3BcIiB9LCAwLCA0KSxcbiAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKHsgb3JpZ2luWDogXCJlbmRcIiwgb3JpZ2luWTogXCJib3R0b21cIiB9LCB7IG92ZXJsYXlYOiBcImVuZFwiLCBvdmVybGF5WTogXCJ0b3BcIiB9LCAwLCA0KVxuICAgIF07XG4gICAgY29uc3QgcG9zaXRpb25zVG9wID0gW1xuICAgICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoeyBvcmlnaW5YOiBcInN0YXJ0XCIsIG9yaWdpblk6IFwidG9wXCIgfSwgeyBvdmVybGF5WDogXCJzdGFydFwiLCBvdmVybGF5WTogXCJib3R0b21cIiB9LCAwLCAtNCksXG4gICAgICBuZXcgQ29ubmVjdGlvblBvc2l0aW9uUGFpcih7IG9yaWdpblg6IFwiZW5kXCIsIG9yaWdpblk6IFwidG9wXCIgfSwgeyBvdmVybGF5WDogXCJlbmRcIiwgb3ZlcmxheVk6IFwiYm90dG9tXCIgfSwgMCwgLTQpXG4gICAgXTtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8ob3JpZ2luKVxuICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAuLi4odGhpcy5kcm9wZG93bkxpc3RQb3NpdGlvbiA9PT0gXCJSaWdodFwiID8gcG9zaXRpb25zQm90dG9tLnJldmVyc2UoKSA6IHBvc2l0aW9uc0JvdHRvbSksXG4gICAgICAgIC4uLih0aGlzLmRyb3Bkb3duTGlzdFBvc2l0aW9uID09PSBcIlJpZ2h0XCIgPyBwb3NpdGlvbnNUb3AucmV2ZXJzZSgpIDogcG9zaXRpb25zVG9wKVxuICAgICAgXSlcbiAgICAgIC53aXRoUHVzaCh0cnVlKTtcbiAgICBjb25zdCBjb25maWdzID0gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBiYWNrZHJvcENsYXNzOiBcImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wXCIsXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgcG9zaXRpb25TdHJhdGVneSxcbiAgICAgIHdpZHRoOiBvcmlnaW4uY2xpZW50V2lkdGhcbiAgICB9KTtcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKGNvbmZpZ3MpO1xuICAgIGlmICh0aGlzLmRyb3Bkb3duTGlzdFdpZHRoKSB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7IHdpZHRoOiB0aGlzLmRyb3Bkb3duTGlzdFdpZHRoIH0pO1xuICAgIGlmICh0aGlzLmRyb3Bkb3duTGlzdEhlaWdodCkgdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVNpemUoeyBoZWlnaHQ6IHRoaXMuZHJvcGRvd25MaXN0SGVpZ2h0IH0pO1xuICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gobmV3IFRlbXBsYXRlUG9ydGFsKHRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy5vbkNhbmNlbCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyQnlWYWx1ZShhcnJheTogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW1bXSwgc3RyaW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKG8gPT4gby5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHN0cmluZy50b0xvd2VyQ2FzZSgpKSk7XG4gIH1cblxuICBzZWFyY2hJbnB1dE9uQ2hhbmdlKG5ld1ZhbHVlKSB7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IG5ld1ZhbHVlO1xuICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgdGhpcy5zZWFyY2hEYXRhID0gdGhpcy5maWx0ZXJCeVZhbHVlKHRoaXMubG9jYWxEYXRhLCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoRGF0YSA9IFtdO1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0VmFsdWVzKGFycmF5OiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdKSB7XG4gICAgbGV0IHNvcnRlZEFycmF5ID0gYXJyYXk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zb3J0TGFiZWxzKSB7XG4gICAgICBjb25zdCBjaGVja2VkVmFsdWVzID0gYXJyYXlcbiAgICAgICAgLmZpbHRlcihhID0+IGEuY2hlY2tlZClcbiAgICAgICAgLnNvcnQoKGE6IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtLCBiOiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbSkgPT4gKGEubGFiZWwgPiBiLmxhYmVsID8gMSA6IGIubGFiZWwgPiBhLmxhYmVsID8gLTEgOiAwKSk7XG4gICAgICBjb25zdCB1bkNoZWNrZWRWYWx1ZXMgPSBhcnJheVxuICAgICAgICAuZmlsdGVyKGEgPT4gIWEuY2hlY2tlZClcbiAgICAgICAgLnNvcnQoKGE6IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtLCBiOiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbSkgPT4gKGEubGFiZWwgPiBiLmxhYmVsID8gMSA6IGIubGFiZWwgPiBhLmxhYmVsID8gLTEgOiAwKSk7XG4gICAgICBzb3J0ZWRBcnJheSA9IFsuLi5jaGVja2VkVmFsdWVzLCAuLi51bkNoZWNrZWRWYWx1ZXNdLmZpbHRlcih0ID0+IHQudmFsdWUgIT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNKTtcbiAgICB9XG4gICAgaWYgKCFzb3J0ZWRBcnJheS5zb21lKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNKSAmJiB0aGlzLmVuYWJsZVNlbGVjdEFsbCAmJiBzb3J0ZWRBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBzb3J0ZWRBcnJheS51bnNoaWZ0KHtcbiAgICAgICAgbGFiZWw6IFwiU2VsZWN0IGFsbFwiLFxuICAgICAgICB2YWx1ZTogdGhpcy5TRUxFQ1RfQUxMX0VOVU0sXG4gICAgICAgIGNoZWNrZWQ6IHNvcnRlZEFycmF5LmV2ZXJ5KHkgPT4geS5jaGVja2VkKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzb3J0ZWRBcnJheTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdGVkSXRlbXMoZXZlbnQsIGl0ZW06IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZW5hYmxlU2VsZWN0QWxsICYmIGl0ZW0udmFsdWUgPT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNKSB7XG4gICAgICB0aGlzLmxvY2FsRGF0YSA9IHRoaXMubG9jYWxEYXRhLm1hcCh0ID0+ICh7XG4gICAgICAgIC4uLnQsXG4gICAgICAgIGNoZWNrZWQ6ICFpdGVtLmNoZWNrZWRcbiAgICAgIH0pKTtcbiAgICAgIGlmICh0aGlzLmhpZGVBcHBseUJ1dHRvbikge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXRlbS5jaGVja2VkKSB7XG4gICAgICB0aGlzLmxvY2FsRGF0YSA9IFtcbiAgICAgICAgLi4udGhpcy5sb2NhbERhdGEubWFwKGEgPT4ge1xuICAgICAgICAgIGlmIChhLnZhbHVlID09PSBpdGVtLnZhbHVlIHx8IGEudmFsdWUgPT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICBjaGVja2VkOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH0pXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvY2FsRGF0YSA9IFtcbiAgICAgICAgLi4udGhpcy5sb2NhbERhdGEubWFwKGEgPT4ge1xuICAgICAgICAgIGlmIChhLnZhbHVlID09PSBpdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICBjaGVja2VkOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfSlcbiAgICAgIF07XG4gICAgICBpZiAodGhpcy5lbmFibGVTZWxlY3RBbGwgJiYgdGhpcy5sb2NhbERhdGEuZmlsdGVyKHIgPT4gci52YWx1ZSAhPT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU0pLmV2ZXJ5KHQgPT4gdC5jaGVja2VkKSkge1xuICAgICAgICB0aGlzLmxvY2FsRGF0YSA9IFtcbiAgICAgICAgICAuLi50aGlzLmxvY2FsRGF0YS5tYXAoYSA9PiB7XG4gICAgICAgICAgICBpZiAoYS52YWx1ZSA9PT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHRydWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnNlYXJjaEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXRPbkNoYW5nZSh0aGlzLnNlYXJjaElucHV0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGlkZUFwcGx5QnV0dG9uKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5RmlsdGVycygpIHtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoXG4gICAgICB0aGlzLmxvY2FsRGF0YVxuICAgICAgICAuZmlsdGVyKGEgPT4ge1xuICAgICAgICAgIHJldHVybiBhLmNoZWNrZWQgJiYgYS52YWx1ZSAhPT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU07XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBjaGVja2VkLCAuLi5kYXRhIH0gPSBpdGVtO1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgaWYgKCF0aGlzLmhpZGVBcHBseUJ1dHRvbikge1xuICAgICAgdGhpcy5vbkNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVzZXQoKSB7XG4gICAgdGhpcy5pc1NlYXJjaElucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdChbXSk7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNlYXJjaElucHV0ID0gXCJcIjtcbiAgfVxuXG4gIG9uQ2FuY2VsKCkge1xuICAgIHRoaXMuaXNTZWFyY2hJbnB1dEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxvY2FsRGF0YSA9IHRoaXMubG9jYWxEYXRhLm1hcChhID0+IHtcbiAgICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWRJdGVtcy5zb21lKGIgPT4gYi52YWx1ZSA9PT0gYS52YWx1ZSAmJiBTdHJpbmcoYi5jaGVja2VkKSAhPT0gU3RyaW5nKGEuY2hlY2tlZCkpKSB7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hLFxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNlYXJjaElucHV0ID0gXCJcIjtcbiAgICB0aGlzLm92ZXJsYXlSZWY/LmRldGFjaCgpO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQgPSBcIlwiO1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIE11bHRpU2VsZWN0RHJvcGRvd25JdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIGljb24/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9QVElPTlMge1xuICBzb3J0TGFiZWxzOiBib29sZWFuO1xufVxuIl19