mis-crystal-design-system 18.2.9 → 18.2.10
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.
- package/async-search-dropdown/async-dropdown.component.d.ts +7 -22
- package/esm2022/async-search-dropdown/async-dropdown.component.mjs +50 -60
- package/esm2022/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs +49 -59
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ElementRef,
|
|
1
|
+
import { ElementRef, OnInit, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { AbstractControl, UntypedFormControl } from '@angular/forms';
|
|
3
3
|
import { Overlay } from '@angular/cdk/overlay';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -6,9 +6,7 @@ type IListData = any;
|
|
|
6
6
|
export declare class AsyncDropdownComponent implements OnInit, OnDestroy {
|
|
7
7
|
private overlay;
|
|
8
8
|
private viewContainerRef;
|
|
9
|
-
|
|
10
|
-
private injector;
|
|
11
|
-
constructor(overlay: Overlay, viewContainerRef: ViewContainerRef, _ngZone: NgZone, injector: Injector);
|
|
9
|
+
constructor(overlay: Overlay, viewContainerRef: ViewContainerRef);
|
|
12
10
|
height: import("@angular/core").InputSignal<string>;
|
|
13
11
|
width: import("@angular/core").InputSignal<string>;
|
|
14
12
|
size: import("@angular/core").InputSignal<"md" | "sm">;
|
|
@@ -44,24 +42,11 @@ export declare class AsyncDropdownComponent implements OnInit, OnDestroy {
|
|
|
44
42
|
private overlayRef?;
|
|
45
43
|
private searchSubscription?;
|
|
46
44
|
private controlSubscription?;
|
|
47
|
-
opened:
|
|
48
|
-
loading:
|
|
49
|
-
error:
|
|
50
|
-
openPopUpOnTab:
|
|
51
|
-
data:
|
|
52
|
-
/**
|
|
53
|
-
* Tracks the last selected value to prevent dropdown from reopening when:
|
|
54
|
-
* - Input regains focus after selection (showing selected value)
|
|
55
|
-
* - Parent component re-renders and triggers change detection
|
|
56
|
-
* - User hasn't actually typed a new search query
|
|
57
|
-
*
|
|
58
|
-
* This is necessary because the input serves dual purposes:
|
|
59
|
-
* 1. Search input (user types, triggers API calls)
|
|
60
|
-
* 2. Display selected value (shows what was selected)
|
|
61
|
-
*
|
|
62
|
-
* Without this, setting the input value after selection would trigger
|
|
63
|
-
* the search subscription, causing unwanted API calls and dropdown reopening.
|
|
64
|
-
*/
|
|
45
|
+
opened: boolean;
|
|
46
|
+
loading: boolean;
|
|
47
|
+
error: boolean;
|
|
48
|
+
openPopUpOnTab: boolean;
|
|
49
|
+
data: IListData[];
|
|
65
50
|
private lastSelectedValue;
|
|
66
51
|
ngOnInit(): void;
|
|
67
52
|
ngOnChanges(): void;
|
|
@@ -2,7 +2,7 @@ import { Component, ContentChild, HostListener, ViewChild, } from '@angular/core
|
|
|
2
2
|
import { UntypedFormControl } from '@angular/forms';
|
|
3
3
|
import { OverlayConfig, ConnectionPositionPair, } from '@angular/cdk/overlay';
|
|
4
4
|
import { TemplatePortal } from '@angular/cdk/portal';
|
|
5
|
-
import {
|
|
5
|
+
import { input, output } from '@angular/core';
|
|
6
6
|
import { debounceTime, distinctUntilChanged, tap, filter } from 'rxjs/operators';
|
|
7
7
|
import { merge, Subject } from 'rxjs';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
@@ -88,7 +88,7 @@ function AsyncDropdownComponent_ng_template_10_ng_container_1_ng_template_2_Temp
|
|
|
88
88
|
i0.ɵɵtemplate(0, AsyncDropdownComponent_ng_template_10_ng_container_1_ng_template_2_div_0_Template, 2, 1, "div", 25);
|
|
89
89
|
} if (rf & 2) {
|
|
90
90
|
const ctx_r3 = i0.ɵɵnextContext(3);
|
|
91
|
-
i0.ɵɵproperty("ngIf", ctx_r3.loading
|
|
91
|
+
i0.ɵɵproperty("ngIf", ctx_r3.loading && !ctx_r3.customLoader);
|
|
92
92
|
} }
|
|
93
93
|
function AsyncDropdownComponent_ng_template_10_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
94
94
|
i0.ɵɵelementContainerStart(0);
|
|
@@ -134,7 +134,7 @@ function AsyncDropdownComponent_ng_template_10_div_3_ng_container_1_ng_template_
|
|
|
134
134
|
const item_r8 = i0.ɵɵnextContext().$implicit;
|
|
135
135
|
const ctx_r3 = i0.ɵɵnextContext(3);
|
|
136
136
|
i0.ɵɵadvance();
|
|
137
|
-
i0.ɵɵproperty("tabindex", ctx_r3.openPopUpOnTab
|
|
137
|
+
i0.ɵɵproperty("tabindex", ctx_r3.openPopUpOnTab ? 0 : -1);
|
|
138
138
|
i0.ɵɵadvance(3);
|
|
139
139
|
i0.ɵɵtextInterpolate(item_r8[ctx_r3.displayKey()]);
|
|
140
140
|
i0.ɵɵadvance(2);
|
|
@@ -162,7 +162,7 @@ function AsyncDropdownComponent_ng_template_10_div_3_Template(rf, ctx) { if (rf
|
|
|
162
162
|
} if (rf & 2) {
|
|
163
163
|
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
164
164
|
i0.ɵɵadvance();
|
|
165
|
-
i0.ɵɵproperty("ngForOf", ctx_r3.data
|
|
165
|
+
i0.ɵɵproperty("ngForOf", ctx_r3.data);
|
|
166
166
|
} }
|
|
167
167
|
function AsyncDropdownComponent_ng_template_10_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
168
168
|
i0.ɵɵelementStart(0, "div")(1, "div", 37);
|
|
@@ -175,22 +175,20 @@ function AsyncDropdownComponent_ng_template_10_Template(rf, ctx) { if (rf & 1) {
|
|
|
175
175
|
i0.ɵɵelementEnd();
|
|
176
176
|
} if (rf & 2) {
|
|
177
177
|
const ctx_r3 = i0.ɵɵnextContext();
|
|
178
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(7, _c10, ctx_r3.height(), ctx_r3.dropdownListWidth()))("ngClass", i0.ɵɵpureFunction1(10, _c11, ctx_r3.data
|
|
178
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(7, _c10, ctx_r3.height(), ctx_r3.dropdownListWidth()))("ngClass", i0.ɵɵpureFunction1(10, _c11, ctx_r3.data.length === 0))("cdkTrapFocusAutoCapture", ctx_r3.openPopUpOnTab);
|
|
179
179
|
i0.ɵɵadvance();
|
|
180
|
-
i0.ɵɵproperty("ngIf", ctx_r3.loading
|
|
180
|
+
i0.ɵɵproperty("ngIf", ctx_r3.loading);
|
|
181
181
|
i0.ɵɵadvance();
|
|
182
|
-
i0.ɵɵproperty("ngIf", ctx_r3.error
|
|
182
|
+
i0.ɵɵproperty("ngIf", ctx_r3.error);
|
|
183
183
|
i0.ɵɵadvance();
|
|
184
|
-
i0.ɵɵproperty("ngIf", !ctx_r3.loading
|
|
184
|
+
i0.ɵɵproperty("ngIf", !ctx_r3.loading && !ctx_r3.error && ctx_r3.data.length > 0);
|
|
185
185
|
i0.ɵɵadvance();
|
|
186
|
-
i0.ɵɵproperty("ngIf", !ctx_r3.loading
|
|
186
|
+
i0.ɵɵproperty("ngIf", !ctx_r3.loading && !ctx_r3.error && ctx_r3.data.length === 0 && ctx_r3.searchInput.value);
|
|
187
187
|
} }
|
|
188
188
|
export class AsyncDropdownComponent {
|
|
189
|
-
constructor(overlay, viewContainerRef
|
|
189
|
+
constructor(overlay, viewContainerRef) {
|
|
190
190
|
this.overlay = overlay;
|
|
191
191
|
this.viewContainerRef = viewContainerRef;
|
|
192
|
-
this._ngZone = _ngZone;
|
|
193
|
-
this.injector = injector;
|
|
194
192
|
// === Inputs ===
|
|
195
193
|
this.height = input();
|
|
196
194
|
this.width = input();
|
|
@@ -221,26 +219,13 @@ export class AsyncDropdownComponent {
|
|
|
221
219
|
// === Internal state ===
|
|
222
220
|
this.searchInput = new UntypedFormControl();
|
|
223
221
|
this.httpStreamTrigger = new Subject();
|
|
224
|
-
// ===
|
|
225
|
-
this.opened =
|
|
226
|
-
this.loading =
|
|
227
|
-
this.error =
|
|
228
|
-
this.openPopUpOnTab =
|
|
229
|
-
this.data =
|
|
230
|
-
|
|
231
|
-
* Tracks the last selected value to prevent dropdown from reopening when:
|
|
232
|
-
* - Input regains focus after selection (showing selected value)
|
|
233
|
-
* - Parent component re-renders and triggers change detection
|
|
234
|
-
* - User hasn't actually typed a new search query
|
|
235
|
-
*
|
|
236
|
-
* This is necessary because the input serves dual purposes:
|
|
237
|
-
* 1. Search input (user types, triggers API calls)
|
|
238
|
-
* 2. Display selected value (shows what was selected)
|
|
239
|
-
*
|
|
240
|
-
* Without this, setting the input value after selection would trigger
|
|
241
|
-
* the search subscription, causing unwanted API calls and dropdown reopening.
|
|
242
|
-
*/
|
|
243
|
-
this.lastSelectedValue = signal(null);
|
|
222
|
+
// === Component state ===
|
|
223
|
+
this.opened = false;
|
|
224
|
+
this.loading = false;
|
|
225
|
+
this.error = false;
|
|
226
|
+
this.openPopUpOnTab = false;
|
|
227
|
+
this.data = [];
|
|
228
|
+
this.lastSelectedValue = null;
|
|
244
229
|
this.handleControlChanges = (values) => {
|
|
245
230
|
values.forEach((el) => this.selectData(el, true));
|
|
246
231
|
};
|
|
@@ -277,7 +262,7 @@ export class AsyncDropdownComponent {
|
|
|
277
262
|
// This prevents dropdown from reopening when input shows selected value
|
|
278
263
|
filter((query) => {
|
|
279
264
|
const q = query?.trim() ?? '';
|
|
280
|
-
const lastSelected = this.lastSelectedValue
|
|
265
|
+
const lastSelected = this.lastSelectedValue;
|
|
281
266
|
// Allow search if no previous selection OR query is different from selected value
|
|
282
267
|
return !lastSelected || q !== lastSelected;
|
|
283
268
|
}));
|
|
@@ -295,13 +280,13 @@ export class AsyncDropdownComponent {
|
|
|
295
280
|
if (!q || q.length < this.minInputLength()) {
|
|
296
281
|
return false;
|
|
297
282
|
}
|
|
298
|
-
const lastSelected = this.lastSelectedValue
|
|
283
|
+
const lastSelected = this.lastSelectedValue;
|
|
299
284
|
return !lastSelected || q !== lastSelected;
|
|
300
285
|
}))
|
|
301
286
|
.subscribe((query) => {
|
|
302
287
|
const q = query?.trim() ?? '';
|
|
303
|
-
this.loading
|
|
304
|
-
this.error
|
|
288
|
+
this.loading = true;
|
|
289
|
+
this.error = false;
|
|
305
290
|
// Open overlay if not yet open
|
|
306
291
|
if (!this.overlayRef?.hasAttached()) {
|
|
307
292
|
this.openDropdown(this.dd, this.origin.nativeElement);
|
|
@@ -309,15 +294,15 @@ export class AsyncDropdownComponent {
|
|
|
309
294
|
// Call HTTP stream
|
|
310
295
|
this.httpStream()(q).subscribe({
|
|
311
296
|
next: (list) => {
|
|
312
|
-
this.loading
|
|
313
|
-
this.data
|
|
297
|
+
this.loading = false;
|
|
298
|
+
this.data = list;
|
|
314
299
|
if (!this.overlayRef?.hasAttached() && list.length > 0) {
|
|
315
300
|
this.openDropdown(this.dd, this.origin.nativeElement);
|
|
316
301
|
}
|
|
317
302
|
},
|
|
318
303
|
error: () => {
|
|
319
|
-
this.loading
|
|
320
|
-
this.error
|
|
304
|
+
this.loading = false;
|
|
305
|
+
this.error = true;
|
|
321
306
|
},
|
|
322
307
|
});
|
|
323
308
|
});
|
|
@@ -383,16 +368,21 @@ export class AsyncDropdownComponent {
|
|
|
383
368
|
}
|
|
384
369
|
this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));
|
|
385
370
|
this.overlayRef.backdropClick().subscribe(() => this.closeDropdown());
|
|
386
|
-
this.opened
|
|
371
|
+
this.opened = true;
|
|
387
372
|
}
|
|
388
373
|
closeDropdown() {
|
|
389
|
-
this.opened
|
|
390
|
-
this.openPopUpOnTab
|
|
374
|
+
this.opened = false;
|
|
375
|
+
this.openPopUpOnTab = false;
|
|
391
376
|
this.overlayRef?.detach();
|
|
392
|
-
this.data
|
|
377
|
+
this.data = [];
|
|
393
378
|
}
|
|
394
379
|
enablePopUpOnTab() {
|
|
395
|
-
this.openPopUpOnTab
|
|
380
|
+
this.openPopUpOnTab = true;
|
|
381
|
+
setTimeout(() => {
|
|
382
|
+
const firstItem = this.overlayRef?.overlayElement
|
|
383
|
+
?.querySelector('.item[tabindex="0"]');
|
|
384
|
+
firstItem?.focus();
|
|
385
|
+
});
|
|
396
386
|
}
|
|
397
387
|
handleKeyDown(event) {
|
|
398
388
|
if (event.key === 'Escape') {
|
|
@@ -422,7 +412,7 @@ export class AsyncDropdownComponent {
|
|
|
422
412
|
// Use emitEvent: false to prevent triggering valueChanges subscription
|
|
423
413
|
this.searchInput.patchValue(selectedValue, { emitEvent: false });
|
|
424
414
|
// Store selected value - RxJS filter will prevent reopening with same value
|
|
425
|
-
this.lastSelectedValue
|
|
415
|
+
this.lastSelectedValue = selectedValue;
|
|
426
416
|
this.setControlValue(item);
|
|
427
417
|
}
|
|
428
418
|
else {
|
|
@@ -437,7 +427,7 @@ export class AsyncDropdownComponent {
|
|
|
437
427
|
}, 10);
|
|
438
428
|
}
|
|
439
429
|
this.searchInput.patchValue('');
|
|
440
|
-
this.data
|
|
430
|
+
this.data = [];
|
|
441
431
|
}
|
|
442
432
|
this.closeDropdown();
|
|
443
433
|
// Blur input to prevent focus events from immediately triggering search
|
|
@@ -465,8 +455,8 @@ export class AsyncDropdownComponent {
|
|
|
465
455
|
*/
|
|
466
456
|
removeInputValue() {
|
|
467
457
|
this.searchInput.reset();
|
|
468
|
-
this.data
|
|
469
|
-
this.lastSelectedValue
|
|
458
|
+
this.data = [];
|
|
459
|
+
this.lastSelectedValue = null;
|
|
470
460
|
this.clear.emit(true);
|
|
471
461
|
}
|
|
472
462
|
/**
|
|
@@ -481,30 +471,30 @@ export class AsyncDropdownComponent {
|
|
|
481
471
|
*/
|
|
482
472
|
defaultCall() {
|
|
483
473
|
const currentValue = this.searchInput.value?.trim() || '';
|
|
484
|
-
const lastSelected = this.lastSelectedValue
|
|
474
|
+
const lastSelected = this.lastSelectedValue;
|
|
485
475
|
// Don't open if value matches last selected (user hasn't typed new query)
|
|
486
476
|
if (lastSelected && currentValue === lastSelected) {
|
|
487
477
|
return;
|
|
488
478
|
}
|
|
489
479
|
// Only open on focus if minInputLength allows it
|
|
490
480
|
if (this.minInputLength() === -1) {
|
|
491
|
-
this.loading
|
|
481
|
+
this.loading = true;
|
|
492
482
|
this.httpStream()(this.searchInput.value || '').subscribe({
|
|
493
483
|
next: (list) => {
|
|
494
|
-
this.loading
|
|
495
|
-
this.data
|
|
484
|
+
this.loading = false;
|
|
485
|
+
this.data = list;
|
|
496
486
|
if (!this.overlayRef?.hasAttached() && list.length > 0) {
|
|
497
487
|
this.openDropdown(this.dd, this.origin.nativeElement);
|
|
498
488
|
}
|
|
499
489
|
},
|
|
500
490
|
error: () => {
|
|
501
|
-
this.loading
|
|
502
|
-
this.error
|
|
491
|
+
this.loading = false;
|
|
492
|
+
this.error = true;
|
|
503
493
|
},
|
|
504
494
|
});
|
|
505
495
|
}
|
|
506
496
|
}
|
|
507
|
-
static { this.ɵfac = function AsyncDropdownComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AsyncDropdownComponent)(i0.ɵɵdirectiveInject(i1.Overlay), i0.ɵɵdirectiveInject(i0.ViewContainerRef)
|
|
497
|
+
static { this.ɵfac = function AsyncDropdownComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AsyncDropdownComponent)(i0.ɵɵdirectiveInject(i1.Overlay), i0.ɵɵdirectiveInject(i0.ViewContainerRef)); }; }
|
|
508
498
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AsyncDropdownComponent, selectors: [["mis-async-search-dropdown"]], contentQueries: function AsyncDropdownComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
|
509
499
|
i0.ɵɵcontentQuery(dirIndex, _c0, 5);
|
|
510
500
|
i0.ɵɵcontentQuery(dirIndex, _c1, 5);
|
|
@@ -538,7 +528,7 @@ export class AsyncDropdownComponent {
|
|
|
538
528
|
} if (rf & 2) {
|
|
539
529
|
const defaultSearchIcon_r11 = i0.ɵɵreference(6);
|
|
540
530
|
i0.ɵɵstyleProp("width", ctx.width());
|
|
541
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(11, _c5, ctx.opened
|
|
531
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(11, _c5, ctx.opened, ctx.disabled(), ctx.readonly()));
|
|
542
532
|
i0.ɵɵadvance(2);
|
|
543
533
|
i0.ɵɵproperty("ngIf", ctx.multi() && ctx.selectedItems.length > 0);
|
|
544
534
|
i0.ɵɵadvance(2);
|
|
@@ -552,8 +542,8 @@ export class AsyncDropdownComponent {
|
|
|
552
542
|
}
|
|
553
543
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AsyncDropdownComponent, [{
|
|
554
544
|
type: Component,
|
|
555
|
-
args: [{ selector: 'mis-async-search-dropdown', template: "<div class=\"dd-wrapper\"\n [ngClass]=\"{ opened: opened(), disabled: disabled(), readonly: readonly() }\"\n [style.width]=\"width()\"\n #ddBtn>\n \n <!-- Selected chips for multi-select -->\n <div class=\"selected-list\" *ngIf=\"multi() && selectedItems.length > 0\">\n <div class=\"chip\"\n [ngClass]=\"{ 'chip-md': size() === 'md', 'chip-sm': size() === 'sm' }\"\n *ngFor=\"let item of selectedItems\">\n <span [ngClass]=\"{ 'h6': size() === 'md', 'h8-b': size() === 'sm' }\"\n style=\"margin-right: 4px;\">\n {{ item[displayKey()] }}\n </span>\n <span class=\"icon-ic-navigation-cancel-24\"\n [ngStyle]=\"{ cursor: 'pointer', 'font-size': size() === 'sm' ? '12px' : '14px' }\"\n tabindex=\"0\"\n (click)=\"removeItem(item)\"\n (keyup.enter)=\"removeItem(item)\">\n </span>\n </div>\n </div>\n\n <!-- Search input -->\n <div class=\"search-input\">\n <!-- Placeholder icon -->\n <div *ngIf=\"customPlaceholderIcon(); else defaultSearchIcon\" class=\"custom-icon\">\n <img [src]=\"customPlaceholderIcon()\" alt=\"customIcon\" />\n </div>\n <ng-template #defaultSearchIcon>\n <span class=\"icon-ic-action-search-24\"></span>\n </ng-template>\n\n <!-- Input field -->\n <input [ngClass]=\"{ 'ip-md': size() === 'md', 'ip-sm': size() === 'sm' }\"\n [placeholder]=\"placeholder()\"\n [formControl]=\"searchInput\"\n [attr.tabindex]=\"0\"\n type=\"text\"\n class=\"black-text h6\"\n #input\n (focus)=\"defaultCall()\"\n (keyup.enter)=\"enablePopUpOnTab()\"\n (copy)=\"disableCopyPaste() ? false : true\"\n (paste)=\"disableCopyPaste() ? false : true\"\n (cut)=\"disableCopyPaste() ? false : true\"/>\n\n <!-- Clear input -->\n <div class=\"icon-ic-navigation-cancel-24 croos-icon\"\n *ngIf=\"searchInput.value?.length\"\n tabindex=\"0\"\n (click)=\"removeInputValue()\"\n (keyup.enter)=\"removeInputValue()\">\n </div>\n </div>\n</div>\n\n<!-- Dropdown template -->\n<ng-template #dd>\n <div class=\"dd-list\"\n [ngStyle]=\"{ 'max-height': height(), 'width': dropdownListWidth() }\"\n [ngClass]=\"{ 'dd-list-pd': data().length === 0 }\"\n tabindex=\"0\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"openPopUpOnTab()\">\n\n <!-- Loader -->\n <ng-container *ngIf=\"loading()\">\n <ng-container *ngIf=\"customLoader; else defaultLoader\" [ngTemplateOutlet]=\"customLoader\"></ng-container>\n <ng-template #defaultLoader>\n <div class=\"status-container\" *ngIf=\"loading() && !customLoader\">\n <mis-loader [mobileView]=\"true\"></mis-loader>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Error -->\n <ng-container *ngIf=\"error()\">\n <div class=\"status-container\">\n <p>Unknown error has occurred, <br/> Please try again later.</p>\n </div>\n </ng-container>\n\n <!-- Data list -->\n <div *ngIf=\"!loading() && !error() && data().length > 0\">\n <ng-container *ngFor=\"let item of data()\">\n <div (click)=\"selectData(item, false)\" (keyup.enter)=\"selectData(item, false)\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n\n <!-- Custom item -->\n <ng-container *ngIf=\"customItem; else standardItem\">\n <ng-container [ngTemplateOutlet]=\"customItem\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-container>\n\n <!-- Standard item -->\n <ng-template #standardItem>\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div class=\"item\"\n [tabindex]=\"openPopUpOnTab() ? 0 : -1\"\n (click)=\"selectData(item, false)\"\n (keyup.enter)=\"selectData(item, false)\">\n <div class=\"value\">\n <div class=\"primary\">{{ item[displayKey()] }}</div>\n <div class=\"secondary\">{{ item[secondaryDisplayKey()] }}</div>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </div>\n\n <!-- No data -->\n <div *ngIf=\"!loading() && !error() && data().length === 0 && searchInput.value\">\n <div class=\"data-not-found\">No Data Available</div>\n </div>\n </div>\n</ng-template>\n", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-muted-secondary: #E5E5E5;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.dd-wrapper{background:var(--bg-primary, #FFFFFF);border:1px solid var(--border-primary, #E0E0E0);box-sizing:border-box;border-radius:4px;display:block;cursor:pointer;outline:none}.dd-wrapper.opened,.dd-wrapper:hover{background:var(--bg-tertiary, #F5F5F5)}.dd-wrapper .selected-list{display:flex;justify-content:flex-start;flex-wrap:wrap;gap:4px;padding:8px 16px}.dd-wrapper:focus-within{border-color:var(--brand-primary, #0937B2);background:var(--bg-tertiary, #F5F5F5)}.dd-wrapper.disabled,.dd-wrapper.readonly{pointer-events:none}.search-input{position:relative;border-radius:8px}.search-input input{box-sizing:border-box;outline:none;padding-left:40px;padding-right:24px;background-color:transparent;color:var(--text-primary, #181F33);border-radius:inherit;border:1px solid transparent;width:100%}.search-input span,.search-input .custom-icon{position:absolute;top:50%;transform:translateY(-50%);font-size:24px;line-height:24px;height:24px;left:8px}.search-input .croos-icon{position:absolute;top:50%;transform:translateY(-50%);font-size:16px;width:24px;line-height:16px;height:16px;right:0}.dd-list{padding:8px 0;max-height:200px;background:var(--bg-primary, #FFFFFF);box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:8px;min-width:100%;overflow-y:auto}.dd-list::-webkit-scrollbar{width:8px;border-radius:4px}.dd-list::-webkit-scrollbar-track{background:var(--bg-primary, #FFFFFF);border-radius:4px}.dd-list::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:4px}.dd-list::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary, #929DAB)}.dd-list .item{padding:8px 16px;cursor:pointer}.dd-list .item .disabled{color:var(--text-secondary, #6A737D)!important;pointer-events:none}.dd-list .item .value{display:flex;justify-content:space-between;align-items:center}.dd-list .item .value .primary,.dd-list .item .value .secondary{font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-primary, #181F33)}.dd-list .item .reason{font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D)}.dd-list .item:hover:not(.disabled){background:var(--brand-primary-hover, #F0F3FA)}.dd-list .data-not-found{display:flex;justify-content:center;align-items:center;font-size:16px;padding:8px}.dd-list-pd{padding:unset}.chip{display:inline-flex;align-items:center;background:var(--border-primary, #E0E0E0);overflow-wrap:anywhere;cursor:default}.chip span{color:var(--text-primary, #181F33)}.chip-md{border-radius:16px;padding:4px 12px}.chip-sm{border-radius:6px;padding:4px 8px;text-transform:uppercase}.ip-md{padding-top:8px;padding-bottom:8px}.ip-sm{padding-top:3px;padding-bottom:3px}.status-container{display:flex;justify-content:center;align-items:center;height:128px}.status-container p{text-align:center}::ng-deep #spinner{position:relative!important}\n"] }]
|
|
556
|
-
}], () => [{ type: i1.Overlay }, { type: i0.ViewContainerRef }
|
|
545
|
+
args: [{ selector: 'mis-async-search-dropdown', template: "<div class=\"dd-wrapper\"\n [ngClass]=\"{ opened: opened, disabled: disabled(), readonly: readonly() }\"\n [style.width]=\"width()\"\n #ddBtn>\n \n <!-- Selected chips for multi-select -->\n <div class=\"selected-list\" *ngIf=\"multi() && selectedItems.length > 0\">\n <div class=\"chip\"\n [ngClass]=\"{ 'chip-md': size() === 'md', 'chip-sm': size() === 'sm' }\"\n *ngFor=\"let item of selectedItems\">\n <span [ngClass]=\"{ 'h6': size() === 'md', 'h8-b': size() === 'sm' }\"\n style=\"margin-right: 4px;\">\n {{ item[displayKey()] }}\n </span>\n <span class=\"icon-ic-navigation-cancel-24\"\n [ngStyle]=\"{ cursor: 'pointer', 'font-size': size() === 'sm' ? '12px' : '14px' }\"\n tabindex=\"0\"\n (click)=\"removeItem(item)\"\n (keyup.enter)=\"removeItem(item)\">\n </span>\n </div>\n </div>\n\n <!-- Search input -->\n <div class=\"search-input\">\n <!-- Placeholder icon -->\n <div *ngIf=\"customPlaceholderIcon(); else defaultSearchIcon\" class=\"custom-icon\">\n <img [src]=\"customPlaceholderIcon()\" alt=\"customIcon\" />\n </div>\n <ng-template #defaultSearchIcon>\n <span class=\"icon-ic-action-search-24\"></span>\n </ng-template>\n\n <!-- Input field -->\n <input [ngClass]=\"{ 'ip-md': size() === 'md', 'ip-sm': size() === 'sm' }\"\n [placeholder]=\"placeholder()\"\n [formControl]=\"searchInput\"\n [attr.tabindex]=\"0\"\n type=\"text\"\n class=\"black-text h6\"\n #input\n (focus)=\"defaultCall()\"\n (keyup.enter)=\"enablePopUpOnTab()\"\n (copy)=\"disableCopyPaste() ? false : true\"\n (paste)=\"disableCopyPaste() ? false : true\"\n (cut)=\"disableCopyPaste() ? false : true\"/>\n\n <!-- Clear input -->\n <div class=\"icon-ic-navigation-cancel-24 croos-icon\"\n *ngIf=\"searchInput.value?.length\"\n tabindex=\"0\"\n (click)=\"removeInputValue()\"\n (keyup.enter)=\"removeInputValue()\">\n </div>\n </div>\n</div>\n\n<!-- Dropdown template -->\n<ng-template #dd>\n <div class=\"dd-list\"\n [ngStyle]=\"{ 'max-height': height(), 'width': dropdownListWidth() }\"\n [ngClass]=\"{ 'dd-list-pd': data.length === 0 }\"\n tabindex=\"0\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"openPopUpOnTab\">\n\n <!-- Loader -->\n <ng-container *ngIf=\"loading\">\n <ng-container *ngIf=\"customLoader; else defaultLoader\" [ngTemplateOutlet]=\"customLoader\"></ng-container>\n <ng-template #defaultLoader>\n <div class=\"status-container\" *ngIf=\"loading && !customLoader\">\n <mis-loader [mobileView]=\"true\"></mis-loader>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Error -->\n <ng-container *ngIf=\"error\">\n <div class=\"status-container\">\n <p>Unknown error has occurred, <br/> Please try again later.</p>\n </div>\n </ng-container>\n\n <!-- Data list -->\n <div *ngIf=\"!loading && !error && data.length > 0\">\n <ng-container *ngFor=\"let item of data\">\n <div (click)=\"selectData(item, false)\" (keyup.enter)=\"selectData(item, false)\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n\n <!-- Custom item -->\n <ng-container *ngIf=\"customItem; else standardItem\">\n <ng-container [ngTemplateOutlet]=\"customItem\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-container>\n\n <!-- Standard item -->\n <ng-template #standardItem>\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div class=\"item\"\n [tabindex]=\"openPopUpOnTab ? 0 : -1\"\n (click)=\"selectData(item, false)\"\n (keyup.enter)=\"selectData(item, false)\">\n <div class=\"value\">\n <div class=\"primary\">{{ item[displayKey()] }}</div>\n <div class=\"secondary\">{{ item[secondaryDisplayKey()] }}</div>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </div>\n\n <!-- No data -->\n <div *ngIf=\"!loading && !error && data.length === 0 && searchInput.value\">\n <div class=\"data-not-found\">No Data Available</div>\n </div>\n </div>\n</ng-template>\n", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-muted-secondary: #E5E5E5;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.dd-wrapper{background:var(--bg-primary, #FFFFFF);border:1px solid var(--border-primary, #E0E0E0);box-sizing:border-box;border-radius:4px;display:block;cursor:pointer;outline:none}.dd-wrapper.opened,.dd-wrapper:hover{background:var(--bg-tertiary, #F5F5F5)}.dd-wrapper .selected-list{display:flex;justify-content:flex-start;flex-wrap:wrap;gap:4px;padding:8px 16px}.dd-wrapper:focus-within{border-color:var(--brand-primary, #0937B2);background:var(--bg-tertiary, #F5F5F5)}.dd-wrapper.disabled,.dd-wrapper.readonly{pointer-events:none}.search-input{position:relative;border-radius:8px}.search-input input{box-sizing:border-box;outline:none;padding-left:40px;padding-right:24px;background-color:transparent;color:var(--text-primary, #181F33);border-radius:inherit;border:1px solid transparent;width:100%}.search-input span,.search-input .custom-icon{position:absolute;top:50%;transform:translateY(-50%);font-size:24px;line-height:24px;height:24px;left:8px}.search-input .croos-icon{position:absolute;top:50%;transform:translateY(-50%);font-size:16px;width:24px;line-height:16px;height:16px;right:0}.dd-list{padding:8px 0;max-height:200px;background:var(--bg-primary, #FFFFFF);box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:8px;min-width:100%;overflow-y:auto}.dd-list::-webkit-scrollbar{width:8px;border-radius:4px}.dd-list::-webkit-scrollbar-track{background:var(--bg-primary, #FFFFFF);border-radius:4px}.dd-list::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:4px}.dd-list::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary, #929DAB)}.dd-list .item{padding:8px 16px;cursor:pointer}.dd-list .item .disabled{color:var(--text-secondary, #6A737D)!important;pointer-events:none}.dd-list .item .value{display:flex;justify-content:space-between;align-items:center}.dd-list .item .value .primary,.dd-list .item .value .secondary{font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-primary, #181F33)}.dd-list .item .reason{font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D)}.dd-list .item:hover:not(.disabled){background:var(--brand-primary-hover, #F0F3FA)}.dd-list .data-not-found{display:flex;justify-content:center;align-items:center;font-size:16px;padding:8px}.dd-list-pd{padding:unset}.chip{display:inline-flex;align-items:center;background:var(--border-primary, #E0E0E0);overflow-wrap:anywhere;cursor:default}.chip span{color:var(--text-primary, #181F33)}.chip-md{border-radius:16px;padding:4px 12px}.chip-sm{border-radius:6px;padding:4px 8px;text-transform:uppercase}.ip-md{padding-top:8px;padding-bottom:8px}.ip-sm{padding-top:3px;padding-bottom:3px}.status-container{display:flex;justify-content:center;align-items:center;height:128px}.status-container p{text-align:center}::ng-deep #spinner{position:relative!important}\n"] }]
|
|
546
|
+
}], () => [{ type: i1.Overlay }, { type: i0.ViewContainerRef }], { origin: [{
|
|
557
547
|
type: ViewChild,
|
|
558
548
|
args: ['ddBtn', { static: false }]
|
|
559
549
|
}], inputRef: [{
|
|
@@ -573,4 +563,4 @@ export class AsyncDropdownComponent {
|
|
|
573
563
|
args: ['document:keydown', ['$event']]
|
|
574
564
|
}] }); })();
|
|
575
565
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AsyncDropdownComponent, { className: "AsyncDropdownComponent" }); })();
|
|
576
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvYXN5bmMtc2VhcmNoLWRyb3Bkb3duL2FzeW5jLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2FzeW5jLXNlYXJjaC1kcm9wZG93bi9hc3luYy1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBTVosU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBRUwsYUFBYSxFQUViLHNCQUFzQixHQUN2QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDYjlDLEFBSEYsK0JBRXdDLGVBRUw7SUFDL0IsWUFDRjtJQUFBLGlCQUFPO0lBQ1AsZ0NBSXVDO0lBQWpDLEFBREEsaU5BQVMsMEJBQWdCLEtBQUMsZ05BQ1gsMEJBQWdCLEtBQUM7SUFFeEMsQUFERSxpQkFBTyxFQUNIOzs7O0lBWkQsb0dBQXNFO0lBRW5FLGNBQThEO0lBQTlELG9HQUE4RDtJQUVsRSxjQUNGO0lBREUsNkRBQ0Y7SUFFTSxjQUFpRjtJQUFqRiwrRkFBaUY7OztJQVQzRiwrQkFBdUU7SUFDckUsK0VBRXdDO0lBWTFDLGlCQUFNOzs7SUFaa0IsY0FBZ0I7SUFBaEIsOENBQWdCOzs7SUFpQnRDLCtCQUFpRjtJQUMvRSwwQkFBd0Q7SUFDMUQsaUJBQU07OztJQURDLGNBQStCO0lBQS9CLHNFQUErQjs7O0lBR3BDLDJCQUE4Qzs7OztJQWtCaEQsK0JBSXdDO0lBQW5DLEFBREEsK0tBQVMseUJBQWtCLEtBQUMsOEtBQ2IseUJBQWtCLEtBQUM7SUFDdkMsaUJBQU07OztJQWVKLDRCQUF3Rzs7O0lBQWpELHNEQUFpQzs7O0lBRXRGLCtCQUFpRTtJQUMvRCxpQ0FBNkM7SUFDL0MsaUJBQU07O0lBRFEsY0FBbUI7SUFBbkIsaUNBQW1COzs7SUFEakMsb0hBQWlFOzs7SUFBbEMsK0RBQWdDOzs7SUFIbkUsNkJBQWdDO0lBRTlCLEFBREEsd0hBQXlGLHlJQUM3RDs7Ozs7SUFEYixjQUFvQjtJQUFBLEFBQXBCLDBDQUFvQiw4QkFBa0I7OztJQVN2RCw2QkFBOEI7SUFFMUIsQUFERiwrQkFBOEIsUUFDekI7SUFBQSw0Q0FBNEI7SUFBQSxxQkFBSztJQUFDLHdDQUF1QjtJQUM5RCxBQUQ4RCxpQkFBSSxFQUM1RDs7OztJQVVGLDZCQUFvRDtJQUNsRCw0QkFDNkU7Ozs7O0lBRC9ELGNBQStCO0lBQy9CLEFBREEsb0RBQStCLGlFQUNnQjs7OztJQUs3RCwwQkFBeUM7SUFDekMsK0JBRzZDO0lBQXhDLEFBREEsMFFBQVMsMkJBQWlCLEtBQUssQ0FBQyxLQUFDLHlRQUNsQiwyQkFBaUIsS0FBSyxDQUFDLEtBQUM7SUFFeEMsQUFERiwrQkFBbUIsY0FDSTtJQUFBLFlBQXdCO0lBQUEsaUJBQU07SUFDbkQsK0JBQXVCO0lBQUEsWUFBaUM7SUFFNUQsQUFERSxBQUQwRCxpQkFBTSxFQUMxRCxFQUNGOzs7O0lBUEQsY0FBc0M7SUFBdEMsMkRBQXNDO0lBSWxCLGVBQXdCO0lBQXhCLGtEQUF3QjtJQUN0QixlQUFpQztJQUFqQywyREFBaUM7Ozs7SUFuQmxFLDZCQUEwQztJQUN4QywrQkFBK0U7SUFBeEMsQUFBbEMsd09BQVMsMkJBQWlCLEtBQUssQ0FBQyxLQUFDLHVPQUFnQiwyQkFBaUIsS0FBSyxDQUFDLEtBQUM7SUFDNUUsMEJBQXlDO0lBU3pDLEFBTkEsOEhBQW9ELCtJQU16QjtJQVk3QixpQkFBTTs7Ozs7SUFsQlcsZUFBa0I7SUFBQSxBQUFsQix3Q0FBa0IsOEJBQWlCOzs7SUFOeEQsMkJBQXlEO0lBQ3ZELCtHQUEwQztJQXlCNUMsaUJBQU07OztJQXpCMkIsY0FBUztJQUFULHVDQUFTOzs7SUE2QnhDLEFBREYsMkJBQWdGLGNBQ2xEO0lBQUEsaUNBQWlCO0lBQy9DLEFBRCtDLGlCQUFNLEVBQy9DOzs7SUF4RFIsK0JBS2tEO0lBaURoRCxBQTdCQSxBQVBBLEFBVkEseUdBQWdDLDRGQVVGLDBFQU8yQiwwRUE2QnVCO0lBR2xGLGlCQUFNOzs7SUFwREQsQUFIQSxBQURBLGtHQUFvRSxxRUFDbkIsb0RBR0w7SUFHaEMsY0FBZTtJQUFmLHVDQUFlO0lBVWYsY0FBYTtJQUFiLHFDQUFhO0lBT3RCLGNBQWlEO0lBQWpELHVGQUFpRDtJQTZCakQsY0FBd0U7SUFBeEUscUhBQXdFOztBRGpGbEYsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNVLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxPQUFlLEVBQ2YsUUFBa0I7UUFIbEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRzVCLGlCQUFpQjtRQUNqQixXQUFNLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDekIsVUFBSyxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3hCLFNBQUksR0FBRyxLQUFLLENBQWMsSUFBSSxDQUFDLENBQUM7UUFDaEMsZUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQThCLENBQUM7UUFDMUQsZUFBVSxHQUFHLEtBQUssRUFBTyxDQUFDO1FBQzFCLHdCQUFtQixHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4QyxnQkFBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixpQkFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixVQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLGNBQVMsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUM1QixZQUFPLEdBQUcsS0FBSyxDQUF5QixJQUFJLENBQUMsQ0FBQztRQUM5QyxhQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLGFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLHNCQUFpQixHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3BDLHlCQUFvQixHQUFHLEtBQUssQ0FBbUIsTUFBTSxDQUFDLENBQUM7UUFDdkQsMEJBQXFCLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLGVBQVUsR0FBRyxLQUFLLENBQW1CLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoRCxnQkFBVyxHQUFHLEtBQUssRUFBTyxDQUFDO1FBRTNCLGtCQUFrQjtRQUNsQixhQUFRLEdBQUcsTUFBTSxFQUEyQixDQUFDO1FBQzdDLHNCQUFpQixHQUFHLE1BQU0sRUFBVSxDQUFDO1FBQ3JDLFVBQUssR0FBRyxNQUFNLEVBQVcsQ0FBQztRQUMxQixpQkFBWSxHQUFHLE1BQU0sRUFBYSxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsTUFBTSxFQUFhLENBQUM7UUFTbEMseUJBQXlCO1FBQ3pCLGdCQUFXLEdBQXVCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUNuRCxzQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBS2xELGtCQUFrQjtRQUNsQixXQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLFlBQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixTQUFJLEdBQUcsTUFBTSxDQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRS9COzs7Ozs7Ozs7Ozs7V0FZRztRQUNLLHNCQUFpQixHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFrSWhELHlCQUFvQixHQUFHLENBQUMsTUFBbUIsRUFBRSxFQUFFO1lBQ3JELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDO0lBck1DLENBQUM7SUFtRUosb0JBQW9CO0lBQ3BCLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFFRDs7Ozs7Ozs7V0FRRztRQUNILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN6RCxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDOUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUNqQyxvQkFBb0IsRUFBRTtRQUN0Qiw4RUFBOEU7UUFDOUUsTUFBTSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDdkIsTUFBTSxDQUFDLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7Z0JBQzNDLHVDQUF1QztnQkFDdkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztRQUNGLDREQUE0RDtRQUM1RCx3RUFBd0U7UUFDeEUsTUFBTSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDdkIsTUFBTSxDQUFDLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM5QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM5QyxrRkFBa0Y7WUFDbEYsT0FBTyxDQUFDLFlBQVksSUFBSSxDQUFDLEtBQUssWUFBWSxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRjs7OztXQUlHO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDdEUsSUFBSTtRQUNILDJEQUEyRDtRQUMzRCxNQUFNLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUN2QixNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzlCLDBFQUEwRTtZQUMxRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7Z0JBQzNDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxZQUFZLElBQUksQ0FBQyxLQUFLLFlBQVksQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzNCLE1BQU0sQ0FBQyxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFFOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdEIsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFFRCxtQkFBbUI7WUFDbkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDN0IsSUFBSSxFQUFFLENBQUMsSUFBaUIsRUFBRSxFQUFFO29CQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ3ZELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUN4RCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZCLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FDL0QsSUFBSSxDQUFDLG9CQUFvQixDQUMxQixDQUFDO1FBRUYsbUNBQW1DO1FBQ25DLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsNkJBQTZCO1FBQzdCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFNTyxZQUFZLENBQUMsUUFBOEIsRUFBRSxNQUFtQjtRQUN0RSxNQUFNLGVBQWUsR0FBRztZQUN0QixJQUFJLHNCQUFzQixDQUN4QixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUN2QyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUN0QyxDQUFDLEVBQ0QsQ0FBQyxDQUNGO1lBQ0QsSUFBSSxzQkFBc0IsQ0FDeEIsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFDckMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFDcEMsQ0FBQyxFQUNELENBQUMsQ0FDRjtTQUNGLENBQUM7UUFDRixNQUFNLFlBQVksR0FBRztZQUNuQixJQUFJLHNCQUFzQixDQUN4QixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUNwQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUN6QyxDQUFDLEVBQ0QsQ0FBQyxDQUFDLENBQ0g7WUFDRCxJQUFJLHNCQUFzQixDQUN4QixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUNsQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUN2QyxDQUFDLEVBQ0QsQ0FBQyxDQUFDLENBQ0g7U0FDRixDQUFDO1FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTzthQUNsQyxRQUFRLEVBQUU7YUFDVixtQkFBbUIsQ0FBQyxNQUFNLENBQUM7YUFDM0IsYUFBYSxDQUFDO1lBQ2IsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7WUFDMUYsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDckYsQ0FBQzthQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsQixNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUNoQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixhQUFhLEVBQUUsa0NBQWtDO1lBQ2pELGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtZQUMxRCxnQkFBZ0I7WUFDaEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1NBQzFCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBR0QsYUFBYSxDQUFDLEtBQW9CO1FBQ2hDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsVUFBVSxDQUFDLElBQWUsRUFBRSxtQkFBbUIsR0FBRyxJQUFJO1FBQ3BELElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRTFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNsQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDOUMsb0ZBQW9GO1lBQ3BGLHVFQUF1RTtZQUN2RSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUVqRSw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUN6QixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDL0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFckIsd0VBQXdFO1FBQ3hFLDJFQUEyRTtRQUMzRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBZTtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBOEI7UUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILFdBQVc7UUFDVCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDMUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFOUMsMEVBQTBFO1FBQzFFLElBQUksWUFBWSxJQUFJLFlBQVksS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUNsRCxPQUFPO1FBQ1QsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3hELElBQUksRUFBRSxDQUFDLElBQWlCLEVBQUUsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDeEQsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7dUhBMVlVLHNCQUFzQjtvRUFBdEIsc0JBQXNCOzs7Ozs7Ozs7Ozs7Ozs7OztZQUF0QixxR0FBQSx5QkFBcUIsaUNBQUM7OztZQ2hDbkMsaUNBR1k7WUFHVix1RUFBdUU7WUFrQnZFLDhCQUEwQjtZQUt4QixBQUhBLHVFQUFpRiwyR0FHakQ7WUFLaEMsb0NBV2tEO1lBQTNDLEFBREEsQUFEQSxBQURBLEFBREEsd0lBQVMsaUJBQWEsS0FBQyx1SUFDUixzQkFBa0IsS0FBQyx5SEFDMUIsc0JBQWtCLEdBQUcsS0FBSyxHQUFHLElBQUksS0FBQywySEFDakMsc0JBQWtCLEdBQUcsS0FBSyxHQUFHLElBQUksS0FBQyx1SEFDcEMsc0JBQWtCLEdBQUcsS0FBSyxHQUFHLElBQUksS0FBQztZQVhoRCxpQkFXa0Q7WUFHbEQsd0VBSXdDO1lBRzVDLEFBREUsaUJBQU0sRUFDRjtZQUdOLDJIQUFpQjs7O1lBeERaLG9DQUF1QjtZQUR2QixtR0FBNEU7WUFLbkQsZUFBeUM7WUFBekMsa0VBQXlDO1lBb0I3RCxlQUErQjtZQUFBLEFBQS9CLGtEQUErQixtQ0FBc0I7WUFRcEQsZUFBa0U7WUFFbEUsQUFEQSxBQURBLCtGQUFrRSxrQ0FDckMsZ0NBQ0Y7O1lBYTVCLGVBQStCO1lBQS9CLDBGQUErQjs7O2lGRGpCNUIsc0JBQXNCO2NBTGxDLFNBQVM7MkJBQ0UsMkJBQTJCO21IQTBDRSxNQUFNO2tCQUE1QyxTQUFTO21CQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDRSxRQUFRO2tCQUE5QyxTQUFTO21CQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDRCxFQUFFO2tCQUFyQyxTQUFTO21CQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDZ0IsVUFBVTtrQkFBM0QsWUFBWTttQkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQ00sWUFBWTtrQkFBakUsWUFBWTttQkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUF3T3BELGFBQWE7a0JBRFosWUFBWTttQkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7a0ZBalJqQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3RvcixcbiAgTmdab25lLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIE92ZXJsYXksXG4gIE92ZXJsYXlDb25maWcsXG4gIE92ZXJsYXlSZWYsXG4gIENvbm5lY3Rpb25Qb3NpdGlvblBhaXIsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBzaWduYWwsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcCwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG50eXBlIElMaXN0RGF0YSA9IGFueTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWlzLWFzeW5jLXNlYXJjaC1kcm9wZG93bicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3luYy1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FzeW5jLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEFzeW5jRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7fVxuXG4gIC8vID09PSBJbnB1dHMgPT09XG4gIGhlaWdodCA9IGlucHV0PHN0cmluZz4oKTtcbiAgd2lkdGggPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHNpemUgPSBpbnB1dDwnbWQnIHwgJ3NtJz4oJ21kJyk7XG4gIGh0dHBTdHJlYW0gPSBpbnB1dC5yZXF1aXJlZDwoc2VhcmNoS2V5OiBzdHJpbmcpID0+IGFueT4oKTtcbiAgZGlzcGxheUtleSA9IGlucHV0PGFueT4oKTtcbiAgc2Vjb25kYXJ5RGlzcGxheUtleSA9IGlucHV0PHN0cmluZz4oJycpO1xuICBwbGFjZWhvbGRlciA9IGlucHV0KCdTZWxlY3QnKTtcbiAgZGVib3VuY2VUaW1lID0gaW5wdXQoNDAwKTtcbiAgbWluSW5wdXRMZW5ndGggPSBpbnB1dCgyKTtcbiAgbXVsdGkgPSBpbnB1dChmYWxzZSk7XG4gIHVuaXF1ZUtleSA9IGlucHV0PHN0cmluZz4oKTtcbiAgY29udHJvbCA9IGlucHV0PEFic3RyYWN0Q29udHJvbCB8IG51bGw+KG51bGwpO1xuICBkaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRpc2FibGVDb3B5UGFzdGUgPSBpbnB1dChmYWxzZSk7XG4gIGRyb3Bkb3duTGlzdFdpZHRoID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkcm9wZG93bkxpc3RQb3NpdGlvbiA9IGlucHV0PCdMZWZ0JyB8ICdSaWdodCc+KCdMZWZ0Jyk7XG4gIGN1c3RvbVBsYWNlaG9sZGVySWNvbiA9IGlucHV0PHN0cmluZz4oJycpO1xuICBzZWxlY3Rpb25zID0gaW5wdXQ8TWFwPHN0cmluZywgYW55Pj4obmV3IE1hcCgpKTtcbiAgc2VhcmNoVmFsdWUgPSBpbnB1dDxhbnk+KCk7XG5cbiAgLy8gPT09IE91dHB1dHMgPT09XG4gIG9uU2VsZWN0ID0gb3V0cHV0PElMaXN0RGF0YSB8IElMaXN0RGF0YVtdPigpO1xuICBzZWFyY2hRdWVyeUNoYW5nZSA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIGNsZWFyID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIGl0ZW1TZWxlY3RlZCA9IG91dHB1dDxJTGlzdERhdGE+KCk7XG4gIGl0ZW1SZW1vdmVkID0gb3V0cHV0PElMaXN0RGF0YT4oKTtcblxuICAvLyA9PT0gVGVtcGxhdGUgUmVmcyA9PT1cbiAgQFZpZXdDaGlsZCgnZGRCdG4nLCB7IHN0YXRpYzogZmFsc2UgfSkgb3JpZ2luITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgaW5wdXRSZWYhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkZCcsIHsgc3RhdGljOiBmYWxzZSB9KSBkZCE6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuICBAQ29udGVudENoaWxkKCdtaXNDdXN0b21JdGVtJywgeyBzdGF0aWM6IGZhbHNlIH0pIGN1c3RvbUl0ZW0hOiBUZW1wbGF0ZVJlZjxFbGVtZW50PjtcbiAgQENvbnRlbnRDaGlsZCgnYXN5bmNDdXN0b21Mb2FkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgY3VzdG9tTG9hZGVyITogVGVtcGxhdGVSZWY8RWxlbWVudD47XG5cbiAgLy8gPT09IEludGVybmFsIHN0YXRlID09PVxuICBzZWFyY2hJbnB1dDogVW50eXBlZEZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBwcml2YXRlIGh0dHBTdHJlYW1UcmlnZ2VyID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIG92ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xuICBwcml2YXRlIHNlYXJjaFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBjb250cm9sU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8vID09PSBTaWduYWxzID09PVxuICBvcGVuZWQgPSBzaWduYWwoZmFsc2UpO1xuICBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgZXJyb3IgPSBzaWduYWwoZmFsc2UpO1xuICBvcGVuUG9wVXBPblRhYiA9IHNpZ25hbChmYWxzZSk7XG4gIGRhdGEgPSBzaWduYWw8SUxpc3REYXRhW10+KFtdKTtcbiAgXG4gIC8qKlxuICAgKiBUcmFja3MgdGhlIGxhc3Qgc2VsZWN0ZWQgdmFsdWUgdG8gcHJldmVudCBkcm9wZG93biBmcm9tIHJlb3BlbmluZyB3aGVuOlxuICAgKiAtIElucHV0IHJlZ2FpbnMgZm9jdXMgYWZ0ZXIgc2VsZWN0aW9uIChzaG93aW5nIHNlbGVjdGVkIHZhbHVlKVxuICAgKiAtIFBhcmVudCBjb21wb25lbnQgcmUtcmVuZGVycyBhbmQgdHJpZ2dlcnMgY2hhbmdlIGRldGVjdGlvblxuICAgKiAtIFVzZXIgaGFzbid0IGFjdHVhbGx5IHR5cGVkIGEgbmV3IHNlYXJjaCBxdWVyeVxuICAgKiBcbiAgICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgaW5wdXQgc2VydmVzIGR1YWwgcHVycG9zZXM6XG4gICAqIDEuIFNlYXJjaCBpbnB1dCAodXNlciB0eXBlcywgdHJpZ2dlcnMgQVBJIGNhbGxzKVxuICAgKiAyLiBEaXNwbGF5IHNlbGVjdGVkIHZhbHVlIChzaG93cyB3aGF0IHdhcyBzZWxlY3RlZClcbiAgICogXG4gICAqIFdpdGhvdXQgdGhpcywgc2V0dGluZyB0aGUgaW5wdXQgdmFsdWUgYWZ0ZXIgc2VsZWN0aW9uIHdvdWxkIHRyaWdnZXJcbiAgICogdGhlIHNlYXJjaCBzdWJzY3JpcHRpb24sIGNhdXNpbmcgdW53YW50ZWQgQVBJIGNhbGxzIGFuZCBkcm9wZG93biByZW9wZW5pbmcuXG4gICAqL1xuICBwcml2YXRlIGxhc3RTZWxlY3RlZFZhbHVlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vID09PSBMaWZlY3ljbGUgPT09XG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLm11bHRpKCkgJiYgIXRoaXMudW5pcXVlS2V5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW3VuaXF1ZUtleV0gcmVxdWlyZWQgaW4gbXVsdGkgbW9kZS4nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0LmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2ggb2JzZXJ2YWJsZSBwaXBlbGluZSB3aXRoIFJ4SlMgb3BlcmF0b3JzIHRvIGZpbHRlciBhdCB0aGUgc291cmNlLlxuICAgICAqIFRoaXMgZGVjbGFyYXRpdmUgYXBwcm9hY2ggcHJldmVudHMgdW53YW50ZWQgc2VhcmNoZXMgYnkgZmlsdGVyaW5nOlxuICAgICAqIDEuIEVtcHR5IHF1ZXJpZXMgb3IgcXVlcmllcyBiZWxvdyBtaW5JbnB1dExlbmd0aFxuICAgICAqIDIuIFF1ZXJpZXMgdGhhdCBtYXRjaCB0aGUgbGFzdCBzZWxlY3RlZCB2YWx1ZSAocHJldmVudHMgcmVvcGVuaW5nIGFmdGVyIHNlbGVjdGlvbilcbiAgICAgKiBcbiAgICAgKiBGaWx0ZXJpbmcgYXQgdGhlIHNvdXJjZSBpcyBwcmVmZXJyZWQgb3ZlciBjaGVja2luZyBmbGFncyBpbiBzdWJzY3JpYmUoKVxuICAgICAqIGJlY2F1c2UgaXQncyBtb3JlIGRlY2xhcmF0aXZlLCB0ZXN0YWJsZSwgYW5kIGZvbGxvd3MgUnhKUyBiZXN0IHByYWN0aWNlcy5cbiAgICAgKi9cbiAgICBjb25zdCBzZWFyY2hPYnNlcnZhYmxlID0gdGhpcy5zZWFyY2hJbnB1dC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHRhcCgodmFsKSA9PiB0aGlzLnNlYXJjaFF1ZXJ5Q2hhbmdlLmVtaXQodmFsKSksXG4gICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUoKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgLy8gRmlsdGVyOiBPbmx5IHByb2Nlc3Mgbm9uLWVtcHR5IHF1ZXJpZXMgdGhhdCBtZWV0IG1pbklucHV0TGVuZ3RoIHJlcXVpcmVtZW50XG4gICAgICBmaWx0ZXIoKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgcSA9IHF1ZXJ5Py50cmltKCkgPz8gJyc7XG4gICAgICAgIGlmICghcSB8fCBxLmxlbmd0aCA8IHRoaXMubWluSW5wdXRMZW5ndGgoKSkge1xuICAgICAgICAgIC8vIENsb3NlIGRyb3Bkb3duIGlmIHF1ZXJ5IGlzIHRvbyBzaG9ydFxuICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pLFxuICAgICAgLy8gRmlsdGVyOiBJZ25vcmUgcXVlcmllcyB0aGF0IG1hdGNoIHRoZSBsYXN0IHNlbGVjdGVkIHZhbHVlXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIGRyb3Bkb3duIGZyb20gcmVvcGVuaW5nIHdoZW4gaW5wdXQgc2hvd3Mgc2VsZWN0ZWQgdmFsdWVcbiAgICAgIGZpbHRlcigocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBxID0gcXVlcnk/LnRyaW0oKSA/PyAnJztcbiAgICAgICAgY29uc3QgbGFzdFNlbGVjdGVkID0gdGhpcy5sYXN0U2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICAvLyBBbGxvdyBzZWFyY2ggaWYgbm8gcHJldmlvdXMgc2VsZWN0aW9uIE9SIHF1ZXJ5IGlzIGRpZmZlcmVudCBmcm9tIHNlbGVjdGVkIHZhbHVlXG4gICAgICAgIHJldHVybiAhbGFzdFNlbGVjdGVkIHx8IHEgIT09IGxhc3RTZWxlY3RlZDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFN1YnNjcmliZSB0byBzZWFyY2ggcXVlcmllcyBhbmQgdHJpZ2dlciBIVFRQIHN0cmVhbS5cbiAgICAgKiBBbGwgZmlsdGVyaW5nIGlzIGRvbmUgaW4gdGhlIHBpcGUgY2hhaW4gYWJvdmUsIHNvIHRoaXMgY2FsbGJhY2tcbiAgICAgKiBvbmx5IGhhbmRsZXMgdGhlIGFjdHVhbCBzZWFyY2ggZXhlY3V0aW9uLlxuICAgICAqL1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gbWVyZ2Uoc2VhcmNoT2JzZXJ2YWJsZSwgdGhpcy5odHRwU3RyZWFtVHJpZ2dlcilcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBBZGRpdGlvbmFsIGZpbHRlciBmb3IgaHR0cFN0cmVhbVRyaWdnZXIgKG1hbnVhbCByZWZyZXNoKVxuICAgICAgICBmaWx0ZXIoKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBxID0gcXVlcnk/LnRyaW0oKSA/PyAnJztcbiAgICAgICAgICAvLyBGb3IgbWFudWFsIHRyaWdnZXJzLCBzdGlsbCByZXNwZWN0IG1pbklucHV0TGVuZ3RoIGFuZCBsYXN0U2VsZWN0ZWRWYWx1ZVxuICAgICAgICAgIGlmICghcSB8fCBxLmxlbmd0aCA8IHRoaXMubWluSW5wdXRMZW5ndGgoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWQgPSB0aGlzLmxhc3RTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgcmV0dXJuICFsYXN0U2VsZWN0ZWQgfHwgcSAhPT0gbGFzdFNlbGVjdGVkO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBxID0gcXVlcnk/LnRyaW0oKSA/PyAnJztcbiAgICAgICAgXG4gICAgICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZXJyb3Iuc2V0KGZhbHNlKTtcblxuICAgICAgICAvLyBPcGVuIG92ZXJsYXkgaWYgbm90IHlldCBvcGVuXG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuRHJvcGRvd24odGhpcy5kZCwgdGhpcy5vcmlnaW4ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxsIEhUVFAgc3RyZWFtXG4gICAgICAgIHRoaXMuaHR0cFN0cmVhbSgpKHEpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGxpc3Q6IElMaXN0RGF0YVtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXQobGlzdCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3ZlcmxheVJlZj8uaGFzQXR0YWNoZWQoKSAmJiBsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5vcGVuRHJvcGRvd24odGhpcy5kZCwgdGhpcy5vcmlnaW4ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmVycm9yLnNldCh0cnVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuY29udHJvbCgpPy52YWx1ZSkge1xuICAgICAgdGhpcy5oYW5kbGVDb250cm9sQ2hhbmdlcyh0aGlzLmNvbnRyb2woKSEudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuY29udHJvbFN1YnNjcmlwdGlvbiA9IHRoaXMuY29udHJvbCgpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgdGhpcy5oYW5kbGVDb250cm9sQ2hhbmdlc1xuICAgICk7XG5cbiAgICAvLyBIYW5kbGUgc2VhcmNoVmFsdWUgaW5wdXQgY2hhbmdlc1xuICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlKCkpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQucGF0Y2hWYWx1ZSh0aGlzLnNlYXJjaFZhbHVlKCksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICAvLyBIYW5kbGUgc2VhcmNoVmFsdWUgY2hhbmdlc1xuICAgIGlmICh0aGlzLnNlYXJjaFZhbHVlKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dC5wYXRjaFZhbHVlKHRoaXMuc2VhcmNoVmFsdWUoKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkaXNhYmxlZCBjaGFuZ2VzXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQuZW5hYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jb250cm9sU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaHR0cFN0cmVhbVRyaWdnZXIuY29tcGxldGUoKTtcbiAgICB0aGlzLm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vID09PSBNZXRob2RzID09PVxuICByZWZyZXNoSHR0cFN0cmVhbShxdWVyeTogc3RyaW5nKSB7XG4gICAgdGhpcy5odHRwU3RyZWFtVHJpZ2dlci5uZXh0KHF1ZXJ5KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ29udHJvbENoYW5nZXMgPSAodmFsdWVzOiBJTGlzdERhdGFbXSkgPT4ge1xuICAgIHZhbHVlcy5mb3JFYWNoKChlbCkgPT4gdGhpcy5zZWxlY3REYXRhKGVsLCB0cnVlKSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBvcGVuRHJvcGRvd24odGVtcGxhdGU6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+LCBvcmlnaW46IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgcG9zaXRpb25zQm90dG9tID0gW1xuICAgICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoXG4gICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2JvdHRvbScgfSxcbiAgICAgICAgeyBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICd0b3AnIH0sXG4gICAgICAgIDAsXG4gICAgICAgIDRcbiAgICAgICksXG4gICAgICBuZXcgQ29ubmVjdGlvblBvc2l0aW9uUGFpcihcbiAgICAgICAgeyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ2JvdHRvbScgfSxcbiAgICAgICAgeyBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAndG9wJyB9LFxuICAgICAgICAwLFxuICAgICAgICA0XG4gICAgICApLFxuICAgIF07XG4gICAgY29uc3QgcG9zaXRpb25zVG9wID0gW1xuICAgICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoXG4gICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ3RvcCcgfSxcbiAgICAgICAgeyBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdib3R0b20nIH0sXG4gICAgICAgIDAsXG4gICAgICAgIC00XG4gICAgICApLFxuICAgICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoXG4gICAgICAgIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICd0b3AnIH0sXG4gICAgICAgIHsgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2JvdHRvbScgfSxcbiAgICAgICAgMCxcbiAgICAgICAgLTRcbiAgICAgICksXG4gICAgXTtcblxuICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlcbiAgICAgIC5wb3NpdGlvbigpXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyhvcmlnaW4pXG4gICAgICAud2l0aFBvc2l0aW9ucyhbXG4gICAgICAgIC4uLih0aGlzLmRyb3Bkb3duTGlzdFBvc2l0aW9uKCkgPT09ICdSaWdodCcgPyBwb3NpdGlvbnNCb3R0b20ucmV2ZXJzZSgpIDogcG9zaXRpb25zQm90dG9tKSxcbiAgICAgICAgLi4uKHRoaXMuZHJvcGRvd25MaXN0UG9zaXRpb24oKSA9PT0gJ1JpZ2h0JyA/IHBvc2l0aW9uc1RvcC5yZXZlcnNlKCkgOiBwb3NpdGlvbnNUb3ApLFxuICAgICAgXSlcbiAgICAgIC53aXRoUHVzaCh0cnVlKTtcblxuICAgIGNvbnN0IGNvbmZpZ3MgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICdjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCcsXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgcG9zaXRpb25TdHJhdGVneSxcbiAgICAgIHdpZHRoOiBvcmlnaW4uY2xpZW50V2lkdGgsXG4gICAgfSk7XG5cbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKGNvbmZpZ3MpO1xuICAgIGlmICh0aGlzLmRyb3Bkb3duTGlzdFdpZHRoKCkpIHtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHsgd2lkdGg6IHRoaXMuZHJvcGRvd25MaXN0V2lkdGgoKSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKG5ldyBUZW1wbGF0ZVBvcnRhbCh0ZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKSk7XG4gICAgdGhpcy5vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZURyb3Bkb3duKCkpO1xuICAgIHRoaXMub3BlbmVkLnNldCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5vcGVuZWQuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm9wZW5Qb3BVcE9uVGFiLnNldChmYWxzZSk7XG4gICAgdGhpcy5vdmVybGF5UmVmPy5kZXRhY2goKTtcbiAgICB0aGlzLmRhdGEuc2V0KFtdKTtcbiAgfVxuXG4gIGVuYWJsZVBvcFVwT25UYWIoKSB7XG4gICAgdGhpcy5vcGVuUG9wVXBPblRhYi5zZXQodHJ1ZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0LnJlc2V0KCk7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBpdGVtIHNlbGVjdGlvbiBmcm9tIGRyb3Bkb3duLlxuICAgKiBcbiAgICogRm9yIHNpbmdsZS1zZWxlY3QgbW9kZTpcbiAgICogLSBTZXRzIGlucHV0IHZhbHVlIHRvIGRpc3BsYXkgc2VsZWN0ZWQgaXRlbSAoc3RhbmRhcmQgVVggcGF0dGVybilcbiAgICogLSBTdG9yZXMgc2VsZWN0ZWQgdmFsdWUgdG8gcHJldmVudCByZW9wZW5pbmcgZHJvcGRvd24gb24gZm9jdXMvY2hhbmdlIGRldGVjdGlvblxuICAgKiAtIEJsdXJzIGlucHV0IHRvIHByZXZlbnQgaW1tZWRpYXRlIGZvY3VzLXRyaWdnZXJlZCBzZWFyY2hlc1xuICAgKiBcbiAgICogRm9yIG11bHRpLXNlbGVjdCBtb2RlOlxuICAgKiAtIENsZWFycyBpbnB1dCBmb3IgbmV4dCBzZWxlY3Rpb25cbiAgICogLSBNYWludGFpbnMgZm9jdXMgZm9yIGNvbnRpbnVvdXMgc2VsZWN0aW9uXG4gICAqL1xuICBzZWxlY3REYXRhKGl0ZW06IElMaXN0RGF0YSwgZWZmZWN0ZWRGcm9tT3V0c2lkZSA9IHRydWUpIHtcbiAgICBpZiAoaXRlbS5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdChpdGVtKTtcblxuICAgIGlmICghdGhpcy5tdWx0aSgpKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gaXRlbVt0aGlzLmRpc3BsYXlLZXkoKV07XG4gICAgICAvLyBTZXQgaW5wdXQgdmFsdWUgdG8gc2hvdyBzZWxlY3RlZCBpdGVtIChzdGFuZGFyZCBVWCAtIGxpa2UgQW5ndWxhciBNYXRlcmlhbCwgZXRjLilcbiAgICAgIC8vIFVzZSBlbWl0RXZlbnQ6IGZhbHNlIHRvIHByZXZlbnQgdHJpZ2dlcmluZyB2YWx1ZUNoYW5nZXMgc3Vic2NyaXB0aW9uXG4gICAgICB0aGlzLnNlYXJjaElucHV0LnBhdGNoVmFsdWUoc2VsZWN0ZWRWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgXG4gICAgICAvLyBTdG9yZSBzZWxlY3RlZCB2YWx1ZSAtIFJ4SlMgZmlsdGVyIHdpbGwgcHJldmVudCByZW9wZW5pbmcgd2l0aCBzYW1lIHZhbHVlXG4gICAgICB0aGlzLmxhc3RTZWxlY3RlZFZhbHVlLnNldChzZWxlY3RlZFZhbHVlKTtcbiAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0aW9ucygpLmhhcyhpdGVtW3RoaXMudW5pcXVlS2V5KCkhXSkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25zKCkuc2V0KGl0ZW1bdGhpcy51bmlxdWVLZXkoKSFdLCBpdGVtKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICBpZiAoIWVmZmVjdGVkRnJvbU91dHNpZGUpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgdGhpcy5pbnB1dFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQucGF0Y2hWYWx1ZSgnJyk7XG4gICAgICB0aGlzLmRhdGEuc2V0KFtdKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcblxuICAgIC8vIEJsdXIgaW5wdXQgdG8gcHJldmVudCBmb2N1cyBldmVudHMgZnJvbSBpbW1lZGlhdGVseSB0cmlnZ2VyaW5nIHNlYXJjaFxuICAgIC8vIFRoZSBsYXN0U2VsZWN0ZWRWYWx1ZSBmaWx0ZXIgd2lsbCBhbHNvIHByZXZlbnQgcmVvcGVuaW5nIGlmIGZvY3VzIG9jY3Vyc1xuICAgIGlmICh0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmlucHV0UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUl0ZW0oaXRlbTogSUxpc3REYXRhKSB7XG4gICAgdGhpcy5pdGVtUmVtb3ZlZC5lbWl0KGl0ZW0pO1xuICAgIHRoaXMuc2VsZWN0aW9ucygpLmRlbGV0ZShpdGVtW3RoaXMudW5pcXVlS2V5KCkhXSk7XG4gICAgdGhpcy5zZXRDb250cm9sVmFsdWUodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICB0aGlzLmlucHV0UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29udHJvbFZhbHVlKHZhbHVlOiBJTGlzdERhdGEgfCBJTGlzdERhdGFbXSkge1xuICAgIHRoaXMub25TZWxlY3QuZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy5jb250cm9sKCk/LnBhdGNoVmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZEl0ZW1zKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9ucygpLnZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGlucHV0IGFuZCByZXNldHMgc2VsZWN0aW9uIHN0YXRlLlxuICAgKiBDbGVhcmluZyBsYXN0U2VsZWN0ZWRWYWx1ZSBhbGxvd3MgbmV3IHNlYXJjaGVzIHRvIHByb2NlZWQgbm9ybWFsbHkuXG4gICAqL1xuICByZW1vdmVJbnB1dFZhbHVlKCkge1xuICAgIHRoaXMuc2VhcmNoSW5wdXQucmVzZXQoKTtcbiAgICB0aGlzLmRhdGEuc2V0KFtdKTtcbiAgICB0aGlzLmxhc3RTZWxlY3RlZFZhbHVlLnNldChudWxsKTtcbiAgICB0aGlzLmNsZWFyLmVtaXQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXQgcmVjZWl2ZXMgZm9jdXMuXG4gICAqIE9ubHkgb3BlbnMgZHJvcGRvd24gaWY6XG4gICAqIDEuIG1pbklucHV0TGVuZ3RoIGFsbG93cyBpdCAoLTEgb3IgMCBtZWFucyBvcGVuIG9uIGZvY3VzKVxuICAgKiAyLiBJbnB1dCB2YWx1ZSBkb2Vzbid0IG1hdGNoIGxhc3Qgc2VsZWN0ZWQgdmFsdWUgKHByZXZlbnRzIHJlb3BlbmluZyBhZnRlciBzZWxlY3Rpb24pXG4gICAqIFxuICAgKiBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgaW5wdXQgcmVnYWlucyBmb2N1cyBhZnRlciBzZWxlY3Rpb24uXG4gICAqIFRoZSBSeEpTIGZpbHRlciBpbiBzZWFyY2hPYnNlcnZhYmxlIGhhbmRsZXMgdmFsdWVDaGFuZ2VzLCBidXQgZm9jdXMgZXZlbnRzXG4gICAqIG5lZWQgc2VwYXJhdGUgaGFuZGxpbmcgc2luY2UgdGhleSBieXBhc3MgdmFsdWVDaGFuZ2VzLlxuICAgKi9cbiAgZGVmYXVsdENhbGwoKSB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5zZWFyY2hJbnB1dC52YWx1ZT8udHJpbSgpIHx8ICcnO1xuICAgIGNvbnN0IGxhc3RTZWxlY3RlZCA9IHRoaXMubGFzdFNlbGVjdGVkVmFsdWUoKTtcbiAgICBcbiAgICAvLyBEb24ndCBvcGVuIGlmIHZhbHVlIG1hdGNoZXMgbGFzdCBzZWxlY3RlZCAodXNlciBoYXNuJ3QgdHlwZWQgbmV3IHF1ZXJ5KVxuICAgIGlmIChsYXN0U2VsZWN0ZWQgJiYgY3VycmVudFZhbHVlID09PSBsYXN0U2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gT25seSBvcGVuIG9uIGZvY3VzIGlmIG1pbklucHV0TGVuZ3RoIGFsbG93cyBpdFxuICAgIGlmICh0aGlzLm1pbklucHV0TGVuZ3RoKCkgPT09IC0xKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5odHRwU3RyZWFtKCkodGhpcy5zZWFyY2hJbnB1dC52YWx1ZSB8fCAnJykuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGxpc3Q6IElMaXN0RGF0YVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5kYXRhLnNldChsaXN0KTtcbiAgICAgICAgICBpZiAoIXRoaXMub3ZlcmxheVJlZj8uaGFzQXR0YWNoZWQoKSAmJiBsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkRyb3Bkb3duKHRoaXMuZGQsIHRoaXMub3JpZ2luLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmVycm9yLnNldCh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJkZC13cmFwcGVyXCJcbiAgICAgW25nQ2xhc3NdPVwieyBvcGVuZWQ6IG9wZW5lZCgpLCBkaXNhYmxlZDogZGlzYWJsZWQoKSwgcmVhZG9ubHk6IHJlYWRvbmx5KCkgfVwiXG4gICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aCgpXCJcbiAgICAgI2RkQnRuPlxuICBcbiAgPCEtLSBTZWxlY3RlZCBjaGlwcyBmb3IgbXVsdGktc2VsZWN0IC0tPlxuICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtbGlzdFwiICpuZ0lmPVwibXVsdGkoKSAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2hpcFwiXG4gICAgICAgICBbbmdDbGFzc109XCJ7ICdjaGlwLW1kJzogc2l6ZSgpID09PSAnbWQnLCAnY2hpcC1zbSc6IHNpemUoKSA9PT0gJ3NtJyB9XCJcbiAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXNcIj5cbiAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsgJ2g2Jzogc2l6ZSgpID09PSAnbWQnLCAnaDgtYic6IHNpemUoKSA9PT0gJ3NtJyB9XCJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA0cHg7XCI+XG4gICAgICAgIHt7IGl0ZW1bZGlzcGxheUtleSgpXSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLWljLW5hdmlnYXRpb24tY2FuY2VsLTI0XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY3Vyc29yOiAncG9pbnRlcicsICdmb250LXNpemUnOiBzaXplKCkgPT09ICdzbScgPyAnMTJweCcgOiAnMTRweCcgfVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUl0ZW0oaXRlbSlcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInJlbW92ZUl0ZW0oaXRlbSlcIj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBTZWFyY2ggaW5wdXQgLS0+XG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIj5cbiAgICA8IS0tIFBsYWNlaG9sZGVyIGljb24gLS0+XG4gICAgPGRpdiAqbmdJZj1cImN1c3RvbVBsYWNlaG9sZGVySWNvbigpOyBlbHNlIGRlZmF1bHRTZWFyY2hJY29uXCIgY2xhc3M9XCJjdXN0b20taWNvblwiPlxuICAgICAgPGltZyBbc3JjXT1cImN1c3RvbVBsYWNlaG9sZGVySWNvbigpXCIgYWx0PVwiY3VzdG9tSWNvblwiIC8+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0U2VhcmNoSWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1pYy1hY3Rpb24tc2VhcmNoLTI0XCI+PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIElucHV0IGZpZWxkIC0tPlxuICAgIDxpbnB1dCBbbmdDbGFzc109XCJ7ICdpcC1tZCc6IHNpemUoKSA9PT0gJ21kJywgJ2lwLXNtJzogc2l6ZSgpID09PSAnc20nIH1cIlxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKVwiXG4gICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgIGNsYXNzPVwiYmxhY2stdGV4dCBoNlwiXG4gICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAoZm9jdXMpPVwiZGVmYXVsdENhbGwoKVwiXG4gICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJlbmFibGVQb3BVcE9uVGFiKClcIlxuICAgICAgICAgICAoY29weSk9XCJkaXNhYmxlQ29weVBhc3RlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAocGFzdGUpPVwiZGlzYWJsZUNvcHlQYXN0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgKGN1dCk9XCJkaXNhYmxlQ29weVBhc3RlKCkgPyBmYWxzZSA6IHRydWVcIi8+XG5cbiAgICA8IS0tIENsZWFyIGlucHV0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJpY29uLWljLW5hdmlnYXRpb24tY2FuY2VsLTI0IGNyb29zLWljb25cIlxuICAgICAgICAgKm5nSWY9XCJzZWFyY2hJbnB1dC52YWx1ZT8ubGVuZ3RoXCJcbiAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAoY2xpY2spPVwicmVtb3ZlSW5wdXRWYWx1ZSgpXCJcbiAgICAgICAgIChrZXl1cC5lbnRlcik9XCJyZW1vdmVJbnB1dFZhbHVlKClcIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBEcm9wZG93biB0ZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZGQ+XG4gIDxkaXYgY2xhc3M9XCJkZC1saXN0XCJcbiAgICAgICBbbmdTdHlsZV09XCJ7ICdtYXgtaGVpZ2h0JzogaGVpZ2h0KCksICd3aWR0aCc6IGRyb3Bkb3duTGlzdFdpZHRoKCkgfVwiXG4gICAgICAgW25nQ2xhc3NdPVwieyAnZGQtbGlzdC1wZCc6IGRhdGEoKS5sZW5ndGggPT09IDAgfVwiXG4gICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICBjZGtUcmFwRm9jdXNcbiAgICAgICBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwib3BlblBvcFVwT25UYWIoKVwiPlxuXG4gICAgPCEtLSBMb2FkZXIgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmcoKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbUxvYWRlcjsgZWxzZSBkZWZhdWx0TG9hZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tTG9hZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtY29udGFpbmVyXCIgKm5nSWY9XCJsb2FkaW5nKCkgJiYgIWN1c3RvbUxvYWRlclwiPlxuICAgICAgICAgIDxtaXMtbG9hZGVyIFttb2JpbGVWaWV3XT1cInRydWVcIj48L21pcy1sb2FkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRXJyb3IgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVycm9yKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtY29udGFpbmVyXCI+XG4gICAgICAgIDxwPlVua25vd24gZXJyb3IgaGFzIG9jY3VycmVkLCA8YnIvPiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBEYXRhIGxpc3QgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nKCkgJiYgIWVycm9yKCkgJiYgZGF0YSgpLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YSgpXCI+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInNlbGVjdERhdGEoaXRlbSwgZmFsc2UpXCIgKGtleXVwLmVudGVyKT1cInNlbGVjdERhdGEoaXRlbSwgZmFsc2UpXCI+XG4gICAgICAgICAgPGRpdiB0YWJpbmRleD1cIi0xXCIgY2RrRm9jdXNJbml0aWFsPjwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBDdXN0b20gaXRlbSAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tSXRlbTsgZWxzZSBzdGFuZGFyZEl0ZW1cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIFN0YW5kYXJkIGl0ZW0gLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzdGFuZGFyZEl0ZW0+XG4gICAgICAgICAgICA8ZGl2IHRhYmluZGV4PVwiLTFcIiBjZGtGb2N1c0luaXRpYWw+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJvcGVuUG9wVXBPblRhYigpID8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERhdGEoaXRlbSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdERhdGEoaXRlbSwgZmFsc2UpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmltYXJ5XCI+e3sgaXRlbVtkaXNwbGF5S2V5KCldIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY29uZGFyeVwiPnt7IGl0ZW1bc2Vjb25kYXJ5RGlzcGxheUtleSgpXSB9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE5vIGRhdGEgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nKCkgJiYgIWVycm9yKCkgJiYgZGF0YSgpLmxlbmd0aCA9PT0gMCAmJiBzZWFyY2hJbnB1dC52YWx1ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGEtbm90LWZvdW5kXCI+Tm8gRGF0YSBBdmFpbGFibGU8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
566
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvYXN5bmMtc2VhcmNoLWRyb3Bkb3duL2FzeW5jLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2FzeW5jLXNlYXJjaC1kcm9wZG93bi9hc3luYy1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBSVosU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBRUwsYUFBYSxFQUViLHNCQUFzQixHQUN2QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNYOUMsQUFIRiwrQkFFd0MsZUFFTDtJQUMvQixZQUNGO0lBQUEsaUJBQU87SUFDUCxnQ0FJdUM7SUFBakMsQUFEQSxpTkFBUywwQkFBZ0IsS0FBQyxnTkFDWCwwQkFBZ0IsS0FBQztJQUV4QyxBQURFLGlCQUFPLEVBQ0g7Ozs7SUFaRCxvR0FBc0U7SUFFbkUsY0FBOEQ7SUFBOUQsb0dBQThEO0lBRWxFLGNBQ0Y7SUFERSw2REFDRjtJQUVNLGNBQWlGO0lBQWpGLCtG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WUFLakQsZUFBeUM7WUFBekMsa0VBQXlDO1lBb0I3RCxlQUErQjtZQUFBLEFBQS9CLGtEQUErQixtQ0FBc0I7WUFRcEQsZUFBa0U7WUFFbEUsQUFEQSxBQURBLCtGQUFrRSxrQ0FDckMsZ0NBQ0Y7O1lBYTVCLGVBQStCO1lBQS9CLDBGQUErQjs7O2lGRG5CNUIsc0JBQXNCO2NBTGxDLFNBQVM7MkJBQ0UsMkJBQTJCO3VFQXdDRSxNQUFNO2tCQUE1QyxTQUFTO21CQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDRSxRQUFRO2tCQUE5QyxTQUFTO21CQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDRCxFQUFFO2tCQUFyQyxTQUFTO21CQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDZ0IsVUFBVTtrQkFBM0QsWUFBWTttQkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQ00sWUFBWTtrQkFBakUsWUFBWTttQkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFnT3BELGFBQWE7a0JBRFosWUFBWTttQkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7a0ZBdlFqQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIE92ZXJsYXksXG4gIE92ZXJsYXlDb25maWcsXG4gIE92ZXJsYXlSZWYsXG4gIENvbm5lY3Rpb25Qb3NpdGlvblBhaXIsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YXAsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxudHlwZSBJTGlzdERhdGEgPSBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21pcy1hc3luYy1zZWFyY2gtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vYXN5bmMtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hc3luYy1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBc3luY0Ryb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICApIHt9XG5cbiAgLy8gPT09IElucHV0cyA9PT1cbiAgaGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICB3aWR0aCA9IGlucHV0PHN0cmluZz4oKTtcbiAgc2l6ZSA9IGlucHV0PCdtZCcgfCAnc20nPignbWQnKTtcbiAgaHR0cFN0cmVhbSA9IGlucHV0LnJlcXVpcmVkPChzZWFyY2hLZXk6IHN0cmluZykgPT4gYW55PigpO1xuICBkaXNwbGF5S2V5ID0gaW5wdXQ8YW55PigpO1xuICBzZWNvbmRhcnlEaXNwbGF5S2V5ID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHBsYWNlaG9sZGVyID0gaW5wdXQoJ1NlbGVjdCcpO1xuICBkZWJvdW5jZVRpbWUgPSBpbnB1dCg0MDApO1xuICBtaW5JbnB1dExlbmd0aCA9IGlucHV0KDIpO1xuICBtdWx0aSA9IGlucHV0KGZhbHNlKTtcbiAgdW5pcXVlS2V5ID0gaW5wdXQ8c3RyaW5nPigpO1xuICBjb250cm9sID0gaW5wdXQ8QWJzdHJhY3RDb250cm9sIHwgbnVsbD4obnVsbCk7XG4gIGRpc2FibGVkID0gaW5wdXQoZmFsc2UpO1xuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZGlzYWJsZUNvcHlQYXN0ZSA9IGlucHV0KGZhbHNlKTtcbiAgZHJvcGRvd25MaXN0V2lkdGggPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRyb3Bkb3duTGlzdFBvc2l0aW9uID0gaW5wdXQ8J0xlZnQnIHwgJ1JpZ2h0Jz4oJ0xlZnQnKTtcbiAgY3VzdG9tUGxhY2Vob2xkZXJJY29uID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHNlbGVjdGlvbnMgPSBpbnB1dDxNYXA8c3RyaW5nLCBhbnk+PihuZXcgTWFwKCkpO1xuICBzZWFyY2hWYWx1ZSA9IGlucHV0PGFueT4oKTtcblxuICAvLyA9PT0gT3V0cHV0cyA9PT1cbiAgb25TZWxlY3QgPSBvdXRwdXQ8SUxpc3REYXRhIHwgSUxpc3REYXRhW10+KCk7XG4gIHNlYXJjaFF1ZXJ5Q2hhbmdlID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgY2xlYXIgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgaXRlbVNlbGVjdGVkID0gb3V0cHV0PElMaXN0RGF0YT4oKTtcbiAgaXRlbVJlbW92ZWQgPSBvdXRwdXQ8SUxpc3REYXRhPigpO1xuXG4gIC8vID09PSBUZW1wbGF0ZSBSZWZzID09PVxuICBAVmlld0NoaWxkKCdkZEJ0bicsIHsgc3RhdGljOiBmYWxzZSB9KSBvcmlnaW4hOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBpbnB1dFJlZiE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2RkJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRkITogVGVtcGxhdGVSZWY8RWxlbWVudD47XG4gIEBDb250ZW50Q2hpbGQoJ21pc0N1c3RvbUl0ZW0nLCB7IHN0YXRpYzogZmFsc2UgfSkgY3VzdG9tSXRlbSE6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuICBAQ29udGVudENoaWxkKCdhc3luY0N1c3RvbUxvYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBjdXN0b21Mb2FkZXIhOiBUZW1wbGF0ZVJlZjxFbGVtZW50PjtcblxuICAvLyA9PT0gSW50ZXJuYWwgc3RhdGUgPT09XG4gIHNlYXJjaElucHV0OiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG4gIHByaXZhdGUgaHR0cFN0cmVhbVRyaWdnZXIgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgb3ZlcmxheVJlZj86IE92ZXJsYXlSZWY7XG4gIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGNvbnRyb2xTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgLy8gPT09IENvbXBvbmVudCBzdGF0ZSA9PT1cbiAgb3BlbmVkID0gZmFsc2U7XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgZXJyb3IgPSBmYWxzZTtcbiAgb3BlblBvcFVwT25UYWIgPSBmYWxzZTtcbiAgZGF0YTogSUxpc3REYXRhW10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWRWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gPT09IExpZmVjeWNsZSA9PT1cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMubXVsdGkoKSAmJiAhdGhpcy51bmlxdWVLZXkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbdW5pcXVlS2V5XSByZXF1aXJlZCBpbiBtdWx0aSBtb2RlLicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQuZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBvYnNlcnZhYmxlIHBpcGVsaW5lIHdpdGggUnhKUyBvcGVyYXRvcnMgdG8gZmlsdGVyIGF0IHRoZSBzb3VyY2UuXG4gICAgICogVGhpcyBkZWNsYXJhdGl2ZSBhcHByb2FjaCBwcmV2ZW50cyB1bndhbnRlZCBzZWFyY2hlcyBieSBmaWx0ZXJpbmc6XG4gICAgICogMS4gRW1wdHkgcXVlcmllcyBvciBxdWVyaWVzIGJlbG93IG1pbklucHV0TGVuZ3RoXG4gICAgICogMi4gUXVlcmllcyB0aGF0IG1hdGNoIHRoZSBsYXN0IHNlbGVjdGVkIHZhbHVlIChwcmV2ZW50cyByZW9wZW5pbmcgYWZ0ZXIgc2VsZWN0aW9uKVxuICAgICAqIFxuICAgICAqIEZpbHRlcmluZyBhdCB0aGUgc291cmNlIGlzIHByZWZlcnJlZCBvdmVyIGNoZWNraW5nIGZsYWdzIGluIHN1YnNjcmliZSgpXG4gICAgICogYmVjYXVzZSBpdCdzIG1vcmUgZGVjbGFyYXRpdmUsIHRlc3RhYmxlLCBhbmQgZm9sbG93cyBSeEpTIGJlc3QgcHJhY3RpY2VzLlxuICAgICAqL1xuICAgIGNvbnN0IHNlYXJjaE9ic2VydmFibGUgPSB0aGlzLnNlYXJjaElucHV0LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgdGFwKCh2YWwpID0+IHRoaXMuc2VhcmNoUXVlcnlDaGFuZ2UuZW1pdCh2YWwpKSxcbiAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSgpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAvLyBGaWx0ZXI6IE9ubHkgcHJvY2VzcyBub24tZW1wdHkgcXVlcmllcyB0aGF0IG1lZXQgbWluSW5wdXRMZW5ndGggcmVxdWlyZW1lbnRcbiAgICAgIGZpbHRlcigocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBxID0gcXVlcnk/LnRyaW0oKSA/PyAnJztcbiAgICAgICAgaWYgKCFxIHx8IHEubGVuZ3RoIDwgdGhpcy5taW5JbnB1dExlbmd0aCgpKSB7XG4gICAgICAgICAgLy8gQ2xvc2UgZHJvcGRvd24gaWYgcXVlcnkgaXMgdG9vIHNob3J0XG4gICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSksXG4gICAgICAvLyBGaWx0ZXI6IElnbm9yZSBxdWVyaWVzIHRoYXQgbWF0Y2ggdGhlIGxhc3Qgc2VsZWN0ZWQgdmFsdWVcbiAgICAgIC8vIFRoaXMgcHJldmVudHMgZHJvcGRvd24gZnJvbSByZW9wZW5pbmcgd2hlbiBpbnB1dCBzaG93cyBzZWxlY3RlZCB2YWx1ZVxuICAgICAgZmlsdGVyKChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHEgPSBxdWVyeT8udHJpbSgpID8/ICcnO1xuICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWQgPSB0aGlzLmxhc3RTZWxlY3RlZFZhbHVlO1xuICAgICAgICAvLyBBbGxvdyBzZWFyY2ggaWYgbm8gcHJldmlvdXMgc2VsZWN0aW9uIE9SIHF1ZXJ5IGlzIGRpZmZlcmVudCBmcm9tIHNlbGVjdGVkIHZhbHVlXG4gICAgICAgIHJldHVybiAhbGFzdFNlbGVjdGVkIHx8IHEgIT09IGxhc3RTZWxlY3RlZDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFN1YnNjcmliZSB0byBzZWFyY2ggcXVlcmllcyBhbmQgdHJpZ2dlciBIVFRQIHN0cmVhbS5cbiAgICAgKiBBbGwgZmlsdGVyaW5nIGlzIGRvbmUgaW4gdGhlIHBpcGUgY2hhaW4gYWJvdmUsIHNvIHRoaXMgY2FsbGJhY2tcbiAgICAgKiBvbmx5IGhhbmRsZXMgdGhlIGFjdHVhbCBzZWFyY2ggZXhlY3V0aW9uLlxuICAgICAqL1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gbWVyZ2Uoc2VhcmNoT2JzZXJ2YWJsZSwgdGhpcy5odHRwU3RyZWFtVHJpZ2dlcilcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBBZGRpdGlvbmFsIGZpbHRlciBmb3IgaHR0cFN0cmVhbVRyaWdnZXIgKG1hbnVhbCByZWZyZXNoKVxuICAgICAgICBmaWx0ZXIoKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBxID0gcXVlcnk/LnRyaW0oKSA/PyAnJztcbiAgICAgICAgICAvLyBGb3IgbWFudWFsIHRyaWdnZXJzLCBzdGlsbCByZXNwZWN0IG1pbklucHV0TGVuZ3RoIGFuZCBsYXN0U2VsZWN0ZWRWYWx1ZVxuICAgICAgICAgIGlmICghcSB8fCBxLmxlbmd0aCA8IHRoaXMubWluSW5wdXRMZW5ndGgoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWQgPSB0aGlzLmxhc3RTZWxlY3RlZFZhbHVlO1xuICAgICAgICAgIHJldHVybiAhbGFzdFNlbGVjdGVkIHx8IHEgIT09IGxhc3RTZWxlY3RlZDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgcSA9IHF1ZXJ5Py50cmltKCkgPz8gJyc7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmVycm9yID0gZmFsc2U7XG5cbiAgICAgICAgLy8gT3BlbiBvdmVybGF5IGlmIG5vdCB5ZXQgb3BlblxuICAgICAgICBpZiAoIXRoaXMub3ZlcmxheVJlZj8uaGFzQXR0YWNoZWQoKSkge1xuICAgICAgICAgIHRoaXMub3BlbkRyb3Bkb3duKHRoaXMuZGQsIHRoaXMub3JpZ2luLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsbCBIVFRQIHN0cmVhbVxuICAgICAgICB0aGlzLmh0dHBTdHJlYW0oKShxKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChsaXN0OiBJTGlzdERhdGFbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBsaXN0O1xuICAgICAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCkgJiYgbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMub3BlbkRyb3Bkb3duKHRoaXMuZGQsIHRoaXMub3JpZ2luLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRydWU7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGlmICh0aGlzLmNvbnRyb2woKT8udmFsdWUpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ29udHJvbENoYW5nZXModGhpcy5jb250cm9sKCkhLnZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRyb2xTdWJzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2woKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgIHRoaXMuaGFuZGxlQ29udHJvbENoYW5nZXNcbiAgICApO1xuXG4gICAgLy8gSGFuZGxlIHNlYXJjaFZhbHVlIGlucHV0IGNoYW5nZXNcbiAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZSgpKSB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0LnBhdGNoVmFsdWUodGhpcy5zZWFyY2hWYWx1ZSgpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgLy8gSGFuZGxlIHNlYXJjaFZhbHVlIGNoYW5nZXNcbiAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZSgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQucGF0Y2hWYWx1ZSh0aGlzLnNlYXJjaFZhbHVlKCksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgZGlzYWJsZWQgY2hhbmdlc1xuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0LmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY29udHJvbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmh0dHBTdHJlYW1UcmlnZ2VyLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyA9PT0gTWV0aG9kcyA9PT1cbiAgcmVmcmVzaEh0dHBTdHJlYW0ocXVlcnk6IHN0cmluZykge1xuICAgIHRoaXMuaHR0cFN0cmVhbVRyaWdnZXIubmV4dChxdWVyeSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbnRyb2xDaGFuZ2VzID0gKHZhbHVlczogSUxpc3REYXRhW10pID0+IHtcbiAgICB2YWx1ZXMuZm9yRWFjaCgoZWwpID0+IHRoaXMuc2VsZWN0RGF0YShlbCwgdHJ1ZSkpO1xuICB9O1xuXG4gIHByaXZhdGUgb3BlbkRyb3Bkb3duKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxFbGVtZW50Piwgb3JpZ2luOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IHBvc2l0aW9uc0JvdHRvbSA9IFtcbiAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKFxuICAgICAgICB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdib3R0b20nIH0sXG4gICAgICAgIHsgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAndG9wJyB9LFxuICAgICAgICAwLFxuICAgICAgICA0XG4gICAgICApLFxuICAgICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoXG4gICAgICAgIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICdib3R0b20nIH0sXG4gICAgICAgIHsgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ3RvcCcgfSxcbiAgICAgICAgMCxcbiAgICAgICAgNFxuICAgICAgKSxcbiAgICBdO1xuICAgIGNvbnN0IHBvc2l0aW9uc1RvcCA9IFtcbiAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKFxuICAgICAgICB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICd0b3AnIH0sXG4gICAgICAgIHsgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAnYm90dG9tJyB9LFxuICAgICAgICAwLFxuICAgICAgICAtNFxuICAgICAgKSxcbiAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKFxuICAgICAgICB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiAndG9wJyB9LFxuICAgICAgICB7IG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6ICdib3R0b20nIH0sXG4gICAgICAgIDAsXG4gICAgICAgIC00XG4gICAgICApLFxuICAgIF07XG5cbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8ob3JpZ2luKVxuICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAuLi4odGhpcy5kcm9wZG93bkxpc3RQb3NpdGlvbigpID09PSAnUmlnaHQnID8gcG9zaXRpb25zQm90dG9tLnJldmVyc2UoKSA6IHBvc2l0aW9uc0JvdHRvbSksXG4gICAgICAgIC4uLih0aGlzLmRyb3Bkb3duTGlzdFBvc2l0aW9uKCkgPT09ICdSaWdodCcgPyBwb3NpdGlvbnNUb3AucmV2ZXJzZSgpIDogcG9zaXRpb25zVG9wKSxcbiAgICAgIF0pXG4gICAgICAud2l0aFB1c2godHJ1ZSk7XG5cbiAgICBjb25zdCBjb25maWdzID0gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgICB3aWR0aDogb3JpZ2luLmNsaWVudFdpZHRoLFxuICAgIH0pO1xuXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZShjb25maWdzKTtcbiAgICBpZiAodGhpcy5kcm9wZG93bkxpc3RXaWR0aCgpKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7IHdpZHRoOiB0aGlzLmRyb3Bkb3duTGlzdFdpZHRoKCkgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZikpO1xuICAgIHRoaXMub3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2VEcm9wZG93bigpKTtcbiAgICB0aGlzLm9wZW5lZCA9IHRydWU7XG4gIH1cblxuICBjbG9zZURyb3Bkb3duKCkge1xuICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuUG9wVXBPblRhYiA9IGZhbHNlO1xuICAgIHRoaXMub3ZlcmxheVJlZj8uZGV0YWNoKCk7XG4gICAgdGhpcy5kYXRhID0gW107XG4gIH1cblxuICBlbmFibGVQb3BVcE9uVGFiKCkge1xuICAgIHRoaXMub3BlblBvcFVwT25UYWIgPSB0cnVlO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdEl0ZW0gPSB0aGlzLm92ZXJsYXlSZWY/Lm92ZXJsYXlFbGVtZW50XG4gICAgICAgID8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy5pdGVtW3RhYmluZGV4PVwiMFwiXScpO1xuICAgICAgZmlyc3RJdGVtPy5mb2N1cygpO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dC5yZXNldCgpO1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgaXRlbSBzZWxlY3Rpb24gZnJvbSBkcm9wZG93bi5cbiAgICogXG4gICAqIEZvciBzaW5nbGUtc2VsZWN0IG1vZGU6XG4gICAqIC0gU2V0cyBpbnB1dCB2YWx1ZSB0byBkaXNwbGF5IHNlbGVjdGVkIGl0ZW0gKHN0YW5kYXJkIFVYIHBhdHRlcm4pXG4gICAqIC0gU3RvcmVzIHNlbGVjdGVkIHZhbHVlIHRvIHByZXZlbnQgcmVvcGVuaW5nIGRyb3Bkb3duIG9uIGZvY3VzL2NoYW5nZSBkZXRlY3Rpb25cbiAgICogLSBCbHVycyBpbnB1dCB0byBwcmV2ZW50IGltbWVkaWF0ZSBmb2N1cy10cmlnZ2VyZWQgc2VhcmNoZXNcbiAgICogXG4gICAqIEZvciBtdWx0aS1zZWxlY3QgbW9kZTpcbiAgICogLSBDbGVhcnMgaW5wdXQgZm9yIG5leHQgc2VsZWN0aW9uXG4gICAqIC0gTWFpbnRhaW5zIGZvY3VzIGZvciBjb250aW51b3VzIHNlbGVjdGlvblxuICAgKi9cbiAgc2VsZWN0RGF0YShpdGVtOiBJTGlzdERhdGEsIGVmZmVjdGVkRnJvbU91dHNpZGUgPSB0cnVlKSB7XG4gICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHJldHVybjtcblxuICAgIHRoaXMuaXRlbVNlbGVjdGVkLmVtaXQoaXRlbSk7XG5cbiAgICBpZiAoIXRoaXMubXVsdGkoKSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IGl0ZW1bdGhpcy5kaXNwbGF5S2V5KCldO1xuICAgICAgLy8gU2V0IGlucHV0IHZhbHVlIHRvIHNob3cgc2VsZWN0ZWQgaXRlbSAoc3RhbmRhcmQgVVggLSBsaWtlIEFuZ3VsYXIgTWF0ZXJpYWwsIGV0Yy4pXG4gICAgICAvLyBVc2UgZW1pdEV2ZW50OiBmYWxzZSB0byBwcmV2ZW50IHRyaWdnZXJpbmcgdmFsdWVDaGFuZ2VzIHN1YnNjcmlwdGlvblxuICAgICAgdGhpcy5zZWFyY2hJbnB1dC5wYXRjaFZhbHVlKHNlbGVjdGVkVmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIFxuICAgICAgLy8gU3RvcmUgc2VsZWN0ZWQgdmFsdWUgLSBSeEpTIGZpbHRlciB3aWxsIHByZXZlbnQgcmVvcGVuaW5nIHdpdGggc2FtZSB2YWx1ZVxuICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdGVkVmFsdWU7XG4gICAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbnMoKS5oYXMoaXRlbVt0aGlzLnVuaXF1ZUtleSgpIV0pKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9ucygpLnNldChpdGVtW3RoaXMudW5pcXVlS2V5KCkhXSwgaXRlbSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldENvbnRyb2xWYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgaWYgKCFlZmZlY3RlZEZyb21PdXRzaWRlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICB9LCAxMCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaElucHV0LnBhdGNoVmFsdWUoJycpO1xuICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cbiAgICAvLyBCbHVyIGlucHV0IHRvIHByZXZlbnQgZm9jdXMgZXZlbnRzIGZyb20gaW1tZWRpYXRlbHkgdHJpZ2dlcmluZyBzZWFyY2hcbiAgICAvLyBUaGUgbGFzdFNlbGVjdGVkVmFsdWUgZmlsdGVyIHdpbGwgYWxzbyBwcmV2ZW50IHJlb3BlbmluZyBpZiBmb2N1cyBvY2N1cnNcbiAgICBpZiAodGhpcy5pbnB1dFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5pbnB1dFJlZi5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVJdGVtKGl0ZW06IElMaXN0RGF0YSkge1xuICAgIHRoaXMuaXRlbVJlbW92ZWQuZW1pdChpdGVtKTtcbiAgICB0aGlzLnNlbGVjdGlvbnMoKS5kZWxldGUoaXRlbVt0aGlzLnVuaXF1ZUtleSgpIV0pO1xuICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgdGhpcy5pbnB1dFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbnRyb2xWYWx1ZSh2YWx1ZTogSUxpc3REYXRhIHwgSUxpc3REYXRhW10pIHtcbiAgICB0aGlzLm9uU2VsZWN0LmVtaXQodmFsdWUpO1xuICAgIHRoaXMuY29udHJvbCgpPy5wYXRjaFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRJdGVtcygpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGlvbnMoKS52YWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBpbnB1dCBhbmQgcmVzZXRzIHNlbGVjdGlvbiBzdGF0ZS5cbiAgICogQ2xlYXJpbmcgbGFzdFNlbGVjdGVkVmFsdWUgYWxsb3dzIG5ldyBzZWFyY2hlcyB0byBwcm9jZWVkIG5vcm1hbGx5LlxuICAgKi9cbiAgcmVtb3ZlSW5wdXRWYWx1ZSgpIHtcbiAgICB0aGlzLnNlYXJjaElucHV0LnJlc2V0KCk7XG4gICAgdGhpcy5kYXRhID0gW107XG4gICAgdGhpcy5sYXN0U2VsZWN0ZWRWYWx1ZSA9IG51bGw7XG4gICAgdGhpcy5jbGVhci5lbWl0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGlucHV0IHJlY2VpdmVzIGZvY3VzLlxuICAgKiBPbmx5IG9wZW5zIGRyb3Bkb3duIGlmOlxuICAgKiAxLiBtaW5JbnB1dExlbmd0aCBhbGxvd3MgaXQgKC0xIG9yIDAgbWVhbnMgb3BlbiBvbiBmb2N1cylcbiAgICogMi4gSW5wdXQgdmFsdWUgZG9lc24ndCBtYXRjaCBsYXN0IHNlbGVjdGVkIHZhbHVlIChwcmV2ZW50cyByZW9wZW5pbmcgYWZ0ZXIgc2VsZWN0aW9uKVxuICAgKiBcbiAgICogVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGlucHV0IHJlZ2FpbnMgZm9jdXMgYWZ0ZXIgc2VsZWN0aW9uLlxuICAgKiBUaGUgUnhKUyBmaWx0ZXIgaW4gc2VhcmNoT2JzZXJ2YWJsZSBoYW5kbGVzIHZhbHVlQ2hhbmdlcywgYnV0IGZvY3VzIGV2ZW50c1xuICAgKiBuZWVkIHNlcGFyYXRlIGhhbmRsaW5nIHNpbmNlIHRoZXkgYnlwYXNzIHZhbHVlQ2hhbmdlcy5cbiAgICovXG4gIGRlZmF1bHRDYWxsKCkge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuc2VhcmNoSW5wdXQudmFsdWU/LnRyaW0oKSB8fCAnJztcbiAgICBjb25zdCBsYXN0U2VsZWN0ZWQgPSB0aGlzLmxhc3RTZWxlY3RlZFZhbHVlO1xuICAgIFxuICAgIC8vIERvbid0IG9wZW4gaWYgdmFsdWUgbWF0Y2hlcyBsYXN0IHNlbGVjdGVkICh1c2VyIGhhc24ndCB0eXBlZCBuZXcgcXVlcnkpXG4gICAgaWYgKGxhc3RTZWxlY3RlZCAmJiBjdXJyZW50VmFsdWUgPT09IGxhc3RTZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBPbmx5IG9wZW4gb24gZm9jdXMgaWYgbWluSW5wdXRMZW5ndGggYWxsb3dzIGl0XG4gICAgaWYgKHRoaXMubWluSW5wdXRMZW5ndGgoKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmh0dHBTdHJlYW0oKSh0aGlzLnNlYXJjaElucHV0LnZhbHVlIHx8ICcnKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAobGlzdDogSUxpc3REYXRhW10pID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmRhdGEgPSBsaXN0O1xuICAgICAgICAgIGlmICghdGhpcy5vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpICYmIGxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuRHJvcGRvd24odGhpcy5kZCwgdGhpcy5vcmlnaW4ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59IiwiPGRpdiBjbGFzcz1cImRkLXdyYXBwZXJcIlxuICAgICBbbmdDbGFzc109XCJ7IG9wZW5lZDogb3BlbmVkLCBkaXNhYmxlZDogZGlzYWJsZWQoKSwgcmVhZG9ubHk6IHJlYWRvbmx5KCkgfVwiXG4gICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aCgpXCJcbiAgICAgI2RkQnRuPlxuICBcbiAgPCEtLSBTZWxlY3RlZCBjaGlwcyBmb3IgbXVsdGktc2VsZWN0IC0tPlxuICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtbGlzdFwiICpuZ0lmPVwibXVsdGkoKSAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2hpcFwiXG4gICAgICAgICBbbmdDbGFzc109XCJ7ICdjaGlwLW1kJzogc2l6ZSgpID09PSAnbWQnLCAnY2hpcC1zbSc6IHNpemUoKSA9PT0gJ3NtJyB9XCJcbiAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXNcIj5cbiAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsgJ2g2Jzogc2l6ZSgpID09PSAnbWQnLCAnaDgtYic6IHNpemUoKSA9PT0gJ3NtJyB9XCJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA0cHg7XCI+XG4gICAgICAgIHt7IGl0ZW1bZGlzcGxheUtleSgpXSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLWljLW5hdmlnYXRpb24tY2FuY2VsLTI0XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY3Vyc29yOiAncG9pbnRlcicsICdmb250LXNpemUnOiBzaXplKCkgPT09ICdzbScgPyAnMTJweCcgOiAnMTRweCcgfVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUl0ZW0oaXRlbSlcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInJlbW92ZUl0ZW0oaXRlbSlcIj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBTZWFyY2ggaW5wdXQgLS0+XG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIj5cbiAgICA8IS0tIFBsYWNlaG9sZGVyIGljb24gLS0+XG4gICAgPGRpdiAqbmdJZj1cImN1c3RvbVBsYWNlaG9sZGVySWNvbigpOyBlbHNlIGRlZmF1bHRTZWFyY2hJY29uXCIgY2xhc3M9XCJjdXN0b20taWNvblwiPlxuICAgICAgPGltZyBbc3JjXT1cImN1c3RvbVBsYWNlaG9sZGVySWNvbigpXCIgYWx0PVwiY3VzdG9tSWNvblwiIC8+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0U2VhcmNoSWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1pYy1hY3Rpb24tc2VhcmNoLTI0XCI+PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIElucHV0IGZpZWxkIC0tPlxuICAgIDxpbnB1dCBbbmdDbGFzc109XCJ7ICdpcC1tZCc6IHNpemUoKSA9PT0gJ21kJywgJ2lwLXNtJzogc2l6ZSgpID09PSAnc20nIH1cIlxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKVwiXG4gICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgIGNsYXNzPVwiYmxhY2stdGV4dCBoNlwiXG4gICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAoZm9jdXMpPVwiZGVmYXVsdENhbGwoKVwiXG4gICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJlbmFibGVQb3BVcE9uVGFiKClcIlxuICAgICAgICAgICAoY29weSk9XCJkaXNhYmxlQ29weVBhc3RlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAocGFzdGUpPVwiZGlzYWJsZUNvcHlQYXN0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgKGN1dCk9XCJkaXNhYmxlQ29weVBhc3RlKCkgPyBmYWxzZSA6IHRydWVcIi8+XG5cbiAgICA8IS0tIENsZWFyIGlucHV0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJpY29uLWljLW5hdmlnYXRpb24tY2FuY2VsLTI0IGNyb29zLWljb25cIlxuICAgICAgICAgKm5nSWY9XCJzZWFyY2hJbnB1dC52YWx1ZT8ubGVuZ3RoXCJcbiAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAoY2xpY2spPVwicmVtb3ZlSW5wdXRWYWx1ZSgpXCJcbiAgICAgICAgIChrZXl1cC5lbnRlcik9XCJyZW1vdmVJbnB1dFZhbHVlKClcIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBEcm9wZG93biB0ZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZGQ+XG4gIDxkaXYgY2xhc3M9XCJkZC1saXN0XCJcbiAgICAgICBbbmdTdHlsZV09XCJ7ICdtYXgtaGVpZ2h0JzogaGVpZ2h0KCksICd3aWR0aCc6IGRyb3Bkb3duTGlzdFdpZHRoKCkgfVwiXG4gICAgICAgW25nQ2xhc3NdPVwieyAnZGQtbGlzdC1wZCc6IGRhdGEubGVuZ3RoID09PSAwIH1cIlxuICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgY2RrVHJhcEZvY3VzXG4gICAgICAgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cIm9wZW5Qb3BVcE9uVGFiXCI+XG5cbiAgICA8IS0tIExvYWRlciAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbUxvYWRlcjsgZWxzZSBkZWZhdWx0TG9hZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tTG9hZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtY29udGFpbmVyXCIgKm5nSWY9XCJsb2FkaW5nICYmICFjdXN0b21Mb2FkZXJcIj5cbiAgICAgICAgICA8bWlzLWxvYWRlciBbbW9iaWxlVmlld109XCJ0cnVlXCI+PC9taXMtbG9hZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEVycm9yIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlcnJvclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0YXR1cy1jb250YWluZXJcIj5cbiAgICAgICAgPHA+VW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWQsIDxici8+IFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERhdGEgbGlzdCAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWVycm9yICYmIGRhdGEubGVuZ3RoID4gMFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhXCI+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInNlbGVjdERhdGEoaXRlbSwgZmFsc2UpXCIgKGtleXVwLmVudGVyKT1cInNlbGVjdERhdGEoaXRlbSwgZmFsc2UpXCI+XG4gICAgICAgICAgPGRpdiB0YWJpbmRleD1cIi0xXCIgY2RrRm9jdXNJbml0aWFsPjwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBDdXN0b20gaXRlbSAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tSXRlbTsgZWxzZSBzdGFuZGFyZEl0ZW1cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIFN0YW5kYXJkIGl0ZW0gLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzdGFuZGFyZEl0ZW0+XG4gICAgICAgICAgICA8ZGl2IHRhYmluZGV4PVwiLTFcIiBjZGtGb2N1c0luaXRpYWw+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJvcGVuUG9wVXBPblRhYiA/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXRhKGl0ZW0sIGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWxlY3REYXRhKGl0ZW0sIGZhbHNlKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJpbWFyeVwiPnt7IGl0ZW1bZGlzcGxheUtleSgpXSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWNvbmRhcnlcIj57eyBpdGVtW3NlY29uZGFyeURpc3BsYXlLZXkoKV0gfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBObyBkYXRhIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiAhZXJyb3IgJiYgZGF0YS5sZW5ndGggPT09IDAgJiYgc2VhcmNoSW5wdXQudmFsdWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRhLW5vdC1mb3VuZFwiPk5vIERhdGEgQXZhaWxhYmxlPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|