rd-outer-component 0.0.95 → 0.0.97

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 (76) hide show
  1. package/esm2020/lib/modules/custom-checkbox/custom-checkbox.component.mjs +26 -19
  2. package/esm2020/lib/modules/custom-date/custom-date.component.mjs +141 -18
  3. package/esm2020/lib/modules/custom-date/custom-date.module.mjs +19 -4
  4. package/esm2020/lib/modules/custom-filter/custom-filter.component.mjs +2 -2
  5. package/esm2020/lib/modules/custom-input/custom-input.component.mjs +68 -34
  6. package/esm2020/lib/modules/custom-input-amount/custom-input-amount.component.mjs +28 -29
  7. package/esm2020/lib/modules/custom-radio/custom-radio.component.mjs +82 -16
  8. package/esm2020/lib/modules/custom-select/index.mjs +5 -3
  9. package/esm2020/lib/modules/custom-select/industry-cascader/industry-cascader.component.mjs +361 -0
  10. package/esm2020/lib/modules/custom-select/industry-cascader/industry-cascader.module.mjs +60 -0
  11. package/esm2020/lib/modules/custom-select/pure-select-token/pure-select-token.component.mjs +3 -3
  12. package/esm2020/lib/modules/custom-select/rd-select.component.mjs +432 -0
  13. package/esm2020/lib/modules/custom-select/rd-select.module.mjs +67 -0
  14. package/esm2020/lib/modules/custom-textarea/custom-textarea.component.mjs +2 -2
  15. package/esm2020/lib/modules/form-item/form-item.component.mjs +20 -3
  16. package/esm2020/lib/modules/rd-button/index.mjs +3 -0
  17. package/esm2020/lib/modules/rd-button/rd-button.component.mjs +133 -0
  18. package/esm2020/lib/modules/rd-button/rd-button.module.mjs +20 -0
  19. package/esm2020/lib/modules/rd-loading/OPLoading.json +1 -0
  20. package/esm2020/lib/modules/rd-loading/index.mjs +3 -0
  21. package/esm2020/lib/modules/rd-loading/rd-loading.component.mjs +178 -0
  22. package/esm2020/lib/modules/rd-loading/rd-loading.module.mjs +20 -0
  23. package/esm2020/lib/modules/rd-phone/index.mjs +3 -0
  24. package/esm2020/lib/modules/rd-phone/rd-phone.component.mjs +71 -0
  25. package/esm2020/lib/modules/rd-phone/rd-phone.module.mjs +36 -0
  26. package/esm2020/lib/modules/rd-remark-history/index.mjs +3 -0
  27. package/esm2020/lib/modules/rd-remark-history/rd-remark-history.component.mjs +24 -0
  28. package/esm2020/lib/modules/rd-remark-history/rd-remark-history.module.mjs +19 -0
  29. package/esm2020/lib/modules/rd-select-value/index.mjs +3 -0
  30. package/esm2020/lib/modules/rd-select-value/rd-select-value.component.mjs +136 -0
  31. package/esm2020/lib/modules/rd-select-value/rd-select-value.module.mjs +36 -0
  32. package/esm2020/lib/modules/rd-switch/index.mjs +3 -0
  33. package/esm2020/lib/modules/rd-switch/rd-switch.component.mjs +146 -0
  34. package/esm2020/lib/modules/rd-switch/rd-switch.module.mjs +39 -0
  35. package/esm2020/public-api.mjs +7 -1
  36. package/fesm2015/rd-outer-component.mjs +3990 -249
  37. package/fesm2015/rd-outer-component.mjs.map +1 -1
  38. package/fesm2020/rd-outer-component.mjs +3994 -258
  39. package/fesm2020/rd-outer-component.mjs.map +1 -1
  40. package/lib/modules/custom-checkbox/custom-checkbox.component.d.ts +7 -3
  41. package/lib/modules/custom-date/custom-date.component.d.ts +30 -6
  42. package/lib/modules/custom-date/custom-date.module.d.ts +2 -1
  43. package/lib/modules/custom-input/custom-input.component.d.ts +12 -3
  44. package/lib/modules/custom-input-amount/custom-input-amount.component.d.ts +5 -5
  45. package/lib/modules/custom-radio/custom-radio.component.d.ts +21 -7
  46. package/lib/modules/custom-select/index.d.ts +4 -2
  47. package/lib/modules/custom-select/industry-cascader/industry-cascader.component.d.ts +81 -0
  48. package/lib/modules/custom-select/industry-cascader/industry-cascader.module.d.ts +18 -0
  49. package/lib/modules/custom-select/rd-select.component.d.ts +90 -0
  50. package/lib/modules/custom-select/rd-select.module.d.ts +19 -0
  51. package/lib/modules/form-item/form-item.component.d.ts +7 -2
  52. package/lib/modules/rd-button/index.d.ts +2 -0
  53. package/lib/modules/rd-button/rd-button.component.d.ts +53 -0
  54. package/lib/modules/rd-button/rd-button.module.d.ts +10 -0
  55. package/lib/modules/rd-loading/index.d.ts +2 -0
  56. package/lib/modules/rd-loading/rd-loading.component.d.ts +49 -0
  57. package/lib/modules/rd-loading/rd-loading.module.d.ts +10 -0
  58. package/lib/modules/rd-phone/index.d.ts +2 -0
  59. package/lib/modules/rd-phone/rd-phone.component.d.ts +25 -0
  60. package/lib/modules/rd-phone/rd-phone.module.d.ts +12 -0
  61. package/lib/modules/rd-remark-history/index.d.ts +2 -0
  62. package/lib/modules/rd-remark-history/rd-remark-history.component.d.ts +9 -0
  63. package/lib/modules/rd-remark-history/rd-remark-history.module.d.ts +9 -0
  64. package/lib/modules/rd-select-value/index.d.ts +2 -0
  65. package/lib/modules/rd-select-value/rd-select-value.component.d.ts +41 -0
  66. package/lib/modules/rd-select-value/rd-select-value.module.d.ts +12 -0
  67. package/lib/modules/rd-switch/index.d.ts +2 -0
  68. package/lib/modules/rd-switch/rd-switch.component.d.ts +41 -0
  69. package/lib/modules/rd-switch/rd-switch.module.d.ts +12 -0
  70. package/package.json +3 -2
  71. package/public-api.d.ts +6 -0
  72. package/src/lib/assets/scss/form-item.scss +1 -1
  73. package/esm2020/lib/modules/custom-select/custom-select.component.mjs +0 -194
  74. package/esm2020/lib/modules/custom-select/custom-select.module.mjs +0 -39
  75. package/lib/modules/custom-select/custom-select.component.d.ts +0 -53
  76. package/lib/modules/custom-select/custom-select.module.d.ts +0 -12
@@ -0,0 +1,432 @@
1
+ import { Component, EventEmitter, forwardRef, Input, Output, HostListener, } from '@angular/core';
2
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@ngx-translate/core";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/forms";
7
+ import * as i4 from "ng-zorro-antd/spin";
8
+ import * as i5 from "ng-zorro-antd/select";
9
+ import * as i6 from "../form-item/form-item.component";
10
+ import * as i7 from "ng-zorro-antd/drawer";
11
+ import * as i8 from "ng-zorro-antd/input";
12
+ import * as i9 from "ng-zorro-antd/checkbox";
13
+ import * as i10 from "ng-zorro-antd/core/transition-patch";
14
+ import * as i11 from "ng-zorro-antd/modal";
15
+ import * as i12 from "../rd-button/rd-button.component";
16
+ export class RdSelectComponent {
17
+ set options(val) {
18
+ this._rawOptions = val;
19
+ this.filteredOptions = val;
20
+ }
21
+ get options() {
22
+ return this._rawOptions;
23
+ }
24
+ // 计算选中的数量
25
+ get selectedCount() {
26
+ if (this.nzMode === 'multiple') {
27
+ return Array.isArray(this.nativeValue) ? this.nativeValue.length : 0;
28
+ }
29
+ return this.nativeValue !== undefined && this.nativeValue !== null ? 1 : 0;
30
+ }
31
+ get dropdownClassNames() {
32
+ const classes = [];
33
+ // 基础类名
34
+ if (this.nzMode === 'multiple') {
35
+ classes.push('rd-form-item-multiple-select-dropdown');
36
+ }
37
+ else {
38
+ classes.push('rd-form-item-select-dropdown');
39
+ }
40
+ // 条件类名
41
+ if (this.showTopHint) {
42
+ classes.push('has-top-hint');
43
+ }
44
+ return classes;
45
+ }
46
+ get isShowMaxCount() {
47
+ // hack
48
+ return this.nzMaxMultipleCount < 10000;
49
+ }
50
+ onResize() {
51
+ this.updateIsMobile();
52
+ }
53
+ // 清空所有选项
54
+ clearAll() {
55
+ if (this.nzMode === 'multiple') {
56
+ if (!this.isMobile) {
57
+ this.nativeValue = [];
58
+ this.value = [];
59
+ }
60
+ this.drawerSelectValue = [];
61
+ }
62
+ else {
63
+ this.nativeValue = undefined;
64
+ this.value = undefined;
65
+ this.drawerSelectValue = [];
66
+ }
67
+ this.onChange(this.value);
68
+ this.valueChange.emit(this.value);
69
+ this.cdr.markForCheck();
70
+ }
71
+ get currentErrorMessage() {
72
+ if (!this.control?.errors)
73
+ return '';
74
+ const firstError = Object.keys(this.control?.errors || {})[0];
75
+ const msg = this.errorMessages[firstError];
76
+ switch (firstError) {
77
+ case 'required':
78
+ return (msg ||
79
+ `${this.translate.instant('please_select')}${this.label.toLowerCase()}`);
80
+ case 'custom':
81
+ return (this.control?.errors['custom'] ||
82
+ this.translate.instant('validation_failed'));
83
+ default:
84
+ return (this.translate.instant(this.errorMessages[firstError]) ||
85
+ this.translate.instant('validation_failed'));
86
+ }
87
+ }
88
+ get showError() {
89
+ return (!!this.control?.invalid && (this.control?.touched || this.control?.dirty));
90
+ }
91
+ constructor(cdr, translate) {
92
+ this.cdr = cdr;
93
+ this.translate = translate;
94
+ this.label = '';
95
+ this.name = '';
96
+ this.disabled = false;
97
+ this.nzMode = 'default';
98
+ this.nzMaxMultipleCount = 100;
99
+ this.isLoading = false;
100
+ this.isShowSearch = false;
101
+ this.isRemoteSearch = false;
102
+ this.placeholder = '';
103
+ this.isRquired = true;
104
+ this.isShowErrorTip = true; // 问卷外部已经有错误提示了,这里需要忽略
105
+ this.isSearchWidthAuto = false;
106
+ this.errorMessages = {
107
+ pattern: 'invalid_format',
108
+ custom: 'validation_failed',
109
+ };
110
+ this.searchChange = new EventEmitter();
111
+ this.valueChange = new EventEmitter();
112
+ this.scrollToBottomEmit = new EventEmitter();
113
+ this._rawOptions = [];
114
+ this.filteredOptions = [];
115
+ this.value = undefined;
116
+ this.nativeValue = undefined;
117
+ this.drawerSelectValue = undefined;
118
+ this.searchInput = '';
119
+ this.businessLocation = false;
120
+ this.businessLocationTitle = '';
121
+ this.onChange = () => { };
122
+ this.onTouched = () => { };
123
+ this.isFocus = false;
124
+ this.isOpen = false;
125
+ this.isComponentReady = false;
126
+ this.control = null;
127
+ this.searchTerm = '';
128
+ this.drawerOpen = false;
129
+ this.modalOpen = false;
130
+ this.showSelectedCount = false; // 新增:是否显示选中计数
131
+ this.showClearAll = false; // 新增:是否显示清空按钮
132
+ this.selectedLabel = 'Selected:';
133
+ this.clearAllLabel = 'Clear all';
134
+ this.showTopHint = false; // 新增:是否显示顶部提示
135
+ this.topHintText = 'You can choose up to 3 locations'; // 顶部提示文本
136
+ // 响应式:是否是移动端
137
+ this.isMobile = false;
138
+ this.updateIsMobile();
139
+ const mq = window.matchMedia('(max-width: 997px)');
140
+ if (mq.addEventListener) {
141
+ mq.addEventListener('change', () => this.updateIsMobile());
142
+ }
143
+ else {
144
+ mq.addListener(() => this.updateIsMobile());
145
+ }
146
+ }
147
+ updateIsMobile() {
148
+ this.isMobile = window.matchMedia('(max-width: 997px)').matches;
149
+ }
150
+ openDrawer() {
151
+ if (this.disabled)
152
+ return;
153
+ this.searchTerm = '';
154
+ if (!this.isMobile && this.businessLocation && this.nzMode === 'multiple') {
155
+ this.modalOpen = true;
156
+ }
157
+ else {
158
+ this.drawerOpen = true;
159
+ }
160
+ this.drawerSelectValue = this.nativeValue;
161
+ this.filteredOptions = this.options;
162
+ }
163
+ getDrawerSelectValueLen() {
164
+ if (Array.isArray(this.drawerSelectValue)) {
165
+ return this.drawerSelectValue?.length;
166
+ }
167
+ else {
168
+ return 0;
169
+ }
170
+ }
171
+ closeDrawer() {
172
+ this.drawerOpen = false;
173
+ this.filteredOptions = this.options;
174
+ this.searchTerm = '';
175
+ }
176
+ closeModal() {
177
+ this.modalOpen = false;
178
+ this.filteredOptions = this.options;
179
+ this.searchTerm = '';
180
+ }
181
+ // 获取抽屉中已选中的数量
182
+ get drawerSelectedCount() {
183
+ if (Array.isArray(this.drawerSelectValue)) {
184
+ return this.drawerSelectValue.length;
185
+ }
186
+ return this.drawerSelectValue ? 1 : 0;
187
+ }
188
+ // 检查选项是否应该被禁用
189
+ getOptionDisabled(option) {
190
+ // 如果选项本身被禁用,直接返回true
191
+ if (option.disabled) {
192
+ return true;
193
+ }
194
+ // 如果当前不是多选模式,返回选项的disabled状态
195
+ if (this.nzMode !== 'multiple') {
196
+ return false;
197
+ }
198
+ // 在移动端抽屉中,检查是否达到最大选择数量
199
+ if ((this.isMobile && this.businessLocation && this.drawerOpen) ||
200
+ (!this.isMobile && this.businessLocation && this.modalOpen)) {
201
+ // 如果已经达到最大选择数量,并且当前选项没有被选中,则禁用
202
+ if (this.drawerSelectedCount >= this.nzMaxMultipleCount) {
203
+ return !this.isValueSelected(option.value);
204
+ }
205
+ }
206
+ return false;
207
+ }
208
+ // 修改 onCheckboxChange 方法,添加数量限制
209
+ onCheckboxChange(selectedValues) {
210
+ // 检查是否超过最大选择数量
211
+ if (this.nzMode === 'multiple' &&
212
+ selectedValues.length > this.nzMaxMultipleCount) {
213
+ // 如果超过最大数量,只保留前 nzMaxMultipleCount 个
214
+ selectedValues = selectedValues.slice(0, this.nzMaxMultipleCount);
215
+ }
216
+ let newDrawerValue;
217
+ if (this.searchTerm) {
218
+ // 在搜索状态下,合并历史选中值和当前选中值
219
+ const currentDrawerValue = Array.isArray(this.drawerSelectValue)
220
+ ? this.drawerSelectValue
221
+ : [];
222
+ // 找出被取消勾选的值
223
+ const previousFilteredValues = this.filteredOptions
224
+ .map((opt) => opt.value)
225
+ .filter((value) => currentDrawerValue.includes(value));
226
+ const deselectedValues = previousFilteredValues.filter((value) => !selectedValues.includes(value));
227
+ // 从当前抽屉值中移除被取消勾选的值
228
+ const remainingValues = currentDrawerValue.filter((value) => !deselectedValues.includes(value));
229
+ // 合并剩余值和当前选中值(去重)
230
+ newDrawerValue = [...new Set([...remainingValues, ...selectedValues])];
231
+ // 再次检查是否超过最大数量
232
+ if (newDrawerValue.length > this.nzMaxMultipleCount) {
233
+ newDrawerValue = newDrawerValue.slice(0, this.nzMaxMultipleCount);
234
+ }
235
+ }
236
+ else {
237
+ // 非搜索状态下,直接使用当前选中值,但确保不超过最大数量
238
+ newDrawerValue =
239
+ selectedValues.length > this.nzMaxMultipleCount
240
+ ? selectedValues.slice(0, this.nzMaxMultipleCount)
241
+ : selectedValues;
242
+ }
243
+ this.drawerSelectValue = newDrawerValue;
244
+ }
245
+ // 修改多选移动端下一步的方法
246
+ multSelectMobileNext() {
247
+ // 确保选择数量不超过最大限制
248
+ if (Array.isArray(this.drawerSelectValue) &&
249
+ this.drawerSelectValue.length > this.nzMaxMultipleCount) {
250
+ // 如果超过最大数量,截取前n个
251
+ this.drawerSelectValue = this.drawerSelectValue.slice(0, this.nzMaxMultipleCount);
252
+ }
253
+ this.handleValueChange(this.drawerSelectValue);
254
+ this.closeDrawer();
255
+ this.closeModal();
256
+ }
257
+ getDisableNext() {
258
+ if (Array.isArray(this.drawerSelectValue)) {
259
+ return this.drawerSelectValue?.length > this.nzMaxMultipleCount;
260
+ }
261
+ else {
262
+ return false;
263
+ }
264
+ }
265
+ doMobileSearch(value) {
266
+ this.filteredOptions = this.options.filter((opt) => opt.name.toLowerCase().includes(value.toLowerCase()));
267
+ this.cdr.markForCheck();
268
+ }
269
+ isValueSelected(optionValue) {
270
+ if (this.nzMode === 'multiple') {
271
+ if (Array.isArray(this.drawerSelectValue)) {
272
+ return this.drawerSelectValue.includes(optionValue);
273
+ }
274
+ return false;
275
+ }
276
+ else {
277
+ return this.drawerSelectValue === optionValue;
278
+ }
279
+ }
280
+ validate(control) {
281
+ if (control) {
282
+ this.control = control;
283
+ }
284
+ return null;
285
+ }
286
+ setDisabledState(isDisabled) {
287
+ this.disabled = isDisabled;
288
+ this.cdr.markForCheck();
289
+ }
290
+ writeValue(value) {
291
+ if (Array.isArray(value)) {
292
+ this.value = value;
293
+ this.nativeValue = value.map((item) => item.value);
294
+ return;
295
+ }
296
+ this.value = value;
297
+ this.nativeValue = value?.value;
298
+ }
299
+ registerOnChange(fn) {
300
+ this.onChange = fn;
301
+ }
302
+ registerOnTouched(fn) {
303
+ this.onTouched = fn;
304
+ }
305
+ handleValueChange(value) {
306
+ this.nativeValue = value;
307
+ if (Array.isArray(value)) {
308
+ this.value = this.options.filter((item) => value.includes(item.value));
309
+ }
310
+ else {
311
+ this.value = this.options.find((item) => item.value === value);
312
+ }
313
+ this.onChange(this.value);
314
+ this.valueChange.emit(this.value);
315
+ }
316
+ onScrollToBottom() {
317
+ if (!this.isLoading) {
318
+ this.scrollToBottomEmit.emit();
319
+ }
320
+ }
321
+ onSearch(searchValue) {
322
+ this.searchInput = searchValue;
323
+ if (this.isRemoteSearch) {
324
+ this.searchChange.emit(searchValue);
325
+ return;
326
+ }
327
+ const lower = searchValue.toLowerCase();
328
+ this.filteredOptions = this._rawOptions.filter((item) => item.name?.toLowerCase().includes(lower));
329
+ }
330
+ handleOpenChange(value) {
331
+ this.isOpen = value;
332
+ }
333
+ ngAfterViewInit() {
334
+ // 等待下一个变更检测周期,确保所有样式和类已应用
335
+ setTimeout(() => {
336
+ this.isComponentReady = true;
337
+ this.cdr.markForCheck();
338
+ }, 0);
339
+ }
340
+ }
341
+ RdSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RdSelectComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
342
+ RdSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RdSelectComponent, selector: "app-rd-select", inputs: { label: "label", customTpl: "customTpl", optionTpl: "optionTpl", name: "name", disabled: "disabled", nzMode: "nzMode", isCurrency: "isCurrency", currencyUrlMap: "currencyUrlMap", optionHeightPx: "optionHeightPx", nzMaxMultipleCount: "nzMaxMultipleCount", isLoading: "isLoading", isShowSearch: "isShowSearch", isRemoteSearch: "isRemoteSearch", placeholder: "placeholder", isRquired: "isRquired", isShowErrorTip: "isShowErrorTip", isSearchWidthAuto: "isSearchWidthAuto", options: "options", errorMessages: "errorMessages", businessLocation: "businessLocation", businessLocationTitle: "businessLocationTitle", showSelectedCount: "showSelectedCount", showClearAll: "showClearAll", selectedLabel: "selectedLabel", clearAllLabel: "clearAllLabel", showTopHint: "showTopHint", topHintText: "topHintText" }, outputs: { searchChange: "searchChange", valueChange: "valueChange", scrollToBottomEmit: "scrollToBottomEmit" }, host: { listeners: { "window:resize": "onResize()" } }, providers: [
343
+ {
344
+ provide: NG_VALUE_ACCESSOR,
345
+ useExisting: forwardRef(() => RdSelectComponent),
346
+ multi: true,
347
+ },
348
+ {
349
+ provide: NG_VALIDATORS,
350
+ useExisting: forwardRef(() => RdSelectComponent),
351
+ multi: true,
352
+ },
353
+ ], ngImport: i0, template: "<!-- rd-select.component.html -->\n<div\n [class.rd-select-ready]=\"isComponentReady\"\n [class.rd-search-width-auto]=\"isSearchWidthAuto\"\n class=\"rd-select-container\"\n>\n <app-rd-form-item\n [disabled]=\"disabled\"\n [focus]=\"!!searchInput || isFocus || isOpen\"\n [type]=\"'select'\"\n [label]=\"label\"\n [value]=\"nativeValue\"\n [errorMessage]=\"showError && isShowErrorTip ? currentErrorMessage : ''\"\n [ngClass]=\"{\n 'rd-form-item-phone': !label,\n }\"\n (click)=\"openDrawer()\"\n >\n <nz-select\n class=\"rd-form-item-select\"\n [ngStyle]=\"{\n 'pointer-events':\n businessLocation && nzMode === 'multiple' ? 'none' : '',\n }\"\n nzBorderless\n [nzMode]=\"nzMode\"\n [nzShowArrow]=\"false\"\n [(ngModel)]=\"nativeValue\"\n [nzMaxMultipleCount]=\"nzMaxMultipleCount ? nzMaxMultipleCount : null\"\n [nzPlaceHolder]=\"placeholder\"\n [nzCustomTemplate]=\"\n customTpl\n ? customTpl\n : isCurrency\n ? currencySelectedTpl\n : defaultSelectedTpl\n \"\n (nzScrollToBottom)=\"onScrollToBottom()\"\n (ngModelChange)=\"handleValueChange($event)\"\n [disabled]=\"disabled\"\n (nzFocus)=\"isFocus = true\"\n (nzBlur)=\"isFocus = false\"\n [nzDropdownClassName]=\"dropdownClassNames\"\n [nzOptionOverflowSize]=\"5\"\n [nzOptionHeightPx]=\"optionHeightPx || 40\"\n [nzSuffixIcon]=\"customIcon\"\n [nzRemoveIcon]=\"removeIcon\"\n [nzShowSearch]=\"\n nzMode === 'multiple' && businessLocation ? false : isShowSearch\n \"\n (nzOnSearch)=\"onSearch($event)\"\n [name]=\"name\"\n (nzOpenChange)=\"handleOpenChange($event)\"\n [nzDropdownRender]=\"\n showSelectedCount || showClearAll ? customDropdownFooter : null\n \"\n [ngClass]=\"{\n 'rd-select-disabled-open': isMobile && businessLocation,\n }\"\n >\n <nz-option\n *ngIf=\"showTopHint && isShowMaxCount\"\n nzDisabled\n nzCustomContent\n >\n <div class=\"top-hint-option\">\n <span class=\"t14-400 c-text-primary\">{{ topHintText }}</span>\n </div>\n </nz-option>\n\n <nz-option\n *ngFor=\"let option of filteredOptions\"\n [nzValue]=\"option.value\"\n [nzLabel]=\"option.name || ''\"\n [nzDisabled]=\"option.disabled || false\"\n [nzCustomContent]=\"true\"\n >\n <ng-container *ngIf=\"optionTpl || isCurrency\">\n <ng-container\n *ngTemplateOutlet=\"\n isCurrency ? currencyOptionTpl : optionTpl;\n context: { $implicit: option }\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!(optionTpl || isCurrency)\">\n <span class=\"t14-400 c-text-primary\">{{ option?.name }}</span>\n </ng-container>\n </nz-option>\n\n <nz-option *ngIf=\"isLoading\" nzDisabled nzCustomContent>\n <nz-spin style=\"padding: 16px 0\"></nz-spin>\n </nz-option>\n </nz-select>\n </app-rd-form-item>\n</div>\n\n<!-- \u81EA\u5B9A\u4E49\u4E0B\u62C9\u83DC\u5355\u5E95\u90E8 -->\n<ng-template #customDropdownFooter>\n <div class=\"select-footer-container\">\n <div\n class=\"select-footer-content d-flex justify-content-between align-items-center\"\n >\n <div>\n <!-- \u9009\u4E2D\u8BA1\u6570 -->\n <span *ngIf=\"showSelectedCount\" class=\"t14-400 c-text-primary\">\n {{ selectedLabel }}\n {{\n isMobile ? getDrawerSelectValueLen() : selectedCount\n }}/<ng-container *ngIf=\"isShowMaxCount\"\n >/{{ nzMaxMultipleCount }}\n </ng-container>\n </span>\n\n <!-- \u6E05\u7A7A\u6309\u94AE -->\n <a\n *ngIf=\"\n showClearAll &&\n (isMobile ? getDrawerSelectValueLen() : selectedCount) > 0\n \"\n class=\"b14 ml-16\"\n (click)=\"clearAll(); $event.stopPropagation()\"\n >\n {{ clearAllLabel }}\n </a>\n </div>\n\n <div>\n <app-rd-button\n type=\"primary\"\n *ngIf=\"isMobile\"\n [disabled]=\"getDisableNext()\"\n (click)=\"multSelectMobileNext()\"\n >\n {{ \"next\" | translate }}</app-rd-button\n >\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #customModalFooter>\n <div class=\"select-footer-container\">\n <div\n class=\"select-footer-content d-flex justify-content-between align-items-center\"\n >\n <div>\n <!-- \u9009\u4E2D\u8BA1\u6570 -->\n <span *ngIf=\"showSelectedCount\" class=\"t14-400 c-text-primary\">\n {{ selectedLabel }}\n {{ getDrawerSelectValueLen()\n }}<ng-container *ngIf=\"isShowMaxCount\"\n >/{{ nzMaxMultipleCount }}\n </ng-container>\n </span>\n\n <!-- \u6E05\u7A7A\u6309\u94AE -->\n <a\n *ngIf=\"showClearAll && getDrawerSelectValueLen() > 0\"\n class=\"b14 ml-16\"\n (click)=\"clearAll(); $event.stopPropagation()\"\n >\n {{ clearAllLabel }}\n </a>\n </div>\n\n <div>\n <app-rd-button\n type=\"primary\"\n [disabled]=\"isRquired ? getDrawerSelectValueLen() === 0 : false\"\n (click)=\"multSelectMobileNext()\"\n >\n {{ \"done\" | translate }}</app-rd-button\n >\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- \u5176\u4ED6\u6A21\u677F\u4FDD\u6301\u4E0D\u53D8 -->\n<ng-template #defaultSelectedTpl let-selected>\n {{ selected?.nzLabel }}\n</ng-template>\n\n<ng-template #currencyOptionTpl let-option>\n <div class=\"rd-form-item-option-content\">\n <img [src]=\"option.iconUrl\" class=\"rd-token-icon\" alt=\"icon\" />\n <span>{{ option.name }}</span>\n </div>\n</ng-template>\n\n<ng-template #currencySelectedTpl let-selected let-extra>\n <div class=\"rd-form-item-option-content\">\n <img\n [src]=\"currencyUrlMap?.[selected.nzValue]\"\n class=\"rd-token-icon\"\n alt=\"icon\"\n />\n <span>{{ selected.nzLabel }}</span>\n </div>\n</ng-template>\n\n<ng-template #removeIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.39645 2.39645C2.59171 2.20118 2.90829 2.20118 3.10355 2.39645L6 5.29289L8.89645 2.39645C9.09171 2.20118 9.40829 2.20118 9.60355 2.39645C9.79882 2.59171 9.79882 2.90829 9.60355 3.10355L6.70711 6L9.60355 8.89645C9.79882 9.09171 9.79882 9.40829 9.60355 9.60355C9.40829 9.79882 9.09171 9.79882 8.89645 9.60355L6 6.70711L3.10355 9.60355C2.90829 9.79882 2.59171 9.79882 2.39645 9.60355C2.20118 9.40829 2.20118 9.09171 2.39645 8.89645L5.29289 6L2.39645 3.10355C2.20118 2.90829 2.20118 2.59171 2.39645 2.39645Z\"\n fill=\"var(--rd-copy-primary)\"\n />\n </svg>\n</ng-template>\n\n<ng-template #customIcon>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.60136 4.90777C2.83639 4.68743 3.20555 4.69934 3.42589 4.93437L8.00033 9.81377L12.5748 4.93437C12.7951 4.69934 13.1643 4.68743 13.3993 4.90777C13.6343 5.12812 13.6462 5.49727 13.4259 5.7323L8.42589 11.0656C8.31561 11.1833 8.16157 11.25 8.00033 11.25C7.83909 11.25 7.68504 11.1833 7.57476 11.0656L2.57476 5.7323C2.35442 5.49727 2.36633 5.12811 2.60136 4.90777Z\"\n fill=\"var(--rd-copy-primary)\"\n />\n </svg>\n</ng-template>\n\n<nz-drawer\n [nzVisible]=\"drawerOpen && isMobile && businessLocation\"\n [nzPlacement]=\"'bottom'\"\n [nzHeight]=\"'70vh'\"\n [nzTitle]=\"''\"\n [nzClosable]=\"false\"\n [nzFooter]=\"customDropdownFooter\"\n nzWrapClassName=\"select-drawer\"\n (nzOnClose)=\"closeDrawer()\"\n>\n <div *nzDrawerContent>\n <div class=\"select-drawer-header\">\n <div class=\"header-title\">\n <div>\n {{\n (businessLocation ? \"select_nature_of_business\" : \" \") | translate\n }}\n </div>\n <div class=\"close-btn\" (click)=\"closeDrawer()\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n class=\"w-full\"\n >\n <path\n d=\"M3.40039 3.3999L8.00039 7.9999M12.6004 12.5999L8.00039 7.9999M8.00039 7.9999L12.6004 3.3999L3.40039 12.5999\"\n stroke=\"var(--rd-copy-primary)\"\n stroke-width=\"1.36\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n\n <nz-input-group\n class=\"cascader-drawer-search\"\n [nzPrefix]=\"prefixIconSearch\"\n nzClearable\n >\n <input\n nz-input\n [placeholder]=\"'search' | translate\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"doMobileSearch($event)\"\n />\n </nz-input-group>\n </div>\n\n <div class=\"cascader-drawer-list\">\n <div *ngIf=\"isShowMaxCount\" class=\"my-16 ml-8\">\n <span class=\"t14-400 c-text-primary\">{{ topHintText }}</span>\n </div>\n <ng-container *ngIf=\"filteredOptions?.length\">\n <nz-checkbox-wrapper\n class=\"question-content\"\n class=\"t14-400 c-text-primary\"\n (nzOnChange)=\"onCheckboxChange($event)\"\n >\n <div *ngFor=\"let option of filteredOptions\" class=\"mb-8\">\n <label\n nz-checkbox\n [nzValue]=\"option?.value\"\n [nzDisabled]=\"getOptionDisabled(option)\"\n [nzChecked]=\"isValueSelected(option?.value)\"\n >\n <span class=\"t14-400 c-text-primary\">{{ option?.name }}</span>\n </label>\n </div>\n </nz-checkbox-wrapper>\n </ng-container>\n </div>\n </div>\n</nz-drawer>\n\n<!-- Modal for desktop business location multi-select -->\n<nz-modal\n [(nzVisible)]=\"modalOpen\"\n [nzTitle]=\"''\"\n [nzClosable]=\"false\"\n [nzFooter]=\"customModalFooter\"\n nzWrapClassName=\"select-modal\"\n (nzOnCancel)=\"closeModal()\"\n [nzWidth]=\"632\"\n [nzBodyStyle]=\"{ height: '600px' }\"\n nzCentered\n>\n <div *nzModalContent>\n <div class=\"select-modal-header\">\n <div\n class=\"header-title d-flex justify-content-between align-items-center\"\n >\n <div>\n {{\n (businessLocationTitle\n ? businessLocationTitle\n : businessLocation\n ? \"select_nature_of_business\"\n : \" \"\n ) | translate\n }}\n </div>\n <div class=\"close-btn\" (click)=\"closeModal()\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3.40039 3.3999L8.00039 7.9999M12.6004 12.5999L8.00039 7.9999M8.00039 7.9999L12.6004 3.3999L3.40039 12.5999\"\n stroke=\"var(--rd-copy-primary)\"\n stroke-width=\"1.36\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n\n <nz-input-group\n class=\"cascader-modal-search\"\n [nzPrefix]=\"prefixIconSearch\"\n nzClearable\n >\n <input\n nz-input\n [placeholder]=\"'search' | translate\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"doMobileSearch($event)\"\n />\n </nz-input-group>\n </div>\n\n <div class=\"cascader-modal-list\">\n <div class=\"mb-16\" *ngIf=\"showTopHint && isShowMaxCount\">\n <span class=\"t14-400 c-text-primary\">{{ topHintText }}</span>\n </div>\n <ng-container *ngIf=\"filteredOptions?.length\">\n <nz-checkbox-wrapper\n class=\"question-content\"\n class=\"t14-400 c-text-primary\"\n (nzOnChange)=\"onCheckboxChange($event)\"\n >\n <div *ngFor=\"let option of filteredOptions\" class=\"mb-8\">\n <label\n nz-checkbox\n [nzValue]=\"option?.value\"\n [nzDisabled]=\"getOptionDisabled(option)\"\n [nzChecked]=\"isValueSelected(option?.value)\"\n >\n <span class=\"t14-400 c-text-primary\">{{ option?.name }}</span>\n </label>\n </div>\n </nz-checkbox-wrapper>\n </ng-container>\n </div>\n </div>\n</nz-modal>\n\n<ng-template #prefixIconSearch>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M14.4951 13.6948L11.3962 10.5959C12.3175 9.46902 12.7704 8.03122 12.6613 6.57983C12.5522 5.12844 11.8894 3.77451 10.81 2.79807C9.73066 1.82164 8.3173 1.29741 6.86227 1.33381C5.40723 1.37021 4.02185 1.96445 2.99266 2.99364C1.96348 4.02282 1.36923 5.4082 1.33283 6.86323C1.29643 8.31826 1.82066 9.73162 2.7971 10.811C3.77354 11.8903 5.12747 12.5531 6.57887 12.6622C8.03026 12.7713 9.46807 12.3184 10.5949 11.3972L13.6938 14.5032C13.8027 14.6073 13.9474 14.6656 14.098 14.6663C14.2105 14.6661 14.3204 14.6325 14.4138 14.5697C14.5071 14.5069 14.5796 14.4178 14.6222 14.3136C14.6648 14.2095 14.6754 14.0951 14.6528 13.9849C14.6302 13.8747 14.5753 13.7737 14.4951 13.6948ZM7.00667 11.5461C6.10905 11.5461 5.23158 11.2799 4.48523 10.7812C3.73889 10.2825 3.15718 9.57372 2.81367 8.74443C2.47017 7.91513 2.38029 7.0026 2.55541 6.12223C2.73053 5.24185 3.16277 4.43317 3.79749 3.79846C4.43221 3.16375 5.24088 2.7315 6.12126 2.55638C7.00164 2.38127 7.91417 2.47114 8.74347 2.81465C9.57277 3.15815 10.2816 3.73986 10.7803 4.4862C11.279 5.23255 11.5451 6.11001 11.5451 7.00763C11.5433 8.21073 11.0645 9.36402 10.2138 10.2147C9.36306 11.0655 8.20977 11.5442 7.00667 11.5461Z\"\n fill=\"var(--rd-copy-primary)\"\n />\n </svg>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host .rd-select-container{visibility:hidden}:host .rd-select-container.rd-select-ready{visibility:visible}:host .rd-form-item-select{width:100%}:host .rd-form-item-select ::ng-deep .ant-select-selection-search-input{color:var(--rd-copy-primary);font-size:14px;width:100%;font-weight:500}:host .rd-form-item-select ::ng-deep .ant-select-selection-placeholder{color:var(--rd-copy-disable)!important}:host .rd-select-disabled-open{pointer-events:none}::ng-deep .rd-form-item-phone .ant-select-selection-search-input{padding:0 5px 12px}::ng-deep .rd-form-item-phone .ant-select-single .ant-select-selector .ant-select-selection-search{position:absolute;inset:-8px 11px 0}::ng-deep .rd-select-container:not(.rd-search-width-auto) .rd-form-item-select.ant-select-multiple .ant-select-selection-search{width:100%!important}::ng-deep .rd-form-item-select.ant-select-multiple .ant-select-selection-search .ant-select-selection-search-input{padding:0 0 12px!important;transform:translate(-2px,4px)!important}::ng-deep .has-top-hint .ant-select-item-option-content:has(.top-hint-option){background:transparent!important;padding-left:12px!important;cursor:default}::ng-deep .has-top-hint .ant-select-item-option-content:has(.top-hint-option):before{border:none!important}::ng-deep .rd-form-item-multiple-select-dropdown .select-footer-container{padding:16px 12px!important;border-top:1px solid var(--rd-grey-700)!important}::ng-deep .select-drawer{background-color:var(--rd-bg-website)}::ng-deep .select-drawer .select-drawer-header{padding:24px 8px 0;position:sticky;top:0;background-color:var(--rd-bg-website);z-index:1111}::ng-deep .select-drawer .select-drawer-header .header-title{display:flex;align-items:center;font-size:18px;font-weight:500;line-height:24px;justify-content:space-between}::ng-deep .select-drawer .close-btn{width:24px;height:24px;cursor:pointer}::ng-deep .select-drawer .close-btn svg{width:24px}::ng-deep .select-drawer .back-btn{width:16px;height:16px;cursor:pointer}::ng-deep .select-drawer .ant-drawer-body{padding:0 16px 24px}::ng-deep .select-drawer .ant-drawer-content{background-color:transparent;color:var(--rd-copy-primary)}::ng-deep .select-drawer .cascader-drawer-search{border-radius:4px;border:1px solid var(--rd-input-fg-default);background:var(--rd-input-bg-default);height:44px;padding:0 16px;margin-top:16px}::ng-deep .select-drawer .cascader-drawer-search::placeholder{color:var(--rd-copy-disable)}::ng-deep .select-drawer .cascader-drawer-search .ant-input{background:var(--rd-input-bg-default);color:var(--rd-copy-primary)}::ng-deep .select-drawer .cascader-drawer-search.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-color:var(--rd-input-fg-hover)}::ng-deep .select-drawer .cascader-drawer-list{margin-top:16px}::ng-deep .select-drawer .cascader-drawer-option{padding:8px;min-height:44px;display:flex;align-items:flex-start;gap:8px;cursor:pointer;font-size:14px;font-weight:400;line-height:28px;line-height:1.5}::ng-deep .select-drawer .cascader-drawer-option svg{margin-left:auto;flex-shrink:0}::ng-deep .select-drawer .cascader-drawer-option-active{border-radius:4px;background:rgba(42,123,255,.3)}::ng-deep .select-drawer .cascader-drawer-option.cascader-drawer-root-option{align-items:center}::ng-deep .select-drawer .ant-checkbox-inner{border-radius:4px;background-color:var(--rd-control-input-empty);border:1px solid var(--rd-control-border-empty)}::ng-deep .select-drawer .ant-checkbox-checked .ant-checkbox-inner{background-color:var(--rd-control-input-selected)!important;border:none!important}::ng-deep .select-drawer .ant-checkbox-checked .ant-checkbox-inner:after{border:2px solid var(--rd-copy-inverse);border-top:0;border-left:0}::ng-deep .select-drawer .ant-checkbox-checked:after{border-radius:4px}::ng-deep .select-drawer .ant-checkbox-disabled+span{color:var(--rd-copy-primary)!important}::ng-deep .select-drawer .ant-checkbox-disabled .ant-checkbox-inner{border:1px solid var(--rd-control-border-empty)!important}::ng-deep .select-drawer .ant-checkbox-wrapper{font-weight:400;font-size:14px;line-height:22px;color:var(--rd-copy-primary)!important}::ng-deep .select-drawer .ant-checkbox-wrapper>span{margin-left:8px}::ng-deep .select-drawer .ant-drawer-footer{padding:24px!important;border-top:1px solid var(--rd-grey-700)!important}::ng-deep .select-modal .ant-modal-content{background-color:var(--rd-bg-panel);border-radius:8px}::ng-deep .select-modal .ant-checkbox{margin-right:8px}::ng-deep .select-modal .ant-checkbox>span{border-radius:4px}::ng-deep .select-modal .select-modal-header{padding:24px 0 0;position:sticky;top:0;background-color:var(--rd-bg-panel);z-index:1111}::ng-deep .select-modal .select-modal-header .header-title{display:flex;align-items:center;font-size:18px;font-weight:500;line-height:24px;color:var(--rd-copy-primary);justify-content:space-between}::ng-deep .select-modal .close-btn{width:24px;height:24px;cursor:pointer}::ng-deep .select-modal .close-btn svg{width:24px}::ng-deep .select-modal .back-btn{width:16px;height:16px;cursor:pointer}::ng-deep .select-modal .cascader-modal-search{border-radius:4px;border:1px solid var(--rd-grey-200);background:var(--rd-bg-panel);height:44px;padding:0 16px;margin-top:16px}::ng-deep .select-modal .cascader-modal-search::placeholder{color:var(--rd-copy-disable)}::ng-deep .select-modal .cascader-modal-search .ant-input{background:var(--rd-bg-panel);color:var(--rd-copy-primary);box-shadow:none;outline:none}::ng-deep .select-modal .cascader-modal-search.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-color:var(--rd-input-fg-hover)}::ng-deep .select-modal .cascader-modal-list{margin-top:16px;overflow-y:auto;height:460px}::ng-deep .select-modal .ant-modal-body{padding:0 24px 24px}::ng-deep .select-modal .ant-modal-footer{padding:24px!important;border-top:1px solid var(--rd-grey-200)!important;background-color:var(--rd-bg-panel)}::ng-deep .select-modal .ant-modal-close{display:none}\n", "::ng-deep .rd-form-item-select{min-width:113px;min-height:52px;max-height:100%;position:relative}::ng-deep .rd-form-item-select.ant-select-multiple .ant-select-selection-search{margin-inline-start:0}::ng-deep .rd-form-item-select .ant-select-selection-search-input{padding:12px 4px 0}::ng-deep .rd-form-item-select .ant-select-selection-search-input::placeholder{color:var(--rd-copy-disable)}::ng-deep .rd-form-item-select .ant-select-selection-search .ant-select-selection-search-input{padding:12px 4px 0;transform:translate(-2px,12px)!important}::ng-deep .rd-form-item-select .ant-select-show-search{transform:translateY(10px)}::ng-deep .rd-form-item-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{padding:14px 16px 10px;min-height:52px;height:-moz-fit-content;height:fit-content}.rd-form-item-phone ::ng-deep .rd-form-item-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{padding:6px 16px 10px;min-height:52px;height:-moz-fit-content;height:fit-content}.rd-form-item-phone ::ng-deep .rd-form-item-select.ant-select-show-search.ant-select-multiple .ant-select-selector{padding:6px 16px}::ng-deep .rd-form-item-select.ant-select-single .ant-select-selector .ant-select-selection-item:after{display:none}::ng-deep .rd-form-item-select.ant-select .ant-select-selection-item{color:var(--rd-copy-primary);font-weight:500;font-size:14px}::ng-deep .rd-form-item-select .ant-select-selector{padding:12px 16px}::ng-deep .rd-form-item-select.ant-select-multiple .ant-select-selection-item{border-radius:4px;background:transparent;font-size:14px;font-weight:500;color:var(--rd-copy-primary);display:flex;align-items:center;gap:4px}::ng-deep .rd-form-item-select.ant-select-multiple .ant-select-selection-item .ant-select-selection-item-remove{line-height:1}::ng-deep .rd-form-item-select:not(.ant-select-customize-input) .ant-select-selector{border-radius:4px}::ng-deep .rd-form-item-select.ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector{border-radius:4px;border:1px solid var(--rd-input-fg-hover);background:var(--rd-input-bg-hover);box-shadow:0 0 0 2px #367af61a}::ng-deep .rd-form-item-select .ant-empty-description{font-weight:400;font-size:14px;line-height:22px;color:var(--rd-copy-primary)}::ng-deep .rd-form-item-select .ant-select-selection-placeholder{color:var(--rd-copy-primary);font-weight:500;font-size:14px}::ng-deep .rd-form-item-select .ant-select-selection-item-content{color:var(--rd-copy-primary);font-weight:500}::ng-deep .rd-form-item-select .ant-select-arrow{transition:ease-in-out .2s all;cursor:pointer;pointer-events:initial}::ng-deep .rd-form-item-select:hover:has(.ant-select-clear) .ant-select-arrow{opacity:0}::ng-deep .rd-form-item-select.ant-select-focused .ant-select-arrow,::ng-deep .rd-form-item-select .ant-select-selector:focus-within .ant-select-arrow{transform:rotate(-180deg);transition:transform .2s ease}::ng-deep .rd-form-item-select-s{min-height:38px}::ng-deep .rd-form-item-select-s.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{height:100%;min-height:38px;padding:0 12px}::ng-deep .rd-form-item-select-dropdown .ant-select-dropdown,::ng-deep .rd-form-item-select-dropdown-s .ant-select-dropdown,::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-dropdown{border-radius:4px;background:var(--rd-bg-panel);min-width:113px}::ng-deep .rd-form-item-select-dropdown .ant-select-item-option,::ng-deep .rd-form-item-select-dropdown-s .ant-select-item-option,::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option{background-color:transparent;padding:0 6px}::ng-deep .rd-form-item-select-dropdown .ant-select-item-option-content,::ng-deep .rd-form-item-select-dropdown-s .ant-select-item-option-content,::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-content{border-radius:4px;padding:0 6px;display:flex;align-items:center;color:var(--rd-copy-primary);font-size:14px;min-height:40px;font-weight:600}::ng-deep .rd-form-item-select-dropdown .ant-select-item-option-active .ant-select-item-option-content,::ng-deep .rd-form-item-select-dropdown-s .ant-select-item-option-active .ant-select-item-option-content,::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-active .ant-select-item-option-content{background:rgba(54,122,246,.1)}::ng-deep .rd-form-item-select-dropdown .ant-select-item-option-disabled .ant-select-item-option-content,::ng-deep .rd-form-item-select-dropdown-s .ant-select-item-option-disabled .ant-select-item-option-content,::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-disabled .ant-select-item-option-content{color:var(--rd-copy-secondary);background:var(--rd-grey-200)}::ng-deep .rd-form-item-select-dropdown .rd-form-item-empty,::ng-deep .rd-form-item-select-dropdown-s .rd-form-item-empty,::ng-deep .rd-form-item-multiple-select-dropdown .rd-form-item-empty{display:flex;flex-direction:column;align-items:center;gap:6px;width:100%}::ng-deep .rd-form-item-select-dropdown .rd-form-item-empty img,::ng-deep .rd-form-item-select-dropdown-s .rd-form-item-empty img,::ng-deep .rd-form-item-multiple-select-dropdown .rd-form-item-empty img{width:61px;height:68px}::ng-deep .rd-form-item-select-dropdown .rd-form-item-empty p,::ng-deep .rd-form-item-select-dropdown-s .rd-form-item-empty p,::ng-deep .rd-form-item-multiple-select-dropdown .rd-form-item-empty p{font-size:13px;color:var(--rd-copy-disable);font-weight:500;margin:0}::ng-deep .rd-form-item-select-dropdown-s .ant-select-item-option-content{padding:0 4px;min-height:32px}::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-content{border-radius:4px;color:var(--rd-copy-primary);font-size:14px;padding:0 6px 0 32px;position:relative}::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-content:before{content:\"\";position:absolute;top:50%;left:6px;width:16px;height:16px;transform:translateY(-50%);border-radius:4px;border:1px solid var(--rd-grey-400)}::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-selected .ant-select-item-option-content:before{background-image:url(/assets/img/icon/checkbox.svg);background-size:contain;background-position:center;background-repeat:no-repeat;border:none}::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-state{display:none}::ng-deep .rd-form-item-option-content{display:flex;align-items:center;gap:8px;height:100%}::ng-deep .rd-form-item-option-content span{font-size:14px;font-weight:500}::ng-deep .rd-form-item-option-content .rd-token-icon{width:20px;height:20px;transition:opacity .3s ease-in-out}\n"], dependencies: [{ 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: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.NzSpinComponent, selector: "nz-spin", inputs: ["nzIndicator", "nzSize", "nzTip", "nzDelay", "nzSimple", "nzSpinning"], exportAs: ["nzSpin"] }, { kind: "component", type: i5.NzOptionComponent, selector: "nz-option", inputs: ["nzLabel", "nzValue", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i5.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "component", type: i6.FormItemComponent, selector: "app-rd-form-item", inputs: ["errorMessage", "disabled", "label", "type", "focus", "value", "size", "theme"] }, { kind: "component", type: i7.NzDrawerComponent, selector: "nz-drawer", inputs: ["nzContent", "nzCloseIcon", "nzClosable", "nzMaskClosable", "nzMask", "nzCloseOnNavigation", "nzNoAnimation", "nzKeyboard", "nzTitle", "nzExtra", "nzFooter", "nzPlacement", "nzSize", "nzMaskStyle", "nzBodyStyle", "nzWrapClassName", "nzWidth", "nzHeight", "nzZIndex", "nzOffsetX", "nzOffsetY", "nzVisible"], outputs: ["nzOnViewInit", "nzOnClose", "nzVisibleChange"], exportAs: ["nzDrawer"] }, { kind: "directive", type: i7.NzDrawerContentDirective, selector: "[nzDrawerContent]", exportAs: ["nzDrawerContent"] }, { kind: "directive", type: i8.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i8.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i8.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "component", type: i9.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }, { kind: "component", type: i9.NzCheckboxWrapperComponent, selector: "nz-checkbox-wrapper", outputs: ["nzOnChange"], exportAs: ["nzCheckboxWrapper"] }, { kind: "directive", type: i10.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "component", type: i11.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzContent", "nzComponentParams", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: i11.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "component", type: i12.RdButtonComponent, selector: "app-rd-button", inputs: ["type", "size", "shape", "disabled", "loading", "block", "htmlType", "ghost", "dashed", "icon", "danger", "minWidth", "theme"], outputs: ["click"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
354
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RdSelectComponent, decorators: [{
355
+ type: Component,
356
+ args: [{ selector: 'app-rd-select', providers: [
357
+ {
358
+ provide: NG_VALUE_ACCESSOR,
359
+ useExisting: forwardRef(() => RdSelectComponent),
360
+ multi: true,
361
+ },
362
+ {
363
+ provide: NG_VALIDATORS,
364
+ useExisting: forwardRef(() => RdSelectComponent),
365
+ multi: true,
366
+ },
367
+ ], template: "<!-- rd-select.component.html -->\n<div\n [class.rd-select-ready]=\"isComponentReady\"\n [class.rd-search-width-auto]=\"isSearchWidthAuto\"\n class=\"rd-select-container\"\n>\n <app-rd-form-item\n [disabled]=\"disabled\"\n [focus]=\"!!searchInput || isFocus || isOpen\"\n [type]=\"'select'\"\n [label]=\"label\"\n [value]=\"nativeValue\"\n [errorMessage]=\"showError && isShowErrorTip ? currentErrorMessage : ''\"\n [ngClass]=\"{\n 'rd-form-item-phone': !label,\n }\"\n (click)=\"openDrawer()\"\n >\n <nz-select\n class=\"rd-form-item-select\"\n [ngStyle]=\"{\n 'pointer-events':\n businessLocation && nzMode === 'multiple' ? 'none' : '',\n }\"\n nzBorderless\n [nzMode]=\"nzMode\"\n [nzShowArrow]=\"false\"\n [(ngModel)]=\"nativeValue\"\n [nzMaxMultipleCount]=\"nzMaxMultipleCount ? nzMaxMultipleCount : null\"\n [nzPlaceHolder]=\"placeholder\"\n [nzCustomTemplate]=\"\n customTpl\n ? customTpl\n : isCurrency\n ? currencySelectedTpl\n : defaultSelectedTpl\n \"\n (nzScrollToBottom)=\"onScrollToBottom()\"\n (ngModelChange)=\"handleValueChange($event)\"\n [disabled]=\"disabled\"\n (nzFocus)=\"isFocus = true\"\n (nzBlur)=\"isFocus = false\"\n [nzDropdownClassName]=\"dropdownClassNames\"\n [nzOptionOverflowSize]=\"5\"\n [nzOptionHeightPx]=\"optionHeightPx || 40\"\n [nzSuffixIcon]=\"customIcon\"\n [nzRemoveIcon]=\"removeIcon\"\n [nzShowSearch]=\"\n nzMode === 'multiple' && businessLocation ? false : isShowSearch\n \"\n (nzOnSearch)=\"onSearch($event)\"\n [name]=\"name\"\n (nzOpenChange)=\"handleOpenChange($event)\"\n [nzDropdownRender]=\"\n showSelectedCount || showClearAll ? customDropdownFooter : null\n \"\n [ngClass]=\"{\n 'rd-select-disabled-open': isMobile && businessLocation,\n }\"\n >\n <nz-option\n *ngIf=\"showTopHint && isShowMaxCount\"\n nzDisabled\n nzCustomContent\n >\n <div class=\"top-hint-option\">\n <span class=\"t14-400 c-text-primary\">{{ topHintText }}</span>\n </div>\n </nz-option>\n\n <nz-option\n *ngFor=\"let option of filteredOptions\"\n [nzValue]=\"option.value\"\n [nzLabel]=\"option.name || ''\"\n [nzDisabled]=\"option.disabled || false\"\n [nzCustomContent]=\"true\"\n >\n <ng-container *ngIf=\"optionTpl || isCurrency\">\n <ng-container\n *ngTemplateOutlet=\"\n isCurrency ? currencyOptionTpl : optionTpl;\n context: { $implicit: option }\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!(optionTpl || isCurrency)\">\n <span class=\"t14-400 c-text-primary\">{{ option?.name }}</span>\n </ng-container>\n </nz-option>\n\n <nz-option *ngIf=\"isLoading\" nzDisabled nzCustomContent>\n <nz-spin style=\"padding: 16px 0\"></nz-spin>\n </nz-option>\n </nz-select>\n </app-rd-form-item>\n</div>\n\n<!-- \u81EA\u5B9A\u4E49\u4E0B\u62C9\u83DC\u5355\u5E95\u90E8 -->\n<ng-template #customDropdownFooter>\n <div class=\"select-footer-container\">\n <div\n class=\"select-footer-content d-flex justify-content-between align-items-center\"\n >\n <div>\n <!-- \u9009\u4E2D\u8BA1\u6570 -->\n <span *ngIf=\"showSelectedCount\" class=\"t14-400 c-text-primary\">\n {{ selectedLabel }}\n {{\n isMobile ? getDrawerSelectValueLen() : selectedCount\n }}/<ng-container *ngIf=\"isShowMaxCount\"\n >/{{ nzMaxMultipleCount }}\n </ng-container>\n </span>\n\n <!-- \u6E05\u7A7A\u6309\u94AE -->\n <a\n *ngIf=\"\n showClearAll &&\n (isMobile ? getDrawerSelectValueLen() : selectedCount) > 0\n \"\n class=\"b14 ml-16\"\n (click)=\"clearAll(); $event.stopPropagation()\"\n >\n {{ clearAllLabel }}\n </a>\n </div>\n\n <div>\n <app-rd-button\n type=\"primary\"\n *ngIf=\"isMobile\"\n [disabled]=\"getDisableNext()\"\n (click)=\"multSelectMobileNext()\"\n >\n {{ \"next\" | translate }}</app-rd-button\n >\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #customModalFooter>\n <div class=\"select-footer-container\">\n <div\n class=\"select-footer-content d-flex justify-content-between align-items-center\"\n >\n <div>\n <!-- \u9009\u4E2D\u8BA1\u6570 -->\n <span *ngIf=\"showSelectedCount\" class=\"t14-400 c-text-primary\">\n {{ selectedLabel }}\n {{ getDrawerSelectValueLen()\n }}<ng-container *ngIf=\"isShowMaxCount\"\n >/{{ nzMaxMultipleCount }}\n </ng-container>\n </span>\n\n <!-- \u6E05\u7A7A\u6309\u94AE -->\n <a\n *ngIf=\"showClearAll && getDrawerSelectValueLen() > 0\"\n class=\"b14 ml-16\"\n (click)=\"clearAll(); $event.stopPropagation()\"\n >\n {{ clearAllLabel }}\n </a>\n </div>\n\n <div>\n <app-rd-button\n type=\"primary\"\n [disabled]=\"isRquired ? getDrawerSelectValueLen() === 0 : false\"\n (click)=\"multSelectMobileNext()\"\n >\n {{ \"done\" | translate }}</app-rd-button\n >\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- \u5176\u4ED6\u6A21\u677F\u4FDD\u6301\u4E0D\u53D8 -->\n<ng-template #defaultSelectedTpl let-selected>\n {{ selected?.nzLabel }}\n</ng-template>\n\n<ng-template #currencyOptionTpl let-option>\n <div class=\"rd-form-item-option-content\">\n <img [src]=\"option.iconUrl\" class=\"rd-token-icon\" alt=\"icon\" />\n <span>{{ option.name }}</span>\n </div>\n</ng-template>\n\n<ng-template #currencySelectedTpl let-selected let-extra>\n <div class=\"rd-form-item-option-content\">\n <img\n [src]=\"currencyUrlMap?.[selected.nzValue]\"\n class=\"rd-token-icon\"\n alt=\"icon\"\n />\n <span>{{ selected.nzLabel }}</span>\n </div>\n</ng-template>\n\n<ng-template #removeIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.39645 2.39645C2.59171 2.20118 2.90829 2.20118 3.10355 2.39645L6 5.29289L8.89645 2.39645C9.09171 2.20118 9.40829 2.20118 9.60355 2.39645C9.79882 2.59171 9.79882 2.90829 9.60355 3.10355L6.70711 6L9.60355 8.89645C9.79882 9.09171 9.79882 9.40829 9.60355 9.60355C9.40829 9.79882 9.09171 9.79882 8.89645 9.60355L6 6.70711L3.10355 9.60355C2.90829 9.79882 2.59171 9.79882 2.39645 9.60355C2.20118 9.40829 2.20118 9.09171 2.39645 8.89645L5.29289 6L2.39645 3.10355C2.20118 2.90829 2.20118 2.59171 2.39645 2.39645Z\"\n fill=\"var(--rd-copy-primary)\"\n />\n </svg>\n</ng-template>\n\n<ng-template #customIcon>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.60136 4.90777C2.83639 4.68743 3.20555 4.69934 3.42589 4.93437L8.00033 9.81377L12.5748 4.93437C12.7951 4.69934 13.1643 4.68743 13.3993 4.90777C13.6343 5.12812 13.6462 5.49727 13.4259 5.7323L8.42589 11.0656C8.31561 11.1833 8.16157 11.25 8.00033 11.25C7.83909 11.25 7.68504 11.1833 7.57476 11.0656L2.57476 5.7323C2.35442 5.49727 2.36633 5.12811 2.60136 4.90777Z\"\n fill=\"var(--rd-copy-primary)\"\n />\n </svg>\n</ng-template>\n\n<nz-drawer\n [nzVisible]=\"drawerOpen && isMobile && businessLocation\"\n [nzPlacement]=\"'bottom'\"\n [nzHeight]=\"'70vh'\"\n [nzTitle]=\"''\"\n [nzClosable]=\"false\"\n [nzFooter]=\"customDropdownFooter\"\n nzWrapClassName=\"select-drawer\"\n (nzOnClose)=\"closeDrawer()\"\n>\n <div *nzDrawerContent>\n <div class=\"select-drawer-header\">\n <div class=\"header-title\">\n <div>\n {{\n (businessLocation ? \"select_nature_of_business\" : \" \") | translate\n }}\n </div>\n <div class=\"close-btn\" (click)=\"closeDrawer()\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n class=\"w-full\"\n >\n <path\n d=\"M3.40039 3.3999L8.00039 7.9999M12.6004 12.5999L8.00039 7.9999M8.00039 7.9999L12.6004 3.3999L3.40039 12.5999\"\n stroke=\"var(--rd-copy-primary)\"\n stroke-width=\"1.36\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n\n <nz-input-group\n class=\"cascader-drawer-search\"\n [nzPrefix]=\"prefixIconSearch\"\n nzClearable\n >\n <input\n nz-input\n [placeholder]=\"'search' | translate\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"doMobileSearch($event)\"\n />\n </nz-input-group>\n </div>\n\n <div class=\"cascader-drawer-list\">\n <div *ngIf=\"isShowMaxCount\" class=\"my-16 ml-8\">\n <span class=\"t14-400 c-text-primary\">{{ topHintText }}</span>\n </div>\n <ng-container *ngIf=\"filteredOptions?.length\">\n <nz-checkbox-wrapper\n class=\"question-content\"\n class=\"t14-400 c-text-primary\"\n (nzOnChange)=\"onCheckboxChange($event)\"\n >\n <div *ngFor=\"let option of filteredOptions\" class=\"mb-8\">\n <label\n nz-checkbox\n [nzValue]=\"option?.value\"\n [nzDisabled]=\"getOptionDisabled(option)\"\n [nzChecked]=\"isValueSelected(option?.value)\"\n >\n <span class=\"t14-400 c-text-primary\">{{ option?.name }}</span>\n </label>\n </div>\n </nz-checkbox-wrapper>\n </ng-container>\n </div>\n </div>\n</nz-drawer>\n\n<!-- Modal for desktop business location multi-select -->\n<nz-modal\n [(nzVisible)]=\"modalOpen\"\n [nzTitle]=\"''\"\n [nzClosable]=\"false\"\n [nzFooter]=\"customModalFooter\"\n nzWrapClassName=\"select-modal\"\n (nzOnCancel)=\"closeModal()\"\n [nzWidth]=\"632\"\n [nzBodyStyle]=\"{ height: '600px' }\"\n nzCentered\n>\n <div *nzModalContent>\n <div class=\"select-modal-header\">\n <div\n class=\"header-title d-flex justify-content-between align-items-center\"\n >\n <div>\n {{\n (businessLocationTitle\n ? businessLocationTitle\n : businessLocation\n ? \"select_nature_of_business\"\n : \" \"\n ) | translate\n }}\n </div>\n <div class=\"close-btn\" (click)=\"closeModal()\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3.40039 3.3999L8.00039 7.9999M12.6004 12.5999L8.00039 7.9999M8.00039 7.9999L12.6004 3.3999L3.40039 12.5999\"\n stroke=\"var(--rd-copy-primary)\"\n stroke-width=\"1.36\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n\n <nz-input-group\n class=\"cascader-modal-search\"\n [nzPrefix]=\"prefixIconSearch\"\n nzClearable\n >\n <input\n nz-input\n [placeholder]=\"'search' | translate\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"doMobileSearch($event)\"\n />\n </nz-input-group>\n </div>\n\n <div class=\"cascader-modal-list\">\n <div class=\"mb-16\" *ngIf=\"showTopHint && isShowMaxCount\">\n <span class=\"t14-400 c-text-primary\">{{ topHintText }}</span>\n </div>\n <ng-container *ngIf=\"filteredOptions?.length\">\n <nz-checkbox-wrapper\n class=\"question-content\"\n class=\"t14-400 c-text-primary\"\n (nzOnChange)=\"onCheckboxChange($event)\"\n >\n <div *ngFor=\"let option of filteredOptions\" class=\"mb-8\">\n <label\n nz-checkbox\n [nzValue]=\"option?.value\"\n [nzDisabled]=\"getOptionDisabled(option)\"\n [nzChecked]=\"isValueSelected(option?.value)\"\n >\n <span class=\"t14-400 c-text-primary\">{{ option?.name }}</span>\n </label>\n </div>\n </nz-checkbox-wrapper>\n </ng-container>\n </div>\n </div>\n</nz-modal>\n\n<ng-template #prefixIconSearch>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M14.4951 13.6948L11.3962 10.5959C12.3175 9.46902 12.7704 8.03122 12.6613 6.57983C12.5522 5.12844 11.8894 3.77451 10.81 2.79807C9.73066 1.82164 8.3173 1.29741 6.86227 1.33381C5.40723 1.37021 4.02185 1.96445 2.99266 2.99364C1.96348 4.02282 1.36923 5.4082 1.33283 6.86323C1.29643 8.31826 1.82066 9.73162 2.7971 10.811C3.77354 11.8903 5.12747 12.5531 6.57887 12.6622C8.03026 12.7713 9.46807 12.3184 10.5949 11.3972L13.6938 14.5032C13.8027 14.6073 13.9474 14.6656 14.098 14.6663C14.2105 14.6661 14.3204 14.6325 14.4138 14.5697C14.5071 14.5069 14.5796 14.4178 14.6222 14.3136C14.6648 14.2095 14.6754 14.0951 14.6528 13.9849C14.6302 13.8747 14.5753 13.7737 14.4951 13.6948ZM7.00667 11.5461C6.10905 11.5461 5.23158 11.2799 4.48523 10.7812C3.73889 10.2825 3.15718 9.57372 2.81367 8.74443C2.47017 7.91513 2.38029 7.0026 2.55541 6.12223C2.73053 5.24185 3.16277 4.43317 3.79749 3.79846C4.43221 3.16375 5.24088 2.7315 6.12126 2.55638C7.00164 2.38127 7.91417 2.47114 8.74347 2.81465C9.57277 3.15815 10.2816 3.73986 10.7803 4.4862C11.279 5.23255 11.5451 6.11001 11.5451 7.00763C11.5433 8.21073 11.0645 9.36402 10.2138 10.2147C9.36306 11.0655 8.20977 11.5442 7.00667 11.5461Z\"\n fill=\"var(--rd-copy-primary)\"\n />\n </svg>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host .rd-select-container{visibility:hidden}:host .rd-select-container.rd-select-ready{visibility:visible}:host .rd-form-item-select{width:100%}:host .rd-form-item-select ::ng-deep .ant-select-selection-search-input{color:var(--rd-copy-primary);font-size:14px;width:100%;font-weight:500}:host .rd-form-item-select ::ng-deep .ant-select-selection-placeholder{color:var(--rd-copy-disable)!important}:host .rd-select-disabled-open{pointer-events:none}::ng-deep .rd-form-item-phone .ant-select-selection-search-input{padding:0 5px 12px}::ng-deep .rd-form-item-phone .ant-select-single .ant-select-selector .ant-select-selection-search{position:absolute;inset:-8px 11px 0}::ng-deep .rd-select-container:not(.rd-search-width-auto) .rd-form-item-select.ant-select-multiple .ant-select-selection-search{width:100%!important}::ng-deep .rd-form-item-select.ant-select-multiple .ant-select-selection-search .ant-select-selection-search-input{padding:0 0 12px!important;transform:translate(-2px,4px)!important}::ng-deep .has-top-hint .ant-select-item-option-content:has(.top-hint-option){background:transparent!important;padding-left:12px!important;cursor:default}::ng-deep .has-top-hint .ant-select-item-option-content:has(.top-hint-option):before{border:none!important}::ng-deep .rd-form-item-multiple-select-dropdown .select-footer-container{padding:16px 12px!important;border-top:1px solid var(--rd-grey-700)!important}::ng-deep .select-drawer{background-color:var(--rd-bg-website)}::ng-deep .select-drawer .select-drawer-header{padding:24px 8px 0;position:sticky;top:0;background-color:var(--rd-bg-website);z-index:1111}::ng-deep .select-drawer .select-drawer-header .header-title{display:flex;align-items:center;font-size:18px;font-weight:500;line-height:24px;justify-content:space-between}::ng-deep .select-drawer .close-btn{width:24px;height:24px;cursor:pointer}::ng-deep .select-drawer .close-btn svg{width:24px}::ng-deep .select-drawer .back-btn{width:16px;height:16px;cursor:pointer}::ng-deep .select-drawer .ant-drawer-body{padding:0 16px 24px}::ng-deep .select-drawer .ant-drawer-content{background-color:transparent;color:var(--rd-copy-primary)}::ng-deep .select-drawer .cascader-drawer-search{border-radius:4px;border:1px solid var(--rd-input-fg-default);background:var(--rd-input-bg-default);height:44px;padding:0 16px;margin-top:16px}::ng-deep .select-drawer .cascader-drawer-search::placeholder{color:var(--rd-copy-disable)}::ng-deep .select-drawer .cascader-drawer-search .ant-input{background:var(--rd-input-bg-default);color:var(--rd-copy-primary)}::ng-deep .select-drawer .cascader-drawer-search.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-color:var(--rd-input-fg-hover)}::ng-deep .select-drawer .cascader-drawer-list{margin-top:16px}::ng-deep .select-drawer .cascader-drawer-option{padding:8px;min-height:44px;display:flex;align-items:flex-start;gap:8px;cursor:pointer;font-size:14px;font-weight:400;line-height:28px;line-height:1.5}::ng-deep .select-drawer .cascader-drawer-option svg{margin-left:auto;flex-shrink:0}::ng-deep .select-drawer .cascader-drawer-option-active{border-radius:4px;background:rgba(42,123,255,.3)}::ng-deep .select-drawer .cascader-drawer-option.cascader-drawer-root-option{align-items:center}::ng-deep .select-drawer .ant-checkbox-inner{border-radius:4px;background-color:var(--rd-control-input-empty);border:1px solid var(--rd-control-border-empty)}::ng-deep .select-drawer .ant-checkbox-checked .ant-checkbox-inner{background-color:var(--rd-control-input-selected)!important;border:none!important}::ng-deep .select-drawer .ant-checkbox-checked .ant-checkbox-inner:after{border:2px solid var(--rd-copy-inverse);border-top:0;border-left:0}::ng-deep .select-drawer .ant-checkbox-checked:after{border-radius:4px}::ng-deep .select-drawer .ant-checkbox-disabled+span{color:var(--rd-copy-primary)!important}::ng-deep .select-drawer .ant-checkbox-disabled .ant-checkbox-inner{border:1px solid var(--rd-control-border-empty)!important}::ng-deep .select-drawer .ant-checkbox-wrapper{font-weight:400;font-size:14px;line-height:22px;color:var(--rd-copy-primary)!important}::ng-deep .select-drawer .ant-checkbox-wrapper>span{margin-left:8px}::ng-deep .select-drawer .ant-drawer-footer{padding:24px!important;border-top:1px solid var(--rd-grey-700)!important}::ng-deep .select-modal .ant-modal-content{background-color:var(--rd-bg-panel);border-radius:8px}::ng-deep .select-modal .ant-checkbox{margin-right:8px}::ng-deep .select-modal .ant-checkbox>span{border-radius:4px}::ng-deep .select-modal .select-modal-header{padding:24px 0 0;position:sticky;top:0;background-color:var(--rd-bg-panel);z-index:1111}::ng-deep .select-modal .select-modal-header .header-title{display:flex;align-items:center;font-size:18px;font-weight:500;line-height:24px;color:var(--rd-copy-primary);justify-content:space-between}::ng-deep .select-modal .close-btn{width:24px;height:24px;cursor:pointer}::ng-deep .select-modal .close-btn svg{width:24px}::ng-deep .select-modal .back-btn{width:16px;height:16px;cursor:pointer}::ng-deep .select-modal .cascader-modal-search{border-radius:4px;border:1px solid var(--rd-grey-200);background:var(--rd-bg-panel);height:44px;padding:0 16px;margin-top:16px}::ng-deep .select-modal .cascader-modal-search::placeholder{color:var(--rd-copy-disable)}::ng-deep .select-modal .cascader-modal-search .ant-input{background:var(--rd-bg-panel);color:var(--rd-copy-primary);box-shadow:none;outline:none}::ng-deep .select-modal .cascader-modal-search.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-color:var(--rd-input-fg-hover)}::ng-deep .select-modal .cascader-modal-list{margin-top:16px;overflow-y:auto;height:460px}::ng-deep .select-modal .ant-modal-body{padding:0 24px 24px}::ng-deep .select-modal .ant-modal-footer{padding:24px!important;border-top:1px solid var(--rd-grey-200)!important;background-color:var(--rd-bg-panel)}::ng-deep .select-modal .ant-modal-close{display:none}\n", "::ng-deep .rd-form-item-select{min-width:113px;min-height:52px;max-height:100%;position:relative}::ng-deep .rd-form-item-select.ant-select-multiple .ant-select-selection-search{margin-inline-start:0}::ng-deep .rd-form-item-select .ant-select-selection-search-input{padding:12px 4px 0}::ng-deep .rd-form-item-select .ant-select-selection-search-input::placeholder{color:var(--rd-copy-disable)}::ng-deep .rd-form-item-select .ant-select-selection-search .ant-select-selection-search-input{padding:12px 4px 0;transform:translate(-2px,12px)!important}::ng-deep .rd-form-item-select .ant-select-show-search{transform:translateY(10px)}::ng-deep .rd-form-item-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{padding:14px 16px 10px;min-height:52px;height:-moz-fit-content;height:fit-content}.rd-form-item-phone ::ng-deep .rd-form-item-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{padding:6px 16px 10px;min-height:52px;height:-moz-fit-content;height:fit-content}.rd-form-item-phone ::ng-deep .rd-form-item-select.ant-select-show-search.ant-select-multiple .ant-select-selector{padding:6px 16px}::ng-deep .rd-form-item-select.ant-select-single .ant-select-selector .ant-select-selection-item:after{display:none}::ng-deep .rd-form-item-select.ant-select .ant-select-selection-item{color:var(--rd-copy-primary);font-weight:500;font-size:14px}::ng-deep .rd-form-item-select .ant-select-selector{padding:12px 16px}::ng-deep .rd-form-item-select.ant-select-multiple .ant-select-selection-item{border-radius:4px;background:transparent;font-size:14px;font-weight:500;color:var(--rd-copy-primary);display:flex;align-items:center;gap:4px}::ng-deep .rd-form-item-select.ant-select-multiple .ant-select-selection-item .ant-select-selection-item-remove{line-height:1}::ng-deep .rd-form-item-select:not(.ant-select-customize-input) .ant-select-selector{border-radius:4px}::ng-deep .rd-form-item-select.ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector{border-radius:4px;border:1px solid var(--rd-input-fg-hover);background:var(--rd-input-bg-hover);box-shadow:0 0 0 2px #367af61a}::ng-deep .rd-form-item-select .ant-empty-description{font-weight:400;font-size:14px;line-height:22px;color:var(--rd-copy-primary)}::ng-deep .rd-form-item-select .ant-select-selection-placeholder{color:var(--rd-copy-primary);font-weight:500;font-size:14px}::ng-deep .rd-form-item-select .ant-select-selection-item-content{color:var(--rd-copy-primary);font-weight:500}::ng-deep .rd-form-item-select .ant-select-arrow{transition:ease-in-out .2s all;cursor:pointer;pointer-events:initial}::ng-deep .rd-form-item-select:hover:has(.ant-select-clear) .ant-select-arrow{opacity:0}::ng-deep .rd-form-item-select.ant-select-focused .ant-select-arrow,::ng-deep .rd-form-item-select .ant-select-selector:focus-within .ant-select-arrow{transform:rotate(-180deg);transition:transform .2s ease}::ng-deep .rd-form-item-select-s{min-height:38px}::ng-deep .rd-form-item-select-s.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{height:100%;min-height:38px;padding:0 12px}::ng-deep .rd-form-item-select-dropdown .ant-select-dropdown,::ng-deep .rd-form-item-select-dropdown-s .ant-select-dropdown,::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-dropdown{border-radius:4px;background:var(--rd-bg-panel);min-width:113px}::ng-deep .rd-form-item-select-dropdown .ant-select-item-option,::ng-deep .rd-form-item-select-dropdown-s .ant-select-item-option,::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option{background-color:transparent;padding:0 6px}::ng-deep .rd-form-item-select-dropdown .ant-select-item-option-content,::ng-deep .rd-form-item-select-dropdown-s .ant-select-item-option-content,::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-content{border-radius:4px;padding:0 6px;display:flex;align-items:center;color:var(--rd-copy-primary);font-size:14px;min-height:40px;font-weight:600}::ng-deep .rd-form-item-select-dropdown .ant-select-item-option-active .ant-select-item-option-content,::ng-deep .rd-form-item-select-dropdown-s .ant-select-item-option-active .ant-select-item-option-content,::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-active .ant-select-item-option-content{background:rgba(54,122,246,.1)}::ng-deep .rd-form-item-select-dropdown .ant-select-item-option-disabled .ant-select-item-option-content,::ng-deep .rd-form-item-select-dropdown-s .ant-select-item-option-disabled .ant-select-item-option-content,::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-disabled .ant-select-item-option-content{color:var(--rd-copy-secondary);background:var(--rd-grey-200)}::ng-deep .rd-form-item-select-dropdown .rd-form-item-empty,::ng-deep .rd-form-item-select-dropdown-s .rd-form-item-empty,::ng-deep .rd-form-item-multiple-select-dropdown .rd-form-item-empty{display:flex;flex-direction:column;align-items:center;gap:6px;width:100%}::ng-deep .rd-form-item-select-dropdown .rd-form-item-empty img,::ng-deep .rd-form-item-select-dropdown-s .rd-form-item-empty img,::ng-deep .rd-form-item-multiple-select-dropdown .rd-form-item-empty img{width:61px;height:68px}::ng-deep .rd-form-item-select-dropdown .rd-form-item-empty p,::ng-deep .rd-form-item-select-dropdown-s .rd-form-item-empty p,::ng-deep .rd-form-item-multiple-select-dropdown .rd-form-item-empty p{font-size:13px;color:var(--rd-copy-disable);font-weight:500;margin:0}::ng-deep .rd-form-item-select-dropdown-s .ant-select-item-option-content{padding:0 4px;min-height:32px}::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-content{border-radius:4px;color:var(--rd-copy-primary);font-size:14px;padding:0 6px 0 32px;position:relative}::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-content:before{content:\"\";position:absolute;top:50%;left:6px;width:16px;height:16px;transform:translateY(-50%);border-radius:4px;border:1px solid var(--rd-grey-400)}::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-selected .ant-select-item-option-content:before{background-image:url(/assets/img/icon/checkbox.svg);background-size:contain;background-position:center;background-repeat:no-repeat;border:none}::ng-deep .rd-form-item-multiple-select-dropdown .ant-select-item-option-state{display:none}::ng-deep .rd-form-item-option-content{display:flex;align-items:center;gap:8px;height:100%}::ng-deep .rd-form-item-option-content span{font-size:14px;font-weight:500}::ng-deep .rd-form-item-option-content .rd-token-icon{width:20px;height:20px;transition:opacity .3s ease-in-out}\n"] }]
368
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.TranslateService }]; }, propDecorators: { label: [{
369
+ type: Input
370
+ }], customTpl: [{
371
+ type: Input
372
+ }], optionTpl: [{
373
+ type: Input
374
+ }], name: [{
375
+ type: Input
376
+ }], disabled: [{
377
+ type: Input
378
+ }], nzMode: [{
379
+ type: Input
380
+ }], isCurrency: [{
381
+ type: Input
382
+ }], currencyUrlMap: [{
383
+ type: Input
384
+ }], optionHeightPx: [{
385
+ type: Input
386
+ }], nzMaxMultipleCount: [{
387
+ type: Input
388
+ }], isLoading: [{
389
+ type: Input
390
+ }], isShowSearch: [{
391
+ type: Input
392
+ }], isRemoteSearch: [{
393
+ type: Input
394
+ }], placeholder: [{
395
+ type: Input
396
+ }], isRquired: [{
397
+ type: Input
398
+ }], isShowErrorTip: [{
399
+ type: Input
400
+ }], isSearchWidthAuto: [{
401
+ type: Input
402
+ }], options: [{
403
+ type: Input
404
+ }], errorMessages: [{
405
+ type: Input
406
+ }], searchChange: [{
407
+ type: Output
408
+ }], valueChange: [{
409
+ type: Output
410
+ }], scrollToBottomEmit: [{
411
+ type: Output
412
+ }], businessLocation: [{
413
+ type: Input
414
+ }], businessLocationTitle: [{
415
+ type: Input
416
+ }], showSelectedCount: [{
417
+ type: Input
418
+ }], showClearAll: [{
419
+ type: Input
420
+ }], selectedLabel: [{
421
+ type: Input
422
+ }], clearAllLabel: [{
423
+ type: Input
424
+ }], showTopHint: [{
425
+ type: Input
426
+ }], topHintText: [{
427
+ type: Input
428
+ }], onResize: [{
429
+ type: HostListener,
430
+ args: ['window:resize']
431
+ }] } });
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC1saWIvc3JjL2xpYi9tb2R1bGVzL2N1c3RvbS1zZWxlY3QvcmQtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC1saWIvc3JjL2xpYi9tb2R1bGVzL2N1c3RvbS1zZWxlY3QvcmQtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUVOLFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUVsQixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQXFCeEIsTUFBTSxPQUFPLGlCQUFpQjtJQW1CNUIsSUFDSSxPQUFPLENBQUMsR0FBb0I7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBMkNELFVBQVU7SUFDVixJQUFJLGFBQWE7UUFDZixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO1lBQzlCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEU7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FB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O3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdGLE9BQU87c0JBRFYsS0FBSztnQkFTRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBY0UsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFhRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQW1DTixRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9uLnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcmQtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JkLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JkLXNlbGVjdC5jb21wb25lbnQuc2NzcycsICcuL3NlbGVjdC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmRTZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmRTZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUmRTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgY3VzdG9tVHBsOiBhbnk7XG4gIEBJbnB1dCgpIG9wdGlvblRwbDogYW55O1xuICBASW5wdXQoKSBuYW1lID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIG56TW9kZTogJ211bHRpcGxlJyB8ICdkZWZhdWx0JyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgaXNDdXJyZW5jeT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGN1cnJlbmN5VXJsTWFwPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgQElucHV0KCkgb3B0aW9uSGVpZ2h0UHg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIG56TWF4TXVsdGlwbGVDb3VudDogYW55ID0gMTAwO1xuICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgaXNTaG93U2VhcmNoID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzUmVtb3RlU2VhcmNoID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG4gIEBJbnB1dCgpIGlzUnF1aXJlZCA9IHRydWU7XG4gIEBJbnB1dCgpIGlzU2hvd0Vycm9yVGlwID0gdHJ1ZTsgLy8g6Zeu5Y235aSW6YOo5bey57uP5pyJ6ZSZ6K+v5o+Q56S65LqG77yM6L+Z6YeM6ZyA6KaB5b+955WlXG4gIEBJbnB1dCgpIGlzU2VhcmNoV2lkdGhBdXRvID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IG9wdGlvbnModmFsOiBJU2VsZWN0T3B0aW9uW10pIHtcbiAgICB0aGlzLl9yYXdPcHRpb25zID0gdmFsO1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdmFsO1xuICB9XG4gIGdldCBvcHRpb25zKCk6IElTZWxlY3RPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jhd09wdGlvbnM7XG4gIH1cblxuICBASW5wdXQoKSBlcnJvck1lc3NhZ2VzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIHBhdHRlcm46ICdpbnZhbGlkX2Zvcm1hdCcsXG4gICAgY3VzdG9tOiAndmFsaWRhdGlvbl9mYWlsZWQnLFxuICB9O1xuXG4gIEBPdXRwdXQoKSBzZWFyY2hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJU2VsZWN0T3B0aW9uIHwgSVNlbGVjdE9wdGlvbltdPigpO1xuICBAT3V0cHV0KCkgc2Nyb2xsVG9Cb3R0b21FbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHByaXZhdGUgX3Jhd09wdGlvbnM6IElTZWxlY3RPcHRpb25bXSA9IFtdO1xuICBmaWx0ZXJlZE9wdGlvbnM6IElTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIHZhbHVlOiBJU2VsZWN0T3B0aW9uIHwgSVNlbGVjdE9wdGlvbltdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBuYXRpdmVWYWx1ZTogSVNlbGVjdE9wdGlvblsndmFsdWUnXSB8IElTZWxlY3RPcHRpb25bJ3ZhbHVlJ11bXSB8IHVuZGVmaW5lZCA9XG4gICAgdW5kZWZpbmVkO1xuICBkcmF3ZXJTZWxlY3RWYWx1ZTpcbiAgICB8IGFueVxuICAgIHwgSVNlbGVjdE9wdGlvblsndmFsdWUnXVxuICAgIHwgSVNlbGVjdE9wdGlvblsndmFsdWUnXVtdXG4gICAgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIHNlYXJjaElucHV0ID0gJyc7XG4gIEBJbnB1dCgpIGJ1c2luZXNzTG9jYXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgYnVzaW5lc3NMb2NhdGlvblRpdGxlID0gJyc7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IElTZWxlY3RPcHRpb24gfCBJU2VsZWN0T3B0aW9uW10gfCB1bmRlZmluZWQpID0+IHZvaWQgPVxuICAgICgpID0+IHt9O1xuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBpc0ZvY3VzID0gZmFsc2U7XG4gIGlzT3BlbiA9IGZhbHNlO1xuICBpc0NvbXBvbmVudFJlYWR5ID0gZmFsc2U7XG4gIHByaXZhdGUgY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCA9IG51bGw7XG5cbiAgc2VhcmNoVGVybSA9ICcnO1xuICBkcmF3ZXJPcGVuID0gZmFsc2U7XG4gIG1vZGFsT3BlbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93U2VsZWN0ZWRDb3VudCA9IGZhbHNlOyAvLyDmlrDlop7vvJrmmK/lkKbmmL7npLrpgInkuK3orqHmlbBcbiAgQElucHV0KCkgc2hvd0NsZWFyQWxsID0gZmFsc2U7IC8vIOaWsOWinu+8muaYr+WQpuaYvuekuua4heepuuaMiemSrlxuICBASW5wdXQoKSBzZWxlY3RlZExhYmVsID0gJ1NlbGVjdGVkOic7XG4gIEBJbnB1dCgpIGNsZWFyQWxsTGFiZWwgPSAnQ2xlYXIgYWxsJztcbiAgQElucHV0KCkgc2hvd1RvcEhpbnQgPSBmYWxzZTsgLy8g5paw5aKe77ya5piv5ZCm5pi+56S66aG26YOo5o+Q56S6XG4gIEBJbnB1dCgpIHRvcEhpbnRUZXh0ID0gJ1lvdSBjYW4gY2hvb3NlIHVwIHRvIDMgbG9jYXRpb25zJzsgLy8g6aG26YOo5o+Q56S65paH5pysXG4gIC8vIOiuoeeul+mAieS4reeahOaVsOmHj1xuICBnZXQgc2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLm56TW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5uYXRpdmVWYWx1ZSkgPyB0aGlzLm5hdGl2ZVZhbHVlLmxlbmd0aCA6IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5hdGl2ZVZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5uYXRpdmVWYWx1ZSAhPT0gbnVsbCA/IDEgOiAwO1xuICB9XG5cbiAgZ2V0IGRyb3Bkb3duQ2xhc3NOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIOWfuuehgOexu+WQjVxuICAgIGlmICh0aGlzLm56TW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdyZC1mb3JtLWl0ZW0tbXVsdGlwbGUtc2VsZWN0LWRyb3Bkb3duJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsYXNzZXMucHVzaCgncmQtZm9ybS1pdGVtLXNlbGVjdC1kcm9wZG93bicpO1xuICAgIH1cblxuICAgIC8vIOadoeS7tuexu+WQjVxuICAgIGlmICh0aGlzLnNob3dUb3BIaW50KSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2hhcy10b3AtaGludCcpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG5cbiAgZ2V0IGlzU2hvd01heENvdW50KCkge1xuICAgIC8vIGhhY2tcbiAgICByZXR1cm4gdGhpcy5uek1heE11bHRpcGxlQ291bnQgPCAxMDAwMDtcbiAgfVxuXG4gIC8vIOWTjeW6lOW8j++8muaYr+WQpuaYr+enu+WKqOerr1xuICBpc01vYmlsZSA9IGZhbHNlO1xuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgb25SZXNpemUoKSB7XG4gICAgdGhpcy51cGRhdGVJc01vYmlsZSgpO1xuICB9XG5cbiAgLy8g5riF56m65omA5pyJ6YCJ6aG5XG4gIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm56TW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlKSB7XG4gICAgICAgIHRoaXMubmF0aXZlVmFsdWUgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5kcmF3ZXJTZWxlY3RWYWx1ZSA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZHJhd2VyU2VsZWN0VmFsdWUgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2w/LmVycm9ycykgcmV0dXJuICcnO1xuICAgIGNvbnN0IGZpcnN0RXJyb3IgPSBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2w/LmVycm9ycyB8fCB7fSlbMF07XG5cbiAgICBjb25zdCBtc2cgPSB0aGlzLmVycm9yTWVzc2FnZXNbZmlyc3RFcnJvcl07XG5cbiAgICBzd2l0Y2ggKGZpcnN0RXJyb3IpIHtcbiAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtc2cgfHxcbiAgICAgICAgICBgJHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ3BsZWFzZV9zZWxlY3QnLFxuICAgICAgICAgICl9JHt0aGlzLmxhYmVsLnRvTG93ZXJDYXNlKCl9YFxuICAgICAgICApO1xuICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0aGlzLmNvbnRyb2w/LmVycm9yc1snY3VzdG9tJ10gfHxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd2YWxpZGF0aW9uX2ZhaWxlZCcpXG4gICAgICAgICk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5lcnJvck1lc3NhZ2VzW2ZpcnN0RXJyb3JdKSB8fFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3ZhbGlkYXRpb25fZmFpbGVkJylcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMuY29udHJvbD8uaW52YWxpZCAmJiAodGhpcy5jb250cm9sPy50b3VjaGVkIHx8IHRoaXMuY29udHJvbD8uZGlydHkpXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy51cGRhdGVJc01vYmlsZSgpO1xuICAgIGNvbnN0IG1xID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDk5N3B4KScpO1xuICAgIGlmIChtcS5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICBtcS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB0aGlzLnVwZGF0ZUlzTW9iaWxlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtcS5hZGRMaXN0ZW5lcigoKSA9PiB0aGlzLnVwZGF0ZUlzTW9iaWxlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSXNNb2JpbGUoKSB7XG4gICAgdGhpcy5pc01vYmlsZSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiA5OTdweCknKS5tYXRjaGVzO1xuICB9XG5cbiAgb3BlbkRyYXdlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuXG4gICAgaWYgKCF0aGlzLmlzTW9iaWxlICYmIHRoaXMuYnVzaW5lc3NMb2NhdGlvbiAmJiB0aGlzLm56TW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgdGhpcy5tb2RhbE9wZW4gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyYXdlck9wZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuZHJhd2VyU2VsZWN0VmFsdWUgPSB0aGlzLm5hdGl2ZVZhbHVlO1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICB9XG5cbiAgZ2V0RHJhd2VyU2VsZWN0VmFsdWVMZW4oKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kcmF3ZXJTZWxlY3RWYWx1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYXdlclNlbGVjdFZhbHVlPy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlRHJhd2VyKCkge1xuICAgIHRoaXMuZHJhd2VyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICB9XG5cbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLm1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICB9XG5cbiAgLy8g6I635Y+W5oq95bGJ5Lit5bey6YCJ5Lit55qE5pWw6YePXG4gIGdldCBkcmF3ZXJTZWxlY3RlZENvdW50KCk6IG51bWJlciB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kcmF3ZXJTZWxlY3RWYWx1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYXdlclNlbGVjdFZhbHVlLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZHJhd2VyU2VsZWN0VmFsdWUgPyAxIDogMDtcbiAgfVxuXG4gIC8vIOajgOafpemAiemhueaYr+WQpuW6lOivpeiiq+emgeeUqFxuICBnZXRPcHRpb25EaXNhYmxlZChvcHRpb246IElTZWxlY3RPcHRpb24pOiBib29sZWFuIHtcbiAgICAvLyDlpoLmnpzpgInpobnmnKzouqvooqvnpoHnlKjvvIznm7TmjqXov5Tlm550cnVlXG4gICAgaWYgKG9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5b2T5YmN5LiN5piv5aSa6YCJ5qih5byP77yM6L+U5Zue6YCJ6aG555qEZGlzYWJsZWTnirbmgIFcbiAgICBpZiAodGhpcy5uek1vZGUgIT09ICdtdWx0aXBsZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyDlnKjnp7vliqjnq6/mir3lsYnkuK3vvIzmo4Dmn6XmmK/lkKbovr7liLDmnIDlpKfpgInmi6nmlbDph49cbiAgICBpZiAoXG4gICAgICAodGhpcy5pc01vYmlsZSAmJiB0aGlzLmJ1c2luZXNzTG9jYXRpb24gJiYgdGhpcy5kcmF3ZXJPcGVuKSB8fFxuICAgICAgKCF0aGlzLmlzTW9iaWxlICYmIHRoaXMuYnVzaW5lc3NMb2NhdGlvbiAmJiB0aGlzLm1vZGFsT3BlbilcbiAgICApIHtcbiAgICAgIC8vIOWmguaenOW3sue7j+i+vuWIsOacgOWkp+mAieaLqeaVsOmHj++8jOW5tuS4lOW9k+WJjemAiemhueayoeacieiiq+mAieS4re+8jOWImeemgeeUqFxuICAgICAgaWYgKHRoaXMuZHJhd2VyU2VsZWN0ZWRDb3VudCA+PSB0aGlzLm56TWF4TXVsdGlwbGVDb3VudCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNWYWx1ZVNlbGVjdGVkKG9wdGlvbi52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8g5L+u5pS5IG9uQ2hlY2tib3hDaGFuZ2Ug5pa55rOV77yM5re75Yqg5pWw6YeP6ZmQ5Yi2XG4gIG9uQ2hlY2tib3hDaGFuZ2Uoc2VsZWN0ZWRWYWx1ZXM6IGFueVtdKTogdm9pZCB7XG4gICAgLy8g5qOA5p+l5piv5ZCm6LaF6L+H5pyA5aSn6YCJ5oup5pWw6YePXG4gICAgaWYgKFxuICAgICAgdGhpcy5uek1vZGUgPT09ICdtdWx0aXBsZScgJiZcbiAgICAgIHNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IHRoaXMubnpNYXhNdWx0aXBsZUNvdW50XG4gICAgKSB7XG4gICAgICAvLyDlpoLmnpzotoXov4fmnIDlpKfmlbDph4/vvIzlj6rkv53nlZnliY0gbnpNYXhNdWx0aXBsZUNvdW50IOS4qlxuICAgICAgc2VsZWN0ZWRWYWx1ZXMgPSBzZWxlY3RlZFZhbHVlcy5zbGljZSgwLCB0aGlzLm56TWF4TXVsdGlwbGVDb3VudCk7XG4gICAgfVxuXG4gICAgbGV0IG5ld0RyYXdlclZhbHVlOiBhbnlbXTtcblxuICAgIGlmICh0aGlzLnNlYXJjaFRlcm0pIHtcbiAgICAgIC8vIOWcqOaQnOe0oueKtuaAgeS4i++8jOWQiOW5tuWOhuWPsumAieS4reWAvOWSjOW9k+WJjemAieS4reWAvFxuICAgICAgY29uc3QgY3VycmVudERyYXdlclZhbHVlID0gQXJyYXkuaXNBcnJheSh0aGlzLmRyYXdlclNlbGVjdFZhbHVlKVxuICAgICAgICA/IHRoaXMuZHJhd2VyU2VsZWN0VmFsdWVcbiAgICAgICAgOiBbXTtcbiAgICAgIC8vIOaJvuWHuuiiq+WPlua2iOWLvumAieeahOWAvFxuICAgICAgY29uc3QgcHJldmlvdXNGaWx0ZXJlZFZhbHVlcyA9IHRoaXMuZmlsdGVyZWRPcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdCkgPT4gb3B0LnZhbHVlKVxuICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gY3VycmVudERyYXdlclZhbHVlLmluY2x1ZGVzKHZhbHVlKSk7XG5cbiAgICAgIGNvbnN0IGRlc2VsZWN0ZWRWYWx1ZXMgPSBwcmV2aW91c0ZpbHRlcmVkVmFsdWVzLmZpbHRlcihcbiAgICAgICAgKHZhbHVlKSA9PiAhc2VsZWN0ZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpLFxuICAgICAgKTtcblxuICAgICAgLy8g5LuO5b2T5YmN5oq95bGJ5YC85Lit56e76Zmk6KKr5Y+W5raI5Yu+6YCJ55qE5YC8XG4gICAgICBjb25zdCByZW1haW5pbmdWYWx1ZXMgPSBjdXJyZW50RHJhd2VyVmFsdWUuZmlsdGVyKFxuICAgICAgICAodmFsdWUpID0+ICFkZXNlbGVjdGVkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIOWQiOW5tuWJqeS9meWAvOWSjOW9k+WJjemAieS4reWAvO+8iOWOu+mHje+8iVxuICAgICAgbmV3RHJhd2VyVmFsdWUgPSBbLi4ubmV3IFNldChbLi4ucmVtYWluaW5nVmFsdWVzLCAuLi5zZWxlY3RlZFZhbHVlc10pXTtcblxuICAgICAgLy8g5YaN5qyh5qOA5p+l5piv5ZCm6LaF6L+H5pyA5aSn5pWw6YePXG4gICAgICBpZiAobmV3RHJhd2VyVmFsdWUubGVuZ3RoID4gdGhpcy5uek1heE11bHRpcGxlQ291bnQpIHtcbiAgICAgICAgbmV3RHJhd2VyVmFsdWUgPSBuZXdEcmF3ZXJWYWx1ZS5zbGljZSgwLCB0aGlzLm56TWF4TXVsdGlwbGVDb3VudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOmdnuaQnOe0oueKtuaAgeS4i++8jOebtOaOpeS9v+eUqOW9k+WJjemAieS4reWAvO+8jOS9huehruS/neS4jei2hei/h+acgOWkp+aVsOmHj1xuICAgICAgbmV3RHJhd2VyVmFsdWUgPVxuICAgICAgICBzZWxlY3RlZFZhbHVlcy5sZW5ndGggPiB0aGlzLm56TWF4TXVsdGlwbGVDb3VudFxuICAgICAgICAgID8gc2VsZWN0ZWRWYWx1ZXMuc2xpY2UoMCwgdGhpcy5uek1heE11bHRpcGxlQ291bnQpXG4gICAgICAgICAgOiBzZWxlY3RlZFZhbHVlcztcbiAgICB9XG5cbiAgICB0aGlzLmRyYXdlclNlbGVjdFZhbHVlID0gbmV3RHJhd2VyVmFsdWU7XG4gIH1cblxuICAvLyDkv67mlLnlpJrpgInnp7vliqjnq6/kuIvkuIDmraXnmoTmlrnms5VcbiAgbXVsdFNlbGVjdE1vYmlsZU5leHQoKTogdm9pZCB7XG4gICAgLy8g56Gu5L+d6YCJ5oup5pWw6YeP5LiN6LaF6L+H5pyA5aSn6ZmQ5Yi2XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLmRyYXdlclNlbGVjdFZhbHVlKSAmJlxuICAgICAgdGhpcy5kcmF3ZXJTZWxlY3RWYWx1ZS5sZW5ndGggPiB0aGlzLm56TWF4TXVsdGlwbGVDb3VudFxuICAgICkge1xuICAgICAgLy8g5aaC5p6c6LaF6L+H5pyA5aSn5pWw6YeP77yM5oiq5Y+W5YmNbuS4qlxuICAgICAgdGhpcy5kcmF3ZXJTZWxlY3RWYWx1ZSA9IHRoaXMuZHJhd2VyU2VsZWN0VmFsdWUuc2xpY2UoXG4gICAgICAgIDAsXG4gICAgICAgIHRoaXMubnpNYXhNdWx0aXBsZUNvdW50LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKHRoaXMuZHJhd2VyU2VsZWN0VmFsdWUpO1xuICAgIHRoaXMuY2xvc2VEcmF3ZXIoKTtcbiAgICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgfVxuXG4gIGdldERpc2FibGVOZXh0KCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZHJhd2VyU2VsZWN0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmF3ZXJTZWxlY3RWYWx1ZT8ubGVuZ3RoID4gdGhpcy5uek1heE11bHRpcGxlQ291bnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBkb01vYmlsZVNlYXJjaCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHQ6IGFueSkgPT5cbiAgICAgIG9wdC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUudG9Mb3dlckNhc2UoKSksXG4gICAgKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGlzVmFsdWVTZWxlY3RlZChvcHRpb25WYWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubnpNb2RlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRyYXdlclNlbGVjdFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcmF3ZXJTZWxlY3RWYWx1ZS5pbmNsdWRlcyhvcHRpb25WYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYXdlclNlbGVjdFZhbHVlID09PSBvcHRpb25WYWx1ZTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICB0aGlzLmNvbnRyb2wgPSBjb250cm9sO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBJU2VsZWN0T3B0aW9uIHwgSVNlbGVjdE9wdGlvbltdKTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdmFsdWUubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMubmF0aXZlVmFsdWUgPSB2YWx1ZT8udmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIGhhbmRsZVZhbHVlQ2hhbmdlKFxuICAgIHZhbHVlOiBJU2VsZWN0T3B0aW9uWyd2YWx1ZSddIHwgSVNlbGVjdE9wdGlvblsndmFsdWUnXVtdLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5vcHRpb25zLmZpbHRlcigoaXRlbSkgPT4gdmFsdWUuaW5jbHVkZXMoaXRlbS52YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5vcHRpb25zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIG9uU2Nyb2xsVG9Cb3R0b20oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZykge1xuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbUVtaXQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKHNlYXJjaFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlYXJjaElucHV0ID0gc2VhcmNoVmFsdWU7XG4gICAgaWYgKHRoaXMuaXNSZW1vdGVTZWFyY2gpIHtcbiAgICAgIHRoaXMuc2VhcmNoQ2hhbmdlLmVtaXQoc2VhcmNoVmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxvd2VyID0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuX3Jhd09wdGlvbnMuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgaXRlbS5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyKSxcbiAgICApO1xuICB9XG5cbiAgaGFuZGxlT3BlbkNoYW5nZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNPcGVuID0gdmFsdWU7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8g562J5b6F5LiL5LiA5Liq5Y+Y5pu05qOA5rWL5ZGo5pyf77yM56Gu5L+d5omA5pyJ5qC35byP5ZKM57G75bey5bqU55SoXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzQ29tcG9uZW50UmVhZHkgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSwgMCk7XG4gIH1cbn1cbiIsIjwhLS0gcmQtc2VsZWN0LmNvbXBvbmVudC5odG1sIC0tPlxuPGRpdlxuICBbY2xhc3MucmQtc2VsZWN0LXJlYWR5XT1cImlzQ29tcG9uZW50UmVhZHlcIlxuICBbY2xhc3MucmQtc2VhcmNoLXdpZHRoLWF1dG9dPVwiaXNTZWFyY2hXaWR0aEF1dG9cIlxuICBjbGFzcz1cInJkLXNlbGVjdC1jb250YWluZXJcIlxuPlxuICA8YXBwLXJkLWZvcm0taXRlbVxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2ZvY3VzXT1cIiEhc2VhcmNoSW5wdXQgfHwgaXNGb2N1cyB8fCBpc09wZW5cIlxuICAgIFt0eXBlXT1cIidzZWxlY3QnXCJcbiAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgIFt2YWx1ZV09XCJuYXRpdmVWYWx1ZVwiXG4gICAgW2Vycm9yTWVzc2FnZV09XCJzaG93RXJyb3IgJiYgaXNTaG93RXJyb3JUaXAgPyBjdXJyZW50RXJyb3JNZXNzYWdlIDogJydcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdyZC1mb3JtLWl0ZW0tcGhvbmUnOiAhbGFiZWwsXG4gICAgfVwiXG4gICAgKGNsaWNrKT1cIm9wZW5EcmF3ZXIoKVwiXG4gID5cbiAgICA8bnotc2VsZWN0XG4gICAgICBjbGFzcz1cInJkLWZvcm0taXRlbS1zZWxlY3RcIlxuICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAncG9pbnRlci1ldmVudHMnOlxuICAgICAgICAgIGJ1c2luZXNzTG9jYXRpb24gJiYgbnpNb2RlID09PSAnbXVsdGlwbGUnID8gJ25vbmUnIDogJycsXG4gICAgICB9XCJcbiAgICAgIG56Qm9yZGVybGVzc1xuICAgICAgW256TW9kZV09XCJuek1vZGVcIlxuICAgICAgW256U2hvd0Fycm93XT1cImZhbHNlXCJcbiAgICAgIFsobmdNb2RlbCldPVwibmF0aXZlVmFsdWVcIlxuICAgICAgW256TWF4TXVsdGlwbGVDb3VudF09XCJuek1heE11bHRpcGxlQ291bnQgPyBuek1heE11bHRpcGxlQ291bnQgOiBudWxsXCJcbiAgICAgIFtuelBsYWNlSG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFtuekN1c3RvbVRlbXBsYXRlXT1cIlxuICAgICAgICBjdXN0b21UcGxcbiAgICAgICAgICA/IGN1c3RvbVRwbFxuICAgICAgICAgIDogaXNDdXJyZW5jeVxuICAgICAgICAgICAgPyBjdXJyZW5jeVNlbGVjdGVkVHBsXG4gICAgICAgICAgICA6IGRlZmF1bHRTZWxlY3RlZFRwbFxuICAgICAgXCJcbiAgICAgIChuelNjcm9sbFRvQm90dG9tKT1cIm9uU2Nyb2xsVG9Cb3R0b20oKVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAobnpGb2N1cyk9XCJpc0ZvY3VzID0gdHJ1ZVwiXG4gICAgICAobnpCbHVyKT1cImlzRm9jdXMgPSBmYWxzZVwiXG4gICAgICBbbnpEcm9wZG93bkNsYXNzTmFtZV09XCJkcm9wZG93bkNsYXNzTmFtZXNcIlxuICAgICAgW256T3B0aW9uT3ZlcmZsb3dTaXplXT1cIjVcIlxuICAgICAgW256T3B0aW9uSGVpZ2h0UHhdPVwib3B0aW9uSGVpZ2h0UHggfHwgNDBcIlxuICAgICAgW256U3VmZml4SWNvbl09XCJjdXN0b21JY29uXCJcbiAgICAgIFtuelJlbW92ZUljb25dPVwicmVtb3ZlSWNvblwiXG4gICAgICBbbnpTaG93U2VhcmNoXT1cIlxuICAgICAgICBuek1vZGUgPT09ICdtdWx0aXBsZScgJiYgYnVzaW5lc3NMb2NhdGlvbiA/IGZhbHNlIDogaXNTaG93U2VhcmNoXG4gICAgICBcIlxuICAgICAgKG56T25TZWFyY2gpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgIChuek9wZW5DaGFuZ2UpPVwiaGFuZGxlT3BlbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIFtuekRyb3Bkb3duUmVuZGVyXT1cIlxuICAgICAgICBzaG93U2VsZWN0ZWRDb3VudCB8fCBzaG93Q2xlYXJBbGwgPyBjdXN0b21Ecm9wZG93bkZvb3RlciA6IG51bGxcbiAgICAgIFwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdyZC1zZWxlY3QtZGlzYWJsZWQtb3Blbic6IGlzTW9iaWxlICYmIGJ1c2luZXNzTG9jYXRpb24sXG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8bnotb3B0aW9uXG4gICAgICAgICpuZ0lmPVwic2hvd1RvcEhpbnQgJiYgaXNTaG93TWF4Q291bnRcIlxuICAgICAgICBuekRpc2FibGVkXG4gICAgICAgIG56Q3VzdG9tQ29udGVudFxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9wLWhpbnQtb3B0aW9uXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0MTQtNDAwIGMtdGV4dC1wcmltYXJ5XCI+e3sgdG9wSGludFRleHQgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uei1vcHRpb24+XG5cbiAgICAgIDxuei1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICBbbnpWYWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICBbbnpMYWJlbF09XCJvcHRpb24ubmFtZSB8fCAnJ1wiXG4gICAgICAgIFtuekRpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZCB8fCBmYWxzZVwiXG4gICAgICAgIFtuekN1c3RvbUNvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25UcGwgfHwgaXNDdXJyZW5jeVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIGlzQ3VycmVuY3kgPyBjdXJyZW5jeU9wdGlvblRwbCA6IG9wdGlvblRwbDtcbiAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG9wdGlvbiB9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKG9wdGlvblRwbCB8fCBpc0N1cnJlbmN5KVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidDE0LTQwMCBjLXRleHQtcHJpbWFyeVwiPnt7IG9wdGlvbj8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L256LW9wdGlvbj5cblxuICAgICAgPG56LW9wdGlvbiAqbmdJZj1cImlzTG9hZGluZ1wiIG56RGlzYWJsZWQgbnpDdXN0b21Db250ZW50PlxuICAgICAgICA8bnotc3BpbiBzdHlsZT1cInBhZGRpbmc6IDE2cHggMFwiPjwvbnotc3Bpbj5cbiAgICAgIDwvbnotb3B0aW9uPlxuICAgIDwvbnotc2VsZWN0PlxuICA8L2FwcC1yZC1mb3JtLWl0ZW0+XG48L2Rpdj5cblxuPCEtLSDoh6rlrprkuYnkuIvmi4noj5zljZXlupXpg6ggLS0+XG48bmctdGVtcGxhdGUgI2N1c3RvbURyb3Bkb3duRm9vdGVyPlxuICA8ZGl2IGNsYXNzPVwic2VsZWN0LWZvb3Rlci1jb250YWluZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNlbGVjdC1mb290ZXItY29udGVudCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICA+XG4gICAgICA8ZGl2PlxuICAgICAgICA8IS0tIOmAieS4reiuoeaVsCAtLT5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93U2VsZWN0ZWRDb3VudFwiIGNsYXNzPVwidDE0LTQwMCBjLXRleHQtcHJpbWFyeVwiPlxuICAgICAgICAgIHt7IHNlbGVjdGVkTGFiZWwgfX1cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgaXNNb2JpbGUgPyBnZXREcmF3ZXJTZWxlY3RWYWx1ZUxlbigpIDogc2VsZWN0ZWRDb3VudFxuICAgICAgICAgIH19LzxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Nob3dNYXhDb3VudFwiXG4gICAgICAgICAgICA+L3t7IG56TWF4TXVsdGlwbGVDb3VudCB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSDmuIXnqbrmjInpkq4gLS0+XG4gICAgICAgIDxhXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHNob3dDbGVhckFsbCAmJlxuICAgICAgICAgICAgKGlzTW9iaWxlID8gZ2V0RHJhd2VyU2VsZWN0VmFsdWVMZW4oKSA6IHNlbGVjdGVkQ291bnQpID4gMFxuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJiMTQgbWwtMTZcIlxuICAgICAgICAgIChjbGljayk9XCJjbGVhckFsbCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY2xlYXJBbGxMYWJlbCB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdj5cbiAgICAgICAgPGFwcC1yZC1idXR0b25cbiAgICAgICAgICB0eXBlPVwicHJpbWFyeVwiXG4gICAgICAgICAgKm5nSWY9XCJpc01vYmlsZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImdldERpc2FibGVOZXh0KClcIlxuICAgICAgICAgIChjbGljayk9XCJtdWx0U2VsZWN0TW9iaWxlTmV4dCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IFwibmV4dFwiIHwgdHJhbnNsYXRlIH19PC9hcHAtcmQtYnV0dG9uXG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tTW9kYWxGb290ZXI+XG4gIDxkaXYgY2xhc3M9XCJzZWxlY3QtZm9vdGVyLWNvbnRhaW5lclwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic2VsZWN0LWZvb3Rlci1jb250ZW50IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgID5cbiAgICAgIDxkaXY+XG4gICAgICAgIDwhLS0g6YCJ5Lit6K6h5pWwIC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dTZWxlY3RlZENvdW50XCIgY2xhc3M9XCJ0MTQtNDAwIGMtdGV4dC1wcmltYXJ5XCI+XG4gICAgICAgICAge3sgc2VsZWN0ZWRMYWJlbCB9fVxuICAgICAgICAgIHt7IGdldERyYXdlclNlbGVjdFZhbHVlTGVuKClcbiAgICAgICAgICB9fTxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Nob3dNYXhDb3VudFwiXG4gICAgICAgICAgICA+L3t7IG56TWF4TXVsdGlwbGVDb3VudCB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSDmuIXnqbrmjInpkq4gLS0+XG4gICAgICAgIDxhXG4gICAgICAgICAgKm5nSWY9XCJzaG93Q2xlYXJBbGwgJiYgZ2V0RHJhd2VyU2VsZWN0VmFsdWVMZW4oKSA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiYjE0IG1sLTE2XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGwoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNsZWFyQWxsTGFiZWwgfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxhcHAtcmQtYnV0dG9uXG4gICAgICAgICAgdHlwZT1cInByaW1hcnlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JxdWlyZWQgPyBnZXREcmF3ZXJTZWxlY3RWYWx1ZUxlbigpID09PSAwIDogZmFsc2VcIlxuICAgICAgICAgIChjbGljayk9XCJtdWx0U2VsZWN0TW9iaWxlTmV4dCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IFwiZG9uZVwiIHwgdHJhbnNsYXRlIH19PC9hcHAtcmQtYnV0dG9uXG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0g5YW25LuW5qih5p2/5L+d5oyB5LiN5Y+YIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0U2VsZWN0ZWRUcGwgbGV0LXNlbGVjdGVkPlxuICB7eyBzZWxlY3RlZD8ubnpMYWJlbCB9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjdXJyZW5jeU9wdGlvblRwbCBsZXQtb3B0aW9uPlxuICA8ZGl2IGNsYXNzPVwicmQtZm9ybS1pdGVtLW9wdGlvbi1jb250ZW50XCI+XG4gICAgPGltZyBbc3JjXT1cIm9wdGlvbi5pY29uVXJsXCIgY2xhc3M9XCJyZC10b2tlbi1pY29uXCIgYWx0PVwiaWNvblwiIC8+XG4gICAgPHNwYW4+e3sgb3B0aW9uLm5hbWUgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjdXJyZW5jeVNlbGVjdGVkVHBsIGxldC1zZWxlY3RlZCBsZXQtZXh0cmE+XG4gIDxkaXYgY2xhc3M9XCJyZC1mb3JtLWl0ZW0tb3B0aW9uLWNvbnRlbnRcIj5cbiAgICA8aW1nXG4gICAgICBbc3JjXT1cImN1cnJlbmN5VXJsTWFwPy5bc2VsZWN0ZWQubnpWYWx1ZV1cIlxuICAgICAgY2xhc3M9XCJyZC10b2tlbi1pY29uXCJcbiAgICAgIGFsdD1cImljb25cIlxuICAgIC8+XG4gICAgPHNwYW4+e3sgc2VsZWN0ZWQubnpMYWJlbCB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3JlbW92ZUljb24+XG4gIDxzdmdcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICB3aWR0aD1cIjEyXCJcbiAgICBoZWlnaHQ9XCIxMlwiXG4gICAgdmlld0JveD1cIjAgMCAxMiAxMlwiXG4gICAgZmlsbD1cIm5vbmVcIlxuICA+XG4gICAgPHBhdGhcbiAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICBkPVwiTTIuMzk2NDUgMi4zOTY0NUMyLjU5MTcxIDIuMjAxMTggMi45MDgyOSAyLjIwMTE4IDMuMTAzNTUgMi4zOTY0NUw2IDUuMjkyODlMOC44OTY0NSAyLjM5NjQ1QzkuMDkxNzEgMi4yMDExOCA5LjQwODI5IDIuMjAxMTggOS42MDM1NSAyLjM5NjQ1QzkuNzk4ODIgMi41OTE3MSA5Ljc5ODgyIDIuOTA4MjkgOS42MDM1NSAzLjEwMzU1TDYuNzA3MTEgNkw5LjYwMzU1IDguODk2NDVDOS43OTg4MiA5LjA5MTcxIDkuNzk4ODIgOS40MDgyOSA5LjYwMzU1IDkuNjAzNTVDOS40MDgyOSA5Ljc5ODgyIDkuMDkxNzEgOS43OTg4MiA4Ljg5NjQ1IDkuNjAzNTVMNiA2LjcwNzExTDMuMTAzNTUgOS42MDM1NUMyLjkwODI5IDkuNzk4ODIgMi41OTE3MSA5Ljc5ODgyIDIuMzk2NDUgOS42MDM1NUMyLjIwMTE4IDkuNDA4MjkgMi4yMDExOCA5LjA5MTcxIDIuMzk2NDUgOC44OTY0NUw1LjI5Mjg5IDZMMi4zOTY0NSAzLjEwMzU1QzIuMjAxMTggMi45MDgyOSAyLjIwMTE4IDIuNTkxNzEgMi4zOTY0NSAyLjM5NjQ1WlwiXG4gICAgICBmaWxsPVwidmFyKC0tcmQtY29weS1wcmltYXJ5KVwiXG4gICAgLz5cbiAgPC9zdmc+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2N1c3RvbUljb24+XG4gIDxzdmdcbiAgICB3aWR0aD1cIjE2XCJcbiAgICBoZWlnaHQ9XCIxNlwiXG4gICAgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgZmlsbD1cIm5vbmVcIlxuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICA+XG4gICAgPHBhdGhcbiAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICBkPVwiTTIuNjAxMzYgNC45MDc3N0MyLjgzNjM5IDQuNjg3NDMgMy4yMDU1NSA0LjY5OTM0IDMuNDI1ODkgNC45MzQzN0w4LjAwMDMzIDkuODEzNzdMMTIuNTc0OCA0LjkzNDM3QzEyLjc5NTEgNC42OTkzNCAxMy4xNjQzIDQuNjg3NDMgMTMuMzk5MyA0LjkwNzc3QzEzLjYzNDMgNS4xMjgxMiAxMy42NDYyIDUuNDk3MjcgMTMuNDI1OSA1LjczMjNMOC40MjU4OSAxMS4wNjU2QzguMzE1NjEgMTEuMTgzMyA4LjE2MTU3IDExLjI1IDguMDAwMzMgMTEuMjVDNy44MzkwOSAxMS4yNSA3LjY4NTA0IDExLjE4MzMgNy41NzQ3NiAxMS4wNjU2TDIuNTc0NzYgNS43MzIzQzIuMzU0NDIgNS40OTcyNyAyLjM2NjMzIDUuMTI4MTEgMi42MDEzNiA0LjkwNzc3WlwiXG4gICAgICBmaWxsPVwidmFyKC0tcmQtY29weS1wcmltYXJ5KVwiXG4gICAgLz5cbiAgPC9zdmc+XG48L25nLXRlbXBsYXRlPlxuXG48bnotZHJhd2VyXG4gIFtuelZpc2libGVdPVwiZHJhd2VyT3BlbiAmJiBpc01vYmlsZSAmJiBidXNpbmVzc0xvY2F0aW9uXCJcbiAgW256UGxhY2VtZW50XT1cIidib3R0b20nXCJcbiAgW256SGVpZ2h0XT1cIic3MHZoJ1wiXG4gIFtuelRpdGxlXT1cIicnXCJcbiAgW256Q2xvc2FibGVdPVwiZmFsc2VcIlxuICBbbnpGb290ZXJdPVwiY3VzdG9tRHJvcGRvd25Gb290ZXJcIlxuICBueldyYXBDbGFzc05hbWU9XCJzZWxlY3QtZHJhd2VyXCJcbiAgKG56T25DbG9zZSk9XCJjbG9zZURyYXdlcigpXCJcbj5cbiAgPGRpdiAqbnpEcmF3ZXJDb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtZHJhd2VyLWhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICAoYnVzaW5lc3NMb2NhdGlvbiA/IFwic2VsZWN0X25hdHVyZV9vZl9idXNpbmVzc1wiIDogXCIgXCIpIHwgdHJhbnNsYXRlXG4gICAgICAgICAgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1idG5cIiAoY2xpY2spPVwiY2xvc2VEcmF3ZXIoKVwiPlxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgd2lkdGg9XCIxNlwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTMuNDAwMzkgMy4zOTk5TDguMDAwMzkgNy45OTk5TTEyLjYwMDQgMTIuNTk5OUw4LjAwMDM5IDcuOTk5OU04LjAwMDM5IDcuOTk5OUwxMi42MDA0IDMuMzk5OUwzLjQwMDM5IDEyLjU5OTlcIlxuICAgICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS1yZC1jb3B5LXByaW1hcnkpXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zNlwiXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bnotaW5wdXQtZ3JvdXBcbiAgICAgICAgY2xhc3M9XCJjYXNjYWRlci1kcmF3ZXItc2VhcmNoXCJcbiAgICAgICAgW256UHJlZml4XT1cInByZWZpeEljb25TZWFyY2hcIlxuICAgICAgICBuekNsZWFyYWJsZVxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBuei1pbnB1dFxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VhcmNoJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJkb01vYmlsZVNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvbnotaW5wdXQtZ3JvdXA+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2FzY2FkZXItZHJhd2VyLWxpc3RcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc1Nob3dNYXhDb3VudFwiIGNsYXNzPVwibXktMTYgbWwtOFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInQxNC00MDAgYy10ZXh0LXByaW1hcnlcIj57eyB0b3BIaW50VGV4dCB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucz8ubGVuZ3RoXCI+XG4gICAgICAgIDxuei1jaGVja2JveC13cmFwcGVyXG4gICAgICAgICAgY2xhc3M9XCJxdWVzdGlvbi1jb250ZW50XCJcbiAgICAgICAgICBjbGFzcz1cInQxNC00MDAgYy10ZXh0LXByaW1hcnlcIlxuICAgICAgICAgIChuek9uQ2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zXCIgY2xhc3M9XCJtYi04XCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgbnotY2hlY2tib3hcbiAgICAgICAgICAgICAgW256VmFsdWVdPVwib3B0aW9uPy52YWx1ZVwiXG4gICAgICAgICAgICAgIFtuekRpc2FibGVkXT1cImdldE9wdGlvbkRpc2FibGVkKG9wdGlvbilcIlxuICAgICAgICAgICAgICBbbnpDaGVja2VkXT1cImlzVmFsdWVTZWxlY3RlZChvcHRpb24/LnZhbHVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidDE0LTQwMCBjLXRleHQtcHJpbWFyeVwiPnt7IG9wdGlvbj8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbnotY2hlY2tib3gtd3JhcHBlcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbnotZHJhd2VyPlxuXG48IS0tIE1vZGFsIGZvciBkZXNrdG9wIGJ1c2luZXNzIGxvY2F0aW9uIG11bHRpLXNlbGVjdCAtLT5cbjxuei1tb2RhbFxuICBbKG56VmlzaWJsZSldPVwibW9kYWxPcGVuXCJcbiAgW256VGl0bGVdPVwiJydcIlxuICBbbnpDbG9zYWJsZV09XCJmYWxzZVwiXG4gIFtuekZvb3Rlcl09XCJjdXN0b21Nb2RhbEZvb3RlclwiXG4gIG56V3JhcENsYXNzTmFtZT1cInNlbGVjdC1tb2RhbFwiXG4gIChuek9uQ2FuY2VsKT1cImNsb3NlTW9kYWwoKVwiXG4gIFtueldpZHRoXT1cIjYzMlwiXG4gIFtuekJvZHlTdHlsZV09XCJ7IGhlaWdodDogJzYwMHB4JyB9XCJcbiAgbnpDZW50ZXJlZFxuPlxuICA8ZGl2ICpuek1vZGFsQ29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LW1vZGFsLWhlYWRlclwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImhlYWRlci10aXRsZSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgKGJ1c2luZXNzTG9jYXRpb25UaXRsZVxuICAgICAgICAgICAgICA/IGJ1c2luZXNzTG9jYXRpb25UaXRsZVxuICAgICAgICAgICAgICA6IGJ1c2luZXNzTG9jYXRpb25cbiAgICAgICAgICAgICAgICA/IFwic2VsZWN0X25hdHVyZV9vZl9idXNpbmVzc1wiXG4gICAgICAgICAgICAgICAgOiBcIiBcIlxuICAgICAgICAgICAgKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtYnRuXCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiPlxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgd2lkdGg9XCIxNlwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTMuNDAwMzkgMy4zOTk5TDguMDAwMzkgNy45OTk5TTEyLjYwMDQgMTIuNTk5OUw4LjAwMDM5IDcuOTk5OU04LjAwMDM5IDcuOTk5OUwxMi42MDA0IDMuMzk5OUwzLjQwMDM5IDEyLjU5OTlcIlxuICAgICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS1yZC1jb3B5LXByaW1hcnkpXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zNlwiXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bnotaW5wdXQtZ3JvdXBcbiAgICAgICAgY2xhc3M9XCJjYXNjYWRlci1tb2RhbC1zZWFyY2hcIlxuICAgICAgICBbbnpQcmVmaXhdPVwicHJlZml4SWNvblNlYXJjaFwiXG4gICAgICAgIG56Q2xlYXJhYmxlXG4gICAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG56LWlucHV0XG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRlcm1cIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImRvTW9iaWxlU2VhcmNoKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgPC9uei1pbnB1dC1ncm91cD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjYXNjYWRlci1tb2RhbC1saXN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItMTZcIiAqbmdJZj1cInNob3dUb3BIaW50ICYmIGlzU2hvd01heENvdW50XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidDE0LTQwMCBjLXRleHQtcHJpbWFyeVwiPnt7IHRvcEhpbnRUZXh0IH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgPG56LWNoZWNrYm94LXdyYXBwZXJcbiAgICAgICAgICBjbGFzcz1cInF1ZXN0aW9uLWNvbnRlbnRcIlxuICAgICAgICAgIGNsYXNzPVwidDE0LTQwMCBjLXRleHQtcHJpbWFyeVwiXG4gICAgICAgICAgKG56T25DaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIiBjbGFzcz1cIm1iLThcIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBuei1jaGVja2JveFxuICAgICAgICAgICAgICBbbnpWYWx1ZV09XCJvcHRpb24/LnZhbHVlXCJcbiAgICAgICAgICAgICAgW256RGlzYWJsZWRdPVwiZ2V0T3B0aW9uRGlzYWJsZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgIFtuekNoZWNrZWRdPVwiaXNWYWx1ZVNlbGVjdGVkKG9wdGlvbj8udmFsdWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0MTQtNDAwIGMtdGV4dC1wcmltYXJ5XCI+e3sgb3B0aW9uPy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uei1jaGVja2JveC13cmFwcGVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uei1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNwcmVmaXhJY29uU2VhcmNoPlxuICA8c3ZnXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgd2lkdGg9XCIxNlwiXG4gICAgaGVpZ2h0PVwiMTZcIlxuICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTE0LjQ5NTEgMTMuNjk0OEwxMS4zOTYyIDEwLjU5NTlDMTIuMzE3NSA5LjQ2OTAyIDEyLjc3MDQgOC4wMzEyMiAxMi42NjEzIDYuNTc5ODNDMTIuNTUyMiA1LjEyODQ0IDExLjg4OTQgMy43NzQ1MSAxMC44MSAyLjc5ODA3QzkuNzMwNjYgMS44MjE2NCA4LjMxNzMgMS4yOTc0MSA2Ljg2MjI3IDEuMzMzODFDNS40MDcyMyAxLjM3MDIxIDQuMDIxODUgMS45NjQ0NSAyLjk5MjY2IDIuOTkzNjRDMS45NjM0OCA0LjAyMjgyIDEuMzY5MjMgNS40MDgyIDEuMzMyODMgNi44NjMyM0MxLjI5NjQzIDguMzE4MjYgMS44MjA2NiA5LjczMTYyIDIuNzk3MSAxMC44MTFDMy43NzM1NCAxMS44OTAzIDUuMTI3NDcgMTIuNTUzMSA2LjU3ODg3IDEyLjY2MjJDOC4wMzAyNiAxMi43NzEzIDkuNDY4MDcgMTIuMzE4NCAxMC41OTQ5IDExLjM5NzJMMTMuNjkzOCAxNC41MDMyQzEzLjgwMjcgMTQuNjA3MyAxMy45NDc0IDE0LjY2NTYgMTQuMDk4IDE0LjY2NjNDMTQuMjEwNSAxNC42NjYxIDE0LjMyMDQgMTQuNjMyNSAxNC40MTM4IDE0LjU2OTdDMTQuNTA3MSAxNC41MDY5IDE0LjU3OTYgMTQuNDE3OCAxNC42MjIyIDE0LjMxMzZDMTQuNjY0OCAxNC4yMDk1IDE0LjY3NTQgMTQuMDk1MSAxNC42NTI4IDEzLjk4NDlDMTQuNjMwMiAxMy44NzQ3IDE0LjU3NTMgMTMuNzczNyAxNC40OTUxIDEzLjY5NDhaTTcuMDA2NjcgMTEuNTQ2MUM2LjEwOTA1IDExLjU0NjEgNS4yMzE1OCAxMS4yNzk5IDQuNDg1MjMgMTAuNzgxMkMzLjczODg5IDEwLjI4MjUgMy4xNTcxOCA5LjU3MzcyIDIuODEzNjcgOC43NDQ0M0MyLjQ3MDE3IDcuOTE1MTMgMi4zODAyOSA3LjAwMjYgMi41NTU0MSA2LjEyMjIzQzIuNzMwNTMgNS4yNDE4NSAzLjE2Mjc3IDQuNDMzMTcgMy43OTc0OSAzLjc5ODQ2QzQuNDMyMjEgMy4xNjM3NSA1LjI0MDg4IDIuNzMxNSA2LjEyMTI2IDIuNTU2MzhDNy4wMDE2NCAyLjM4MTI3IDcuOTE0MTcgMi40NzExNCA4Ljc0MzQ3IDIuODE0NjVDOS41NzI3NyAzLjE1ODE1IDEwLjI4MTYgMy43Mzk4NiAxMC43ODAzIDQuNDg2MkMxMS4yNzkgNS4yMzI1NSAxMS41NDUxIDYuMTEwMDEgMTEuNTQ1MSA3LjAwNzYzQzExLjU0MzMgOC4yMTA3MyAxMS4wNjQ1IDkuMzY0MDIgMTAuMjEzOCAxMC4yMTQ3QzkuMzYzMDYgMTEuMDY1NSA4LjIwOTc3IDExLjU0NDIgNy4wMDY2NyAxMS41NDYxWlwiXG4gICAgICBmaWxsPVwidmFyKC0tcmQtY29weS1wcmltYXJ5KVwiXG4gICAgLz5cbiAgPC9zdmc+XG48L25nLXRlbXBsYXRlPlxuIl19