@tolle_/tolle-ui 18.2.13 → 18.2.15
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, Input, forwardRef, inject, ViewChild, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';
|
|
1
|
+
import { Component, Input, forwardRef, inject, ViewChild, ChangeDetectorRef, Output, EventEmitter, } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
4
4
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
@@ -26,6 +26,7 @@ export class CountrySelectorComponent {
|
|
|
26
26
|
showName = true;
|
|
27
27
|
onSelect = new EventEmitter();
|
|
28
28
|
popover;
|
|
29
|
+
searchInput;
|
|
29
30
|
countryCodesService = inject(CountryCodesService);
|
|
30
31
|
sanitizer = inject(DomSanitizer);
|
|
31
32
|
cdr = inject(ChangeDetectorRef);
|
|
@@ -52,20 +53,20 @@ export class CountrySelectorComponent {
|
|
|
52
53
|
'focus:ring-4',
|
|
53
54
|
'focus:ring-ring/30',
|
|
54
55
|
'focus:ring-offset-0',
|
|
55
|
-
'focus:border-primary/80'
|
|
56
|
+
'focus:border-primary/80',
|
|
56
57
|
], !(this.readonly || this.disabled) && 'hover:border-accent', this.error && [
|
|
57
58
|
'border-destructive',
|
|
58
59
|
!(this.readonly || this.disabled) && [
|
|
59
60
|
'focus:border-destructive/80',
|
|
60
|
-
'focus:ring-destructive/30'
|
|
61
|
-
]
|
|
61
|
+
'focus:ring-destructive/30',
|
|
62
|
+
],
|
|
62
63
|
], this.disabled && 'cursor-not-allowed opacity-50 border-opacity-50', this.readonly && 'cursor-default border-dashed', this.class);
|
|
63
64
|
}
|
|
64
65
|
get computedLabelClass() {
|
|
65
|
-
return cn(
|
|
66
|
+
return cn('text-sm font-medium text-foreground leading-none transition-opacity duration-200', this.disabled && 'opacity-50');
|
|
66
67
|
}
|
|
67
68
|
get iconClass() {
|
|
68
|
-
return cn('ri-arrow-down-s-line text-muted-foreground ml-2 transition-transform duration-200', this.popover?.isOpen ? 'rotate-180' : '',
|
|
69
|
+
return cn('ri-arrow-down-s-line text-muted-foreground ml-2 transition-transform duration-200', this.popover?.isOpen ? 'rotate-180' : '', this.size === 'xs' || this.size === 'sm' ? 'text-[14px]' : 'text-[18px]', (this.disabled || this.readonly) && 'opacity-30');
|
|
69
70
|
}
|
|
70
71
|
getItemClass(country) {
|
|
71
72
|
const isSelected = this.selectedCountry?.isoAlpha2 === country.isoAlpha2;
|
|
@@ -89,11 +90,16 @@ export class CountrySelectorComponent {
|
|
|
89
90
|
}
|
|
90
91
|
getReturnValue(country) {
|
|
91
92
|
switch (this.returnValue) {
|
|
92
|
-
case 'object':
|
|
93
|
-
|
|
94
|
-
case '
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
case 'object':
|
|
94
|
+
return country;
|
|
95
|
+
case 'isoAlpha2':
|
|
96
|
+
return country.isoAlpha2;
|
|
97
|
+
case 'dialCode':
|
|
98
|
+
return country.dialCode;
|
|
99
|
+
case 'name':
|
|
100
|
+
return country.name;
|
|
101
|
+
default:
|
|
102
|
+
return country.isoAlpha2;
|
|
97
103
|
}
|
|
98
104
|
}
|
|
99
105
|
onFocus() {
|
|
@@ -103,6 +109,11 @@ export class CountrySelectorComponent {
|
|
|
103
109
|
this.isFocused = false;
|
|
104
110
|
this.onTouched();
|
|
105
111
|
}
|
|
112
|
+
onPopoverOpen() {
|
|
113
|
+
setTimeout(() => {
|
|
114
|
+
this.searchInput?.nativeElement?.focus();
|
|
115
|
+
}, 0);
|
|
116
|
+
}
|
|
106
117
|
onPopoverClose() {
|
|
107
118
|
this.searchQuery = '';
|
|
108
119
|
this.filterCountries('');
|
|
@@ -128,26 +139,33 @@ export class CountrySelectorComponent {
|
|
|
128
139
|
}
|
|
129
140
|
this.cdr.markForCheck();
|
|
130
141
|
}
|
|
131
|
-
registerOnChange(fn) {
|
|
132
|
-
|
|
133
|
-
|
|
142
|
+
registerOnChange(fn) {
|
|
143
|
+
this.onChange = fn;
|
|
144
|
+
}
|
|
145
|
+
registerOnTouched(fn) {
|
|
146
|
+
this.onTouched = fn;
|
|
147
|
+
}
|
|
148
|
+
setDisabledState(isDisabled) {
|
|
149
|
+
this.disabled = isDisabled;
|
|
150
|
+
}
|
|
134
151
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CountrySelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
135
152
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CountrySelectorComponent, isStandalone: true, selector: "tolle-country-selector", inputs: { id: "id", label: "label", hint: "hint", errorMessage: "errorMessage", error: "error", hideHintOnFocus: "hideHintOnFocus", placeholder: "placeholder", class: "class", disabled: "disabled", readonly: "readonly", size: "size", defaultCountryCode: "defaultCountryCode", returnValue: "returnValue", showName: "showName" }, outputs: { onSelect: "onSelect" }, providers: [
|
|
136
153
|
{
|
|
137
154
|
provide: NG_VALUE_ACCESSOR,
|
|
138
155
|
useExisting: forwardRef(() => CountrySelectorComponent),
|
|
139
|
-
multi: true
|
|
140
|
-
}
|
|
141
|
-
], viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true }], ngImport: i0, template: `
|
|
142
|
-
<div class="flex flex-col gap-1.5
|
|
143
|
-
<label
|
|
144
|
-
*ngIf="label"
|
|
145
|
-
[for]="id"
|
|
146
|
-
[class]="computedLabelClass">
|
|
156
|
+
multi: true,
|
|
157
|
+
},
|
|
158
|
+
], viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: `
|
|
159
|
+
<div class="flex w-full flex-col gap-1.5">
|
|
160
|
+
<label *ngIf="label" [for]="id" [class]="computedLabelClass">
|
|
147
161
|
{{ label }}
|
|
148
162
|
</label>
|
|
149
163
|
|
|
150
|
-
<tolle-popover
|
|
164
|
+
<tolle-popover
|
|
165
|
+
#popover
|
|
166
|
+
[placement]="'bottom-start'"
|
|
167
|
+
(onOpen)="onPopoverOpen()"
|
|
168
|
+
(onClose)="onPopoverClose()">
|
|
151
169
|
<div trigger class="w-full">
|
|
152
170
|
<button
|
|
153
171
|
type="button"
|
|
@@ -157,19 +175,17 @@ export class CountrySelectorComponent {
|
|
|
157
175
|
(blur)="onBlur()"
|
|
158
176
|
(focus)="onFocus()"
|
|
159
177
|
[attr.aria-invalid]="error"
|
|
160
|
-
[attr.aria-describedby]="error && errorMessage ? id + '-error' : null"
|
|
161
|
-
>
|
|
178
|
+
[attr.aria-describedby]="error && errorMessage ? id + '-error' : null">
|
|
162
179
|
<div class="flex items-center gap-2 truncate">
|
|
163
180
|
<img
|
|
164
181
|
*ngIf="selectedCountry"
|
|
165
182
|
[src]="getFlagUrl(selectedCountry.flag)"
|
|
166
|
-
class="h-4 w-6 rounded-sm border border-border object-cover
|
|
167
|
-
[alt]="selectedCountry.name"
|
|
168
|
-
/>
|
|
183
|
+
class="h-4 w-6 flex-shrink-0 rounded-sm border border-border object-cover"
|
|
184
|
+
[alt]="selectedCountry.name" />
|
|
169
185
|
<span *ngIf="selectedCountry && showName" class="truncate font-medium">
|
|
170
186
|
{{ selectedCountry.name }}
|
|
171
187
|
</span>
|
|
172
|
-
<span *ngIf="!selectedCountry" class="text-muted-foreground
|
|
188
|
+
<span *ngIf="!selectedCountry" class="truncate text-muted-foreground">
|
|
173
189
|
{{ placeholder }}
|
|
174
190
|
</span>
|
|
175
191
|
</div>
|
|
@@ -177,16 +193,17 @@ export class CountrySelectorComponent {
|
|
|
177
193
|
</button>
|
|
178
194
|
</div>
|
|
179
195
|
|
|
180
|
-
<div
|
|
181
|
-
|
|
196
|
+
<div
|
|
197
|
+
class="flex min-w-[300px] max-w-[400px] flex-col overflow-hidden rounded-md border border-border bg-popover shadow-md"
|
|
198
|
+
(mousedown)="$event.stopPropagation()">
|
|
199
|
+
<div class="sticky top-0 z-10 border-b border-border bg-popover p-2 shadow-sm">
|
|
182
200
|
<tolle-input
|
|
183
201
|
size="sm"
|
|
184
202
|
placeholder="Search country..."
|
|
185
203
|
[(ngModel)]="searchQuery"
|
|
186
204
|
(ngModelChange)="filterCountries($event)"
|
|
187
205
|
class="w-full"
|
|
188
|
-
#searchInput
|
|
189
|
-
>
|
|
206
|
+
#searchInput>
|
|
190
207
|
<i prefix class="ri-search-line"></i>
|
|
191
208
|
</tolle-input>
|
|
192
209
|
</div>
|
|
@@ -195,20 +212,22 @@ export class CountrySelectorComponent {
|
|
|
195
212
|
<div
|
|
196
213
|
*ngFor="let country of shadowCountries"
|
|
197
214
|
(click)="selectCountry(country)"
|
|
198
|
-
[class]="getItemClass(country)"
|
|
199
|
-
|
|
200
|
-
<div class="flex items-center gap-3 w-full">
|
|
215
|
+
[class]="getItemClass(country)">
|
|
216
|
+
<div class="flex w-full items-center gap-3">
|
|
201
217
|
<img
|
|
202
218
|
[src]="getFlagUrl(country.flag)"
|
|
203
|
-
class="h-4 w-6 rounded-sm border border-border object-cover
|
|
204
|
-
[alt]="country.name"
|
|
205
|
-
|
|
206
|
-
<span class="text-sm flex-1 truncate">{{ country.name }}</span>
|
|
219
|
+
class="h-4 w-6 flex-shrink-0 rounded-sm border border-border object-cover"
|
|
220
|
+
[alt]="country.name" />
|
|
221
|
+
<span class="flex-1 truncate text-sm">{{ country.name }}</span>
|
|
207
222
|
<span class="text-xs text-muted-foreground">{{ country.dialCode }}</span>
|
|
208
|
-
<i
|
|
223
|
+
<i
|
|
224
|
+
*ngIf="selectedCountry?.isoAlpha2 === country.isoAlpha2"
|
|
225
|
+
class="ri-check-line text-primary"></i>
|
|
209
226
|
</div>
|
|
210
227
|
</div>
|
|
211
|
-
<div
|
|
228
|
+
<div
|
|
229
|
+
*ngIf="shadowCountries.length === 0"
|
|
230
|
+
class="py-6 text-center text-sm text-muted-foreground">
|
|
212
231
|
No countries found.
|
|
213
232
|
</div>
|
|
214
233
|
</div>
|
|
@@ -218,16 +237,14 @@ export class CountrySelectorComponent {
|
|
|
218
237
|
<ng-container *ngIf="!disabled">
|
|
219
238
|
<p
|
|
220
239
|
*ngIf="hint && !error"
|
|
221
|
-
class="text-xs text-muted-foreground
|
|
222
|
-
[class.opacity-0]="isFocused && hideHintOnFocus"
|
|
223
|
-
>
|
|
240
|
+
class="px-1 text-xs text-muted-foreground transition-opacity duration-200"
|
|
241
|
+
[class.opacity-0]="isFocused && hideHintOnFocus">
|
|
224
242
|
{{ hint }}
|
|
225
243
|
</p>
|
|
226
244
|
<p
|
|
227
245
|
*ngIf="error && errorMessage"
|
|
228
246
|
[id]="id + '-error'"
|
|
229
|
-
class="
|
|
230
|
-
>
|
|
247
|
+
class="px-1 text-xs font-medium text-destructive">
|
|
231
248
|
{{ errorMessage }}
|
|
232
249
|
</p>
|
|
233
250
|
</ng-container>
|
|
@@ -244,19 +261,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
244
261
|
{
|
|
245
262
|
provide: NG_VALUE_ACCESSOR,
|
|
246
263
|
useExisting: forwardRef(() => CountrySelectorComponent),
|
|
247
|
-
multi: true
|
|
248
|
-
}
|
|
264
|
+
multi: true,
|
|
265
|
+
},
|
|
249
266
|
],
|
|
250
267
|
template: `
|
|
251
|
-
<div class="flex flex-col gap-1.5
|
|
252
|
-
<label
|
|
253
|
-
*ngIf="label"
|
|
254
|
-
[for]="id"
|
|
255
|
-
[class]="computedLabelClass">
|
|
268
|
+
<div class="flex w-full flex-col gap-1.5">
|
|
269
|
+
<label *ngIf="label" [for]="id" [class]="computedLabelClass">
|
|
256
270
|
{{ label }}
|
|
257
271
|
</label>
|
|
258
272
|
|
|
259
|
-
<tolle-popover
|
|
273
|
+
<tolle-popover
|
|
274
|
+
#popover
|
|
275
|
+
[placement]="'bottom-start'"
|
|
276
|
+
(onOpen)="onPopoverOpen()"
|
|
277
|
+
(onClose)="onPopoverClose()">
|
|
260
278
|
<div trigger class="w-full">
|
|
261
279
|
<button
|
|
262
280
|
type="button"
|
|
@@ -266,19 +284,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
266
284
|
(blur)="onBlur()"
|
|
267
285
|
(focus)="onFocus()"
|
|
268
286
|
[attr.aria-invalid]="error"
|
|
269
|
-
[attr.aria-describedby]="error && errorMessage ? id + '-error' : null"
|
|
270
|
-
>
|
|
287
|
+
[attr.aria-describedby]="error && errorMessage ? id + '-error' : null">
|
|
271
288
|
<div class="flex items-center gap-2 truncate">
|
|
272
289
|
<img
|
|
273
290
|
*ngIf="selectedCountry"
|
|
274
291
|
[src]="getFlagUrl(selectedCountry.flag)"
|
|
275
|
-
class="h-4 w-6 rounded-sm border border-border object-cover
|
|
276
|
-
[alt]="selectedCountry.name"
|
|
277
|
-
/>
|
|
292
|
+
class="h-4 w-6 flex-shrink-0 rounded-sm border border-border object-cover"
|
|
293
|
+
[alt]="selectedCountry.name" />
|
|
278
294
|
<span *ngIf="selectedCountry && showName" class="truncate font-medium">
|
|
279
295
|
{{ selectedCountry.name }}
|
|
280
296
|
</span>
|
|
281
|
-
<span *ngIf="!selectedCountry" class="text-muted-foreground
|
|
297
|
+
<span *ngIf="!selectedCountry" class="truncate text-muted-foreground">
|
|
282
298
|
{{ placeholder }}
|
|
283
299
|
</span>
|
|
284
300
|
</div>
|
|
@@ -286,16 +302,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
286
302
|
</button>
|
|
287
303
|
</div>
|
|
288
304
|
|
|
289
|
-
<div
|
|
290
|
-
|
|
305
|
+
<div
|
|
306
|
+
class="flex min-w-[300px] max-w-[400px] flex-col overflow-hidden rounded-md border border-border bg-popover shadow-md"
|
|
307
|
+
(mousedown)="$event.stopPropagation()">
|
|
308
|
+
<div class="sticky top-0 z-10 border-b border-border bg-popover p-2 shadow-sm">
|
|
291
309
|
<tolle-input
|
|
292
310
|
size="sm"
|
|
293
311
|
placeholder="Search country..."
|
|
294
312
|
[(ngModel)]="searchQuery"
|
|
295
313
|
(ngModelChange)="filterCountries($event)"
|
|
296
314
|
class="w-full"
|
|
297
|
-
#searchInput
|
|
298
|
-
>
|
|
315
|
+
#searchInput>
|
|
299
316
|
<i prefix class="ri-search-line"></i>
|
|
300
317
|
</tolle-input>
|
|
301
318
|
</div>
|
|
@@ -304,20 +321,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
304
321
|
<div
|
|
305
322
|
*ngFor="let country of shadowCountries"
|
|
306
323
|
(click)="selectCountry(country)"
|
|
307
|
-
[class]="getItemClass(country)"
|
|
308
|
-
|
|
309
|
-
<div class="flex items-center gap-3 w-full">
|
|
324
|
+
[class]="getItemClass(country)">
|
|
325
|
+
<div class="flex w-full items-center gap-3">
|
|
310
326
|
<img
|
|
311
327
|
[src]="getFlagUrl(country.flag)"
|
|
312
|
-
class="h-4 w-6 rounded-sm border border-border object-cover
|
|
313
|
-
[alt]="country.name"
|
|
314
|
-
|
|
315
|
-
<span class="text-sm flex-1 truncate">{{ country.name }}</span>
|
|
328
|
+
class="h-4 w-6 flex-shrink-0 rounded-sm border border-border object-cover"
|
|
329
|
+
[alt]="country.name" />
|
|
330
|
+
<span class="flex-1 truncate text-sm">{{ country.name }}</span>
|
|
316
331
|
<span class="text-xs text-muted-foreground">{{ country.dialCode }}</span>
|
|
317
|
-
<i
|
|
332
|
+
<i
|
|
333
|
+
*ngIf="selectedCountry?.isoAlpha2 === country.isoAlpha2"
|
|
334
|
+
class="ri-check-line text-primary"></i>
|
|
318
335
|
</div>
|
|
319
336
|
</div>
|
|
320
|
-
<div
|
|
337
|
+
<div
|
|
338
|
+
*ngIf="shadowCountries.length === 0"
|
|
339
|
+
class="py-6 text-center text-sm text-muted-foreground">
|
|
321
340
|
No countries found.
|
|
322
341
|
</div>
|
|
323
342
|
</div>
|
|
@@ -327,21 +346,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
327
346
|
<ng-container *ngIf="!disabled">
|
|
328
347
|
<p
|
|
329
348
|
*ngIf="hint && !error"
|
|
330
|
-
class="text-xs text-muted-foreground
|
|
331
|
-
[class.opacity-0]="isFocused && hideHintOnFocus"
|
|
332
|
-
>
|
|
349
|
+
class="px-1 text-xs text-muted-foreground transition-opacity duration-200"
|
|
350
|
+
[class.opacity-0]="isFocused && hideHintOnFocus">
|
|
333
351
|
{{ hint }}
|
|
334
352
|
</p>
|
|
335
353
|
<p
|
|
336
354
|
*ngIf="error && errorMessage"
|
|
337
355
|
[id]="id + '-error'"
|
|
338
|
-
class="
|
|
339
|
-
>
|
|
356
|
+
class="px-1 text-xs font-medium text-destructive">
|
|
340
357
|
{{ errorMessage }}
|
|
341
358
|
</p>
|
|
342
359
|
</ng-container>
|
|
343
360
|
</div>
|
|
344
|
-
|
|
361
|
+
`,
|
|
345
362
|
}]
|
|
346
363
|
}], propDecorators: { id: [{
|
|
347
364
|
type: Input
|
|
@@ -376,5 +393,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
376
393
|
}], popover: [{
|
|
377
394
|
type: ViewChild,
|
|
378
395
|
args: ['popover']
|
|
396
|
+
}], searchInput: [{
|
|
397
|
+
type: ViewChild,
|
|
398
|
+
args: ['searchInput']
|
|
379
399
|
}] } });
|
|
380
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2NvdW50cnktc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUE2R2hDLE1BQU0sT0FBTyx3QkFBd0I7SUFDMUIsRUFBRSxHQUFHLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNWLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdkIsV0FBVyxHQUFHLGdCQUFnQixDQUFDO0lBQy9C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QUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBRWUsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQ291bnRyeUNvZGVzU2VydmljZSB9IGZyb20gJy4vY291bnRyeS1jb2Rlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtY291bnRyeS1zZWxlY3RvcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBQb3BvdmVyQ29tcG9uZW50LCBJbnB1dENvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ291bnRyeVNlbGVjdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xLjUgdy1mdWxsXCI+XG4gICAgICA8bGFiZWxcbiAgICAgICAgKm5nSWY9XCJsYWJlbFwiXG4gICAgICAgIFtmb3JdPVwiaWRcIlxuICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRMYWJlbENsYXNzXCI+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8L2xhYmVsPlxuXG4gICAgICA8dG9sbGUtcG9wb3ZlciAjcG9wb3ZlciBbcGxhY2VtZW50XT1cIidib3R0b20tc3RhcnQnXCIgKG9uQ2xvc2UpPVwib25Qb3BvdmVyQ2xvc2UoKVwiPlxuICAgICAgICA8ZGl2IHRyaWdnZXIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImNvbXB1dGVkVHJpZ2dlckNsYXNzXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImVycm9yXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlID8gaWQgKyAnLWVycm9yJyA6IG51bGxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvdW50cnlcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0RmxhZ1VybChzZWxlY3RlZENvdW50cnkuZmxhZylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC00IHctNiByb3VuZGVkLXNtIGJvcmRlciBib3JkZXItYm9yZGVyIG9iamVjdC1jb3ZlciBmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgICAgICBbYWx0XT1cInNlbGVjdGVkQ291bnRyeS5uYW1lXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZENvdW50cnkgJiYgc2hvd05hbWVcIiBjbGFzcz1cInRydW5jYXRlIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRDb3VudHJ5Lm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzZWxlY3RlZENvdW50cnlcIiBjbGFzcz1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgIHt7IHBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cImljb25DbGFzc1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgYmctcG9wb3ZlciByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYm9yZGVyIHNoYWRvdy1tZCBtaW4tdy1bMzAwcHhdIG1heC13LVs0MDBweF0gb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtMiBib3JkZXItYiBib3JkZXItYm9yZGVyIGJnLXBvcG92ZXIgc2hhZG93LXNtIHN0aWNreSB0b3AtMCB6LTEwXCI+XG4gICAgICAgICAgICA8dG9sbGUtaW5wdXRcbiAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY291bnRyeS4uLlwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJDb3VudHJpZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgI3NlYXJjaElucHV0XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIHByZWZpeCBjbGFzcz1cInJpLXNlYXJjaC1saW5lXCI+PC9pPlxuICAgICAgICAgICAgPC90b2xsZS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtaC1bMzAwcHhdIG92ZXJmbG93LXktYXV0byBwLTFcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvdW50cnkgb2Ygc2hhZG93Q291bnRyaWVzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENvdW50cnkoY291bnRyeSlcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0SXRlbUNsYXNzKGNvdW50cnkpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0RmxhZ1VybChjb3VudHJ5LmZsYWcpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC00IHctNiByb3VuZGVkLXNtIGJvcmRlciBib3JkZXItYm9yZGVyIG9iamVjdC1jb3ZlciBmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgICAgICAgIFthbHRdPVwiY291bnRyeS5uYW1lXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmbGV4LTEgdHJ1bmNhdGVcIj57eyBjb3VudHJ5Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPnt7IGNvdW50cnkuZGlhbENvZGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJzZWxlY3RlZENvdW50cnk/Lmlzb0FscGhhMiA9PT0gY291bnRyeS5pc29BbHBoYTJcIiBjbGFzcz1cInJpLWNoZWNrLWxpbmUgdGV4dC1wcmltYXJ5XCI+PC9pPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNoYWRvd0NvdW50cmllcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgTm8gY291bnRyaWVzIGZvdW5kLlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90b2xsZS1wb3BvdmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRpc2FibGVkXCI+XG4gICAgICAgIDxwXG4gICAgICAgICAgKm5nSWY9XCJoaW50ICYmICFlcnJvclwiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0xIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiaXNGb2N1c2VkICYmIGhpZGVIaW50T25Gb2N1c1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBoaW50IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cImVycm9yICYmIGVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgW2lkXT1cImlkICsgJy1lcnJvcidcIlxuICAgICAgICAgIGNsYXNzPVwidGV4dC14cyB0ZXh0LWRlc3RydWN0aXZlIHB4LTEgZm9udC1tZWRpdW1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgICAgIDwvcD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIENvdW50cnlTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBpZCA9IGBjb3VudHJ5LXNlbGVjdG9yLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVIaW50T25Gb2N1cyA9IHRydWU7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBjb3VudHJ5JztcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBkZWZhdWx0Q291bnRyeUNvZGUgPSAnR0gnO1xuICBASW5wdXQoKSByZXR1cm5WYWx1ZTogJ29iamVjdCcgfCAnaXNvQWxwaGEyJyB8ICdkaWFsQ29kZScgfCAnbmFtZScgPSAnaXNvQWxwaGEyJztcbiAgQElucHV0KCkgc2hvd05hbWUgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXInKSBwb3BvdmVyITogUG9wb3ZlckNvbXBvbmVudDtcblxuICBwcml2YXRlIGNvdW50cnlDb2Rlc1NlcnZpY2UgPSBpbmplY3QoQ291bnRyeUNvZGVzU2VydmljZSk7XG4gIHByaXZhdGUgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICB2YWx1ZTogYW55ID0gbnVsbDtcbiAgc2VsZWN0ZWRDb3VudHJ5OiBhbnkgPSBudWxsO1xuICBzZWFyY2hRdWVyeSA9ICcnO1xuICBzaGFkb3dDb3VudHJpZXM6IGFueVtdID0gW107XG4gIGlzRm9jdXNlZCA9IGZhbHNlO1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xuXG4gIHByb3RlY3RlZCBjbiA9IGNuO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2hhZG93Q291bnRyaWVzID0gdGhpcy5jb3VudHJ5Q29kZXNTZXJ2aWNlLmNvdW50cmllcztcbiAgICBpZiAodGhpcy5kZWZhdWx0Q291bnRyeUNvZGUgJiYgIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5jb3VudHJ5Q29kZXNTZXJ2aWNlLmNvdW50cmllcy5maW5kKFxuICAgICAgICBjID0+IGMuaXNvQWxwaGEyID09PSB0aGlzLmRlZmF1bHRDb3VudHJ5Q29kZVxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ291bnRyeSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRSZXR1cm5WYWx1ZSh0aGlzLnNlbGVjdGVkQ291bnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbXB1dGVkVHJpZ2dlckNsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgICdmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHJvdW5kZWQtbWQgYm9yZGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCcsXG4gICAgICAnYmctYmFja2dyb3VuZCB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgJ2JvcmRlci1pbnB1dCBzaGFkb3ctc20nLFxuICAgICAgdGhpcy5zaXplID09PSAneHMnICYmICdoLTggcHgtMiB0ZXh0LXhzJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3NtJyAmJiAnaC05IHB4LTMgdGV4dC1zbScsXG4gICAgICB0aGlzLnNpemUgPT09ICdkZWZhdWx0JyAmJiAnaC0xMCBweC0zIHRleHQtc20nLFxuICAgICAgdGhpcy5zaXplID09PSAnbGcnICYmICdoLTExIHB4LTQgdGV4dC1iYXNlJyxcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBbXG4gICAgICAgICdmb2N1czpvdXRsaW5lLW5vbmUnLFxuICAgICAgICAnZm9jdXM6cmluZy00JyxcbiAgICAgICAgJ2ZvY3VzOnJpbmctcmluZy8zMCcsXG4gICAgICAgICdmb2N1czpyaW5nLW9mZnNldC0wJyxcbiAgICAgICAgJ2ZvY3VzOmJvcmRlci1wcmltYXJ5LzgwJ1xuICAgICAgXSxcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiAnaG92ZXI6Ym9yZGVyLWFjY2VudCcsXG4gICAgICB0aGlzLmVycm9yICYmIFtcbiAgICAgICAgJ2JvcmRlci1kZXN0cnVjdGl2ZScsXG4gICAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBbXG4gICAgICAgICAgJ2ZvY3VzOmJvcmRlci1kZXN0cnVjdGl2ZS84MCcsXG4gICAgICAgICAgJ2ZvY3VzOnJpbmctZGVzdHJ1Y3RpdmUvMzAnXG4gICAgICAgIF1cbiAgICAgIF0sXG4gICAgICB0aGlzLmRpc2FibGVkICYmICdjdXJzb3Itbm90LWFsbG93ZWQgb3BhY2l0eS01MCBib3JkZXItb3BhY2l0eS01MCcsXG4gICAgICB0aGlzLnJlYWRvbmx5ICYmICdjdXJzb3ItZGVmYXVsdCBib3JkZXItZGFzaGVkJyxcbiAgICAgIHRoaXMuY2xhc3NcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNvbXB1dGVkTGFiZWxDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICBcInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIGxlYWRpbmctbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwXCIsXG4gICAgICB0aGlzLmRpc2FibGVkICYmIFwib3BhY2l0eS01MFwiXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpY29uQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ3JpLWFycm93LWRvd24tcy1saW5lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBtbC0yIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTIwMCcsXG4gICAgICB0aGlzLnBvcG92ZXI/LmlzT3BlbiA/ICdyb3RhdGUtMTgwJyA6ICcnLFxuICAgICAgKHRoaXMuc2l6ZSA9PT0gJ3hzJyB8fCB0aGlzLnNpemUgPT09ICdzbScpID8gJ3RleHQtWzE0cHhdJyA6ICd0ZXh0LVsxOHB4XScsXG4gICAgICAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSAmJiAnb3BhY2l0eS0zMCdcbiAgICApO1xuICB9XG5cbiAgZ2V0SXRlbUNsYXNzKGNvdW50cnk6IGFueSkge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkQ291bnRyeT8uaXNvQWxwaGEyID09PSBjb3VudHJ5Lmlzb0FscGhhMjtcbiAgICByZXR1cm4gY24oXG4gICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTMgcHktMiBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTAgcm91bmRlZC1zbSB3LWZ1bGwnLFxuICAgICAgaXNTZWxlY3RlZCA/ICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcgOiAnaG92ZXI6YmctYWNjZW50LzUwIHRleHQtZm9yZWdyb3VuZCdcbiAgICApO1xuICB9XG5cbiAgZ2V0RmxhZ1VybChmbGFnQmFzZTY0OiBzdHJpbmcpOiBTYWZlUmVzb3VyY2VVcmwge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXG4gICAgICAnZGF0YTppbWFnZS8qO2Jhc2U2NCwnICsgZmxhZ0Jhc2U2NFxuICAgICk7XG4gIH1cblxuICBmaWx0ZXJDb3VudHJpZXMocXVlcnk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbHRlciA9IChxdWVyeSB8fCAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgdGhpcy5zaGFkb3dDb3VudHJpZXMgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbHRlcihjID0+XG4gICAgICBjLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpIHx8XG4gICAgICBjLmRpYWxDb2RlLmluY2x1ZGVzKGZpbHRlcikgfHxcbiAgICAgIGMuaXNvQWxwaGEyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RDb3VudHJ5KGNvdW50cnk6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gY291bnRyeTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRSZXR1cm5WYWx1ZShjb3VudHJ5KTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub25TZWxlY3QuZW1pdChjb3VudHJ5KTtcbiAgICB0aGlzLnBvcG92ZXIuY2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0dXJuVmFsdWUoY291bnRyeTogYW55KSB7XG4gICAgc3dpdGNoICh0aGlzLnJldHVyblZhbHVlKSB7XG4gICAgICBjYXNlICdvYmplY3QnOiByZXR1cm4gY291bnRyeTtcbiAgICAgIGNhc2UgJ2lzb0FscGhhMic6IHJldHVybiBjb3VudHJ5Lmlzb0FscGhhMjtcbiAgICAgIGNhc2UgJ2RpYWxDb2RlJzogcmV0dXJuIGNvdW50cnkuZGlhbENvZGU7XG4gICAgICBjYXNlICduYW1lJzogcmV0dXJuIGNvdW50cnkubmFtZTtcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBjb3VudHJ5Lmlzb0FscGhhMjtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBvblBvcG92ZXJDbG9zZSgpIHtcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XG4gICAgdGhpcy5maWx0ZXJDb3VudHJpZXMoJycpO1xuICAgIHRoaXMub25CbHVyKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuY291bnRyeUNvZGVzU2VydmljZS5jb3VudHJpZXMuZmluZChjID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gYy5pc29BbHBoYTIgPT09IHZhbHVlLmlzb0FscGhhMjtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdpc29BbHBoYTInKSByZXR1cm4gYy5pc29BbHBoYTIgPT09IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5WYWx1ZSA9PT0gJ2RpYWxDb2RlJykgcmV0dXJuIGMuZGlhbENvZGUgPT09IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5WYWx1ZSA9PT0gJ25hbWUnKSByZXR1cm4gYy5uYW1lID09PSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHsgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7IH1cbn1cbiJdfQ==
|
|
400
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2NvdW50cnktc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUVULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUE2R2hDLE1BQU0sT0FBTyx3QkFBd0I7SUFDMUIsRUFBRSxHQUFHLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNWLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdkIsV0FBVyxHQUFHLGdCQUFnQixDQUFDO0lBQy9C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QkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFFZSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQ00sV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IENvdW50cnlDb2Rlc1NlcnZpY2UgfSBmcm9tICcuL2NvdW50cnktY29kZXMuc2VydmljZSc7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi9wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWNvdW50cnktc2VsZWN0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUG9wb3ZlckNvbXBvbmVudCwgSW5wdXRDb21wb25lbnRdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvdW50cnlTZWxlY3RvckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtMS41XCI+XG4gICAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtmb3JdPVwiaWRcIiBbY2xhc3NdPVwiY29tcHV0ZWRMYWJlbENsYXNzXCI+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8L2xhYmVsPlxuXG4gICAgICA8dG9sbGUtcG9wb3ZlclxuICAgICAgICAjcG9wb3ZlclxuICAgICAgICBbcGxhY2VtZW50XT1cIidib3R0b20tc3RhcnQnXCJcbiAgICAgICAgKG9uT3Blbik9XCJvblBvcG92ZXJPcGVuKClcIlxuICAgICAgICAob25DbG9zZSk9XCJvblBvcG92ZXJDbG9zZSgpXCI+XG4gICAgICAgIDxkaXYgdHJpZ2dlciBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRUcmlnZ2VyQ2xhc3NcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiZXJyb3JcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJlcnJvciAmJiBlcnJvck1lc3NhZ2UgPyBpZCArICctZXJyb3InIDogbnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkQ291bnRyeVwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJnZXRGbGFnVXJsKHNlbGVjdGVkQ291bnRyeS5mbGFnKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTQgdy02IGZsZXgtc2hyaW5rLTAgcm91bmRlZC1zbSBib3JkZXIgYm9yZGVyLWJvcmRlciBvYmplY3QtY292ZXJcIlxuICAgICAgICAgICAgICAgIFthbHRdPVwic2VsZWN0ZWRDb3VudHJ5Lm5hbWVcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkQ291bnRyeSAmJiBzaG93TmFtZVwiIGNsYXNzPVwidHJ1bmNhdGUgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZENvdW50cnkubmFtZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXNlbGVjdGVkQ291bnRyeVwiIGNsYXNzPVwidHJ1bmNhdGUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aSBbY2xhc3NdPVwiaWNvbkNsYXNzXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmbGV4IG1pbi13LVszMDBweF0gbWF4LXctWzQwMHB4XSBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHNoYWRvdy1tZFwiXG4gICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5IHRvcC0wIHotMTAgYm9yZGVyLWIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHAtMiBzaGFkb3ctc21cIj5cbiAgICAgICAgICAgIDx0b2xsZS1pbnB1dFxuICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb3VudHJ5Li4uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hRdWVyeVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckNvdW50cmllcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAjc2VhcmNoSW5wdXQ+XG4gICAgICAgICAgICAgIDxpIHByZWZpeCBjbGFzcz1cInJpLXNlYXJjaC1saW5lXCI+PC9pPlxuICAgICAgICAgICAgPC90b2xsZS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtaC1bMzAwcHhdIG92ZXJmbG93LXktYXV0byBwLTFcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvdW50cnkgb2Ygc2hhZG93Q291bnRyaWVzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENvdW50cnkoY291bnRyeSlcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0SXRlbUNsYXNzKGNvdW50cnkpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBbc3JjXT1cImdldEZsYWdVcmwoY291bnRyeS5mbGFnKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImgtNCB3LTYgZmxleC1zaHJpbmstMCByb3VuZGVkLXNtIGJvcmRlciBib3JkZXItYm9yZGVyIG9iamVjdC1jb3ZlclwiXG4gICAgICAgICAgICAgICAgICBbYWx0XT1cImNvdW50cnkubmFtZVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LTEgdHJ1bmNhdGUgdGV4dC1zbVwiPnt7IGNvdW50cnkubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e3sgY291bnRyeS5kaWFsQ29kZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvdW50cnk/Lmlzb0FscGhhMiA9PT0gY291bnRyeS5pc29BbHBoYTJcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyaS1jaGVjay1saW5lIHRleHQtcHJpbWFyeVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaGFkb3dDb3VudHJpZXMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgIE5vIGNvdW50cmllcyBmb3VuZC5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdG9sbGUtcG9wb3Zlcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkaXNhYmxlZFwiPlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwiaGludCAmJiAhZXJyb3JcIlxuICAgICAgICAgIGNsYXNzPVwicHgtMSB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICBbY2xhc3Mub3BhY2l0eS0wXT1cImlzRm9jdXNlZCAmJiBoaWRlSGludE9uRm9jdXNcIj5cbiAgICAgICAgICB7eyBoaW50IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cImVycm9yICYmIGVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgW2lkXT1cImlkICsgJy1lcnJvcidcIlxuICAgICAgICAgIGNsYXNzPVwicHgtMSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZGVzdHJ1Y3RpdmVcIj5cbiAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIENvdW50cnlTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBpZCA9IGBjb3VudHJ5LXNlbGVjdG9yLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVIaW50T25Gb2N1cyA9IHRydWU7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBjb3VudHJ5JztcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBkZWZhdWx0Q291bnRyeUNvZGUgPSAnR0gnO1xuICBASW5wdXQoKSByZXR1cm5WYWx1ZTogJ29iamVjdCcgfCAnaXNvQWxwaGEyJyB8ICdkaWFsQ29kZScgfCAnbmFtZScgPSAnaXNvQWxwaGEyJztcbiAgQElucHV0KCkgc2hvd05hbWUgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXInKSBwb3BvdmVyITogUG9wb3ZlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgcHJpdmF0ZSBjb3VudHJ5Q29kZXNTZXJ2aWNlID0gaW5qZWN0KENvdW50cnlDb2Rlc1NlcnZpY2UpO1xuICBwcml2YXRlIHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgdmFsdWU6IGFueSA9IG51bGw7XG4gIHNlbGVjdGVkQ291bnRyeTogYW55ID0gbnVsbDtcbiAgc2VhcmNoUXVlcnkgPSAnJztcbiAgc2hhZG93Q291bnRyaWVzOiBhbnlbXSA9IFtdO1xuICBpc0ZvY3VzZWQgPSBmYWxzZTtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zaGFkb3dDb3VudHJpZXMgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzO1xuICAgIGlmICh0aGlzLmRlZmF1bHRDb3VudHJ5Q29kZSAmJiAhdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbmQoXG4gICAgICAgIGMgPT4gYy5pc29BbHBoYTIgPT09IHRoaXMuZGVmYXVsdENvdW50cnlDb2RlXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFJldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY29tcHV0ZWRUcmlnZ2VyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ2ZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcm91bmRlZC1tZCBib3JkZXIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwJyxcbiAgICAgICdiZy1iYWNrZ3JvdW5kIHRleHQtZm9yZWdyb3VuZCcsXG4gICAgICAnYm9yZGVyLWlucHV0IHNoYWRvdy1zbScsXG4gICAgICB0aGlzLnNpemUgPT09ICd4cycgJiYgJ2gtOCBweC0yIHRleHQteHMnLFxuICAgICAgdGhpcy5zaXplID09PSAnc20nICYmICdoLTkgcHgtMyB0ZXh0LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2RlZmF1bHQnICYmICdoLTEwIHB4LTMgdGV4dC1zbScsXG4gICAgICB0aGlzLnNpemUgPT09ICdsZycgJiYgJ2gtMTEgcHgtNCB0ZXh0LWJhc2UnLFxuICAgICAgISh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpICYmIFtcbiAgICAgICAgJ2ZvY3VzOm91dGxpbmUtbm9uZScsXG4gICAgICAgICdmb2N1czpyaW5nLTQnLFxuICAgICAgICAnZm9jdXM6cmluZy1yaW5nLzMwJyxcbiAgICAgICAgJ2ZvY3VzOnJpbmctb2Zmc2V0LTAnLFxuICAgICAgICAnZm9jdXM6Ym9yZGVyLXByaW1hcnkvODAnLFxuICAgICAgXSxcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiAnaG92ZXI6Ym9yZGVyLWFjY2VudCcsXG4gICAgICB0aGlzLmVycm9yICYmIFtcbiAgICAgICAgJ2JvcmRlci1kZXN0cnVjdGl2ZScsXG4gICAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBbXG4gICAgICAgICAgJ2ZvY3VzOmJvcmRlci1kZXN0cnVjdGl2ZS84MCcsXG4gICAgICAgICAgJ2ZvY3VzOnJpbmctZGVzdHJ1Y3RpdmUvMzAnLFxuICAgICAgICBdLFxuICAgICAgXSxcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgJ2N1cnNvci1ub3QtYWxsb3dlZCBvcGFjaXR5LTUwIGJvcmRlci1vcGFjaXR5LTUwJyxcbiAgICAgIHRoaXMucmVhZG9ubHkgJiYgJ2N1cnNvci1kZWZhdWx0IGJvcmRlci1kYXNoZWQnLFxuICAgICAgdGhpcy5jbGFzc1xuICAgICk7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRMYWJlbENsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgICd0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCBsZWFkaW5nLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCcsXG4gICAgICB0aGlzLmRpc2FibGVkICYmICdvcGFjaXR5LTUwJ1xuICAgICk7XG4gIH1cblxuICBnZXQgaWNvbkNsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgICdyaS1hcnJvdy1kb3duLXMtbGluZSB0ZXh0LW11dGVkLWZvcmVncm91bmQgbWwtMiB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0yMDAnLFxuICAgICAgdGhpcy5wb3BvdmVyPy5pc09wZW4gPyAncm90YXRlLTE4MCcgOiAnJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyB8fCB0aGlzLnNpemUgPT09ICdzbScgPyAndGV4dC1bMTRweF0nIDogJ3RleHQtWzE4cHhdJyxcbiAgICAgICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpICYmICdvcGFjaXR5LTMwJ1xuICAgICk7XG4gIH1cblxuICBnZXRJdGVtQ2xhc3MoY291bnRyeTogYW55KSB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5pc29BbHBoYTIgPT09IGNvdW50cnkuaXNvQWxwaGEyO1xuICAgIHJldHVybiBjbihcbiAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMyBweS0yIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCByb3VuZGVkLXNtIHctZnVsbCcsXG4gICAgICBpc1NlbGVjdGVkID8gJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyA6ICdob3ZlcjpiZy1hY2NlbnQvNTAgdGV4dC1mb3JlZ3JvdW5kJ1xuICAgICk7XG4gIH1cblxuICBnZXRGbGFnVXJsKGZsYWdCYXNlNjQ6IHN0cmluZyk6IFNhZmVSZXNvdXJjZVVybCB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgnZGF0YTppbWFnZS8qO2Jhc2U2NCwnICsgZmxhZ0Jhc2U2NCk7XG4gIH1cblxuICBmaWx0ZXJDb3VudHJpZXMocXVlcnk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbHRlciA9IChxdWVyeSB8fCAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgdGhpcy5zaGFkb3dDb3VudHJpZXMgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbHRlcihcbiAgICAgIGMgPT5cbiAgICAgICAgYy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKSB8fFxuICAgICAgICBjLmRpYWxDb2RlLmluY2x1ZGVzKGZpbHRlcikgfHxcbiAgICAgICAgYy5pc29BbHBoYTIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpXG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdENvdW50cnkoY291bnRyeTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSBjb3VudHJ5O1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFJldHVyblZhbHVlKGNvdW50cnkpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5vblNlbGVjdC5lbWl0KGNvdW50cnkpO1xuICAgIHRoaXMucG9wb3Zlci5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXR1cm5WYWx1ZShjb3VudHJ5OiBhbnkpIHtcbiAgICBzd2l0Y2ggKHRoaXMucmV0dXJuVmFsdWUpIHtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiBjb3VudHJ5O1xuICAgICAgY2FzZSAnaXNvQWxwaGEyJzpcbiAgICAgICAgcmV0dXJuIGNvdW50cnkuaXNvQWxwaGEyO1xuICAgICAgY2FzZSAnZGlhbENvZGUnOlxuICAgICAgICByZXR1cm4gY291bnRyeS5kaWFsQ29kZTtcbiAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICByZXR1cm4gY291bnRyeS5uYW1lO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNvdW50cnkuaXNvQWxwaGEyO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICB9XG5cbiAgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIG9uUG9wb3Zlck9wZW4oKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgb25Qb3BvdmVyQ2xvc2UoKSB7XG4gICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xuICAgIHRoaXMuZmlsdGVyQ291bnRyaWVzKCcnKTtcbiAgICB0aGlzLm9uQmx1cigpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbmQoYyA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJldHVyblZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIGMuaXNvQWxwaGEyID09PSB2YWx1ZS5pc29BbHBoYTI7XG4gICAgICAgIGlmICh0aGlzLnJldHVyblZhbHVlID09PSAnaXNvQWxwaGEyJykgcmV0dXJuIGMuaXNvQWxwaGEyID09PSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdkaWFsQ29kZScpIHJldHVybiBjLmRpYWxDb2RlID09PSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICduYW1lJykgcmV0dXJuIGMubmFtZSA9PT0gdmFsdWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG59XG4iXX0=
|