@worktile/theia 16.3.4 → 16.4.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/editor.module.d.ts +1 -1
- package/esm2022/components/element/element.component.mjs +3 -4
- package/esm2022/components/text/text.component.mjs +3 -4
- package/esm2022/editor.component.mjs +5 -1
- package/esm2022/editor.module.mjs +4 -4
- package/esm2022/plugins/code/code.component.mjs +21 -23
- package/esm2022/plugins/code/code.editor.mjs +7 -18
- package/esm2022/plugins/image/image.component.mjs +18 -17
- package/esm2022/plugins/image/image.editor.mjs +4 -19
- package/esm2022/plugins/image/image.plugin.mjs +3 -3
- package/esm2022/plugins/link/edit/link-edit.component.mjs +15 -4
- package/esm2022/plugins/link/link.component.mjs +7 -8
- package/esm2022/plugins/link/link.editor.mjs +4 -21
- package/esm2022/plugins/link/link.plugin.mjs +3 -3
- package/esm2022/plugins/public-api.mjs +1 -2
- package/esm2022/plugins/table/components/row/row.component.mjs +49 -28
- package/esm2022/plugins/table/components/table.component.mjs +231 -235
- package/esm2022/plugins/table/components/td/td.component.mjs +24 -34
- package/esm2022/plugins/table/components/toolbar/table-options.component.mjs +3 -4
- package/esm2022/plugins/table/table.editor.mjs +24 -24
- package/esm2022/plugins/table/table.pipe.mjs +32 -19
- package/esm2022/plugins/table/table.plugin.mjs +5 -5
- package/esm2022/plugins/table/table.service.mjs +2 -2
- package/esm2022/plugins/table/table.types.mjs +2 -1
- package/esm2022/plugins/table/utils/calculate-table.mjs +17 -10
- package/esm2022/plugins/table/utils/get-grid-columns.mjs +6 -49
- package/esm2022/plugins/table/utils/is-header-row.mjs +3 -2
- package/esm2022/plugins/table/utils/is-legal-table.mjs +11 -1
- package/esm2022/plugins/table/utils/remove-row-column.mjs +3 -4
- package/esm2022/plugins/table/utils/table-position.mjs +11 -1
- package/esm2022/queries/index.mjs +3 -2
- package/esm2022/queries/is-root-path.mjs +2 -0
- package/esm2022/services/context.service.mjs +10 -6
- package/esm2022/transforms/index.mjs +2 -4
- package/fesm2022/worktile-theia.mjs +513 -542
- package/fesm2022/worktile-theia.mjs.map +1 -1
- package/interfaces/editor.d.ts +1 -1
- package/package.json +1 -1
- package/plugins/code/code.component.d.ts +2 -3
- package/plugins/code/code.editor.d.ts +3 -2
- package/plugins/image/image.component.d.ts +6 -4
- package/plugins/image/image.editor.d.ts +7 -4
- package/plugins/link/edit/link-edit.component.d.ts +2 -3
- package/plugins/link/link.component.d.ts +2 -3
- package/plugins/link/link.editor.d.ts +1 -3
- package/plugins/public-api.d.ts +0 -1
- package/plugins/table/components/row/row.component.d.ts +10 -5
- package/plugins/table/components/table.component.d.ts +19 -13
- package/plugins/table/components/table.component.scss +28 -21
- package/plugins/table/components/td/td.component.d.ts +4 -9
- package/plugins/table/table.editor.d.ts +7 -7
- package/plugins/table/table.pipe.d.ts +7 -2
- package/plugins/table/table.types.d.ts +1 -0
- package/plugins/table/utils/calculate-table.d.ts +1 -0
- package/plugins/table/utils/get-grid-columns.d.ts +1 -20
- package/plugins/table/utils/is-header-row.d.ts +1 -1
- package/plugins/table/utils/is-legal-table.d.ts +2 -0
- package/plugins/table/utils/table-position.d.ts +3 -1
- package/queries/index.d.ts +2 -1
- package/queries/is-range-across-blocks.d.ts +1 -1
- package/queries/is-root-path.d.ts +2 -0
- package/transforms/index.d.ts +1 -3
- package/esm2022/transforms/delete-node-by-type.mjs +0 -10
- package/esm2022/transforms/set-node-by-type.mjs +0 -10
- package/transforms/delete-node-by-type.d.ts +0 -3
- package/transforms/set-node-by-type.d.ts +0 -3
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { coerceCssPixelValue } from '@angular/cdk/coercion';
|
|
2
2
|
import { ComponentPortal, PortalInjector } from '@angular/cdk/portal';
|
|
3
|
-
import { Component, HostBinding } from '@angular/core';
|
|
3
|
+
import { Component, ElementRef, HostBinding, ViewChild } from '@angular/core';
|
|
4
4
|
import { isUndefined } from 'ngx-tethys/util';
|
|
5
5
|
import { Subject, fromEvent, merge } from 'rxjs';
|
|
6
6
|
import { filter, map, take, takeUntil } from 'rxjs/operators';
|
|
7
|
-
import { ELEMENT_TO_COMPONENT } from 'slate-angular';
|
|
7
|
+
import { AngularEditor, ELEMENT_TO_COMPONENT } from 'slate-angular';
|
|
8
8
|
import { ColumnResizeNotifierSource } from '../../../../components/column-resize/column-resize-notifier';
|
|
9
9
|
import { Position, TableCellEventDispatcher } from '../../../../components/column-resize/event-dispatcher';
|
|
10
10
|
import { TheColumnResizeOverlayHandleComponent } from '../../../../components/column-resize/overlay-handle.component';
|
|
@@ -12,18 +12,15 @@ import { ResizeRef } from '../../../../components/column-resize/resize-ref';
|
|
|
12
12
|
import { ColumnResizingStore } from '../../../../components/column-resize/resizing.store';
|
|
13
13
|
import { DEFAULT_SCROLL_CONTAINER } from '../../../../constants';
|
|
14
14
|
import { SLA_TABLE_CELL_SELECTOR } from '../../../../constants/selector';
|
|
15
|
-
import { TheEditor } from '../../../../interfaces/editor';
|
|
16
15
|
import { TheBaseElementComponent } from '../../../../interfaces/view-base';
|
|
17
16
|
import * as TheQueries from '../../../../queries';
|
|
18
17
|
import { coercePixelsFromCssValue, getElementHeight, getElementWidth, useElementStyle } from '../../../../utils/dom';
|
|
19
18
|
import { TableOptions, TableWithStickyRowClass } from '../../table.types';
|
|
20
|
-
import {
|
|
19
|
+
import { getSelectCellNode, getTableByCell } from '../../utils';
|
|
21
20
|
import { isMobileMode } from '../../../../utils/get-mode';
|
|
22
21
|
import * as i0 from "@angular/core";
|
|
23
22
|
import * as i1 from "@angular/cdk/overlay";
|
|
24
23
|
import * as i2 from "../../../../components/column-resize/resizing.store";
|
|
25
|
-
import * as i3 from "../../table.pipe";
|
|
26
|
-
import * as i4 from "slate-angular";
|
|
27
24
|
const OVERLAY_ACTIVE_CLASS = 'the-resizable-overlay-thumb-active';
|
|
28
25
|
const OVERLAY_INIT_SIZE = 16;
|
|
29
26
|
const TABLE_INSERT_MASK = 19;
|
|
@@ -94,7 +91,7 @@ export class TheTdComponent extends TheBaseElementComponent {
|
|
|
94
91
|
get rowResizeClass() {
|
|
95
92
|
return [
|
|
96
93
|
'the-row-resize-handle-panel',
|
|
97
|
-
this.
|
|
94
|
+
this.tableComponent && this.tableComponent.element.options?.numberedColumn ? 'the-numbered-resize-handle-panel' : ''
|
|
98
95
|
];
|
|
99
96
|
}
|
|
100
97
|
onContextChange() {
|
|
@@ -103,21 +100,22 @@ export class TheTdComponent extends TheBaseElementComponent {
|
|
|
103
100
|
this.useState();
|
|
104
101
|
}
|
|
105
102
|
}
|
|
106
|
-
constructor(elementRef, cdr, renderer,
|
|
103
|
+
constructor(elementRef, cdr, renderer, ngZone, injector, overlay, resizingStore, scrollDispatcher) {
|
|
107
104
|
super(elementRef, cdr);
|
|
108
105
|
this.elementRef = elementRef;
|
|
109
106
|
this.cdr = cdr;
|
|
110
107
|
this.renderer = renderer;
|
|
111
|
-
this.viewContainerRef = viewContainerRef;
|
|
112
108
|
this.ngZone = ngZone;
|
|
113
109
|
this.injector = injector;
|
|
114
110
|
this.overlay = overlay;
|
|
115
111
|
this.resizingStore = resizingStore;
|
|
116
112
|
this.scrollDispatcher = scrollDispatcher;
|
|
117
|
-
this.freezeColumnPipe = freezeColumnPipe;
|
|
118
113
|
this.destroy$ = new Subject();
|
|
119
114
|
this.tableOptions = new TableOptions();
|
|
120
115
|
this.cellInnerMinHeight = null;
|
|
116
|
+
this.getOutletElement = () => {
|
|
117
|
+
return this.cellInner.nativeElement;
|
|
118
|
+
};
|
|
121
119
|
}
|
|
122
120
|
ngOnInit() {
|
|
123
121
|
super.ngOnInit();
|
|
@@ -126,18 +124,17 @@ export class TheTdComponent extends TheBaseElementComponent {
|
|
|
126
124
|
}
|
|
127
125
|
ngAfterViewInit() {
|
|
128
126
|
this.ngZone.onStable.pipe(take(1)).subscribe(() => {
|
|
129
|
-
this.useTablePosition();
|
|
130
127
|
this.getInjectionService();
|
|
131
128
|
this.subscribeSelectedCellsChange();
|
|
132
129
|
this.subscribeDangerousCellsChange();
|
|
133
|
-
this.subscribeTableChange();
|
|
134
130
|
this.listenCellSelectEvents();
|
|
135
131
|
!this.isMobileMode && this.listenForCellHoverEvents();
|
|
136
132
|
this.listenForResizeEvents();
|
|
137
133
|
});
|
|
138
134
|
}
|
|
139
135
|
getInjectionService() {
|
|
140
|
-
|
|
136
|
+
const table = getTableByCell(this.editor, this.element);
|
|
137
|
+
this.tableComponent = ELEMENT_TO_COMPONENT.get(table);
|
|
141
138
|
}
|
|
142
139
|
// 选中
|
|
143
140
|
subscribeSelectedCellsChange() {
|
|
@@ -181,14 +178,6 @@ export class TheTdComponent extends TheBaseElementComponent {
|
|
|
181
178
|
this.cdr.detectChanges();
|
|
182
179
|
});
|
|
183
180
|
}
|
|
184
|
-
subscribeTableChange() {
|
|
185
|
-
this.tableStore
|
|
186
|
-
.tableChange()
|
|
187
|
-
.pipe(takeUntil(this.destroy$))
|
|
188
|
-
.subscribe(() => {
|
|
189
|
-
this.useTablePosition();
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
181
|
useState() {
|
|
193
182
|
this.useBackground();
|
|
194
183
|
this.useSpan();
|
|
@@ -196,11 +185,6 @@ export class TheTdComponent extends TheBaseElementComponent {
|
|
|
196
185
|
this.useFocus();
|
|
197
186
|
useElementStyle(this.elementRef.nativeElement, this.element);
|
|
198
187
|
}
|
|
199
|
-
useTablePosition() {
|
|
200
|
-
const path = TheEditor.findPath(this.editor, this.element);
|
|
201
|
-
// must be path of cell's children
|
|
202
|
-
this.tablePosition = createTablePosition(this.editor, path.concat(0));
|
|
203
|
-
}
|
|
204
188
|
useBackground() {
|
|
205
189
|
if (this.element.backgroundColor !== this.backgroundColor) {
|
|
206
190
|
this.backgroundColor = this.element.backgroundColor;
|
|
@@ -285,12 +269,15 @@ export class TheTdComponent extends TheBaseElementComponent {
|
|
|
285
269
|
this.eventDispatcher
|
|
286
270
|
.resizeOverlayVisibleForTableCell(element)
|
|
287
271
|
.pipe(takeUntil(this.destroy$), map(value => {
|
|
272
|
+
const path = AngularEditor.findPath(this.editor, this.element);
|
|
273
|
+
const isFirstColumn = path[path.length - 1] === 0;
|
|
274
|
+
const isFirstRow = path[path.length - 2] === 0;
|
|
288
275
|
// 禁止第一列左侧
|
|
289
|
-
if (value && value.position === Position.left &&
|
|
276
|
+
if (value && value.position === Position.left && isFirstColumn) {
|
|
290
277
|
return null;
|
|
291
278
|
}
|
|
292
279
|
// 禁止第一行顶部
|
|
293
|
-
if (value && value.position === Position.top &&
|
|
280
|
+
if (value && value.position === Position.top && isFirstRow) {
|
|
294
281
|
return null;
|
|
295
282
|
}
|
|
296
283
|
return value;
|
|
@@ -534,7 +521,7 @@ export class TheTdComponent extends TheBaseElementComponent {
|
|
|
534
521
|
}
|
|
535
522
|
}
|
|
536
523
|
else {
|
|
537
|
-
const scrollWidth = getElementWidth(this.tableElement) - this.tableComponent.
|
|
524
|
+
const scrollWidth = getElementWidth(this.tableElement) - this.tableComponent.tableWrapperWidth;
|
|
538
525
|
if (scrollWidth > 0) {
|
|
539
526
|
if (scrollWidth > Math.abs(deltaX)) {
|
|
540
527
|
this.applyLeftCols(cols, deltaX, cellIndex);
|
|
@@ -670,13 +657,16 @@ export class TheTdComponent extends TheBaseElementComponent {
|
|
|
670
657
|
this.destroy$.next();
|
|
671
658
|
this.destroy$.complete();
|
|
672
659
|
}
|
|
673
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: TheTdComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.
|
|
674
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: TheTdComponent, selector: "td[theTd]", host: { properties: { "style.backgroundColor": "this.backgroundColor", "attr.colspan": "this.colspan", "attr.rowspan": "this.rowspan", "style.display": "this.display" } }, providers: [ColumnResizingStore],
|
|
660
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: TheTdComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.Injector }, { token: i1.Overlay }, { token: i2.ColumnResizingStore }, { token: i1.ScrollDispatcher }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
661
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: TheTdComponent, selector: "td[theTd]", host: { properties: { "style.backgroundColor": "this.backgroundColor", "attr.colspan": "this.colspan", "attr.rowspan": "this.rowspan", "style.display": "this.display" } }, providers: [ColumnResizingStore], viewQueries: [{ propertyName: "cellInner", first: true, predicate: ["cellInner"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<div #cellInner>\n</div>\n" }); }
|
|
675
662
|
}
|
|
676
663
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: TheTdComponent, decorators: [{
|
|
677
664
|
type: Component,
|
|
678
|
-
args: [{ selector: 'td[theTd]', providers: [ColumnResizingStore], template: "<div #cellInner>\n
|
|
679
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.
|
|
665
|
+
args: [{ selector: 'td[theTd]', providers: [ColumnResizingStore], template: "<div #cellInner>\n</div>\n" }]
|
|
666
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.Injector }, { type: i1.Overlay }, { type: i2.ColumnResizingStore }, { type: i1.ScrollDispatcher }]; }, propDecorators: { cellInner: [{
|
|
667
|
+
type: ViewChild,
|
|
668
|
+
args: ['cellInner', { read: ElementRef, static: true }]
|
|
669
|
+
}], backgroundColor: [{
|
|
680
670
|
type: HostBinding,
|
|
681
671
|
args: ['style.backgroundColor']
|
|
682
672
|
}], colspan: [{
|
|
@@ -689,4 +679,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImpor
|
|
|
689
679
|
type: HostBinding,
|
|
690
680
|
args: ['style.display']
|
|
691
681
|
}] } });
|
|
692
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvY29tcG9uZW50cy90ZC90ZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3RkL3RkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUdILFNBQVMsRUFFVCxXQUFXLEVBT2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSwwQkFBMEIsRUFBb0IsTUFBTSw2REFBNkQsQ0FBQztBQUMzSCxPQUFPLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDM0csT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDdEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FB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O3VCQUFDLHVCQUF1QjtnQkFFUCxPQUFPO3NCQUFuQyxXQUFXO3VCQUFDLGNBQWM7Z0JBRUUsT0FBTztzQkFBbkMsV0FBVzt1QkFBQyxjQUFjO2dCQUVHLE9BQU87c0JBQXBDLFdBQVc7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUNzc1BpeGVsVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIE92ZXJsYXksIE92ZXJsYXlSZWYsIFNjcm9sbERpc3BhdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwsIFBvcnRhbEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0b3IsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgRUxFTUVOVF9UT19DT01QT05FTlQgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IENvbHVtblJlc2l6ZU5vdGlmaWVyU291cmNlLCBDb2x1bW5TaXplQWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9jb2x1bW4tcmVzaXplL2NvbHVtbi1yZXNpemUtbm90aWZpZXInO1xuaW1wb3J0IHsgUG9zaXRpb24sIFRhYmxlQ2VsbEV2ZW50RGlzcGF0Y2hlciB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29sdW1uLXJlc2l6ZS9ldmVudC1kaXNwYXRjaGVyJztcbmltcG9ydCB7IFRoZUNvbHVtblJlc2l6ZU92ZXJsYXlIYW5kbGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbHVtbi1yZXNpemUvb3ZlcmxheS1oYW5kbGUuY29tcG9uZW50JztcbmltcG9ydCB7IFJlc2l6ZVJlZiB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29sdW1uLXJlc2l6ZS9yZXNpemUtcmVmJztcbmltcG9ydCB7IENvbHVtblJlc2l6aW5nU3RvcmUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbHVtbi1yZXNpemUvcmVzaXppbmcuc3RvcmUnO1xuaW1wb3J0IHsgREVGQVVMVF9TQ1JPTExfQ09OVEFJTkVSIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNMQV9UQUJMRV9DRUxMX1NFTEVDVE9SIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29uc3RhbnRzL3NlbGVjdG9yJztcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9lZGl0b3InO1xuaW1wb3J0IHsgVGhlQmFzZUVsZW1lbnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL3ZpZXctYmFzZSc7XG5pbXBvcnQgKiBhcyBUaGVRdWVyaWVzIGZyb20gJy4uLy4uLy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgY29lcmNlUGl4ZWxzRnJvbUNzc1ZhbHVlLCBnZXRFbGVtZW50SGVpZ2h0LCBnZXRFbGVtZW50V2lkdGgsIHVzZUVsZW1lbnRTdHlsZSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBUYWJsZUZyZWV6ZUNvbHVtblBpcGUgfSBmcm9tICcuLi8uLi90YWJsZS5waXBlJztcbmltcG9ydCB7IFRhYmxlT3B0aW9ucywgVGFibGVXaXRoU3RpY2t5Um93Q2xhc3MgfSBmcm9tICcuLi8uLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBUYWJsZVBvc2l0aW9uLCBjcmVhdGVUYWJsZVBvc2l0aW9uLCBnZXRTZWxlY3RDZWxsTm9kZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFRoZVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IGlzTW9iaWxlTW9kZSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2dldC1tb2RlJztcblxuY29uc3QgT1ZFUkxBWV9BQ1RJVkVfQ0xBU1MgPSAndGhlLXJlc2l6YWJsZS1vdmVybGF5LXRodW1iLWFjdGl2ZSc7XG5jb25zdCBPVkVSTEFZX0lOSVRfU0laRSA9IDE2O1xuY29uc3QgVEFCTEVfSU5TRVJUX01BU0sgPSAxOTtcbmNvbnN0IFRBQkxFX0JPUkRFUiA9IDE7XG5jb25zdCBUQUJMRV9QQURESU5HID0gODtcbmV4cG9ydCBjb25zdCBQT1NJVElPTl9NQVA6IHsgW2tleTogc3RyaW5nXTogQ29ubmVjdGVkUG9zaXRpb24gfSA9IHtcbiAgICB0b3A6IHtcbiAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICBvdmVybGF5WTogJ2NlbnRlcidcbiAgICB9LFxuICAgIGJvdHRvbToge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiAnY2VudGVyJ1xuICAgIH0sXG4gICAgcmlnaHQ6IHtcbiAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICBvdmVybGF5WDogJ2NlbnRlcicsXG4gICAgICAgIG92ZXJsYXlZOiAndG9wJ1xuICAgIH0sXG4gICAgbGVmdDoge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6ICdjZW50ZXInLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICB9XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RkW3RoZVRkXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RkLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtDb2x1bW5SZXNpemluZ1N0b3JlXVxufSlcbmV4cG9ydCBjbGFzcyBUaGVUZENvbXBvbmVudCBleHRlbmRzIFRoZUJhc2VFbGVtZW50Q29tcG9uZW50PFRhYmxlQ2VsbEVsZW1lbnQsIEVkaXRvcj4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHVibGljIHRhYmxlUG9zaXRpb246IFRhYmxlUG9zaXRpb247XG5cbiAgICBwdWJsaWMgdGFibGVDb21wb25lbnQ6IFRoZVRhYmxlQ29tcG9uZW50O1xuXG4gICAgcHJvdGVjdGVkIG92ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xuXG4gICAgcHVibGljIGhvdmVyZWREaXJlY3Rpb246IFBvc2l0aW9uIHwgbnVsbDtcblxuICAgIHB1YmxpYyB0YWJsZU9wdGlvbnM6IFRhYmxlT3B0aW9ucyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcblxuICAgIHB1YmxpYyBjZWxsSW5uZXJNaW5IZWlnaHQ6IG51bWJlciA9IG51bGw7XG5cbiAgICBnZXQgdGFibGVTdG9yZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb21wb25lbnQ/LnRhYmxlU3RvcmU7XG4gICAgfVxuXG4gICAgZ2V0IHRhYmxlU2VydmljZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb21wb25lbnQ/LnRhYmxlU2VydmljZTtcbiAgICB9XG5cbiAgICBnZXQgZXZlbnREaXNwYXRjaGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbXBvbmVudD8uZXZlbnREaXNwYXRjaGVyO1xuICAgIH1cblxuICAgIGdldCByZXNpemVOb3RpZmllcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb21wb25lbnQ/LnJlc2l6ZU5vdGlmaWVyO1xuICAgIH1cblxuICAgIGdldCB0YWJsZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbXBvbmVudD8udGhlVGFibGVFbGVtZW50Py5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldCBzY3JvbGxhYmxlRWxlbWVudFRvcCgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KFxuICAgICAgICAgICAgdGhpcy5lZGl0b3Iub3B0aW9ucz8uc2Nyb2xsQ29udGFpbmVyIHx8IERFRkFVTFRfU0NST0xMX0NPTlRBSU5FUlxuICAgICAgICApO1xuICAgICAgICBpZiAoY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtd2luZG93LnNjcm9sbFk7XG4gICAgfVxuXG4gICAgZ2V0IHNjcm9sbGFibGVFbGVtZW50Qm90dG9tKCkge1xuICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5vcHRpb25zPy5zY3JvbGxDb250YWluZXIgfHwgREVGQVVMVF9TQ1JPTExfQ09OVEFJTkVSXG4gICAgICAgICk7XG4gICAgICAgIGlmIChjb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC13aW5kb3cuc2Nyb2xsWTtcbiAgICB9XG5cbiAgICBnZXQgc2Nyb2xsYWJsZUVsZW1lbnRMZWZ0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbXBvbmVudC50YWJsZVdyYXBwZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIH1cblxuICAgIGdldCBpc1hBeGlzSG92ZXIoKSB7XG4gICAgICAgIHJldHVybiBbUG9zaXRpb24ubGVmdCwgUG9zaXRpb24ucmlnaHRdLmluY2x1ZGVzKHRoaXMuaG92ZXJlZERpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0IHJvd1Jlc2l6ZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3RoZS1yb3ctcmVzaXplLWhhbmRsZS1wYW5lbCcsXG4gICAgICAgICAgICB0aGlzLnRhYmxlUG9zaXRpb24udGFibGUgJiYgdGhpcy50YWJsZVBvc2l0aW9uLnRhYmxlLm9wdGlvbnM/Lm51bWJlcmVkQ29sdW1uID8gJ3RoZS1udW1iZXJlZC1yZXNpemUtaGFuZGxlLXBhbmVsJyA6ICcnXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHVibGljIGRvdFdyYXBwZXJIb3ZlcmVkOiBib29sZWFuO1xuXG4gICAgcHVibGljIHJlc2l6ZVJlZjogUmVzaXplUmVmO1xuXG4gICAgcHVibGljIGlzTW9iaWxlTW9kZTogYm9vbGVhbjtcblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuYmFja2dyb3VuZENvbG9yJykgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuY29sc3BhbicpIGNvbHNwYW46IG51bWJlcjtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb3dzcGFuJykgcm93c3BhbjogbnVtYmVyO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JykgZGlzcGxheTogc3RyaW5nO1xuXG4gICAgb25Db250ZXh0Q2hhbmdlKCkge1xuICAgICAgICBzdXBlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXNlU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwdWJsaWMgb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHVibGljIHJlc2l6aW5nU3RvcmU6IENvbHVtblJlc2l6aW5nU3RvcmUsXG4gICAgICAgIHB1YmxpYyBzY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyLFxuICAgICAgICBwdWJsaWMgZnJlZXplQ29sdW1uUGlwZTogVGFibGVGcmVlemVDb2x1bW5QaXBlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGNkcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuaXNNb2JpbGVNb2RlID0gaXNNb2JpbGVNb2RlKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgdGhpcy51c2VTdGF0ZSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2VUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmdldEluamVjdGlvblNlcnZpY2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlU2VsZWN0ZWRDZWxsc0NoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVEYW5nZXJvdXNDZWxsc0NoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUYWJsZUNoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5DZWxsU2VsZWN0RXZlbnRzKCk7XG4gICAgICAgICAgICAhdGhpcy5pc01vYmlsZU1vZGUgJiYgdGhpcy5saXN0ZW5Gb3JDZWxsSG92ZXJFdmVudHMoKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuRm9yUmVzaXplRXZlbnRzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEluamVjdGlvblNlcnZpY2UoKSB7XG4gICAgICAgIHRoaXMudGFibGVDb21wb25lbnQgPSBFTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQodGhpcy50YWJsZVBvc2l0aW9uLnRhYmxlKSBhcyBUaGVUYWJsZUNvbXBvbmVudDtcbiAgICB9XG5cbiAgICAvLyDpgInkuK1cbiAgICBzdWJzY3JpYmVTZWxlY3RlZENlbGxzQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnRhYmxlU3RvcmVcbiAgICAgICAgICAgIC5zZWxlY3RlZENlbGxzQ2hhbmdlKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoY2VsbEVsZW1lbnRzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbEVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnc2VsZWN0ZWQtY2VsbCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWRDZWxsID0gY2VsbEVsZW1lbnRzLmZpbmQoY2VsbCA9PiBjZWxsID09PSB0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1NlbGVjdGVkQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3NlbGVjdGVkLWNlbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdzZWxlY3RlZC1jZWxsJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlRGFuZ2Vyb3VzQ2VsbHNDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZVxuICAgICAgICAgICAgLmRhbmdlcm91c0NlbGxzQ2hhbmdlKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkYW5nZXJvdXMtY2VsbCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdENlbGxOb2RlcyA9IGdldFNlbGVjdENlbGxOb2RlKHRoaXMuZWRpdG9yLCB4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZENlbGwgPSBzZWxlY3RDZWxsTm9kZXMuZmluZChjZWxsID0+IGNlbGwubm9kZSA9PT0gdGhpcy5lbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkYW5nZXJvdXMtY2VsbCcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rhbmdlcm91cy1jZWxsJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlVGFibGVDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZVxuICAgICAgICAgICAgLnRhYmxlQ2hhbmdlKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXNlU3RhdGUoKSB7XG4gICAgICAgIHRoaXMudXNlQmFja2dyb3VuZCgpO1xuICAgICAgICB0aGlzLnVzZVNwYW4oKTtcbiAgICAgICAgdGhpcy51c2VEaXNwbGF5KCk7XG4gICAgICAgIHRoaXMudXNlRm9jdXMoKTtcbiAgICAgICAgdXNlRWxlbWVudFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmVsZW1lbnQpO1xuICAgIH1cblxuICAgIHVzZVRhYmxlUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBUaGVFZGl0b3IuZmluZFBhdGgodGhpcy5lZGl0b3IsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIC8vIG11c3QgYmUgcGF0aCBvZiBjZWxsJ3MgY2hpbGRyZW5cbiAgICAgICAgdGhpcy50YWJsZVBvc2l0aW9uID0gY3JlYXRlVGFibGVQb3NpdGlvbih0aGlzLmVkaXRvciwgcGF0aC5jb25jYXQoMCkpO1xuICAgIH1cblxuICAgIHVzZUJhY2tncm91bmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQuYmFja2dyb3VuZENvbG9yICE9PSB0aGlzLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmVsZW1lbnQuYmFja2dyb3VuZENvbG9yIGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVzZVNwYW4oKSB7XG4gICAgICAgIHRoaXMuY29sc3BhbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yb3dzcGFuID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmNvbHNwYW4pIHtcbiAgICAgICAgICAgIHRoaXMuY29sc3BhbiA9IHRoaXMuZWxlbWVudC5jb2xzcGFuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQucm93c3Bhbikge1xuICAgICAgICAgICAgdGhpcy5yb3dzcGFuID0gdGhpcy5lbGVtZW50LnJvd3NwYW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VEaXNwbGF5KCkge1xuICAgICAgICB0aGlzLmRpc3BsYXkgPSB0aGlzLmVsZW1lbnQuaGlkZGVuID8gJ25vbmUnIDogJyc7XG4gICAgfVxuXG4gICAgLy8g6IGa54SmXG4gICAgdXNlRm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkQW5kTm9uUmVhZG9ubHkgJiYgVGhlUXVlcmllcy5pc0dsb2JhbENvbGxhcHNlZCh0aGlzLmVkaXRvcikpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1c2VkLWNlbGwnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1c2VkLWNlbGwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vI3JlZ2lvbiBjZWxsLXNlbGVjdFxuICAgIGxpc3RlbkNlbGxTZWxlY3RFdmVudHMoKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCE7XG4gICAgICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZWxlbWVudCwgJ21vdXNlZG93bicpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChlOiBNb3VzZUV2ZW50KSA9PiBlLmJ1dHRvbiAhPT0gMiksXG4gICAgICAgICAgICAgICAgICAgIG1hcChldmVudCA9PiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFNMQV9UQUJMRV9DRUxMX1NFTEVDVE9SKSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcihjZWxsID0+ICEhY2VsbClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoY2VsbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50YWJsZVN0b3JlLnBvaW50ZXJTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RvcmUuc2VsZWN0Q2VsbChjZWxsLCB0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50YWJsZVN0b3JlLmFyZWFTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RvcmUuc2V0QXJlYVNlbGVjdGlvbkNlbGxzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdG9yZS5zZWxlY3RDZWxsU3RhcnQoY2VsbCwgdGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaLlumAiVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5DZWxsTW91c2VFdmVudHMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyDpvKDmoIfnp7vlhaXkuovku7ZcbiAgICBsaXN0ZW5DZWxsTW91c2VFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IG1vdXNlb3Zlck9ic2VydmFibGUgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZW92ZXInKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFNMQV9UQUJMRV9DRUxMX1NFTEVDVE9SKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNlbGw7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCkgPT4gISFjZWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoY2VsbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RvcmUuc2VsZWN0Q2VsbE9uZ29pbmcoY2VsbCwgdGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50YWJsZVN0b3JlLmlzQ2VsbFNlbGVjdGluZyB8fCB0aGlzLnRhYmxlU3RvcmUucG9pbnRlclNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZUNvbXBvbmVudC50YWJsZVNlcnZpY2UuYWZ0ZXJTZWxlY3RlZENlbGxzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdG9yZS5mb2N1c0NlbGxFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVDb21wb25lbnQuZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW9iaWxlTW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50YWJsZVN0b3JlLmFyZWFTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVN0b3JlLnNlbGVjdENlbGxFbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbW91c2VvdmVyT2JzZXJ2YWJsZS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uIHJlc2l6YWJsZVxuICAgIHByaXZhdGUgbGlzdGVuRm9yQ2VsbEhvdmVyRXZlbnRzKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQhO1xuICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclxuICAgICAgICAgICAgLnJlc2l6ZU92ZXJsYXlWaXNpYmxlRm9yVGFibGVDZWxsKGVsZW1lbnQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8g56aB5q2i56ys5LiA5YiX5bem5L6nXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wb3NpdGlvbiA9PT0gUG9zaXRpb24ubGVmdCAmJiB0aGlzLnRhYmxlUG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8g56aB5q2i56ys5LiA6KGM6aG26YOoXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wb3NpdGlvbiA9PT0gUG9zaXRpb24udG9wICYmIHRoaXMudGFibGVQb3NpdGlvbi5nZXRSb3dJbmRleCgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoaG92ZXJlZENlbGxJbmZvID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaG92ZXJlZENlbGxJbmZvICYmIGhvdmVyZWRDZWxsSW5mby5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWREaXJlY3Rpb24gPSBob3ZlcmVkQ2VsbEluZm8ucG9zaXRpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkRGlyZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhvdmVyZWRDZWxsSW5mbykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWREaXJlY3Rpb24gPSBob3ZlcmVkQ2VsbEluZm8ucG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5vdmVybGF5UmVmIHx8ICF0aGlzLm92ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5fY3JlYXRlT3ZlcmxheUZvckhhbmRsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvd0hhbmRsZU92ZXJsYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXplUmVmLnNldERpcmVjdGlvbih0aGlzLmlzWEF4aXNIb3ZlciA/ICdYJyA6ICdZJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlIYW5kbGVTaXplQW5kT2Zmc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsaXN0ZW5Gb3JSZXNpemVFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IHRha2VVbnRpbERlc3Ryb3llZCA9IHRha2VVbnRpbDxDb2x1bW5TaXplQWN0aW9uPih0aGlzLmRlc3Ryb3kkKTtcblxuICAgICAgICBtZXJnZSh0aGlzLnJlc2l6ZU5vdGlmaWVyLnJlc2l6ZUNhbmNlbGVkLCB0aGlzLnJlc2l6ZU5vdGlmaWVyLnRyaWdnZXJSZXNpemUpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQsXG4gICAgICAgICAgICAgICAgZmlsdGVyKGNvbHVtblNpemUgPT4gY29sdW1uU2l6ZS50YWJsZUNlbGwgPT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBkZWx0YVNpemUsIHByZXZpb3VzU2l6ZSwgY29tcGxldGVJbW1lZGlhdGVseSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5YGP56e755qE5YC85LiN5a2Y5Zyo5bCx5LiN6KaB6L+b6KGM5ZCO57ut55qE6K6h566X5LqGXG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGRlbHRhU2l6ZSkgfHwgaXNVbmRlZmluZWQocHJldmlvdXNTaXplKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdG9wLCBsZWZ0LCBoZWlnaHQsIHdpZHRoIH0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFksIGNsaWVudFggfSA9IGV2ZW50IGFzIE1vdXNlRXZlbnQ7XG4gICAgICAgICAgICAgICAgbGV0IGlzUHJldmVudEFwcGx5U2l6ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIOWQkeS4i++8jOaIluiAheWQkeWPs+enu+WKqChkZWx0YVNpemUgPiAwKe+8jOm8oOagh+S9jee9ruS4jeWcqOW9k+WJjeWNleWFg+agvOaLluaLvee6v+S4iu+8jOmYu+atouW6lOeUqOaLluaLveWwuuWvuFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzWEF4aXNIb3Zlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsV2lkdGggPSB0aGlzLmhvdmVyZWREaXJlY3Rpb24gPT09IFBvc2l0aW9uLmxlZnQgPyAwIDogd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGlzUHJldmVudEFwcGx5U2l6ZSA9IGRlbHRhU2l6ZSA+IDAgJiYgbGVmdCArIGNlbGxXaWR0aCAtIGNsaWVudFggPiAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxIZWlnaHQgPSB0aGlzLmhvdmVyZWREaXJlY3Rpb24gPT09IFBvc2l0aW9uLnRvcCA/IDAgOiBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGlzUHJldmVudEFwcGx5U2l6ZSA9IGRlbHRhU2l6ZSA+IDAgJiYgdG9wICsgY2VsbEhlaWdodCAtIGNsaWVudFkgPiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNQcmV2ZW50QXBwbHlTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQhLmNsYXNzTGlzdC5hZGQoT1ZFUkxBWV9BQ1RJVkVfQ0xBU1MpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlTaXplKGRlbHRhU2l6ZSwgcHJldmlvdXNTaXplKTtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVJbW1lZGlhdGVseSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wbGV0ZVJlc2l6ZU9wZXJhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG1lcmdlKHRoaXMucmVzaXplTm90aWZpZXIucmVzaXplQ2FuY2VsZWQsIHRoaXMucmVzaXplTm90aWZpZXIucmVzaXplQ29tcGxldGVkKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShjb2x1bW5TaXplID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhblVwQWZ0ZXJSZXNpemUoY29sdW1uU2l6ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemluZ1N0b3JlLmNsZWFuUmVzaXppbmcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NvbXBsZXRlUmVzaXplT3BlcmF0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVOb3RpZmllci5yZXNpemVDb21wbGV0ZWQubmV4dCh7XG4gICAgICAgICAgICAgICAgdGFibGVDZWxsOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NsZWFuVXBBZnRlclJlc2l6ZShjb2x1bW5TaXplOiBDb2x1bW5TaXplQWN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IS5jbGFzc0xpc3QucmVtb3ZlKE9WRVJMQVlfQUNUSVZFX0NMQVNTKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVIYW5kbGVQb3J0YWwoKTogQ29tcG9uZW50UG9ydGFsPFRoZUNvbHVtblJlc2l6ZU92ZXJsYXlIYW5kbGVDb21wb25lbnQ+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tVG9rZW5zID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgdGhpcy5yZXNpemVSZWYgPSBuZXcgUmVzaXplUmVmKFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLFxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmISxcbiAgICAgICAgICAgIHRoaXMudGFibGVPcHRpb25zLm1pbldpZHRoUHgsXG4gICAgICAgICAgICB0aGlzLnRhYmxlT3B0aW9ucy5tYXhXaWR0aFB4LFxuICAgICAgICAgICAgdGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHgsXG4gICAgICAgICAgICB0aGlzLnRhYmxlT3B0aW9ucy5tYXhIZWlnaHRQeCxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlIYW5kbGVTaXplQW5kT2Zmc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGN1c3RvbVRva2Vucy5zZXQoUmVzaXplUmVmLCB0aGlzLnJlc2l6ZVJlZik7XG4gICAgICAgIGN1c3RvbVRva2Vucy5zZXQoVGFibGVDZWxsRXZlbnREaXNwYXRjaGVyLCB0aGlzLmV2ZW50RGlzcGF0Y2hlcik7XG4gICAgICAgIGN1c3RvbVRva2Vucy5zZXQoQ29sdW1uUmVzaXplTm90aWZpZXJTb3VyY2UsIHRoaXMucmVzaXplTm90aWZpZXIpO1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IG5ldyBQb3J0YWxJbmplY3Rvcih0aGlzLmluamVjdG9yLCBjdXN0b21Ub2tlbnMpO1xuICAgICAgICByZXR1cm4gbmV3IENvbXBvbmVudFBvcnRhbChUaGVDb2x1bW5SZXNpemVPdmVybGF5SGFuZGxlQ29tcG9uZW50LCB0aGlzLnZpZXdDb250YWluZXJSZWYsIGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zaG93SGFuZGxlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmIS5hdHRhY2godGhpcy5fY3JlYXRlSGFuZGxlUG9ydGFsKCkpLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlIYW5kbGVTaXplQW5kT2Zmc2V0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVPdmVybGF5SGFuZGxlU2l6ZUFuZE9mZnNldCgpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmPy5yZW1vdmVQYW5lbENsYXNzKFsndGhlLWNvbHVtbi1yZXNpemUtaGFuZGxlLXBhbmVsJywgLi4udGhpcy5yb3dSZXNpemVDbGFzc10pO1xuICAgICAgICB0aGlzLmlzWEF4aXNIb3ZlciA/IHRoaXMudXBkYXRlT3ZlcmxheUhhbmRsZUNvbHVtblNpemUoKSA6IHRoaXMudXBkYXRlT3ZlcmxheUhhbmRsZVJvd1NpemUoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpKTtcbiAgICAgICAgdGhpcy5yZXNpemVSZWYuc2V0RGlyZWN0aW9uKHRoaXMuaXNYQXhpc0hvdmVyID8gJ1gnIDogJ1knKTtcbiAgICAgICAgdGhpcy5yZXNpemVSZWYuc2V0UG9zaXRpb24odGhpcy5ob3ZlcmVkRGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU92ZXJsYXlIYW5kbGVDb2x1bW5TaXplKCkge1xuICAgICAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50UmVjdCA9IHRoaXMudGFibGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0YWJsZUVsZW1lbnRUb3AgPSB0YWJsZUVsZW1lbnRSZWN0LnRvcDtcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50Qm90dG9tID0gdGFibGVFbGVtZW50UmVjdC5ib3R0b207XG4gICAgICAgIGlmICh0aGlzLmdldElzU3RpY2t5VG9wUm93KCkpIHtcbiAgICAgICAgICAgIGhlaWdodCA9IHRhYmxlRWxlbWVudEJvdHRvbSAtIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRUb3AgLSBUQUJMRV9JTlNFUlRfTUFTSyAtIFRBQkxFX1BBRERJTkcgKyBUQUJMRV9CT1JERVI7XG4gICAgICAgIH0gZWxzZSBpZiAodGFibGVFbGVtZW50VG9wIDwgdGhpcy5zY3JvbGxhYmxlRWxlbWVudFRvcCkge1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy50YWJsZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gKHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRUb3AgLSB0YWJsZUVsZW1lbnRUb3ApO1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3RoZS1lZGl0b3InKTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBlZGl0b3IucXVlcnlTZWxlY3RvcignLnRoZS1nbG9iYWwtdG9vbGJhcicpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgLy8g5aSE55CGIHRvb2xiYXIg5a2Y5Zyo55qE5pe25YCZ5YeP5Y675YaF5bWM5bel5YW35qCP6auY5bqmXG4gICAgICAgICAgICBpZiAodG9vbGJhcikge1xuICAgICAgICAgICAgICAgIGhlaWdodCA9IGhlaWdodCAtIHRvb2xiYXIub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICh0aGlzLm92ZXJsYXlSZWYuaG9zdEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLm1hcmdpblRvcCA9IGAke3Rvb2xiYXIub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0YWJsZUVsZW1lbnRCb3R0b20gPiB0aGlzLnNjcm9sbGFibGVFbGVtZW50Qm90dG9tKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLnRhYmxlRWxlbWVudC5vZmZzZXRIZWlnaHQgLSAodGFibGVFbGVtZW50Qm90dG9tIC0gdGhpcy5zY3JvbGxhYmxlRWxlbWVudEJvdHRvbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLnRhYmxlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdmVybGF5UmVmIS51cGRhdGVTaXplKHsgaGVpZ2h0LCB3aWR0aDogT1ZFUkxBWV9JTklUX1NJWkUsIG1heEhlaWdodDogJ2luaGVyaXQnIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXNTdGlja3lUb3BSb3coKSB7XG4gICAgICAgIGNvbnN0IG5ld1RhYmxlRWxlbWVudCA9IHRoaXMudGFibGVDb21wb25lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIG5ld1RhYmxlRWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoVGFibGVXaXRoU3RpY2t5Um93Q2xhc3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlT3ZlcmxheUhhbmRsZVJvd1NpemUoKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy50YWJsZUNvbXBvbmVudC50YWJsZVdyYXBwZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmIS5hZGRQYW5lbENsYXNzKHRoaXMucm93UmVzaXplQ2xhc3MpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLnVwZGF0ZVNpemUoeyB3aWR0aDogd2lkdGggLSAyLCBoZWlnaHQ6IE9WRVJMQVlfSU5JVF9TSVpFIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlTaXplKGRlbHRhU2l6ZTogbnVtYmVyLCBwcmV2aW91c1NpemU/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gdXBkYXRlIGNvbCB3aWR0aCBhbmQgdGFibGUgd2lkdGhcbiAgICAgICAgaWYgKHRoaXMuaXNYQXhpc0hvdmVyKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Q29sdW1uU2l6ZShkZWx0YVNpemUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBseVJvd1NpemUoZGVsdGFTaXplKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlQ29tcG9uZW50LnVzZVJvd0NvbnRyb2xzKCk7XG4gICAgICAgIHRoaXMudGFibGVDb21wb25lbnQuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlIYW5kbGVTaXplQW5kT2Zmc2V0KCk7XG4gICAgICAgIHRoaXMudGFibGVDb21wb25lbnQuc2V0R3JpZENvbHVtbnNTdHlsZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZU92ZXJsYXlGb3JIYW5kbGUoKTogT3ZlcmxheVJlZiB7XG4gICAgICAgIC8vIFVzZSBvZiBvdmVybGF5cyBhbGxvd3MgdXMgdG8gcHJvcGVybHkgY2FwdHVyZSBjbGljayBldmVudHMgc3Bhbm5pbmcgcGFydHNcbiAgICAgICAgLy8gb2YgdHdvIHRhYmxlIGNlbGxzIGFuZCBpcyBhbHNvIHVzZWZ1bCBmb3IgZGlzcGxheWluZyBhIHJlc2l6ZSB0aHVtYlxuICAgICAgICAvLyBvdmVyIGJvdGggY2VsbHMgYW5kIGV4dGVuZGluZyBpdCBkb3duIHRoZSB0YWJsZSBhcyBuZWVkZWQuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlPcHRpb24gPSB0aGlzLmlzWEF4aXNIb3ZlclxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogT1ZFUkxBWV9JTklUX1NJWkUgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogJ3RoZS1jb2x1bW4tcmVzaXplLWhhbmRsZS1wYW5lbCdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IE9WRVJMQVlfSU5JVF9TSVpFICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IHRoaXMucm93UmVzaXplQ2xhc3NcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgICAgICAgLy8gQWx3YXlzIHBvc2l0aW9uIHRoZSBvdmVybGF5IGJhc2VkIG9uIGxlZnQtaW5kZXhlZCBjb29yZGluYXRlcy5cbiAgICAgICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLmNyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXG4gICAgICAgICAgICAuLi5vdmVybGF5T3B0aW9uXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpIHtcbiAgICAgICAgbGV0IG9mZnNldFkgPSB0aGlzLmNhbGN1bGF0ZU92ZXJsYXlIYW5kbGVPZmZzZXRZKCk7XG4gICAgICAgIGxldCBvZmZzZXRYID0gdGhpcy5jYWxjdWxhdGVPdmVybGF5SGFuZGxlT2Zmc2V0WCgpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbjogQ29ubmVjdGVkUG9zaXRpb24gPSB0aGlzLmlzWEF4aXNIb3ZlclxuICAgICAgICAgICAgPyB7IC4uLlBPU0lUSU9OX01BUFt0aGlzLmhvdmVyZWREaXJlY3Rpb25dLCBvZmZzZXRZIH1cbiAgICAgICAgICAgIDogeyAuLi5QT1NJVElPTl9NQVBbdGhpcy5ob3ZlcmVkRGlyZWN0aW9uXSwgb2Zmc2V0WCB9O1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5XG4gICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoR3Jvd0FmdGVyT3BlbihmYWxzZSlcbiAgICAgICAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtwb3NpdGlvbl0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlT3ZlcmxheUhhbmRsZU9mZnNldFkoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlRWxlbWVudFRvcCA9IHRoaXMudGFibGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgaWYgKHRoaXMuZ2V0SXNTdGlja3lUb3BSb3coKSkge1xuICAgICAgICAgICAgLyog6K6+572u5Zu65a6a5qCH6aKY6KGM5ZCO77yM56ys5LiA5Liq6KGo5qC85YWD57Sg5a6e6ZmF5piv56ys5LqM6KGM77yM56ys5LqM6KGM5ZKM56ys5LiA6KGM5YGP56e755qE5L2N572u5beu5LiA5LiqIG1hc2sg5ZKM5LiO6aG26YOoIHBhZGRpbmcg55qE5L2N572u77yM5omA5Lul6ZyA6KaB6KGl6b2QICovXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRUb3AgLVxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArXG4gICAgICAgICAgICAgICAgVEFCTEVfSU5TRVJUX01BU0sgK1xuICAgICAgICAgICAgICAgIFRBQkxFX1BBRERJTkcgLVxuICAgICAgICAgICAgICAgIFRBQkxFX0JPUkRFUlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGVFbGVtZW50VG9wIDwgdGhpcy5zY3JvbGxhYmxlRWxlbWVudFRvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRUb3AgLSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVFbGVtZW50VG9wIC0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVPdmVybGF5SGFuZGxlT2Zmc2V0WCgpIHtcbiAgICAgICAgY29uc3QgY2VsbEVsZW1lbnRMZWZ0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50TGVmdCA9IHRoaXMudGFibGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIHJldHVybiB0YWJsZUVsZW1lbnRMZWZ0IC0gY2VsbEVsZW1lbnRMZWZ0ICsgdGhpcy5zY3JvbGxhYmxlRWxlbWVudExlZnQ7XG4gICAgfVxuXG4gICAgYXBwbHlDb2x1bW5TaXplKGRlbHRhWDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBbLi4udGhpcy50YWJsZUVsZW1lbnQucXVlcnlTZWxlY3RvcignY29sZ3JvdXAnKS5jaGlsZHJlbl0gYXMgSFRNTFRhYmxlQ29sRWxlbWVudFtdO1xuICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuc3RvcmVUYWJsZVdpZHRoKGNvbHMpO1xuICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuaW5pdERpcmVjdGlvbihkZWx0YVgpO1xuICAgICAgICBsZXQgY2VsbEluZGV4ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2VsbEluZGV4O1xuICAgICAgICBpZiAodGhpcy5ob3ZlcmVkRGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIGNlbGxJbmRleCA9IGNlbGxJbmRleCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sc3BhbiA9ICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdjb2xzcGFuJykgfHwgMTtcbiAgICAgICAgY2VsbEluZGV4ID0gY2VsbEluZGV4ICsgKGNvbHNwYW4gYXMgbnVtYmVyKSAvIDEgLSAxO1xuICAgICAgICBpZiAoZGVsdGFYID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHBseVJpZ2h0Q29scyhjb2xzLCBkZWx0YVgsIGNlbGxJbmRleCArIDEpO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzaXppbmdTdG9yZS5pc1Jlc3RvcmluZyhkZWx0YVgpKSB7XG4gICAgICAgICAgICAgICAgZGVsdGFYID0gdGhpcy5yZXNpemluZ1N0b3JlLnJlc3RvcmVMZWZ0Q29scyhkZWx0YVgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlbHRhWCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb2xzW2NlbGxJbmRleF0uc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGNvZXJjZVBpeGVsc0Zyb21Dc3NWYWx1ZShjb2xzW2NlbGxJbmRleF0uc3R5bGUud2lkdGgpICsgZGVsdGFYKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRDb2wgPSBjb2xzW2NlbGxJbmRleCArIDFdO1xuICAgICAgICAgICAgaWYgKG5leHRDb2wpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGVmdERlbHRhWCA9IHRoaXMucmVzaXppbmdTdG9yZS5nZXRTY3JvbGxXaWR0aChkZWx0YVgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IF9kZWx0YSA9IHRoaXMuYXBwbHlMZWZ0Q29scyhjb2xzLCBkZWx0YVgsIGNlbGxJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKF9kZWx0YSA9PT0gZGVsdGFYKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNhbiBub3QgcmVzaXplXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsdGFYID0gZGVsdGFYIC0gX2RlbHRhO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXN0b3JpbmcoZGVsdGFYKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobGVmdERlbHRhWCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnREZWx0YVggPSB0aGlzLnJlc2l6aW5nU3RvcmUucmVzdG9yZVJpZ2h0Q29scyhsZWZ0RGVsdGFYKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobGVmdERlbHRhWCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDb2wuc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGdldEVsZW1lbnRXaWR0aChuZXh0Q29sKSArIE1hdGguYWJzKGxlZnREZWx0YVgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDb2wuc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGdldEVsZW1lbnRXaWR0aChuZXh0Q29sKSArIE1hdGguYWJzKGRlbHRhWCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsV2lkdGggPSBnZXRFbGVtZW50V2lkdGgodGhpcy50YWJsZUVsZW1lbnQpIC0gdGhpcy50YWJsZUNvbXBvbmVudC5nZXRXcmFwcGVyV2lkdGgoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsV2lkdGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxXaWR0aCA+IE1hdGguYWJzKGRlbHRhWCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlMZWZ0Q29scyhjb2xzLCBkZWx0YVgsIGNlbGxJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TGVmdENvbHMoY29scywgLXNjcm9sbFdpZHRoLCBjZWxsSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXBwbHlMZWZ0Q29scyhjb2xzOiBIVE1MVGFibGVDb2xFbGVtZW50W10sIGRlbHRhWDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgd2hpbGUgKGRlbHRhWCA8IDAgJiYgY29sc1tjb2xJbmRleF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IGdldEVsZW1lbnRXaWR0aChjb2xzW2NvbEluZGV4XSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFdpZHRoID4gdGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXNpemluZyhkZWx0YVgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXppbmdTdG9yZS5zdG9yZVJlc2l6aW5nQ29sKGNvbHNbY29sSW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCA+IHRoaXMudGFibGVPcHRpb25zLm1pbldpZHRoUHggKyBNYXRoLmFicyhkZWx0YVgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHNbY29sSW5kZXhdLnN0eWxlLndpZHRoID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZShjdXJyZW50V2lkdGggLSBNYXRoLmFicyhkZWx0YVgpKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVggKz0gY3VycmVudFdpZHRoIC0gdGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeDtcbiAgICAgICAgICAgICAgICAgICAgY29sc1tjb2xJbmRleF0uc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHRoaXMudGFibGVPcHRpb25zLm1pbldpZHRoUHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbEluZGV4LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlbHRhWDtcbiAgICB9XG5cbiAgICBhcHBseVJpZ2h0Q29scyhjb2xzOiBIVE1MVGFibGVDb2xFbGVtZW50W10sIGRlbHRhWDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHdoaWxlIChkZWx0YVggPiAwICYmIGNvbHNbY29sSW5kZXhdKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50V2lkdGggPSBnZXRFbGVtZW50V2lkdGgoY29sc1tjb2xJbmRleF0pO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCA+IHRoaXMudGFibGVPcHRpb25zLm1pbldpZHRoUHgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXNpemluZ1N0b3JlLmlzUmVzaXppbmcoZGVsdGFYKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuc3RvcmVSZXNpemluZ0NvbChjb2xzW2NvbEluZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50V2lkdGggPiBkZWx0YVggKyB0aGlzLnRhYmxlT3B0aW9ucy5taW5XaWR0aFB4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHNbY29sSW5kZXhdLnN0eWxlLndpZHRoID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZShjdXJyZW50V2lkdGggLSBkZWx0YVgpO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWCAtPSBjdXJyZW50V2lkdGggLSB0aGlzLnRhYmxlT3B0aW9ucy5taW5XaWR0aFB4O1xuICAgICAgICAgICAgICAgICAgICBjb2xzW2NvbEluZGV4XS5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUodGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sSW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsdGFYO1xuICAgIH1cblxuICAgIGFwcGx5Um93U2l6ZShkZWx0YVk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3dzID0gWy4uLnRoaXMudGFibGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5JykuY2hpbGRyZW5dIGFzIEhUTUxUYWJsZVJvd0VsZW1lbnRbXTtcbiAgICAgICAgdGhpcy5yZXNpemluZ1N0b3JlLnN0b3JlVGFibGVIZWlnaHQocm93cyk7XG4gICAgICAgIHRoaXMucmVzaXppbmdTdG9yZS5pbml0RGlyZWN0aW9uKGRlbHRhWSwgdGhpcy5pc1hBeGlzSG92ZXIpO1xuICAgICAgICBsZXQgcm93SW5kZXggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnJvd0luZGV4IC0gMTsgLy8gc3VidHJhY3QgdGhlYWQncyB0clxuICAgICAgICBpZiAodGhpcy5ob3ZlcmVkRGlyZWN0aW9uID09PSBQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgIHJvd0luZGV4ID0gcm93SW5kZXggLSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd1NwYW4gPSAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlQ2VsbEVsZW1lbnQpLnJvd1NwYW47XG4gICAgICAgIGNvbnN0IGJvdHRvbVJvd0luZGV4ID0gcm93SW5kZXggKyAocm93U3BhbiAtIDEpICsgMTtcbiAgICAgICAgaWYgKGRlbHRhWSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlCb3R0b21Sb3dzKHJvd3MsIGRlbHRhWSwgYm90dG9tUm93SW5kZXgpO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzaXppbmdTdG9yZS5pc1Jlc3RvcmluZyhkZWx0YVksIHRoaXMuaXNYQXhpc0hvdmVyKSkge1xuICAgICAgICAgICAgICAgIGRlbHRhWSA9IHRoaXMucmVzaXppbmdTdG9yZS5yZXN0b3JlVG9wUm93cyhkZWx0YVkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlbHRhWSA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5pdEhlaWdodCA9IGdldEVsZW1lbnRIZWlnaHQocm93c1tyb3dJbmRleF0pO1xuICAgICAgICAgICAgICAgIHJvd3Nbcm93SW5kZXhdLnN0eWxlLmhlaWdodCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoaW5pdEhlaWdodCArIGRlbHRhWSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgYWRkRGVsdGFZID0gdGhpcy5yZXNpemluZ1N0b3JlLmdldEFkZFRhYmxlSGVpZ2h0KGRlbHRhWSk7XG4gICAgICAgICAgICBjb25zdCBfZGVsdGEgPSB0aGlzLmFwcGx5VG9wUm93cyhyb3dzLCBkZWx0YVksIHJvd0luZGV4KTtcbiAgICAgICAgICAgIGlmIChfZGVsdGEgPT09IGRlbHRhWSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbiBub3QgcmVzaXplXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsdGFZID0gZGVsdGFZIC0gX2RlbHRhO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzaXppbmdTdG9yZS5pc1Jlc3RvcmluZyhkZWx0YVksIHRoaXMuaXNYQXhpc0hvdmVyKSkge1xuICAgICAgICAgICAgICAgIGlmIChhZGREZWx0YVkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IHRoaXMucmVzaXppbmdTdG9yZS5yZXN0b3JlQm90dG9tUm93cyhkZWx0YVkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFwcGx5VG9wUm93cyhyb3dzOiBIVE1MVGFibGVSb3dFbGVtZW50W10sIGRlbHRhWTogbnVtYmVyLCByb3dJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgd2hpbGUgKGRlbHRhWSA8IDAgJiYgcm93c1tyb3dJbmRleF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd09mZnNldEhlaWdodCA9IGdldEVsZW1lbnRIZWlnaHQocm93c1tyb3dJbmRleF0pO1xuICAgICAgICAgICAgaWYgKHJvd09mZnNldEhlaWdodCA+IHRoaXMudGFibGVPcHRpb25zLm1pbkhlaWdodFB4KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzaXppbmdTdG9yZS5pc1Jlc2l6aW5nKGRlbHRhWSwgdGhpcy5pc1hBeGlzSG92ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXppbmdTdG9yZS5zdG9yZVJlc2l6aW5nUm93KHJvd3Nbcm93SW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJvd09mZnNldEhlaWdodCA+IHRoaXMudGFibGVPcHRpb25zLm1pbkhlaWdodFB4ICsgTWF0aC5hYnMoZGVsdGFZKSkge1xuICAgICAgICAgICAgICAgICAgICByb3dzW3Jvd0luZGV4XS5zdHlsZS5oZWlnaHQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHJvd09mZnNldEhlaWdodCAtIE1hdGguYWJzKGRlbHRhWSkpO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWSArPSByb3dPZmZzZXRIZWlnaHQgLSB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeDtcbiAgICAgICAgICAgICAgICAgICAgcm93c1tyb3dJbmRleF0uc3R5bGUuaGVpZ2h0ID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZSh0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93SW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsdGFZO1xuICAgIH1cblxuICAgIGFwcGx5Qm90dG9tUm93cyhyb3dzOiBIVE1MVGFibGVSb3dFbGVtZW50W10sIGRlbHRhWTogbnVtYmVyLCByb3dJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgd2hpbGUgKHJvd3Nbcm93SW5kZXhdICYmIGRlbHRhWSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd09mZnNldEhlaWdodCA9IGdldEVsZW1lbnRIZWlnaHQocm93c1tyb3dJbmRleF0pO1xuICAgICAgICAgICAgaWYgKHJvd09mZnNldEhlaWdodCA+IHRoaXMudGFibGVPcHRpb25zLm1pbkhlaWdodFB4KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzaXppbmdTdG9yZS5pc1Jlc2l6aW5nKGRlbHRhWSwgdGhpcy5pc1hBeGlzSG92ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXppbmdTdG9yZS5zdG9yZVJlc2l6aW5nUm93KHJvd3Nbcm93SW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJvd09mZnNldEhlaWdodCA+IGRlbHRhWSArIHRoaXMudGFibGVPcHRpb25zLm1pbkhlaWdodFB4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3Nbcm93SW5kZXhdLnN0eWxlLmhlaWdodCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUocm93T2Zmc2V0SGVpZ2h0IC0gZGVsdGFZKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVkgLT0gcm93T2Zmc2V0SGVpZ2h0IC0gdGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHg7XG4gICAgICAgICAgICAgICAgICAgIHJvd3Nbcm93SW5kZXhdLnN0eWxlLmhlaWdodCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUodGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd0luZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlbHRhWTtcbiAgICB9XG5cbiAgICAvLyNyZWdpb25cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2ICNjZWxsSW5uZXI+XG4gIDxzbGF0ZS1jaGlsZHJlbiBbY2hpbGRyZW5dPVwiY2hpbGRyZW5cIiBbY29udGV4dF09XCJjaGlsZHJlbkNvbnRleHRcIiBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIj48L3NsYXRlLWNoaWxkcmVuPlxuPC9kaXY+XG4iXX0=
|
|
682
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvY29tcG9uZW50cy90ZC90ZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3RkL3RkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUdILFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQU1YLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSwwQkFBMEIsRUFBb0IsTUFBTSw2REFBNkQsQ0FBQztBQUMzSCxPQUFPLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDM0csT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDdEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNySCxPQUFPLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFFMUQsTUFBTSxvQkFBb0IsR0FBRyxvQ0FBb0MsQ0FBQztBQUNsRSxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUM3QixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUM3QixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBeUM7SUFDOUQsR0FBRyxFQUFFO1FBQ0QsT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsT0FBTztRQUNqQixRQUFRLEVBQUUsUUFBUTtLQUNyQjtJQUNELE1BQU0sRUFBRTtRQUNKLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFFBQVEsRUFBRSxRQUFRO0tBQ3JCO0lBQ0QsS0FBSyxFQUFFO1FBQ0gsT0FBTyxFQUFFLEtBQUs7UUFDZCxPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFFBQVEsRUFBRSxLQUFLO0tBQ2xCO0lBQ0QsSUFBSSxFQUFFO1FBQ0YsT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsS0FBSztLQUNsQjtDQUNKLENBQUM7QUFPRixNQUFNLE9BQU8sY0FBZSxTQUFRLHVCQUFpRDtJQWdCakYsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUM7SUFDL0QsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3BCLE1BQU0sZ0JBQWdCLEdBQWdCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsZUFBZSxJQUFJLHdCQUF3QixDQUNuRSxDQUFDO1FBQ0YsSUFBSSxnQkFBZ0IsRUFBRTtZQUNsQixPQUFPLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ3ZEO1FBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksdUJBQXVCO1FBQ3ZCLE1BQU0sZ0JBQWdCLEdBQWdCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsZUFBZSxJQUFJLHdCQUF3QixDQUNuRSxDQUFDO1FBQ0YsSUFBSSxnQkFBZ0IsRUFBRTtZQUNsQixPQUFPLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxDQUFDO1NBQzFEO1FBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTztZQUNILDZCQUE2QjtZQUM3QixJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ3ZILENBQUM7SUFDTixDQUFDO0lBZ0JELGVBQWU7UUFDWCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuQjtJQUNMLENBQUM7SUFNRCxZQUNXLFVBQXNCLEVBQ3RCLEdBQXNCLEVBQ3JCLFFBQW1CLEVBQ25CLE1BQWMsRUFDZixRQUFrQixFQUNsQixPQUFnQixFQUNoQixhQUFrQyxFQUNsQyxnQkFBa0M7UUFFekMsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQVRoQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNmLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXZHN0MsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFReEIsaUJBQVksR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRCx1QkFBa0IsR0FBVyxJQUFJLENBQUM7UUFpRnpDLHFCQUFnQixHQUFHLEdBQUcsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO1FBQ3hDLENBQUMsQ0FBQztJQWFGLENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM5QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM5QixDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxjQUFjLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBc0IsQ0FBQztJQUMvRSxDQUFDO0lBRUQsS0FBSztJQUNMLDRCQUE0QjtRQUN4QixJQUFJLENBQUMsVUFBVTthQUNWLG1CQUFtQixFQUFFO2FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN0QixJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQzthQUM3RTtpQkFBTTtnQkFDSCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFeEUsSUFBSSxjQUFjLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2lCQUMxRTtxQkFBTTtvQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztpQkFDN0U7YUFDSjtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsNkJBQTZCO1FBQ3pCLElBQUksQ0FBQyxVQUFVO2FBQ1Ysb0JBQW9CLEVBQUU7YUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1gsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzthQUM5RTtpQkFBTTtnQkFDSCxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRWhGLElBQUksY0FBYyxFQUFFO29CQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2lCQUMzRTtxQkFBTTtvQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2lCQUM5RTthQUNKO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN2RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBeUIsQ0FBQztTQUNqRTtJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsS0FBSztJQUNMLFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzdFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQ3pFO2FBQU07WUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUM1RTtJQUNMLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYyxDQUFDO1lBQy9DLFNBQVMsQ0FBYSxPQUFPLEVBQUUsV0FBVyxDQUFDO2lCQUN0QyxJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUN6QyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBRSxLQUFLLENBQUMsTUFBc0IsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUM1RSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ3pCO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLElBQTBCLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2hCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRTt3QkFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDakQ7b0JBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRTt3QkFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ3ZEO3lCQUFNO3dCQUNILElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3REO29CQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTt3QkFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztxQkFDNUI7b0JBQ0QsS0FBSztvQkFDTCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztpQkFDaEM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVM7SUFDVCxxQkFBcUI7UUFDakIsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQWEsUUFBUSxFQUFFLFdBQVcsQ0FBQzthQUNuRSxJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxHQUFJLEtBQUssQ0FBQyxNQUFzQixDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQzVFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxDQUFDLElBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDakQ7YUFDQSxTQUFTLENBQUMsQ0FBQyxJQUEwQixFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRVAsU0FBUyxDQUFhLFFBQVEsRUFBRSxTQUFTLENBQUM7YUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUMzQixJQUFJLENBQUMsWUFBWSxDQUNwQixDQUFDO2dCQUNOLENBQUMsQ0FBQyxDQUFDO2FBQ047WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDbkM7WUFDRCxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxtQkFBbUI7SUFDWCx3QkFBd0I7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFjLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWU7YUFDZixnQ0FBZ0MsQ0FBQyxPQUFPLENBQUM7YUFDekMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNSLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxVQUFVO1lBQ1YsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsSUFBSSxJQUFJLGFBQWEsRUFBRTtnQkFDNUQsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELFVBQVU7WUFDVixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxHQUFHLElBQUksVUFBVSxFQUFFO2dCQUN4RCxPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDekIsSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUM7YUFDcEQ7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzthQUNoQztZQUNELElBQUksZUFBZSxFQUFFO2dCQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQztnQkFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUNwRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO29CQUNqRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztpQkFDN0I7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7aUJBQzNDO2FBQ0o7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQzVCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFtQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdEUsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDO2FBQ3ZFLElBQUksQ0FDRCxrQkFBa0IsRUFDbEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUMvRTthQUNBLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxFQUFFLEVBQUU7WUFDNUQsdUJBQXVCO1lBQ3ZCLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDckQsT0FBTzthQUNWO1lBQ0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDM0YsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFtQixDQUFDO1lBQ2pELElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQy9CLG9EQUFvRDtZQUNwRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ25CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDdEUsa0JBQWtCLEdBQUcsU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsU0FBUyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7YUFDeEU7aUJBQU07Z0JBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUN2RSxrQkFBa0IsR0FBRyxTQUFTLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxVQUFVLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQzthQUN4RTtZQUNELElBQUksa0JBQWtCLEVBQUU7Z0JBQ3BCLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUN4QyxJQUFJLG1CQUFtQixFQUFFO2dCQUNyQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQzthQUNuQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRVAsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDO2FBQ3pFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzthQUN4QixTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWE7YUFDM0MsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsVUFBNEI7UUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUMxQixJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxVQUFXLEVBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUM3QixHQUFHLEVBQUU7WUFDRCxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQ0osQ0FBQztRQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxZQUFZLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqRSxZQUFZLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRSxNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxlQUFlLENBQUMscUNBQXFDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLFVBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyRixJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRU8sZ0NBQWdDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUM3RixJQUFJLENBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sNkJBQTZCO1FBQ2pDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ25FLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztRQUM3QyxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztRQUNuRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO1lBQzFCLE1BQU0sR0FBRyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsaUJBQWlCLEdBQUcsYUFBYSxHQUFHLFlBQVksQ0FBQztTQUM5RzthQUFNLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUNwRCxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZUFBZSxDQUFDLENBQUM7WUFDeEYsTUFBTSxNQUFNLEdBQWdCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoRixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFnQixDQUFDO1lBQzNFLDRCQUE0QjtZQUM1QixJQUFJLE9BQU8sRUFBRTtnQkFDVCxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBMkIsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxDQUFDO2FBQzlGO1NBQ0o7YUFBTSxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUMxRCxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUNqRzthQUFNO1lBQ0gsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxDQUFDLFVBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDMUQsT0FBTyxlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTywwQkFBMEI7UUFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztRQUN6RSxJQUFJLENBQUMsVUFBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFVBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFTyxTQUFTLENBQUMsU0FBaUIsRUFBRSxZQUFxQjtRQUN0RCxtQ0FBbUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkM7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsNEVBQTRFO1FBQzVFLHNFQUFzRTtRQUN0RSw2REFBNkQ7UUFDN0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVk7WUFDbkMsQ0FBQyxDQUFDO2dCQUNJLEtBQUssRUFBRSxpQkFBaUIsR0FBRyxJQUFJO2dCQUMvQixVQUFVLEVBQUUsZ0NBQWdDO2FBQy9DO1lBQ0gsQ0FBQyxDQUFDO2dCQUNJLE1BQU0sRUFBRSxpQkFBaUIsR0FBRyxJQUFJO2dCQUNoQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWM7YUFDbEMsQ0FBQztRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDdkIsaUVBQWlFO1lBQ2pFLG1CQUFtQixFQUFFLElBQUk7WUFDekIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQy9DLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtZQUMxRCxHQUFHLGFBQWE7U0FDbkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHNCQUFzQjtRQUMxQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBc0IsSUFBSSxDQUFDLFlBQVk7WUFDakQsQ0FBQyxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFO1lBQ3JELENBQUMsQ0FBQyxFQUFFLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLE9BQU87YUFDZCxRQUFRLEVBQUU7YUFDVixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQzthQUNsRCxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7YUFDN0IsaUJBQWlCLENBQUMsS0FBSyxDQUFDO2FBQ3hCLFFBQVEsQ0FBQyxLQUFLLENBQUM7YUFDZixhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyw2QkFBNkI7UUFDakMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUN0RSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO1lBQzFCLHlFQUF5RTtZQUN6RSxPQUFPLENBQ0gsSUFBSSxDQUFDLG9CQUFvQjtnQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHO2dCQUN6RCxpQkFBaUI7Z0JBQ2pCLGFBQWE7Z0JBQ2IsWUFBWSxDQUNmLENBQUM7U0FDTDtRQUNELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNoRzthQUFNO1lBQ0gsT0FBTyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDdEY7SUFDTCxDQUFDO0lBRU8sNkJBQTZCO1FBQ2pDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ25GLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQztRQUN4RSxPQUFPLGdCQUFnQixHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDM0UsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFjO1FBQzFCLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQTBCLENBQUM7UUFDaEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQ3hELElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLE1BQU0sRUFBRTtZQUNsQyxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztTQUM3QjtRQUNELE1BQU0sT0FBTyxHQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBNkIsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVGLFNBQVMsR0FBRyxTQUFTLEdBQUksT0FBa0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDeEMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7YUFDckg7U0FDSjthQUFNO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLE9BQU8sRUFBRTtnQkFDVCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUU7b0JBQ25CLGlCQUFpQjtvQkFDakIsT0FBTztpQkFDVjtnQkFDRCxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDeEMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFO3dCQUNoQixVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDaEU7b0JBQ0QsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFO3dCQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3FCQUM5RjtpQkFDSjtxQkFBTTtvQkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUMxRjthQUNKO2lCQUFNO2dCQUNILE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0YsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7cUJBQy9DO3lCQUFNO3dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3FCQUNyRDtpQkFDSjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQTJCLEVBQUUsTUFBYyxFQUFFLFFBQWdCO1FBQ3ZFLE9BQU8sTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDakMsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFO2dCQUM3QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUN2RDtnQkFDRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNsRixNQUFNLEdBQUcsQ0FBQyxDQUFDO2lCQUNkO3FCQUFNO29CQUNILE1BQU0sSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7b0JBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ2xGO2FBQ0o7WUFDRCxRQUFRLEVBQUUsQ0FBQztTQUNkO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUEyQixFQUFFLE1BQWMsRUFBRSxRQUFnQjtRQUN4RSxPQUFPLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRTtnQkFDN0MsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDdkQ7Z0JBQ0QsSUFBSSxZQUFZLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFO29CQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQ3hFLE1BQU0sR0FBRyxDQUFDLENBQUM7aUJBQ2Q7cUJBQU07b0JBQ0gsTUFBTSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDbEY7YUFDSjtZQUNELFFBQVEsRUFBRSxDQUFDO1NBQ2Q7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWM7UUFDdkIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBMEIsQ0FBQztRQUM3RixJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7UUFDL0YsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxRQUFRLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUNELE1BQU0sT0FBTyxHQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBc0MsQ0FBQyxPQUFPLENBQUM7UUFDaEYsTUFBTSxjQUFjLEdBQUcsUUFBUSxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRCxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDbkQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMzRCxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDdEQ7WUFDRCxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ1osSUFBSSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQzthQUMxRTtTQUNKO2FBQU07WUFDSCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN6RCxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUU7Z0JBQ25CLGlCQUFpQjtnQkFDakIsT0FBTzthQUNWO1lBQ0QsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMzRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7b0JBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3pEO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBMkIsRUFBRSxNQUFjLEVBQUUsUUFBZ0I7UUFDdEUsT0FBTyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNqQyxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN6RCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtnQkFDakQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUN2RDtnQkFDRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNwRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUN0RixNQUFNLEdBQUcsQ0FBQyxDQUFDO2lCQUNkO3FCQUFNO29CQUNILE1BQU0sSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7b0JBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3BGO2FBQ0o7WUFDRCxRQUFRLEVBQUUsQ0FBQztTQUNkO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUEyQixFQUFFLE1BQWMsRUFBRSxRQUFnQjtRQUN6RSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3pELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFO2dCQUNqRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZEO2dCQUNELElBQUksZUFBZSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtvQkFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUM1RSxNQUFNLEdBQUcsQ0FBQyxDQUFDO2lCQUNkO3FCQUFNO29CQUNILE1BQU0sSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7b0JBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3BGO2FBQ0o7WUFDRCxRQUFRLEVBQUUsQ0FBQztTQUNkO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFNBQVM7SUFFVCxXQUFXO1FBQ1AsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7OEdBcHJCUSxjQUFjO2tHQUFkLGNBQWMsZ05BRlosQ0FBQyxtQkFBbUIsQ0FBQyw2R0FlQSxVQUFVLGtFQ3ZGOUMsNEJBRUE7OzJGRHdFYSxjQUFjO2tCQUwxQixTQUFTOytCQUNJLFdBQVcsYUFFVixDQUFDLG1CQUFtQixDQUFDOzRSQWdCaEMsU0FBUztzQkFEUixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFnRXBCLGVBQWU7c0JBQXBELFdBQVc7dUJBQUMsdUJBQXVCO2dCQUVQLE9BQU87c0JBQW5DLFdBQVc7dUJBQUMsY0FBYztnQkFFRSxPQUFPO3NCQUFuQyxXQUFXO3VCQUFDLGNBQWM7Z0JBRUcsT0FBTztzQkFBcEMsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQ3NzUGl4ZWxWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgT3ZlcmxheSwgT3ZlcmxheVJlZiwgU2Nyb2xsRGlzcGF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCwgUG9ydGFsSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3RvcixcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IsIEVMRU1FTlRfVE9fQ09NUE9ORU5UIH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBDb2x1bW5SZXNpemVOb3RpZmllclNvdXJjZSwgQ29sdW1uU2l6ZUFjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29sdW1uLXJlc2l6ZS9jb2x1bW4tcmVzaXplLW5vdGlmaWVyJztcbmltcG9ydCB7IFBvc2l0aW9uLCBUYWJsZUNlbGxFdmVudERpc3BhdGNoZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbHVtbi1yZXNpemUvZXZlbnQtZGlzcGF0Y2hlcic7XG5pbXBvcnQgeyBUaGVDb2x1bW5SZXNpemVPdmVybGF5SGFuZGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9jb2x1bW4tcmVzaXplL292ZXJsYXktaGFuZGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXNpemVSZWYgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbHVtbi1yZXNpemUvcmVzaXplLXJlZic7XG5pbXBvcnQgeyBDb2x1bW5SZXNpemluZ1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9jb2x1bW4tcmVzaXplL3Jlc2l6aW5nLnN0b3JlJztcbmltcG9ydCB7IERFRkFVTFRfU0NST0xMX0NPTlRBSU5FUiB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTTEFfVEFCTEVfQ0VMTF9TRUxFQ1RPUiB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbnN0YW50cy9zZWxlY3Rvcic7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vY3VzdG9tLXR5cGVzJztcbmltcG9ydCB7IFRoZUJhc2VFbGVtZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy92aWV3LWJhc2UnO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi8uLi8uLi9xdWVyaWVzJztcbmltcG9ydCB7IGNvZXJjZVBpeGVsc0Zyb21Dc3NWYWx1ZSwgZ2V0RWxlbWVudEhlaWdodCwgZ2V0RWxlbWVudFdpZHRoLCB1c2VFbGVtZW50U3R5bGUgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IHsgVGFibGVPcHRpb25zLCBUYWJsZVdpdGhTdGlja3lSb3dDbGFzcyB9IGZyb20gJy4uLy4uL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IGdldFNlbGVjdENlbGxOb2RlLCBnZXRUYWJsZUJ5Q2VsbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFRoZVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IGlzTW9iaWxlTW9kZSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2dldC1tb2RlJztcblxuY29uc3QgT1ZFUkxBWV9BQ1RJVkVfQ0xBU1MgPSAndGhlLXJlc2l6YWJsZS1vdmVybGF5LXRodW1iLWFjdGl2ZSc7XG5jb25zdCBPVkVSTEFZX0lOSVRfU0laRSA9IDE2O1xuY29uc3QgVEFCTEVfSU5TRVJUX01BU0sgPSAxOTtcbmNvbnN0IFRBQkxFX0JPUkRFUiA9IDE7XG5jb25zdCBUQUJMRV9QQURESU5HID0gODtcbmV4cG9ydCBjb25zdCBQT1NJVElPTl9NQVA6IHsgW2tleTogc3RyaW5nXTogQ29ubmVjdGVkUG9zaXRpb24gfSA9IHtcbiAgICB0b3A6IHtcbiAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICBvdmVybGF5WTogJ2NlbnRlcidcbiAgICB9LFxuICAgIGJvdHRvbToge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiAnY2VudGVyJ1xuICAgIH0sXG4gICAgcmlnaHQ6IHtcbiAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICBvdmVybGF5WDogJ2NlbnRlcicsXG4gICAgICAgIG92ZXJsYXlZOiAndG9wJ1xuICAgIH0sXG4gICAgbGVmdDoge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6ICdjZW50ZXInLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICB9XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RkW3RoZVRkXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RkLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtDb2x1bW5SZXNpemluZ1N0b3JlXVxufSlcbmV4cG9ydCBjbGFzcyBUaGVUZENvbXBvbmVudCBleHRlbmRzIFRoZUJhc2VFbGVtZW50Q29tcG9uZW50PFRhYmxlQ2VsbEVsZW1lbnQsIEVkaXRvcj4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHVibGljIHRhYmxlQ29tcG9uZW50OiBUaGVUYWJsZUNvbXBvbmVudDtcblxuICAgIHByb3RlY3RlZCBvdmVybGF5UmVmPzogT3ZlcmxheVJlZjtcblxuICAgIHB1YmxpYyBob3ZlcmVkRGlyZWN0aW9uOiBQb3NpdGlvbiB8IG51bGw7XG5cbiAgICBwdWJsaWMgdGFibGVPcHRpb25zOiBUYWJsZU9wdGlvbnMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG5cbiAgICBwdWJsaWMgY2VsbElubmVyTWluSGVpZ2h0OiBudW1iZXIgPSBudWxsO1xuXG4gICAgQFZpZXdDaGlsZCgnY2VsbElubmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBjZWxsSW5uZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBnZXQgdGFibGVTdG9yZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb21wb25lbnQ/LnRhYmxlU3RvcmU7XG4gICAgfVxuXG4gICAgZ2V0IHRhYmxlU2VydmljZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb21wb25lbnQ/LnRhYmxlU2VydmljZTtcbiAgICB9XG5cbiAgICBnZXQgZXZlbnREaXNwYXRjaGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbXBvbmVudD8uZXZlbnREaXNwYXRjaGVyO1xuICAgIH1cblxuICAgIGdldCByZXNpemVOb3RpZmllcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb21wb25lbnQ/LnJlc2l6ZU5vdGlmaWVyO1xuICAgIH1cblxuICAgIGdldCB0YWJsZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbXBvbmVudD8udGhlVGFibGVFbGVtZW50Py5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldCBzY3JvbGxhYmxlRWxlbWVudFRvcCgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KFxuICAgICAgICAgICAgdGhpcy5lZGl0b3Iub3B0aW9ucz8uc2Nyb2xsQ29udGFpbmVyIHx8IERFRkFVTFRfU0NST0xMX0NPTlRBSU5FUlxuICAgICAgICApO1xuICAgICAgICBpZiAoY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtd2luZG93LnNjcm9sbFk7XG4gICAgfVxuXG4gICAgZ2V0IHNjcm9sbGFibGVFbGVtZW50Qm90dG9tKCkge1xuICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5vcHRpb25zPy5zY3JvbGxDb250YWluZXIgfHwgREVGQVVMVF9TQ1JPTExfQ09OVEFJTkVSXG4gICAgICAgICk7XG4gICAgICAgIGlmIChjb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC13aW5kb3cuc2Nyb2xsWTtcbiAgICB9XG5cbiAgICBnZXQgc2Nyb2xsYWJsZUVsZW1lbnRMZWZ0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbXBvbmVudC50YWJsZVdyYXBwZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIH1cblxuICAgIGdldCBpc1hBeGlzSG92ZXIoKSB7XG4gICAgICAgIHJldHVybiBbUG9zaXRpb24ubGVmdCwgUG9zaXRpb24ucmlnaHRdLmluY2x1ZGVzKHRoaXMuaG92ZXJlZERpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0IHJvd1Jlc2l6ZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3RoZS1yb3ctcmVzaXplLWhhbmRsZS1wYW5lbCcsXG4gICAgICAgICAgICB0aGlzLnRhYmxlQ29tcG9uZW50ICYmIHRoaXMudGFibGVDb21wb25lbnQuZWxlbWVudC5vcHRpb25zPy5udW1iZXJlZENvbHVtbiA/ICd0aGUtbnVtYmVyZWQtcmVzaXplLWhhbmRsZS1wYW5lbCcgOiAnJ1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBkb3RXcmFwcGVySG92ZXJlZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyByZXNpemVSZWY6IFJlc2l6ZVJlZjtcblxuICAgIHB1YmxpYyBpc01vYmlsZU1vZGU6IGJvb2xlYW47XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmJhY2tncm91bmRDb2xvcicpIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmNvbHNwYW4nKSBjb2xzcGFuOiBudW1iZXI7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm93c3BhbicpIHJvd3NwYW46IG51bWJlcjtcblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZGlzcGxheScpIGRpc3BsYXk6IHN0cmluZztcblxuICAgIG9uQ29udGV4dENoYW5nZSgpIHtcbiAgICAgICAgc3VwZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLnVzZVN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRPdXRsZXRFbGVtZW50ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jZWxsSW5uZXIubmF0aXZlRWxlbWVudDtcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwdWJsaWMgb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHVibGljIHJlc2l6aW5nU3RvcmU6IENvbHVtblJlc2l6aW5nU3RvcmUsXG4gICAgICAgIHB1YmxpYyBzY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGNkcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuaXNNb2JpbGVNb2RlID0gaXNNb2JpbGVNb2RlKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgdGhpcy51c2VTdGF0ZSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRJbmplY3Rpb25TZXJ2aWNlKCk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVNlbGVjdGVkQ2VsbHNDaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlRGFuZ2Vyb3VzQ2VsbHNDaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuQ2VsbFNlbGVjdEV2ZW50cygpO1xuICAgICAgICAgICAgIXRoaXMuaXNNb2JpbGVNb2RlICYmIHRoaXMubGlzdGVuRm9yQ2VsbEhvdmVyRXZlbnRzKCk7XG4gICAgICAgICAgICB0aGlzLmxpc3RlbkZvclJlc2l6ZUV2ZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRJbmplY3Rpb25TZXJ2aWNlKCkge1xuICAgICAgICBjb25zdCB0YWJsZSA9IGdldFRhYmxlQnlDZWxsKHRoaXMuZWRpdG9yLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICB0aGlzLnRhYmxlQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHRhYmxlKSBhcyBUaGVUYWJsZUNvbXBvbmVudDtcbiAgICB9XG5cbiAgICAvLyDpgInkuK1cbiAgICBzdWJzY3JpYmVTZWxlY3RlZENlbGxzQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnRhYmxlU3RvcmVcbiAgICAgICAgICAgIC5zZWxlY3RlZENlbGxzQ2hhbmdlKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoY2VsbEVsZW1lbnRzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbEVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnc2VsZWN0ZWQtY2VsbCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWRDZWxsID0gY2VsbEVsZW1lbnRzLmZpbmQoY2VsbCA9PiBjZWxsID09PSB0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1NlbGVjdGVkQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3NlbGVjdGVkLWNlbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdzZWxlY3RlZC1jZWxsJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlRGFuZ2Vyb3VzQ2VsbHNDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZVxuICAgICAgICAgICAgLmRhbmdlcm91c0NlbGxzQ2hhbmdlKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkYW5nZXJvdXMtY2VsbCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdENlbGxOb2RlcyA9IGdldFNlbGVjdENlbGxOb2RlKHRoaXMuZWRpdG9yLCB4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZENlbGwgPSBzZWxlY3RDZWxsTm9kZXMuZmluZChjZWxsID0+IGNlbGwubm9kZSA9PT0gdGhpcy5lbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkYW5nZXJvdXMtY2VsbCcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rhbmdlcm91cy1jZWxsJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXNlU3RhdGUoKSB7XG4gICAgICAgIHRoaXMudXNlQmFja2dyb3VuZCgpO1xuICAgICAgICB0aGlzLnVzZVNwYW4oKTtcbiAgICAgICAgdGhpcy51c2VEaXNwbGF5KCk7XG4gICAgICAgIHRoaXMudXNlRm9jdXMoKTtcbiAgICAgICAgdXNlRWxlbWVudFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmVsZW1lbnQpO1xuICAgIH1cblxuICAgIHVzZUJhY2tncm91bmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQuYmFja2dyb3VuZENvbG9yICE9PSB0aGlzLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmVsZW1lbnQuYmFja2dyb3VuZENvbG9yIGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVzZVNwYW4oKSB7XG4gICAgICAgIHRoaXMuY29sc3BhbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yb3dzcGFuID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmNvbHNwYW4pIHtcbiAgICAgICAgICAgIHRoaXMuY29sc3BhbiA9IHRoaXMuZWxlbWVudC5jb2xzcGFuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQucm93c3Bhbikge1xuICAgICAgICAgICAgdGhpcy5yb3dzcGFuID0gdGhpcy5lbGVtZW50LnJvd3NwYW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VEaXNwbGF5KCkge1xuICAgICAgICB0aGlzLmRpc3BsYXkgPSB0aGlzLmVsZW1lbnQuaGlkZGVuID8gJ25vbmUnIDogJyc7XG4gICAgfVxuXG4gICAgLy8g6IGa54SmXG4gICAgdXNlRm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkQW5kTm9uUmVhZG9ubHkgJiYgVGhlUXVlcmllcy5pc0dsb2JhbENvbGxhcHNlZCh0aGlzLmVkaXRvcikpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1c2VkLWNlbGwnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1c2VkLWNlbGwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vI3JlZ2lvbiBjZWxsLXNlbGVjdFxuICAgIGxpc3RlbkNlbGxTZWxlY3RFdmVudHMoKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCE7XG4gICAgICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZWxlbWVudCwgJ21vdXNlZG93bicpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChlOiBNb3VzZUV2ZW50KSA9PiBlLmJ1dHRvbiAhPT0gMiksXG4gICAgICAgICAgICAgICAgICAgIG1hcChldmVudCA9PiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFNMQV9UQUJMRV9DRUxMX1NFTEVDVE9SKSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcihjZWxsID0+ICEhY2VsbClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoY2VsbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50YWJsZVN0b3JlLnBvaW50ZXJTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RvcmUuc2VsZWN0Q2VsbChjZWxsLCB0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50YWJsZVN0b3JlLmFyZWFTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RvcmUuc2V0QXJlYVNlbGVjdGlvbkNlbGxzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdG9yZS5zZWxlY3RDZWxsU3RhcnQoY2VsbCwgdGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaLlumAiVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5DZWxsTW91c2VFdmVudHMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyDpvKDmoIfnp7vlhaXkuovku7ZcbiAgICBsaXN0ZW5DZWxsTW91c2VFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IG1vdXNlb3Zlck9ic2VydmFibGUgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZW92ZXInKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFNMQV9UQUJMRV9DRUxMX1NFTEVDVE9SKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNlbGw7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCkgPT4gISFjZWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoY2VsbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RvcmUuc2VsZWN0Q2VsbE9uZ29pbmcoY2VsbCwgdGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50YWJsZVN0b3JlLmlzQ2VsbFNlbGVjdGluZyB8fCB0aGlzLnRhYmxlU3RvcmUucG9pbnRlclNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZUNvbXBvbmVudC50YWJsZVNlcnZpY2UuYWZ0ZXJTZWxlY3RlZENlbGxzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdG9yZS5mb2N1c0NlbGxFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVDb21wb25lbnQuZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW9iaWxlTW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50YWJsZVN0b3JlLmFyZWFTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVN0b3JlLnNlbGVjdENlbGxFbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbW91c2VvdmVyT2JzZXJ2YWJsZS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uIHJlc2l6YWJsZVxuICAgIHByaXZhdGUgbGlzdGVuRm9yQ2VsbEhvdmVyRXZlbnRzKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQhO1xuICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclxuICAgICAgICAgICAgLnJlc2l6ZU92ZXJsYXlWaXNpYmxlRm9yVGFibGVDZWxsKGVsZW1lbnQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgodGhpcy5lZGl0b3IsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRmlyc3RDb2x1bW4gPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRmlyc3RSb3cgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMl0gPT09IDA7XG4gICAgICAgICAgICAgICAgICAgIC8vIOemgeatouesrOS4gOWIl+W3puS+p1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUucG9zaXRpb24gPT09IFBvc2l0aW9uLmxlZnQgJiYgaXNGaXJzdENvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8g56aB5q2i56ys5LiA6KGM6aG26YOoXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wb3NpdGlvbiA9PT0gUG9zaXRpb24udG9wICYmIGlzRmlyc3RSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShob3ZlcmVkQ2VsbEluZm8gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChob3ZlcmVkQ2VsbEluZm8gJiYgaG92ZXJlZENlbGxJbmZvLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZERpcmVjdGlvbiA9IGhvdmVyZWRDZWxsSW5mby5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWREaXJlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaG92ZXJlZENlbGxJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZERpcmVjdGlvbiA9IGhvdmVyZWRDZWxsSW5mby5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYgfHwgIXRoaXMub3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLl9jcmVhdGVPdmVybGF5Rm9ySGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93SGFuZGxlT3ZlcmxheSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemVSZWYuc2V0RGlyZWN0aW9uKHRoaXMuaXNYQXhpc0hvdmVyID8gJ1gnIDogJ1knKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlT3ZlcmxheUhhbmRsZVNpemVBbmRPZmZzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxpc3RlbkZvclJlc2l6ZUV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgdGFrZVVudGlsRGVzdHJveWVkID0gdGFrZVVudGlsPENvbHVtblNpemVBY3Rpb24+KHRoaXMuZGVzdHJveSQpO1xuXG4gICAgICAgIG1lcmdlKHRoaXMucmVzaXplTm90aWZpZXIucmVzaXplQ2FuY2VsZWQsIHRoaXMucmVzaXplTm90aWZpZXIudHJpZ2dlclJlc2l6ZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoY29sdW1uU2l6ZSA9PiBjb2x1bW5TaXplLnRhYmxlQ2VsbCA9PT0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGRlbHRhU2l6ZSwgcHJldmlvdXNTaXplLCBjb21wbGV0ZUltbWVkaWF0ZWx5IH0pID0+IHtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzlgY/np7vnmoTlgLzkuI3lrZjlnKjlsLHkuI3opoHov5vooYzlkI7nu63nmoTorqHnrpfkuoZcbiAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGVsdGFTaXplKSB8fCBpc1VuZGVmaW5lZChwcmV2aW91c1NpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0b3AsIGxlZnQsIGhlaWdodCwgd2lkdGggfSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50WSwgY2xpZW50WCB9ID0gZXZlbnQgYXMgTW91c2VFdmVudDtcbiAgICAgICAgICAgICAgICBsZXQgaXNQcmV2ZW50QXBwbHlTaXplID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8g5ZCR5LiL77yM5oiW6ICF5ZCR5Y+z56e75YqoKGRlbHRhU2l6ZSA+IDAp77yM6byg5qCH5L2N572u5LiN5Zyo5b2T5YmN5Y2V5YWD5qC85ouW5ou957q/5LiK77yM6Zi75q2i5bqU55So5ouW5ou95bC65a+4XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNYQXhpc0hvdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxXaWR0aCA9IHRoaXMuaG92ZXJlZERpcmVjdGlvbiA9PT0gUG9zaXRpb24ubGVmdCA/IDAgOiB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgaXNQcmV2ZW50QXBwbHlTaXplID0gZGVsdGFTaXplID4gMCAmJiBsZWZ0ICsgY2VsbFdpZHRoIC0gY2xpZW50WCA+IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbEhlaWdodCA9IHRoaXMuaG92ZXJlZERpcmVjdGlvbiA9PT0gUG9zaXRpb24udG9wID8gMCA6IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgaXNQcmV2ZW50QXBwbHlTaXplID0gZGVsdGFTaXplID4gMCAmJiB0b3AgKyBjZWxsSGVpZ2h0IC0gY2xpZW50WSA+IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1ByZXZlbnRBcHBseVNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCEuY2xhc3NMaXN0LmFkZChPVkVSTEFZX0FDVElWRV9DTEFTUyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseVNpemUoZGVsdGFTaXplLCBwcmV2aW91c1NpemUpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZUltbWVkaWF0ZWx5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlUmVzaXplT3BlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbWVyZ2UodGhpcy5yZXNpemVOb3RpZmllci5yZXNpemVDYW5jZWxlZCwgdGhpcy5yZXNpemVOb3RpZmllci5yZXNpemVDb21wbGV0ZWQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGNvbHVtblNpemUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFuVXBBZnRlclJlc2l6ZShjb2x1bW5TaXplKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuY2xlYW5SZXNpemluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29tcGxldGVSZXNpemVPcGVyYXRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU5vdGlmaWVyLnJlc2l6ZUNvbXBsZXRlZC5uZXh0KHtcbiAgICAgICAgICAgICAgICB0YWJsZUNlbGw6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xlYW5VcEFmdGVyUmVzaXplKGNvbHVtblNpemU6IENvbHVtblNpemVBY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQhLmNsYXNzTGlzdC5yZW1vdmUoT1ZFUkxBWV9BQ1RJVkVfQ0xBU1MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUhhbmRsZVBvcnRhbCgpOiBDb21wb25lbnRQb3J0YWw8VGhlQ29sdW1uUmVzaXplT3ZlcmxheUhhbmRsZUNvbXBvbmVudD4ge1xuICAgICAgICBjb25zdCBjdXN0b21Ub2tlbnMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICB0aGlzLnJlc2l6ZVJlZiA9IG5ldyBSZXNpemVSZWYoXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYsXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLFxuICAgICAgICAgICAgdGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCxcbiAgICAgICAgICAgIHRoaXMudGFibGVPcHRpb25zLm1heFdpZHRoUHgsXG4gICAgICAgICAgICB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCxcbiAgICAgICAgICAgIHRoaXMudGFibGVPcHRpb25zLm1heEhlaWdodFB4LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlT3ZlcmxheUhhbmRsZVNpemVBbmRPZmZzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY3VzdG9tVG9rZW5zLnNldChSZXNpemVSZWYsIHRoaXMucmVzaXplUmVmKTtcbiAgICAgICAgY3VzdG9tVG9rZW5zLnNldChUYWJsZUNlbGxFdmVudERpc3BhdGNoZXIsIHRoaXMuZXZlbnREaXNwYXRjaGVyKTtcbiAgICAgICAgY3VzdG9tVG9rZW5zLnNldChDb2x1bW5SZXNpemVOb3RpZmllclNvdXJjZSwgdGhpcy5yZXNpemVOb3RpZmllcik7XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gbmV3IFBvcnRhbEluamVjdG9yKHRoaXMuaW5qZWN0b3IsIGN1c3RvbVRva2Vucyk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50UG9ydGFsKFRoZUNvbHVtblJlc2l6ZU92ZXJsYXlIYW5kbGVDb21wb25lbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZiwgaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3dIYW5kbGVPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLmF0dGFjaCh0aGlzLl9jcmVhdGVIYW5kbGVQb3J0YWwoKSkuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMudXBkYXRlT3ZlcmxheUhhbmRsZVNpemVBbmRPZmZzZXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU92ZXJsYXlIYW5kbGVTaXplQW5kT2Zmc2V0KCkge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWY/LnJlbW92ZVBhbmVsQ2xhc3MoWyd0aGUtY29sdW1uLXJlc2l6ZS1oYW5kbGUtcGFuZWwnLCAuLi50aGlzLnJvd1Jlc2l6ZUNsYXNzXSk7XG4gICAgICAgIHRoaXMuaXNYQXhpc0hvdmVyID8gdGhpcy51cGRhdGVPdmVybGF5SGFuZGxlQ29sdW1uU2l6ZSgpIDogdGhpcy51cGRhdGVPdmVybGF5SGFuZGxlUm93U2l6ZSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCkpO1xuICAgICAgICB0aGlzLnJlc2l6ZVJlZi5zZXREaXJlY3Rpb24odGhpcy5pc1hBeGlzSG92ZXIgPyAnWCcgOiAnWScpO1xuICAgICAgICB0aGlzLnJlc2l6ZVJlZi5zZXRQb3NpdGlvbih0aGlzLmhvdmVyZWREaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlT3ZlcmxheUhhbmRsZUNvbHVtblNpemUoKSB7XG4gICAgICAgIGxldCBoZWlnaHQgPSAwO1xuICAgICAgICBjb25zdCB0YWJsZUVsZW1lbnRSZWN0ID0gdGhpcy50YWJsZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRhYmxlRWxlbWVudFRvcCA9IHRhYmxlRWxlbWVudFJlY3QudG9wO1xuICAgICAgICBjb25zdCB0YWJsZUVsZW1lbnRCb3R0b20gPSB0YWJsZUVsZW1lbnRSZWN0LmJvdHRvbTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0SXNTdGlja3lUb3BSb3coKSkge1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGFibGVFbGVtZW50Qm90dG9tIC0gdGhpcy5zY3JvbGxhYmxlRWxlbWVudFRvcCAtIFRBQkxFX0lOU0VSVF9NQVNLIC0gVEFCTEVfUEFERElORyArIFRBQkxFX0JPUkRFUjtcbiAgICAgICAgfSBlbHNlIGlmICh0YWJsZUVsZW1lbnRUb3AgPCB0aGlzLnNjcm9sbGFibGVFbGVtZW50VG9wKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLnRhYmxlRWxlbWVudC5vZmZzZXRIZWlnaHQgLSAodGhpcy5zY3JvbGxhYmxlRWxlbWVudFRvcCAtIHRhYmxlRWxlbWVudFRvcCk7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3I6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgndGhlLWVkaXRvcicpO1xuICAgICAgICAgICAgY29uc3QgdG9vbGJhciA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCcudGhlLWdsb2JhbC10b29sYmFyJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAvLyDlpITnkIYgdG9vbGJhciDlrZjlnKjnmoTml7blgJnlh4/ljrvlhoXltYzlt6XlhbfmoI/pq5jluqZcbiAgICAgICAgICAgIGlmICh0b29sYmFyKSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IC0gdG9vbGJhci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgKHRoaXMub3ZlcmxheVJlZi5ob3N0RWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUubWFyZ2luVG9wID0gYCR7dG9vbGJhci5vZmZzZXRIZWlnaHR9cHhgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRhYmxlRWxlbWVudEJvdHRvbSA+IHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRCb3R0b20pIHtcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMudGFibGVFbGVtZW50Lm9mZnNldEhlaWdodCAtICh0YWJsZUVsZW1lbnRCb3R0b20gLSB0aGlzLnNjcm9sbGFibGVFbGVtZW50Qm90dG9tKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMudGFibGVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLnVwZGF0ZVNpemUoeyBoZWlnaHQsIHdpZHRoOiBPVkVSTEFZX0lOSVRfU0laRSwgbWF4SGVpZ2h0OiAnaW5oZXJpdCcgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJc1N0aWNreVRvcFJvdygpIHtcbiAgICAgICAgY29uc3QgbmV3VGFibGVFbGVtZW50ID0gdGhpcy50YWJsZUNvbXBvbmVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICByZXR1cm4gbmV3VGFibGVFbGVtZW50LmNsYXNzTmFtZS5pbmNsdWRlcyhUYWJsZVdpdGhTdGlja3lSb3dDbGFzcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVPdmVybGF5SGFuZGxlUm93U2l6ZSgpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnRhYmxlQ29tcG9uZW50LnRhYmxlV3JhcHBlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLmFkZFBhbmVsQ2xhc3ModGhpcy5yb3dSZXNpemVDbGFzcyk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiEudXBkYXRlU2l6ZSh7IHdpZHRoOiB3aWR0aCAtIDIsIGhlaWdodDogT1ZFUkxBWV9JTklUX1NJWkUgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseVNpemUoZGVsdGFTaXplOiBudW1iZXIsIHByZXZpb3VzU2l6ZT86IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyB1cGRhdGUgY29sIHdpZHRoIGFuZCB0YWJsZSB3aWR0aFxuICAgICAgICBpZiAodGhpcy5pc1hBeGlzSG92ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDb2x1bW5TaXplKGRlbHRhU2l6ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Um93U2l6ZShkZWx0YVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFibGVDb21wb25lbnQudXNlUm93Q29udHJvbHMoKTtcbiAgICAgICAgdGhpcy50YWJsZUNvbXBvbmVudC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlT3ZlcmxheUhhbmRsZVNpemVBbmRPZmZzZXQoKTtcbiAgICAgICAgdGhpcy50YWJsZUNvbXBvbmVudC5zZXRHcmlkQ29sdW1uc1N0eWxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlT3ZlcmxheUZvckhhbmRsZSgpOiBPdmVybGF5UmVmIHtcbiAgICAgICAgLy8gVXNlIG9mIG92ZXJsYXlzIGFsbG93cyB1cyB0byBwcm9wZXJseSBjYXB0dXJlIGNsaWNrIGV2ZW50cyBzcGFubmluZyBwYXJ0c1xuICAgICAgICAvLyBvZiB0d28gdGFibGUgY2VsbHMgYW5kIGlzIGFsc28gdXNlZnVsIGZvciBkaXNwbGF5aW5nIGEgcmVzaXplIHRodW1iXG4gICAgICAgIC8vIG92ZXIgYm90aCBjZWxscyBhbmQgZXh0ZW5kaW5nIGl0IGRvd24gdGhlIHRhYmxlIGFzIG5lZWRlZC5cbiAgICAgICAgY29uc3Qgb3ZlcmxheU9wdGlvbiA9IHRoaXMuaXNYQXhpc0hvdmVyXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBPVkVSTEFZX0lOSVRfU0laRSArICdweCcsXG4gICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiAndGhlLWNvbHVtbi1yZXNpemUtaGFuZGxlLXBhbmVsJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogT1ZFUkxBWV9JTklUX1NJWkUgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogdGhpcy5yb3dSZXNpemVDbGFzc1xuICAgICAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICAgICAgICAvLyBBbHdheXMgcG9zaXRpb24gdGhlIG92ZXJsYXkgYmFzZWQgb24gbGVmdC1pbmRleGVkIGNvb3JkaW5hdGVzLlxuICAgICAgICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcbiAgICAgICAgICAgIC4uLm92ZXJsYXlPcHRpb25cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCkge1xuICAgICAgICBsZXQgb2Zmc2V0WSA9IHRoaXMuY2FsY3VsYXRlT3ZlcmxheUhhbmRsZU9mZnNldFkoKTtcbiAgICAgICAgbGV0IG9mZnNldFggPSB0aGlzLmNhbGN1bGF0ZU92ZXJsYXlIYW5kbGVPZmZzZXRYKCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uOiBDb25uZWN0ZWRQb3NpdGlvbiA9IHRoaXMuaXNYQXhpc0hvdmVyXG4gICAgICAgICAgICA/IHsgLi4uUE9TSVRJT05fTUFQW3RoaXMuaG92ZXJlZERpcmVjdGlvbl0sIG9mZnNldFkgfVxuICAgICAgICAgICAgOiB7IC4uLlBPU0lUSU9OX01BUFt0aGlzLmhvdmVyZWREaXJlY3Rpb25dLCBvZmZzZXRYIH07XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlcbiAgICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhHcm93QWZ0ZXJPcGVuKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhQdXNoKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMoW3Bvc2l0aW9uXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVPdmVybGF5SGFuZGxlT2Zmc2V0WSgpIHtcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50VG9wID0gdGhpcy50YWJsZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICBpZiAodGhpcy5nZXRJc1N0aWNreVRvcFJvdygpKSB7XG4gICAgICAgICAgICAvKiDorr7nva7lm7rlrprmoIfpopjooYzlkI7vvIznrKzkuIDkuKrooajmoLzlhYPntKDlrp7pmYXmmK/nrKzkuozooYzvvIznrKzkuozooYzlkoznrKzkuIDooYzlgY/np7vnmoTkvY3nva7lt67kuIDkuKogbWFzayDlkozkuI7pobbpg6ggcGFkZGluZyDnmoTkvY3nva7vvIzmiYDku6XpnIDopoHooaXpvZAgKi9cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxhYmxlRWxlbWVudFRvcCAtXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICtcbiAgICAgICAgICAgICAgICBUQUJMRV9JTlNFUlRfTUFTSyArXG4gICAgICAgICAgICAgICAgVEFCTEVfUEFERElORyAtXG4gICAgICAgICAgICAgICAgVEFCTEVfQk9SREVSXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YWJsZUVsZW1lbnRUb3AgPCB0aGlzLnNjcm9sbGFibGVFbGVtZW50VG9wKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY3JvbGxhYmxlRWxlbWVudFRvcCAtIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJsZUVsZW1lbnRUb3AgLSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZU92ZXJsYXlIYW5kbGVPZmZzZXRYKCkge1xuICAgICAgICBjb25zdCBjZWxsRWxlbWVudExlZnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICBjb25zdCB0YWJsZUVsZW1lbnRMZWZ0ID0gdGhpcy50YWJsZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgcmV0dXJuIHRhYmxlRWxlbWVudExlZnQgLSBjZWxsRWxlbWVudExlZnQgKyB0aGlzLnNjcm9sbGFibGVFbGVtZW50TGVmdDtcbiAgICB9XG5cbiAgICBhcHBseUNvbHVtblNpemUoZGVsdGFYOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29scyA9IFsuLi50aGlzLnRhYmxlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdjb2xncm91cCcpLmNoaWxkcmVuXSBhcyBIVE1MVGFibGVDb2xFbGVtZW50W107XG4gICAgICAgIHRoaXMucmVzaXppbmdTdG9yZS5zdG9yZVRhYmxlV2lkdGgoY29scyk7XG4gICAgICAgIHRoaXMucmVzaXppbmdTdG9yZS5pbml0RGlyZWN0aW9uKGRlbHRhWCk7XG4gICAgICAgIGxldCBjZWxsSW5kZXggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jZWxsSW5kZXg7XG4gICAgICAgIGlmICh0aGlzLmhvdmVyZWREaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgY2VsbEluZGV4ID0gY2VsbEluZGV4IC0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xzcGFuID0gKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nKSB8fCAxO1xuICAgICAgICBjZWxsSW5kZXggPSBjZWxsSW5kZXggKyAoY29sc3BhbiBhcyBudW1iZXIpIC8gMSAtIDE7XG4gICAgICAgIGlmIChkZWx0YVggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UmlnaHRDb2xzKGNvbHMsIGRlbHRhWCwgY2VsbEluZGV4ICsgMSk7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNpemluZ1N0b3JlLmlzUmVzdG9yaW5nKGRlbHRhWCkpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVggPSB0aGlzLnJlc2l6aW5nU3RvcmUucmVzdG9yZUxlZnRDb2xzKGRlbHRhWCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVsdGFYID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbHNbY2VsbEluZGV4XS5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoY29lcmNlUGl4ZWxzRnJvbUNzc1ZhbHVlKGNvbHNbY2VsbEluZGV4XS5zdHlsZS53aWR0aCkgKyBkZWx0YVgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV4dENvbCA9IGNvbHNbY2VsbEluZGV4ICsgMV07XG4gICAgICAgICAgICBpZiAobmV4dENvbCkge1xuICAgICAgICAgICAgICAgIGxldCBsZWZ0RGVsdGFYID0gdGhpcy5yZXNpemluZ1N0b3JlLmdldFNjcm9sbFdpZHRoKGRlbHRhWCk7XG4gICAgICAgICAgICAgICAgY29uc3QgX2RlbHRhID0gdGhpcy5hcHBseUxlZnRDb2xzKGNvbHMsIGRlbHRhWCwgY2VsbEluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoX2RlbHRhID09PSBkZWx0YVgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuIG5vdCByZXNpemVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWx0YVggPSBkZWx0YVggLSBfZGVsdGE7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzaXppbmdTdG9yZS5pc1Jlc3RvcmluZyhkZWx0YVgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0RGVsdGFYIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdERlbHRhWCA9IHRoaXMucmVzaXppbmdTdG9yZS5yZXN0b3JlUmlnaHRDb2xzKGxlZnREZWx0YVgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0RGVsdGFYIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENvbC5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoZ2V0RWxlbWVudFdpZHRoKG5leHRDb2wpICsgTWF0aC5hYnMobGVmdERlbHRhWCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dENvbC5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoZ2V0RWxlbWVudFdpZHRoKG5leHRDb2wpICsgTWF0aC5hYnMoZGVsdGFYKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxXaWR0aCA9IGdldEVsZW1lbnRXaWR0aCh0aGlzLnRhYmxlRWxlbWVudCkgLSB0aGlzLnRhYmxlQ29tcG9uZW50LnRhYmxlV3JhcHBlcldpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChzY3JvbGxXaWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFdpZHRoID4gTWF0aC5hYnMoZGVsdGFYKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUxlZnRDb2xzKGNvbHMsIGRlbHRhWCwgY2VsbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlMZWZ0Q29scyhjb2xzLCAtc2Nyb2xsV2lkdGgsIGNlbGxJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBseUxlZnRDb2xzKGNvbHM6IEhUTUxUYWJsZUNvbEVsZW1lbnRbXSwgZGVsdGFYOiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICB3aGlsZSAoZGVsdGFYIDwgMCAmJiBjb2xzW2NvbEluZGV4XSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gZ2V0RWxlbWVudFdpZHRoKGNvbHNbY29sSW5kZXhdKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50V2lkdGggPiB0aGlzLnRhYmxlT3B0aW9ucy5taW5XaWR0aFB4KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzaXppbmdTdG9yZS5pc1Jlc2l6aW5nKGRlbHRhWCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemluZ1N0b3JlLnN0b3JlUmVzaXppbmdDb2woY29sc1tjb2xJbmRleF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFdpZHRoID4gdGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCArIE1hdGguYWJzKGRlbHRhWCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sc1tjb2xJbmRleF0uc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGN1cnJlbnRXaWR0aCAtIE1hdGguYWJzKGRlbHRhWCkpO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWCArPSBjdXJyZW50V2lkdGggLSB0aGlzLnRhYmxlT3B0aW9ucy5taW5XaWR0aFB4O1xuICAgICAgICAgICAgICAgICAgICBjb2xzW2NvbEluZGV4XS5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUodGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sSW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsdGFYO1xuICAgIH1cblxuICAgIGFwcGx5UmlnaHRDb2xzKGNvbHM6IEhUTUxUYWJsZUNvbEVsZW1lbnRbXSwgZGVsdGFYOiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgd2hpbGUgKGRlbHRhWCA+IDAgJiYgY29sc1tjb2xJbmRleF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IGdldEVsZW1lbnRXaWR0aChjb2xzW2NvbEluZGV4XSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFdpZHRoID4gdGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXNpemluZyhkZWx0YVgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXppbmdTdG9yZS5zdG9yZVJlc2l6aW5nQ29sKGNvbHNbY29sSW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCA+IGRlbHRhWCArIHRoaXMudGFibGVPcHRpb25zLm1pbldpZHRoUHgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sc1tjb2xJbmRleF0uc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGN1cnJlbnRXaWR0aCAtIGRlbHRhWCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFYIC09IGN1cnJlbnRXaWR0aCAtIHRoaXMudGFibGVPcHRpb25zLm1pbldpZHRoUHg7XG4gICAgICAgICAgICAgICAgICAgIGNvbHNbY29sSW5kZXhdLnN0eWxlLndpZHRoID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZSh0aGlzLnRhYmxlT3B0aW9ucy5taW5XaWR0aFB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWx0YVg7XG4gICAgfVxuXG4gICAgYXBwbHlSb3dTaXplKGRlbHRhWTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy50YWJsZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGJvZHknKS5jaGlsZHJlbl0gYXMgSFRNTFRhYmxlUm93RWxlbWVudFtdO1xuICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuc3RvcmVUYWJsZUhlaWdodChyb3dzKTtcbiAgICAgICAgdGhpcy5yZXNpemluZ1N0b3JlLmluaXREaXJlY3Rpb24oZGVsdGFZLCB0aGlzLmlzWEF4aXNIb3Zlcik7XG4gICAgICAgIGxldCByb3dJbmRleCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucm93SW5kZXggLSAxOyAvLyBzdWJ0cmFjdCB0aGVhZCdzIHRyXG4gICAgICAgIGlmICh0aGlzLmhvdmVyZWREaXJlY3Rpb24gPT09IFBvc2l0aW9uLnRvcCkge1xuICAgICAgICAgICAgcm93SW5kZXggPSByb3dJbmRleCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93U3BhbiA9ICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MVGFibGVDZWxsRWxlbWVudCkucm93U3BhbjtcbiAgICAgICAgY29uc3QgYm90dG9tUm93SW5kZXggPSByb3dJbmRleCArIChyb3dTcGFuIC0gMSkgKyAxO1xuICAgICAgICBpZiAoZGVsdGFZID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUJvdHRvbVJvd3Mocm93cywgZGVsdGFZLCBib3R0b21Sb3dJbmRleCk7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNpemluZ1N0b3JlLmlzUmVzdG9yaW5nKGRlbHRhWSwgdGhpcy5pc1hBeGlzSG92ZXIpKSB7XG4gICAgICAgICAgICAgICAgZGVsdGFZID0gdGhpcy5yZXNpemluZ1N0b3JlLnJlc3RvcmVUb3BSb3dzKGRlbHRhWSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVsdGFZID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBpbml0SGVpZ2h0ID0gZ2V0RWxlbWVudEhlaWdodChyb3dzW3Jvd0luZGV4XSk7XG4gICAgICAgICAgICAgICAgcm93c1tyb3dJbmRleF0uc3R5bGUuaGVpZ2h0ID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZShpbml0SGVpZ2h0ICsgZGVsdGFZKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBhZGREZWx0YVkgPSB0aGlzLnJlc2l6aW5nU3RvcmUuZ2V0QWRkVGFibGVIZWlnaHQoZGVsdGFZKTtcbiAgICAgICAgICAgIGNvbnN0IF9kZWx0YSA9IHRoaXMuYXBwbHlUb3BSb3dzKHJvd3MsIGRlbHRhWSwgcm93SW5kZXgpO1xuICAgICAgICAgICAgaWYgKF9kZWx0YSA9PT0gZGVsdGFZKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FuIG5vdCByZXNpemVcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWx0YVkgPSBkZWx0YVkgLSBfZGVsdGE7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNpemluZ1N0b3JlLmlzUmVzdG9yaW5nKGRlbHRhWSwgdGhpcy5pc1hBeGlzSG92ZXIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFkZERlbHRhWSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gdGhpcy5yZXNpemluZ1N0b3JlLnJlc3RvcmVCb3R0b21Sb3dzKGRlbHRhWSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXBwbHlUb3BSb3dzKHJvd3M6IEhUTUxUYWJsZVJvd0VsZW1lbnRbXSwgZGVsdGFZOiBudW1iZXIsIHJvd0luZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICB3aGlsZSAoZGVsdGFZIDwgMCAmJiByb3dzW3Jvd0luZGV4XSkge1xuICAgICAgICAgICAgY29uc3Qgcm93T2Zmc2V0SGVpZ2h0ID0gZ2V0RWxlbWVudEhlaWdodChyb3dzW3Jvd0luZGV4XSk7XG4gICAgICAgICAgICBpZiAocm93T2Zmc2V0SGVpZ2h0ID4gdGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXNpemluZ1N0b3JlLmlzUmVzaXppbmcoZGVsdGFZLCB0aGlzLmlzWEF4aXNIb3ZlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemluZ1N0b3JlLnN0b3JlUmVzaXppbmdSb3cocm93c1tyb3dJbmRleF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocm93T2Zmc2V0SGVpZ2h0ID4gdGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHggKyBNYXRoLmFicyhkZWx0YVkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3Nbcm93SW5kZXhdLnN0eWxlLmhlaWdodCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUocm93T2Zmc2V0SGVpZ2h0IC0gTWF0aC5hYnMoZGVsdGFZKSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFZICs9IHJvd09mZnNldEhlaWdodCAtIHRoaXMudGFibGVPcHRpb25zLm1pbkhlaWdodFB4O1xuICAgICAgICAgICAgICAgICAgICByb3dzW3Jvd0luZGV4XS5zdHlsZS5oZWlnaHQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHRoaXMudGFibGVPcHRpb25zLm1pbkhlaWdodFB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3dJbmRleC0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWx0YVk7XG4gICAgfVxuXG4gICAgYXBwbHlCb3R0b21Sb3dzKHJvd3M6IEhUTUxUYWJsZVJvd0VsZW1lbnRbXSwgZGVsdGFZOiBudW1iZXIsIHJvd0luZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICB3aGlsZSAocm93c1tyb3dJbmRleF0gJiYgZGVsdGFZID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgcm93T2Zmc2V0SGVpZ2h0ID0gZ2V0RWxlbWVudEhlaWdodChyb3dzW3Jvd0luZGV4XSk7XG4gICAgICAgICAgICBpZiAocm93T2Zmc2V0SGVpZ2h0ID4gdGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXNpemluZ1N0b3JlLmlzUmVzaXppbmcoZGVsdGFZLCB0aGlzLmlzWEF4aXNIb3ZlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemluZ1N0b3JlLnN0b3JlUmVzaXppbmdSb3cocm93c1tyb3dJbmRleF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocm93T2Zmc2V0SGVpZ2h0ID4gZGVsdGFZICsgdGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93c1tyb3dJbmRleF0uc3R5bGUuaGVpZ2h0ID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZShyb3dPZmZzZXRIZWlnaHQgLSBkZWx0YVkpO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWSAtPSByb3dPZmZzZXRIZWlnaHQgLSB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeDtcbiAgICAgICAgICAgICAgICAgICAgcm93c1tyb3dJbmRleF0uc3R5bGUuaGVpZ2h0ID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZSh0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93SW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsdGFZO1xuICAgIH1cblxuICAgIC8vI3JlZ2lvblxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgI2NlbGxJbm5lcj5cbjwvZGl2PlxuIl19
|
|
@@ -2,9 +2,9 @@ import { Component, Input } from '@angular/core';
|
|
|
2
2
|
import { Transforms } from 'slate';
|
|
3
3
|
import { TableOperations } from '../../table.types';
|
|
4
4
|
import { TheEditor } from '../../../../interfaces';
|
|
5
|
-
import { ELEMENT_TO_COMPONENT } from 'slate-angular';
|
|
6
5
|
import { getTable } from '../../utils/table-entry';
|
|
7
6
|
import { TableEditor } from '../../table.editor';
|
|
7
|
+
import { hasHeaderRow } from '../../utils/is-header-row';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
import * as i1 from "ngx-tethys/popover";
|
|
10
10
|
import * as i2 from "@angular/common";
|
|
@@ -36,9 +36,8 @@ export class TheTableOptionsComponent {
|
|
|
36
36
|
}
|
|
37
37
|
setColumnOptions() {
|
|
38
38
|
this.tableDropdownList.forEach(item => {
|
|
39
|
-
const tableComponent = ELEMENT_TO_COMPONENT.get(this.table);
|
|
40
39
|
if (item.key === TableOperations.headerRow) {
|
|
41
|
-
item.isActive =
|
|
40
|
+
item.isActive = hasHeaderRow(this.table);
|
|
42
41
|
}
|
|
43
42
|
else {
|
|
44
43
|
item.isActive = (this.table.options && this.table.options[item.key]) || false;
|
|
@@ -96,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImpor
|
|
|
96
95
|
}], ctorParameters: function () { return [{ type: i1.ThyPopoverRef }]; }, propDecorators: { editor: [{
|
|
97
96
|
type: Input
|
|
98
97
|
}] } });
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtb3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3Rvb2xiYXIvdGFibGUtb3B0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMzQyxPQUFPLEVBQXVCLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBb0J6RCxNQUFNLE9BQU8sd0JBQXdCO0lBa0JqQyxZQUFvQixVQUFtRDtRQUFuRCxlQUFVLEdBQVYsVUFBVSxDQUF5QztRQWZ2RSxzQkFBaUIsR0FBMEI7WUFDdkM7Z0JBQ0ksSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsR0FBRyxFQUFFLGVBQWUsQ0FBQyxTQUFTO2FBQ2pDO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsR0FBRyxFQUFFLGVBQWUsQ0FBQyxZQUFZO2FBQ3BDO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsR0FBRyxFQUFFLGVBQWUsQ0FBQyxjQUFjO2FBQ3RDO1NBQ0osQ0FBQztJQUV3RSxDQUFDO0lBRTNFLFFBQVE7UUFDSixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xDLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxlQUFlLENBQUMsU0FBUyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUM7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQzthQUNqRjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFpQixFQUFFLE1BQTJCO1FBQzFELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25GLGFBQWEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzFDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN2QixXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO1FBQzFELFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM3RCxnREFBZ0Q7UUFDaEQsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLGVBQWUsQ0FBQyxTQUFTLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUN2RyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUN2RTtJQUNMLENBQUM7OEdBbkRRLHdCQUF3QjtrR0FBeEIsd0JBQXdCLHNJQWhCdkI7Ozs7Ozs7Ozs7O0tBV1Q7OzJGQUtRLHdCQUF3QjtrQkFsQnBDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7OztLQVdUO29CQUNELElBQUksRUFBRTt3QkFDRixLQUFLLEVBQUUsbUJBQW1CO3FCQUM3QjtpQkFDSjtvR0FFWSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoeVBvcG92ZXJSZWYgfSBmcm9tICduZ3gtdGV0aHlzL3BvcG92ZXInO1xuaW1wb3J0IHsgRWRpdG9yLCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgVGFibGVEcm9wZG93bk9wdGlvbiwgVGFibGVPcGVyYXRpb25zIH0gZnJvbSAnLi4vLi4vdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRUYWJsZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxlLWVudHJ5JztcbmltcG9ydCB7IFRhYmxlRWRpdG9yIH0gZnJvbSAnLi4vLi4vdGFibGUuZWRpdG9yJztcbmltcG9ydCB7IGhhc0hlYWRlclJvdyB9IGZyb20gJy4uLy4uL3V0aWxzL2lzLWhlYWRlci1yb3cnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoZS10YWJsZS1vcHRpb25zJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IGNsYXNzPVwidGh5LWRyb3Bkb3duLW1lbnUgdGFibGUtZHJvcC1tZW51XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdGFibGVEcm9wZG93bkxpc3RcIj5cbiAgICAgICAgICAgICAgICA8YSB0aHlEcm9wZG93bk1lbnVJdGVtIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAobW91c2Vkb3duKT1cInNldFRhYmxlT3B0aW9ucygkZXZlbnQsIG9wdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGh5RHJvcGRvd25NZW51SXRlbU5hbWU+e3sgb3B0aW9uLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib3B0aW9uLmlzQWN0aXZlXCIgdGh5RHJvcGRvd25NZW51SXRlbUljb24gY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImNoZWNrXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICBgLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aGUtdGFibGUtb3B0aW9ucydcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFRoZVRhYmxlT3B0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgZWRpdG9yOiBFZGl0b3I7XG5cbiAgICB0YWJsZURyb3Bkb3duTGlzdDogVGFibGVEcm9wZG93bk9wdGlvbltdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAn5qCH6aKY6KGMJyxcbiAgICAgICAgICAgIGtleTogVGFibGVPcGVyYXRpb25zLmhlYWRlclJvd1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAn5qCH6aKY5YiXJyxcbiAgICAgICAgICAgIGtleTogVGFibGVPcGVyYXRpb25zLmhlYWRlckNvbHVtblxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAn5bqP5Y+35YiXJyxcbiAgICAgICAgICAgIGtleTogVGFibGVPcGVyYXRpb25zLm51bWJlcmVkQ29sdW1uXG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwb3BvdmVyUmVmOiBUaHlQb3BvdmVyUmVmPFRoZVRhYmxlT3B0aW9uc0NvbXBvbmVudD4pIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRDb2x1bW5PcHRpb25zKCk7XG4gICAgfVxuXG4gICAgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gZ2V0VGFibGUodGhpcy5lZGl0b3IpO1xuICAgIH1cblxuICAgIHNldENvbHVtbk9wdGlvbnMoKSB7XG4gICAgICAgIHRoaXMudGFibGVEcm9wZG93bkxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmtleSA9PT0gVGFibGVPcGVyYXRpb25zLmhlYWRlclJvdykge1xuICAgICAgICAgICAgICAgIGl0ZW0uaXNBY3RpdmUgPSBoYXNIZWFkZXJSb3codGhpcy50YWJsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW0uaXNBY3RpdmUgPSAodGhpcy50YWJsZS5vcHRpb25zICYmIHRoaXMudGFibGUub3B0aW9uc1tpdGVtLmtleV0pIHx8IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRUYWJsZU9wdGlvbnMoZXZlbnQ6IE1vdXNlRXZlbnQsIG9wdGlvbjogVGFibGVEcm9wZG93bk9wdGlvbikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29uc3QgY3VycmVudE9wdGlvbiA9IHRoaXMudGFibGVEcm9wZG93bkxpc3QuZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSBvcHRpb24ua2V5KTtcbiAgICAgICAgY3VycmVudE9wdGlvbi5pc0FjdGl2ZSA9ICFvcHRpb24uaXNBY3RpdmU7XG4gICAgICAgIGNvbnN0IHRhYmxlT3B0aW9uID0ge307XG4gICAgICAgIHRhYmxlT3B0aW9uW29wdGlvbi5rZXldID0gY3VycmVudE9wdGlvbi5pc0FjdGl2ZSB8fCBmYWxzZTtcbiAgICAgICAgVGFibGVFZGl0b3Iuc2V0VGFibGVPcHRpb25zKHRoaXMuZWRpdG9yLCB7IC4uLnRhYmxlT3B0aW9uIH0pO1xuICAgICAgICAvLyBoZWFkZXJSb3cg5YW85a655Luj56CBLCDlj5bmtojmoIfpopjooYznmoTml7blgJnlkIzml7borr7nva4gcm93IOS4reeahCBoZWFkZXIg5bGe5oCnXG4gICAgICAgIGlmIChvcHRpb24ua2V5ID09PSBUYWJsZU9wZXJhdGlvbnMuaGVhZGVyUm93ICYmICF0YWJsZU9wdGlvbltvcHRpb24ua2V5XSAmJiB0aGlzLnRhYmxlLmNoaWxkcmVuWzBdLmhlYWRlcikge1xuICAgICAgICAgICAgY29uc3Qgcm93UGF0aCA9IFRoZUVkaXRvci5maW5kUGF0aCh0aGlzLmVkaXRvciwgdGhpcy50YWJsZS5jaGlsZHJlblswXSk7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKHRoaXMuZWRpdG9yLCB7IGhlYWRlcjogbnVsbCB9LCB7IGF0OiByb3dQYXRoIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|