@ngrdt/menu 0.0.7 → 0.0.9
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/README.md +7 -7
- package/esm2022/index.mjs +1 -1
- package/esm2022/lib/menu/rdt-menu.component.mjs +24 -16
- package/esm2022/lib/menu-bar/rdt-menu-bar.component.mjs +3 -3
- package/esm2022/lib/menu-base/rdt-menu-base.component.mjs +25 -11
- package/esm2022/lib/menu-overlay/rdt-menu-overlay.component.mjs +21 -5
- package/esm2022/lib/rdt-menu.module.mjs +5 -2
- package/fesm2022/ngrdt-menu.mjs +130 -90
- package/fesm2022/ngrdt-menu.mjs.map +1 -1
- package/lib/menu/rdt-menu.component.d.ts +6 -5
- package/lib/menu-base/rdt-menu-base.component.d.ts +8 -4
- package/lib/menu-overlay/rdt-menu-overlay.component.d.ts +2 -0
- package/lib/rdt-menu.module.d.ts +2 -1
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# @ngrdt/menu
|
|
2
|
-
|
|
3
|
-
This library was generated with [Nx](https://nx.dev).
|
|
4
|
-
|
|
5
|
-
## Running unit tests
|
|
6
|
-
|
|
7
|
-
Run `nx test @ngrdt/menu` to execute the unit tests.
|
|
1
|
+
# @ngrdt/menu
|
|
2
|
+
|
|
3
|
+
This library was generated with [Nx](https://nx.dev).
|
|
4
|
+
|
|
5
|
+
## Running unit tests
|
|
6
|
+
|
|
7
|
+
Run `nx test @ngrdt/menu` to execute the unit tests.
|
package/esm2022/index.mjs
CHANGED
|
@@ -2,4 +2,4 @@ export * from './lib/menu/rdt-menu.component';
|
|
|
2
2
|
export * from './lib/menu-bar/rdt-menu-bar.component';
|
|
3
3
|
export * from './lib/models';
|
|
4
4
|
export * from './lib/rdt-menu.module';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9tZW51L3JkdC1tZW51LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZW51LWJhci9yZHQtbWVudS1iYXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZHQtbWVudS5tb2R1bGUnO1xuIl19
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, inject, Input,
|
|
2
|
-
import {
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostListener, inject, Input, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { RDT_BUTTON_BASE_PROVIDER, } from '@ngrdt/button';
|
|
3
3
|
import { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';
|
|
4
|
-
import {
|
|
4
|
+
import { parseMenuItems } from '../private-models';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@angular/common";
|
|
7
|
-
import * as i2 from "
|
|
7
|
+
import * as i2 from "@ngrdt/button";
|
|
8
|
+
import * as i3 from "../menu-overlay/rdt-menu-overlay.component";
|
|
8
9
|
export class RdtMenuComponent extends RdtMenuBaseComponent {
|
|
9
10
|
buttonClass = inject(RDT_BUTTON_BASE_PROVIDER);
|
|
10
11
|
dataTestId = '';
|
|
@@ -17,28 +18,35 @@ export class RdtMenuComponent extends RdtMenuBaseComponent {
|
|
|
17
18
|
this.filterItems();
|
|
18
19
|
}
|
|
19
20
|
_item;
|
|
20
|
-
|
|
21
|
+
onPointerLeave() {
|
|
22
|
+
this.onItemPointerLeave(this.parsedItem);
|
|
23
|
+
}
|
|
21
24
|
get parsedItem() {
|
|
22
25
|
return this.parsedItems[0];
|
|
23
26
|
}
|
|
24
27
|
get buttonInputs() {
|
|
25
28
|
return {
|
|
26
|
-
'attr.role': 'menuitem',
|
|
27
|
-
'attr.aria-haspopup': 'menu',
|
|
28
|
-
'attr.aria-expanded': this.expanded === this.parsedItem,
|
|
29
29
|
tabIndex: 0,
|
|
30
30
|
dataTestId: this.dataTestId,
|
|
31
|
-
|
|
31
|
+
label: this.parsedItem.label,
|
|
32
32
|
icon: this.parsedItem.icon,
|
|
33
|
+
aria: {
|
|
34
|
+
role: 'menuitem',
|
|
35
|
+
'aria-haspopup': 'menu',
|
|
36
|
+
'aria-expanded': this.expanded === this.parsedItem,
|
|
37
|
+
},
|
|
33
38
|
};
|
|
34
39
|
}
|
|
40
|
+
toggle() {
|
|
41
|
+
this.onItemClick(this.parsedItem);
|
|
42
|
+
}
|
|
35
43
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
36
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RdtMenuComponent, selector: "rdt-menu", inputs: { dataTestId: "dataTestId", item: "item" }, providers: [
|
|
44
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RdtMenuComponent, selector: "rdt-menu", inputs: { dataTestId: "dataTestId", item: "item" }, host: { listeners: { "pointerleave": "onPointerLeave()" } }, providers: [
|
|
37
45
|
{
|
|
38
46
|
provide: RdtMenuBaseComponent,
|
|
39
47
|
useExisting: RdtMenuComponent,
|
|
40
48
|
},
|
|
41
|
-
],
|
|
49
|
+
], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"menu-button-container\"\r\n (pointerenter)=\"onItemPointerEnter(parsedItem)\"\r\n>\r\n <ng-template\r\n rdtButtonOutlet\r\n [inputs]=\"buttonInputs\"\r\n (click$)=\"toggle()\"\r\n #outlet=\"rdtButtonOutlet\"\r\n />\r\n</div>\r\n\r\n<rdt-menu-overlay\r\n *ngIf=\"parsedItem\"\r\n [anchorElement]=\"outlet.instance?.anchorElement\"\r\n [item]=\"$any(parsedItem)\"\r\n [expanded]=\"expanded === parsedItem\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n/>\r\n", styles: ["rdt-menu{display:block;position:relative}rdt-menu .menu-button-container{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RdtButtonOutletDirective, selector: "[rdtButtonOutlet]", inputs: ["inputs"], outputs: ["click$"], exportAs: ["rdtButtonOutlet"] }, { kind: "component", type: i3.RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
42
50
|
}
|
|
43
51
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuComponent, decorators: [{
|
|
44
52
|
type: Component,
|
|
@@ -47,14 +55,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
47
55
|
provide: RdtMenuBaseComponent,
|
|
48
56
|
useExisting: RdtMenuComponent,
|
|
49
57
|
},
|
|
50
|
-
], template: "<
|
|
58
|
+
], template: "<div\r\n class=\"menu-button-container\"\r\n (pointerenter)=\"onItemPointerEnter(parsedItem)\"\r\n>\r\n <ng-template\r\n rdtButtonOutlet\r\n [inputs]=\"buttonInputs\"\r\n (click$)=\"toggle()\"\r\n #outlet=\"rdtButtonOutlet\"\r\n />\r\n</div>\r\n\r\n<rdt-menu-overlay\r\n *ngIf=\"parsedItem\"\r\n [anchorElement]=\"outlet.instance?.anchorElement\"\r\n [item]=\"$any(parsedItem)\"\r\n [expanded]=\"expanded === parsedItem\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n/>\r\n", styles: ["rdt-menu{display:block;position:relative}rdt-menu .menu-button-container{display:inline-block}\n"] }]
|
|
51
59
|
}], propDecorators: { dataTestId: [{
|
|
52
60
|
type: Input
|
|
53
61
|
}], item: [{
|
|
54
62
|
type: Input,
|
|
55
63
|
args: [{ required: true }]
|
|
56
|
-
}],
|
|
57
|
-
type:
|
|
58
|
-
args: [
|
|
64
|
+
}], onPointerLeave: [{
|
|
65
|
+
type: HostListener,
|
|
66
|
+
args: ['pointerleave']
|
|
59
67
|
}] } });
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9tZW51L3JkdC1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS9yZHQtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHdCQUF3QixHQUV6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBZW5ELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxvQkFBb0I7SUFDckMsV0FBVyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBR2xFLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFFaEIsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxLQUFrQjtRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNPLEtBQUssQ0FBZTtJQUdwQixjQUFjO1FBQ3BCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTztZQUNMLFFBQVEsRUFBRSxDQUFDO1lBQ1gsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUs7WUFDNUIsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSTtZQUMxQixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLGVBQWUsRUFBRSxNQUFNO2dCQUN2QixlQUFlLEVBQUUsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsVUFBVTthQUNuRDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7dUdBMUNVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLG9KQVBoQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxvQkFBb0I7Z0JBQzdCLFdBQVcsRUFBRSxnQkFBZ0I7YUFDOUI7U0FDRixpREMzQkgsb25CQXNCQTs7MkZET2EsZ0JBQWdCO2tCQWI1QixTQUFTOytCQUNFLFVBQVUsbUJBR0gsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLGtCQUFrQjt5QkFDOUI7cUJBQ0Y7OEJBTUQsVUFBVTtzQkFEVCxLQUFLO2dCQUlGLElBQUk7c0JBRFAsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBWWpCLGNBQWM7c0JBRHJCLFlBQVk7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgUkRUX0JVVFRPTl9CQVNFX1BST1ZJREVSLFxyXG4gIFJkdEJ1dHRvbkJhc2VJbnB1dHNJbnQsXHJcbn0gZnJvbSAnQG5ncmR0L2J1dHRvbic7XHJcbmltcG9ydCB7IFJkdE1lbnVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1iYXNlL3JkdC1tZW51LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmR0TWVudUl0ZW0gfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBwYXJzZU1lbnVJdGVtcyB9IGZyb20gJy4uL3ByaXZhdGUtbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmR0LW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZHQtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3JkdC1tZW51LmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBSZHRNZW51QmFzZUNvbXBvbmVudCxcclxuICAgICAgdXNlRXhpc3Rpbmc6IFJkdE1lbnVDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRNZW51Q29tcG9uZW50IGV4dGVuZHMgUmR0TWVudUJhc2VDb21wb25lbnQge1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBidXR0b25DbGFzcyA9IGluamVjdChSRFRfQlVUVE9OX0JBU0VfUFJPVklERVIpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGRhdGFUZXN0SWQgPSAnJztcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBnZXQgaXRlbSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtO1xyXG4gIH1cclxuICBzZXQgaXRlbSh2YWx1ZTogUmR0TWVudUl0ZW0pIHtcclxuICAgIHRoaXMuX2l0ZW0gPSB2YWx1ZTtcclxuICAgIHRoaXMuYWxsUGFyc2VkSXRlbXMgPSBwYXJzZU1lbnVJdGVtcyhbdmFsdWVdLCB0aGlzLmluamVjdG9yKTtcclxuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaXRlbSE6IFJkdE1lbnVJdGVtO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdwb2ludGVybGVhdmUnKVxyXG4gIHByaXZhdGUgb25Qb2ludGVyTGVhdmUoKSB7XHJcbiAgICB0aGlzLm9uSXRlbVBvaW50ZXJMZWF2ZSh0aGlzLnBhcnNlZEl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhcnNlZEl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJzZWRJdGVtc1swXTtcclxuICB9XHJcblxyXG4gIGdldCBidXR0b25JbnB1dHMoKTogUGFydGlhbDxSZHRCdXR0b25CYXNlSW5wdXRzSW50PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0YWJJbmRleDogMCxcclxuICAgICAgZGF0YVRlc3RJZDogdGhpcy5kYXRhVGVzdElkLFxyXG4gICAgICBsYWJlbDogdGhpcy5wYXJzZWRJdGVtLmxhYmVsLFxyXG4gICAgICBpY29uOiB0aGlzLnBhcnNlZEl0ZW0uaWNvbixcclxuICAgICAgYXJpYToge1xyXG4gICAgICAgIHJvbGU6ICdtZW51aXRlbScsXHJcbiAgICAgICAgJ2FyaWEtaGFzcG9wdXAnOiAnbWVudScsXHJcbiAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiB0aGlzLmV4cGFuZGVkID09PSB0aGlzLnBhcnNlZEl0ZW0sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlKCkge1xyXG4gICAgdGhpcy5vbkl0ZW1DbGljayh0aGlzLnBhcnNlZEl0ZW0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJtZW51LWJ1dHRvbi1jb250YWluZXJcIlxyXG4gIChwb2ludGVyZW50ZXIpPVwib25JdGVtUG9pbnRlckVudGVyKHBhcnNlZEl0ZW0pXCJcclxuPlxyXG4gIDxuZy10ZW1wbGF0ZVxyXG4gICAgcmR0QnV0dG9uT3V0bGV0XHJcbiAgICBbaW5wdXRzXT1cImJ1dHRvbklucHV0c1wiXHJcbiAgICAoY2xpY2skKT1cInRvZ2dsZSgpXCJcclxuICAgICNvdXRsZXQ9XCJyZHRCdXR0b25PdXRsZXRcIlxyXG4gIC8+XHJcbjwvZGl2PlxyXG5cclxuPHJkdC1tZW51LW92ZXJsYXlcclxuICAqbmdJZj1cInBhcnNlZEl0ZW1cIlxyXG4gIFthbmNob3JFbGVtZW50XT1cIm91dGxldC5pbnN0YW5jZT8uYW5jaG9yRWxlbWVudFwiXHJcbiAgW2l0ZW1dPVwiJGFueShwYXJzZWRJdGVtKVwiXHJcbiAgW2V4cGFuZGVkXT1cImV4cGFuZGVkID09PSBwYXJzZWRJdGVtXCJcclxuICBbYXV0b2ZvY3VzSXRlbV09XCJhdXRvZm9jdXNTdWJtZW51SXRlbVwiXHJcbiAgW3ByZWZlcnJlZEhvcml6b250YWxEaXJdPVwicHJlZmVycmVkSG9yaXpvbnRhbERpclwiXHJcbiAgW3ByZWZlcnJlZFZlcnRpY2FsRGlyXT1cInByZWZlcnJlZFZlcnRpY2FsRGlyXCJcclxuICBbbGV2ZWxdPVwiMFwiXHJcbi8+XHJcbiJdfQ==
|
|
@@ -26,7 +26,7 @@ export class RdtMenuBarComponent extends RdtMenuBaseComponent {
|
|
|
26
26
|
provide: RdtMenuBaseComponent,
|
|
27
27
|
useExisting: RdtMenuBarComponent,
|
|
28
28
|
},
|
|
29
|
-
], usesInheritance: true, ngImport: i0, template: "<ul class=\"menu-bar-item-container\" role=\"presentation\">\r\n <li\r\n *ngFor=\"let item of parsedItems; let i = index\"\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expanded\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO\r\n <
|
|
29
|
+
], usesInheritance: true, ngImport: i0, template: "<ul class=\"menu-bar-item-container\" role=\"presentation\">\r\n <li\r\n *ngFor=\"let item of parsedItems; let i = index\"\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n (pointerleave)=\"onItemPointerLeave(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expanded\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"expand_more\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n -->\r\n <span class=\"menu-bar-item-icon\" *ngIf=\"item.items\">v</span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!--\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [target]=\"item.target!\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expanded\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;border:none;text-decoration:none}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--sub-menu-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;padding-left:0}.menu-bar-item{cursor:pointer;pointer-events:all;color:var(--white);margin:0 .5rem;position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{background-color:var(--rdt-menu-bar-item-background-route-active)}.menu-bar-item[aria-expanded=true] .menu-bar-item-content{background-color:var(--rdt-menu-bar-item-background-expanded)}.menu-bar-item-content{display:flex;align-items:center;padding:var(--rdt-menu-bar-item-padding);color:inherit!important;border-radius:var(--rdt-menu-bar-item-border-radius);overflow:hidden;background-color:var(--rdt-menu-bar-item-background)}.menu-bar-item-content:hover{background-color:var(--rdt-menu-bar-item-background-hover)}.menu-bar-item-content.focus-visible:focus,.menu-bar-item-content:focus-visible{outline:none;background-color:var(--rdt-menu-bar-item-background-focus)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RdtAnyRouteActiveDirective, selector: "[rdtAnyRouteActive]", inputs: ["anyRouteActive", "watchedRoutes", "anyRouteActiveOptions", "ariaCurrentWhenActive"] }, { kind: "directive", type: i4.RdtKeyListenerDirective, selector: "[rdtKeyListener]", outputs: ["rdtKeyListener"] }, { kind: "component", type: i5.RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
30
30
|
}
|
|
31
31
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuBarComponent, decorators: [{
|
|
32
32
|
type: Component,
|
|
@@ -35,7 +35,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
35
35
|
provide: RdtMenuBaseComponent,
|
|
36
36
|
useExisting: RdtMenuBarComponent,
|
|
37
37
|
},
|
|
38
|
-
], template: "<ul class=\"menu-bar-item-container\" role=\"presentation\">\r\n <li\r\n *ngFor=\"let item of parsedItems; let i = index\"\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expanded\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO\r\n <
|
|
38
|
+
], template: "<ul class=\"menu-bar-item-container\" role=\"presentation\">\r\n <li\r\n *ngFor=\"let item of parsedItems; let i = index\"\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n (pointerleave)=\"onItemPointerLeave(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expanded\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"expand_more\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n -->\r\n <span class=\"menu-bar-item-icon\" *ngIf=\"item.items\">v</span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!--\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [target]=\"item.target!\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expanded\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;border:none;text-decoration:none}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--sub-menu-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;padding-left:0}.menu-bar-item{cursor:pointer;pointer-events:all;color:var(--white);margin:0 .5rem;position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{background-color:var(--rdt-menu-bar-item-background-route-active)}.menu-bar-item[aria-expanded=true] .menu-bar-item-content{background-color:var(--rdt-menu-bar-item-background-expanded)}.menu-bar-item-content{display:flex;align-items:center;padding:var(--rdt-menu-bar-item-padding);color:inherit!important;border-radius:var(--rdt-menu-bar-item-border-radius);overflow:hidden;background-color:var(--rdt-menu-bar-item-background)}.menu-bar-item-content:hover{background-color:var(--rdt-menu-bar-item-background-hover)}.menu-bar-item-content.focus-visible:focus,.menu-bar-item-content:focus-visible{outline:none;background-color:var(--rdt-menu-bar-item-background-focus)}\n"] }]
|
|
39
39
|
}], propDecorators: { items: [{
|
|
40
40
|
type: Input
|
|
41
41
|
}], headerHeight: [{
|
|
@@ -48,4 +48,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
48
48
|
type: HostBinding,
|
|
49
49
|
args: ['attr.role']
|
|
50
50
|
}] } });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7QUFlbkQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQjtJQUMzRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQW9CO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDTyxNQUFNLENBQWlCO0lBRy9CLFlBQVksR0FBRyxDQUFDLENBQUM7SUFHakIsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUdULFFBQVEsR0FBRyxTQUFTLENBQUM7dUdBbkJsQixtQkFBbUI7MkZBQW5CLG1CQUFtQixxR0FZVixlQUFlLGtEQUdmLGVBQWUsd0VBdEJ4QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxvQkFBb0I7Z0JBQzdCLFdBQVcsRUFBRSxtQkFBbUI7YUFDakM7U0FDRixpREN2QkgsMmdIQStHQTs7MkZEdEZhLG1CQUFtQjtrQkFiL0IsU0FBUzsrQkFDRSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLG9CQUFvQjs0QkFDN0IsV0FBVyxxQkFBcUI7eUJBQ2pDO3FCQUNGOzhCQUlHLEtBQUs7c0JBRFIsS0FBSztnQkFZTixZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUlyQyxZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUk3QixRQUFRO3NCQURmLFdBQVc7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIElucHV0LFxyXG4gIG51bWJlckF0dHJpYnV0ZSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmR0TWVudUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9tZW51LWJhc2UvcmR0LW1lbnUtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZHRNZW51SXRlbSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IHBhcnNlTWVudUl0ZW1zIH0gZnJvbSAnLi4vcHJpdmF0ZS1tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyZHQtbWVudS1iYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZHQtbWVudS1iYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9yZHQtbWVudS1iYXIuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IFJkdE1lbnVCYXNlQ29tcG9uZW50LFxyXG4gICAgICB1c2VFeGlzdGluZzogUmR0TWVudUJhckNvbXBvbmVudCxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdE1lbnVCYXJDb21wb25lbnQgZXh0ZW5kcyBSZHRNZW51QmFzZUNvbXBvbmVudCB7XHJcbiAgQElucHV0KClcclxuICBnZXQgaXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XHJcbiAgfVxyXG4gIHNldCBpdGVtcyh2YWx1ZTogUmR0TWVudUl0ZW1bXSkge1xyXG4gICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcclxuICAgIHRoaXMuYWxsUGFyc2VkSXRlbXMgPSBwYXJzZU1lbnVJdGVtcyh2YWx1ZSwgdGhpcy5pbmplY3Rvcik7XHJcbiAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2l0ZW1zITogUmR0TWVudUl0ZW1bXTtcclxuXHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcclxuICBoZWFkZXJIZWlnaHQgPSAwO1xyXG5cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxyXG4gIGZvb3RlckhlaWdodCA9IDA7XHJcblxyXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcclxuICBwcml2YXRlIHJvbGVBdHRyID0gJ21lbnViYXInO1xyXG59XHJcbiIsIjx1bCBjbGFzcz1cIm1lbnUtYmFyLWl0ZW0tY29udGFpbmVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gIDxsaVxyXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcGFyc2VkSXRlbXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgY2xhc3M9XCJtZW51LWJhci1pdGVtXCJcclxuICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxyXG4gICAgcmR0QW55Um91dGVBY3RpdmU9XCJtZW51LWJhci1pdGVtLXJvdXRlLWFjdGl2ZVwiXHJcbiAgICBbd2F0Y2hlZFJvdXRlc109XCJnZXRDaGlsZFJvdXRlcyhpdGVtKVwiXHJcbiAgICAocmR0S2V5TGlzdGVuZXIpPVwib25LZXlEb3duKGksICRldmVudClcIlxyXG4gICAgI2FuY2hvckVsXHJcbiAgPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLnJvdXRlckxpbmsgJiYgIWl0ZW0uZXh0ZXJuYWxMaW5rXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1jb250ZW50XCJcclxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiXHJcbiAgICAgICAgKHBvaW50ZXJlbnRlcik9XCJvbkl0ZW1Qb2ludGVyRW50ZXIoaXRlbSlcIlxyXG4gICAgICAgIChwb2ludGVybGVhdmUpPVwib25JdGVtUG9pbnRlckxlYXZlKGl0ZW0pXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIml0ZW0uaXRlbXMgPyAnbWVudScgOiBudWxsXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0gPT09IGV4cGFuZGVkXCJcclxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1iYXItaXRlbS1yaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc2hvcnRjdXRcIiBjbGFzcz1cIm1lbnUtaXRlbS1zaG9ydGN1dFwiPlxyXG4gICAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0LmxhYmVsIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8IS0tIFRPRE9cclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaXRlbXNcIlxyXG4gICAgICAgICAgICBuYW1lPVwiZXhwYW5kX21vcmVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1lbnUtYmFyLWl0ZW0taWNvblwiXHJcbiAgICAgICAgICAgIGludmVydGVkXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPHJkdC1pY29uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWljb25cIlxyXG4gICAgICAgICAgICBpbnZlcnRlZFxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAtLT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1iYXItaXRlbS1pY29uXCIgKm5nSWY9XCJpdGVtLml0ZW1zXCI+djwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2xpbmtCb2R5IGxldC1pdGVtPlxyXG4gICAgICB7eyBpdGVtLmxhYmVsIH19XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVudS1iYXItaXRlbS1yaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnNob3J0Y3V0XCIgY2xhc3M9XCJtZW51LWl0ZW0tc2hvcnRjdXRcIj5cclxuICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPCEtLVxyXG4gICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgW25hbWVdPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1pY29uXCJcclxuICAgICAgICAgIGludmVydGVkXHJcbiAgICAgICAgLz5cclxuICAgICAgLS0+PC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnJvdXRlckxpbmtcIj5cclxuICAgICAgPGFcclxuICAgICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1jb250ZW50XCJcclxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiXHJcbiAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcclxuICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0IVwiXHJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmV4dGVybmFsTGlua1wiPlxyXG4gICAgICA8YVxyXG4gICAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgICBbaHJlZl09XCJpdGVtLmV4dGVybmFsTGlua1wiXHJcbiAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXHJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxyZHQtbWVudS1vdmVybGF5XHJcbiAgICAgICpuZ0lmPVwiaXRlbS5pdGVtc1wiXHJcbiAgICAgIFtpdGVtXT1cIiRhbnkoaXRlbSlcIlxyXG4gICAgICBbZXhwYW5kZWRdPVwiaXRlbSA9PT0gZXhwYW5kZWRcIlxyXG4gICAgICBbYXV0b2ZvY3VzSXRlbV09XCJhdXRvZm9jdXNTdWJtZW51SXRlbVwiXHJcbiAgICAgIFtwcmVmZXJyZWRIb3Jpem9udGFsRGlyXT1cInByZWZlcnJlZEhvcml6b250YWxEaXJcIlxyXG4gICAgICBbcHJlZmVycmVkVmVydGljYWxEaXJdPVwicHJlZmVycmVkVmVydGljYWxEaXJcIlxyXG4gICAgICBbbGV2ZWxdPVwiMFwiXHJcbiAgICAgIFthbmNob3JFbGVtZW50XT1cImFuY2hvckVsXCJcclxuICAgIC8+XHJcbiAgPC9saT5cclxuPC91bD5cclxuIl19
|
|
@@ -2,13 +2,13 @@ import { DOCUMENT } from '@angular/common';
|
|
|
2
2
|
import { booleanAttribute, ChangeDetectorRef, DestroyRef, Directive, ElementRef, EnvironmentInjector, HostBinding, HostListener, inject, Input, QueryList, Renderer2, ViewChildren, } from '@angular/core';
|
|
3
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { Router } from '@angular/router';
|
|
5
|
-
import { animationFrameScheduler, fromEvent, Subscription, throttleTime, } from 'rxjs';
|
|
6
|
-
import { DEFAULT_MENU_HORIZONTAL_DIR, DEFAULT_MENU_VERTICAL_DIR, RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME, RDT_MENU_MARGIN_LEFT_PROPERTY_NAME, RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME, RDT_MENU_MARGIN_TOP_PROPERTY_NAME, RdtMenuShortcutMode, } from '../models';
|
|
7
|
-
import { findNextItemWithPrefix, FOCUS_VISIBLE, getChildRoutesMap, getMenuItemsShortcuts, menuItemHasChildren, menuItemHasRoute, } from '../utils';
|
|
8
5
|
import { RdtRouterService } from '@ngrdt/router';
|
|
9
6
|
import { RdtShortcutService } from '@ngrdt/shortcuts';
|
|
10
|
-
import { RdtMenuOverlayComponent } from '../menu-overlay/rdt-menu-overlay.component';
|
|
11
7
|
import { KB_CODE, RdtStringUtils, } from '@ngrdt/utils';
|
|
8
|
+
import { animationFrameScheduler, fromEvent, Subscription, throttleTime, } from 'rxjs';
|
|
9
|
+
import { RdtMenuOverlayComponent } from '../menu-overlay/rdt-menu-overlay.component';
|
|
10
|
+
import { DEFAULT_MENU_HORIZONTAL_DIR, DEFAULT_MENU_VERTICAL_DIR, RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME, RDT_MENU_MARGIN_LEFT_PROPERTY_NAME, RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME, RDT_MENU_MARGIN_TOP_PROPERTY_NAME, RdtMenuShortcutMode, } from '../models';
|
|
11
|
+
import { findNextItemWithPrefix, FOCUS_VISIBLE, getChildRoutesMap, getMenuItemsShortcuts, menuItemHasChildren, menuItemHasRoute, } from '../utils';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
13
|
export class RdtMenuBaseComponent {
|
|
14
14
|
preferredVerticalDir = DEFAULT_MENU_VERTICAL_DIR;
|
|
@@ -19,6 +19,7 @@ export class RdtMenuBaseComponent {
|
|
|
19
19
|
// If item has command or routerLink, it will always be activated and everything closed
|
|
20
20
|
shortcutMode = RdtMenuShortcutMode.OPEN_SUBMENU;
|
|
21
21
|
closeOnFocusOut = true;
|
|
22
|
+
openOnHover = false;
|
|
22
23
|
cd = inject(ChangeDetectorRef);
|
|
23
24
|
destroyRef = inject(DestroyRef);
|
|
24
25
|
rdtRouter = inject(RdtRouterService);
|
|
@@ -61,7 +62,6 @@ export class RdtMenuBaseComponent {
|
|
|
61
62
|
return this.childRoutesMap.get(item) ?? [];
|
|
62
63
|
}
|
|
63
64
|
ngOnInit() {
|
|
64
|
-
this.childRoutesMap = getChildRoutesMap(this.parsedItems);
|
|
65
65
|
this.rdtRouter.navigationEnd$
|
|
66
66
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
67
67
|
.subscribe((ev) => this.filterItems());
|
|
@@ -71,10 +71,6 @@ export class RdtMenuBaseComponent {
|
|
|
71
71
|
if (this.children) {
|
|
72
72
|
this.recalculateChildren();
|
|
73
73
|
}
|
|
74
|
-
if ('items' in changes) {
|
|
75
|
-
this.childRoutesMap = getChildRoutesMap(this.parsedItems);
|
|
76
|
-
this.listenShortcuts();
|
|
77
|
-
}
|
|
78
74
|
}
|
|
79
75
|
ngAfterViewInit() {
|
|
80
76
|
this.listenWindowResize();
|
|
@@ -108,6 +104,19 @@ export class RdtMenuBaseComponent {
|
|
|
108
104
|
item.command();
|
|
109
105
|
}
|
|
110
106
|
}
|
|
107
|
+
onItemPointerEnter(item) {
|
|
108
|
+
if (this.openOnHover &&
|
|
109
|
+
this.expanded !== item &&
|
|
110
|
+
menuItemHasChildren(item)) {
|
|
111
|
+
this.autofocusSubmenuItem = null;
|
|
112
|
+
this.expanded = item;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
onItemPointerLeave(item) {
|
|
116
|
+
if (this.openOnHover && this.expanded === item) {
|
|
117
|
+
this.expanded = null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
111
120
|
onKeyDown(itemIndex, event) {
|
|
112
121
|
const hasAction = event.code in this.keyActions;
|
|
113
122
|
const isLetter = RdtStringUtils.isAlphabetCharacter(event.key) ||
|
|
@@ -143,6 +152,8 @@ export class RdtMenuBaseComponent {
|
|
|
143
152
|
else {
|
|
144
153
|
this.parsedItems = this.filterRec(this.allParsedItems, current);
|
|
145
154
|
}
|
|
155
|
+
this.childRoutesMap = getChildRoutesMap(this.parsedItems);
|
|
156
|
+
this.listenShortcuts();
|
|
146
157
|
this.cd.markForCheck();
|
|
147
158
|
}
|
|
148
159
|
filterRec(items, current) {
|
|
@@ -337,7 +348,7 @@ export class RdtMenuBaseComponent {
|
|
|
337
348
|
}
|
|
338
349
|
}
|
|
339
350
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
340
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.7", type: RdtMenuBaseComponent, inputs: { preferredVerticalDir: "preferredVerticalDir", preferredHorizontalDir: "preferredHorizontalDir", shortcutMode: "shortcutMode", closeOnFocusOut: ["closeOnFocusOut", "closeOnFocusOut", booleanAttribute] }, host: { listeners: { "window:focusout": "checkActiveElement($event)", "document:click": "onDocumentClick($event)" }, properties: { "class": "this.classes" } }, viewQueries: [{ propertyName: "children", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: "focusableElements", predicate: ["focusableItem"], descendants: true }], usesOnChanges: true, ngImport: i0 });
|
|
351
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.7", type: RdtMenuBaseComponent, inputs: { preferredVerticalDir: "preferredVerticalDir", preferredHorizontalDir: "preferredHorizontalDir", shortcutMode: "shortcutMode", closeOnFocusOut: ["closeOnFocusOut", "closeOnFocusOut", booleanAttribute], openOnHover: ["openOnHover", "openOnHover", booleanAttribute] }, host: { listeners: { "window:focusout": "checkActiveElement($event)", "document:click": "onDocumentClick($event)" }, properties: { "class": "this.classes" } }, viewQueries: [{ propertyName: "children", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: "focusableElements", predicate: ["focusableItem"], descendants: true }], usesOnChanges: true, ngImport: i0 });
|
|
341
352
|
}
|
|
342
353
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuBaseComponent, decorators: [{
|
|
343
354
|
type: Directive
|
|
@@ -350,6 +361,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
350
361
|
}], closeOnFocusOut: [{
|
|
351
362
|
type: Input,
|
|
352
363
|
args: [{ transform: booleanAttribute }]
|
|
364
|
+
}], openOnHover: [{
|
|
365
|
+
type: Input,
|
|
366
|
+
args: [{ transform: booleanAttribute }]
|
|
353
367
|
}], children: [{
|
|
354
368
|
type: ViewChildren,
|
|
355
369
|
args: [RdtMenuOverlayComponent]
|
|
@@ -366,4 +380,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
366
380
|
type: HostListener,
|
|
367
381
|
args: ['document:click', ['$event']]
|
|
368
382
|
}] } });
|
|
369
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxTQUFTLEVBQ1QsU0FBUyxFQUVULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksR0FDYixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLG9DQUFvQyxFQUNwQyxrQ0FBa0MsRUFDbEMsbUNBQW1DLEVBQ25DLGlDQUFpQyxFQUNqQyxtQkFBbUIsR0FDcEIsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBR2pCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBWSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQWUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVyRixPQUFPLEVBQ0wsT0FBTyxFQUVQLGNBQWMsR0FFZixNQUFNLGNBQWMsQ0FBQzs7QUFHdEIsTUFBTSxPQUFnQixvQkFBb0I7SUFJeEMsb0JBQW9CLEdBQXlCLHlCQUF5QixDQUFDO0lBR3ZFLHNCQUFzQixHQUEyQiwyQkFBMkIsQ0FBQztJQUU3RSxzRkFBc0Y7SUFDdEYsa0RBQWtEO0lBQ2xELDJFQUEyRTtJQUMzRSx1RkFBdUY7SUFFdkYsWUFBWSxHQUNWLG1CQUFtQixDQUFDLFlBQVksQ0FBQztJQUduQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBRWQsRUFBRSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9CLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JDLEtBQUssR0FBNEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLGVBQWUsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM3QyxRQUFRLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFHaEQsUUFBUSxDQUFzQztJQUc5QyxpQkFBaUIsQ0FBc0M7SUFHakUsT0FBTyxHQUFHLGVBQWUsQ0FBQztJQUVoQixRQUFRLEdBQTZCLElBQUksQ0FBQztJQUMxQyxvQkFBb0IsR0FBNEIsSUFBSSxDQUFDO0lBQ3JELFdBQVcsQ0FBdUI7SUFFNUMsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDTyxXQUFXLENBQVE7SUFFM0IsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDTyxXQUFXLENBS2pCO0lBRVEsY0FBYyxDQUF1QjtJQUNyQyxjQUFjLEdBQXVDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDL0QsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakMsV0FBVyxHQUF3QyxFQUFFLENBQUM7SUFFdkQsVUFBVSxHQUFHO1FBQ3BCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDbEUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUNuRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztRQUN6RSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztRQUN0RSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztRQUN0RSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztLQUMxRSxDQUFDO0lBRUYsMERBQTBEO0lBQzFELGNBQWMsQ0FBQyxJQUF1QjtRQUNwQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYzthQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3pDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixtRUFBbUU7UUFDbkUsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QixLQUFLLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsRUFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUMxQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLGFBQWEsR0FBRyxLQUFLO1FBQ2pDLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRVMsV0FBVyxDQUFDLElBQXVCO1FBQzNDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVTLFNBQVMsQ0FBQyxTQUFpQixFQUFFLEtBQW9CO1FBQ3pELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FDWixjQUFjLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUM3QyxjQUFjLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRS9DLElBQUksU0FBUyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUNqQyxJQUFJLENBQUMsV0FBVyxFQUNoQixTQUFTLEVBQ1QsS0FBSyxDQUFDLEdBQUcsQ0FDVixDQUFDO1lBQ0YsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRVMsZUFBZSxDQUFDLElBQXVCO1FBQy9DLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDO0lBQ3RDLENBQUM7SUFFUyxXQUFXO1FBQ25CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRVMsU0FBUyxDQUNqQixLQUEwQixFQUMxQixPQUF5RDtRQUV6RCxJQUFJLGFBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2xDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFFckMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDckMsT0FBTyxhQUFhLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDNUQsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFPLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDbkIsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLGNBQWMsR0FBb0IsUUFBUSxDQUFDO1lBQy9DLEdBQUcsQ0FBQztnQkFDRixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDO2dCQUN6QyxJQUFJLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDMUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQzlDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDbEUsT0FBTyxLQUFLLENBQUM7d0JBQ2YsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsY0FBYyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDekMsQ0FBQyxRQUFRLGNBQWMsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTztvQkFDTCxHQUFHLElBQUk7b0JBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7aUJBQzNDLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsc0JBQXNCLENBQUMsU0FBaUI7UUFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVTLFdBQVcsQ0FBQyxTQUFpQixFQUFFLFlBQThCO1FBQ3JFLElBQ0UsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUNuQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ2hELENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFZLENBQUM7WUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFUyxTQUFTLENBQUMsSUFBZ0M7UUFDbEQsSUFBSSxTQUFpQixDQUFDO1FBRXRCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVTLGFBQWEsQ0FBQyxTQUFpQjtRQUN2QyxNQUFNLElBQUksR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxhQUFhLENBQUMsU0FBaUI7UUFDdkMsTUFBTSxJQUFJLEdBQ1IsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDdEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRVMsZ0JBQWdCO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUMzRCxDQUFDO0lBQ0osQ0FBQztJQUVTLGNBQWMsQ0FBQyxTQUFpQjtRQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNELEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxzREFBc0Q7SUFFNUMsa0JBQWtCLENBQUMsS0FBaUI7UUFDNUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7WUFDeEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztZQUNuQyxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdTLGVBQWUsQ0FBQyxLQUFtQjtRQUMzQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVTLE9BQU87UUFDZixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVTLFVBQVU7UUFDbEIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRSxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQzNDLGlDQUFpQyxDQUNsQyxDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUM5QyxvQ0FBb0MsQ0FDckMsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FDNUMsa0NBQWtDLENBQ25DLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQzdDLG1DQUFtQyxDQUNwQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNqQixHQUFHLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDMUIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2hDLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUM1QixLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFUyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVztZQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWTtTQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVTLGtCQUFrQjtRQUMxQixTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQzthQUN4QixJQUFJLENBQ0gsWUFBWSxDQUFDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUM1RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3BDO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVTLGVBQWU7UUFDdkIsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkUsTUFBTSxTQUFTLEdBQWtCLGtCQUFrQixDQUFDLEdBQUcsQ0FDckQsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQ3BCLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWU7YUFDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUNqQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3pDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRVMsY0FBYyxDQUN0QixrQkFBbUQ7UUFFbkQsTUFBTSxXQUFXLEdBQXdDLEVBQUUsQ0FBQztRQUM1RCxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVTLFVBQVUsQ0FBQyxRQUFxQjtRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsSUFBSSxDQUNWLGlCQUFpQixRQUFRLENBQUMsWUFBWSx5REFBeUQsRUFDL0YsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDO1FBQ3RELElBQUksUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsT0FBUSxFQUFFLENBQUM7WUFDbEIsQ0FBQztZQUNELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVcsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVTLHVCQUF1QixDQUFDLElBQXlCO1FBQ3pELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRyxDQUFDO1FBRW5DLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztZQUN2RSxPQUFRLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO3VHQXJhbUIsb0JBQW9COzJGQUFwQixvQkFBb0Isa01BaUJwQixnQkFBZ0IsME5BYXRCLHVCQUF1Qjs7MkZBOUJqQixvQkFBb0I7a0JBRHpDLFNBQVM7OEJBS1Isb0JBQW9CO3NCQURuQixLQUFLO2dCQUlOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFRTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sZUFBZTtzQkFEZCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWM1QixRQUFRO3NCQURqQixZQUFZO3VCQUFDLHVCQUF1QjtnQkFJM0IsaUJBQWlCO3NCQUQxQixZQUFZO3VCQUFDLGVBQWU7Z0JBSTdCLE9BQU87c0JBRE4sV0FBVzt1QkFBQyxPQUFPO2dCQTRQVixrQkFBa0I7c0JBRDNCLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBWWpDLGVBQWU7c0JBRHhCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBib29sZWFuQXR0cmlidXRlLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgaW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZHJlbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1xyXG4gIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLFxyXG4gIGZyb21FdmVudCxcclxuICBTdWJzY3JpcHRpb24sXHJcbiAgdGhyb3R0bGVUaW1lLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfTUVOVV9IT1JJWk9OVEFMX0RJUixcclxuICBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9CT1RUT01fUFJPUEVSVFlfTkFNRSxcclxuICBSRFRfTUVOVV9NQVJHSU5fTEVGVF9QUk9QRVJUWV9OQU1FLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9SSUdIVF9QUk9QRVJUWV9OQU1FLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9UT1BfUFJPUEVSVFlfTkFNRSxcclxuICBSZHRNZW51U2hvcnRjdXRNb2RlLFxyXG59IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgZmluZE5leHRJdGVtV2l0aFByZWZpeCxcclxuICBGT0NVU19WSVNJQkxFLFxyXG4gIGdldENoaWxkUm91dGVzTWFwLFxyXG4gIGdldE1lbnVJdGVtc1Nob3J0Y3V0cyxcclxuICBtZW51SXRlbUhhc0NoaWxkcmVuLFxyXG4gIG1lbnVJdGVtSGFzUm91dGUsXHJcbiAgUGFyc2VkUmR0TWVudUl0ZW1XaXRoU2hvcnRjdXQsXHJcbiAgU2l6ZSxcclxufSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IFJkdFJvdXRlLCBSZHRSb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnQG5ncmR0L3JvdXRlcic7XHJcbmltcG9ydCB7IFJkdFNob3J0Y3V0LCBSZHRTaG9ydGN1dFNlcnZpY2UgfSBmcm9tICdAbmdyZHQvc2hvcnRjdXRzJztcclxuaW1wb3J0IHsgUmR0TWVudU92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuLi9tZW51LW92ZXJsYXkvcmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYXJzZWRSZHRNZW51SXRlbSB9IGZyb20gJy4uL3ByaXZhdGUtbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBLQl9DT0RFLFxyXG4gIFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgUmR0U3RyaW5nVXRpbHMsXHJcbiAgUmR0VmVydGljYWxEaXJlY3Rpb24sXHJcbn0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmR0TWVudUJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0XHJcbntcclxuICBASW5wdXQoKVxyXG4gIHByZWZlcnJlZFZlcnRpY2FsRGlyOiBSZHRWZXJ0aWNhbERpcmVjdGlvbiA9IERFRkFVTFRfTUVOVV9WRVJUSUNBTF9ESVI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHJlZmVycmVkSG9yaXpvbnRhbERpcjogUmR0SG9yaXpvbnRhbERpcmVjdGlvbiA9IERFRkFVTFRfTUVOVV9IT1JJWk9OVEFMX0RJUjtcclxuXHJcbiAgLy8gTW9kZSBvbmx5IG1hdHRlcnMgaWYgaXRlbSBoYXMgc2hvcnRjdXQgYW5kIG9ubHkgY2hpbGRyZW4sIG5vIGNvbW1hbmQgbm9yIHJvdXRlckxpbmtcclxuICAvLyBGT0NVU19JVEVNIHdpbGwgcHV0IGZvY3VzIG9uIGl0ZW0gd2l0aCBzaG9ydGN1dFxyXG4gIC8vIE9QRU5fU1VCTUVOVSB3aWxsIG9wZW4gaXRzIHN1Ym1lbnUgYW5kIHB1dCBmb2N1cyBvbiB0aGUgZmlyc3QgaXRlbSBpbiBpdFxyXG4gIC8vIElmIGl0ZW0gaGFzIGNvbW1hbmQgb3Igcm91dGVyTGluaywgaXQgd2lsbCBhbHdheXMgYmUgYWN0aXZhdGVkIGFuZCBldmVyeXRoaW5nIGNsb3NlZFxyXG4gIEBJbnB1dCgpXHJcbiAgc2hvcnRjdXRNb2RlOiAnZm9jdXMtaXRlbScgfCAnb3Blbi1zdWJtZW51JyA9XHJcbiAgICBSZHRNZW51U2hvcnRjdXRNb2RlLk9QRU5fU1VCTUVOVTtcclxuXHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXHJcbiAgY2xvc2VPbkZvY3VzT3V0ID0gdHJ1ZTtcclxuXHJcbiAgcmVhZG9ubHkgY2QgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJkdFJvdXRlciA9IGluamVjdChSZHRSb3V0ZXJTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZWxSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBzaG9ydGN1dFNlcnZpY2UgPSBpbmplY3QoUmR0U2hvcnRjdXRTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oUmR0TWVudU92ZXJsYXlDb21wb25lbnQpXHJcbiAgcHJvdGVjdGVkIGNoaWxkcmVuITogUXVlcnlMaXN0PFJkdE1lbnVPdmVybGF5Q29tcG9uZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZm9jdXNhYmxlSXRlbScpXHJcbiAgcHJvdGVjdGVkIGZvY3VzYWJsZUVsZW1lbnRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgY2xhc3NlcyA9ICdyZHQtbWVudS1iYXNlJztcclxuXHJcbiAgcHJvdGVjdGVkIGV4cGFuZGVkOiBQYXJzZWRSZHRNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBhdXRvZm9jdXNTdWJtZW51SXRlbTogJ2ZpcnN0JyB8ICdsYXN0JyB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBwYXJzZWRJdGVtcyE6IFBhcnNlZFJkdE1lbnVJdGVtW107XHJcblxyXG4gIGdldCBjbGllbnRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudFNpemU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NsaWVudFNpemUhOiBTaXplO1xyXG5cclxuICBnZXQgYm9keU1hcmdpbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9ib2R5TWFyZ2luO1xyXG4gIH1cclxuICBwcml2YXRlIF9ib2R5TWFyZ2luIToge1xyXG4gICAgdG9wOiBudW1iZXI7XHJcbiAgICBib3R0b206IG51bWJlcjtcclxuICAgIGxlZnQ6IG51bWJlcjtcclxuICAgIHJpZ2h0OiBudW1iZXI7XHJcbiAgfTtcclxuXHJcbiAgcHJvdGVjdGVkIGFsbFBhcnNlZEl0ZW1zITogUGFyc2VkUmR0TWVudUl0ZW1bXTtcclxuICBwcm90ZWN0ZWQgY2hpbGRSb3V0ZXNNYXA6IE1hcDxQYXJzZWRSZHRNZW51SXRlbSwgc3RyaW5nW11bXT4gPSBuZXcgTWFwKCk7XHJcbiAgcHJvdGVjdGVkIHNob3J0Y3V0U3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIHByb3RlY3RlZCBzaG9ydGN1dE1hcDogUmVjb3JkPHN0cmluZywgUGFyc2VkUmR0TWVudUl0ZW1bXT4gPSB7fTtcclxuXHJcbiAgcmVhZG9ubHkga2V5QWN0aW9ucyA9IHtcclxuICAgIFtLQl9DT0RFLkFSUk9XLkxFRlRdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c1ByZXZJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLlJJR0hUXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNOZXh0SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5ET1dOXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMub3BlblN1Ym1lbnUoaW5kZXgsICdmaXJzdCcpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuVVBdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5vcGVuU3VibWVudShpbmRleCwgJ2xhc3QnKSxcclxuICAgIFtLQl9DT0RFLkhPTUVdOiAoKSA9PiB0aGlzLmZvY3VzSXRlbSgwKSxcclxuICAgIFtLQl9DT0RFLkVORF06ICgpID0+IHRoaXMuZm9jdXNJdGVtKHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoIC0gMSksXHJcbiAgICBbS0JfQ09ERS5FTlRFUl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmludm9rZUl0ZW1DbGlja0J5SW5kZXgoaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuU1BBQ0VCQVJdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5pbnZva2VJdGVtQ2xpY2tCeUluZGV4KGluZGV4KSxcclxuICB9O1xyXG5cclxuICAvLyBSZXR1cm5zIGFsbCByb3V0ZXMgYXNvY2lhdGVkIHdpdGggaXRlbSBvciBpdHMgc3ViaXRlbXMuXHJcbiAgZ2V0Q2hpbGRSb3V0ZXMoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkUm91dGVzTWFwLmdldChpdGVtKSA/PyBbXTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jaGlsZFJvdXRlc01hcCA9IGdldENoaWxkUm91dGVzTWFwKHRoaXMucGFyc2VkSXRlbXMpO1xyXG4gICAgdGhpcy5yZHRSb3V0ZXIubmF2aWdhdGlvbkVuZCRcclxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV2KSA9PiB0aGlzLmZpbHRlckl0ZW1zKCkpO1xyXG4gICAgdGhpcy5tZWFzdXJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAodGhpcy5jaGlsZHJlbikge1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQ2hpbGRyZW4oKTtcclxuICAgIH1cclxuICAgIGlmICgnaXRlbXMnIGluIGNoYW5nZXMpIHtcclxuICAgICAgdGhpcy5jaGlsZFJvdXRlc01hcCA9IGdldENoaWxkUm91dGVzTWFwKHRoaXMucGFyc2VkSXRlbXMpO1xyXG4gICAgICB0aGlzLmxpc3RlblNob3J0Y3V0cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5saXN0ZW5XaW5kb3dSZXNpemUoKTtcclxuXHJcbiAgICAvLyBOb3QgdXNpbmcgdGltZW91dCByZXN1bHRzIGluIGhvcml6b250YWwgb3ZlcmZsb3cgb24gaHRtbCBlbGVtZW50XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5tZWFzdXJlKCk7XHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVDaGlsZHJlbigpO1xyXG4gICAgfSwgNTApO1xyXG4gIH1cclxuXHJcbiAgcmVjYWxjdWxhdGVDaGlsZHJlbigpIHtcclxuICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgY2hpbGQucmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgICAgICB0aGlzLnByZWZlcnJlZEhvcml6b250YWxEaXIsXHJcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRWZXJ0aWNhbERpclxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQgPSBmYWxzZSkge1xyXG4gICAgaWYgKGZvY3VzRXhwYW5kZWQgJiYgdGhpcy5leHBhbmRlZCkge1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzLmV4cGFuZGVkKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWQgPSBudWxsO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbkl0ZW1DbGljayhpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgaWYgKG1lbnVJdGVtSGFzQ2hpbGRyZW4oaXRlbSkgJiYgdGhpcy5leHBhbmRlZCAhPT0gaXRlbSkge1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gbnVsbDtcclxuICAgICAgdGhpcy5leHBhbmRlZCA9IGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgaXRlbS5jb21tYW5kID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGl0ZW0uY29tbWFuZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uS2V5RG93bihpdGVtSW5kZXg6IG51bWJlciwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGNvbnN0IGhhc0FjdGlvbiA9IGV2ZW50LmNvZGUgaW4gdGhpcy5rZXlBY3Rpb25zO1xyXG4gICAgY29uc3QgaXNMZXR0ZXIgPVxyXG4gICAgICBSZHRTdHJpbmdVdGlscy5pc0FscGhhYmV0Q2hhcmFjdGVyKGV2ZW50LmtleSkgfHxcclxuICAgICAgUmR0U3RyaW5nVXRpbHMuaXNOdW1lcmljQ2hhcmFjdGVyKGV2ZW50LmtleSk7XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbiB8fCBpc0xldHRlcikge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbikge1xyXG4gICAgICB0aGlzLmtleUFjdGlvbnNbZXZlbnQuY29kZV0oaXRlbUluZGV4KTtcclxuICAgIH0gZWxzZSBpZiAoaXNMZXR0ZXIpIHtcclxuICAgICAgY29uc3QgbmV4dCA9IGZpbmROZXh0SXRlbVdpdGhQcmVmaXgoXHJcbiAgICAgICAgdGhpcy5wYXJzZWRJdGVtcyxcclxuICAgICAgICBpdGVtSW5kZXgsXHJcbiAgICAgICAgZXZlbnQua2V5XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbnZva2VJdGVtQ2xpY2soaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGlmIChtZW51SXRlbUhhc1JvdXRlKGl0ZW0pICYmIGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShpdGVtLnJvdXRlckxpbmspO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkl0ZW1DbGljayhpdGVtKTtcclxuICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSAnZmlyc3QnO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZpbHRlckl0ZW1zKCkge1xyXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMucmR0Um91dGVyLnBhcnNlQWJzb2x1dGVVcmwoKTtcclxuICAgIGlmICghY3VycmVudCkge1xyXG4gICAgICB0aGlzLnBhcnNlZEl0ZW1zID0gdGhpcy5hbGxQYXJzZWRJdGVtcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyc2VkSXRlbXMgPSB0aGlzLmZpbHRlclJlYyh0aGlzLmFsbFBhcnNlZEl0ZW1zLCBjdXJyZW50KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZmlsdGVyUmVjKFxyXG4gICAgaXRlbXM6IFBhcnNlZFJkdE1lbnVJdGVtW10sXHJcbiAgICBjdXJyZW50OiB7IHJvdXRlOiBSZHRSb3V0ZTsgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH1cclxuICApOiBQYXJzZWRSZHRNZW51SXRlbVtdIHtcclxuICAgIGxldCBjdXJyZW50UGFyZW50ID0gY3VycmVudC5yb3V0ZTtcclxuICAgIGNvbnN0IGN1cnJlbnRQYXJhbXMgPSBjdXJyZW50LnBhcmFtcztcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJlZCA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoIWl0ZW0ucmVxdWlyZWRQYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZXF1aXJlZCA9IGl0ZW0ucmVxdWlyZWRQYXJlbnQ7XHJcbiAgICAgIHdoaWxlIChjdXJyZW50UGFyZW50LmFic29sdXRlUGF0aCAhPT0gcmVxdWlyZWQuYWJzb2x1dGVQYXRoKSB7XHJcbiAgICAgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRQYXJlbnQucGFyZW50ITtcclxuICAgICAgICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHJlcXVpcmVkUGFyZW50OiBSZHRSb3V0ZSB8IG51bGwgPSByZXF1aXJlZDtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSByZXF1aXJlZFBhcmVudC5hYnNvbHV0ZVBhdGg7XHJcbiAgICAgICAgaWYgKHBhdGggaW4gY3VycmVudFBhcmFtcykge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVxdWlyZWRQYXJlbnQuc3RhdGljUGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFyYW1zW3BhdGhdW2tleV0gIT09IHJlcXVpcmVkUGFyZW50LnN0YXRpY1BhcmFtc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcXVpcmVkUGFyZW50ID0gcmVxdWlyZWRQYXJlbnQucGFyZW50O1xyXG4gICAgICB9IHdoaWxlIChyZXF1aXJlZFBhcmVudCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZpbHRlcmVkLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS5pdGVtcykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgaXRlbXM6IHRoaXMuZmlsdGVyUmVjKGl0ZW0uaXRlbXMsIGN1cnJlbnQpLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGludm9rZUl0ZW1DbGlja0J5SW5kZXgoaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2l0ZW1JbmRleF07XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnZva2VJdGVtQ2xpY2soaXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb3BlblN1Ym1lbnUoaXRlbUluZGV4OiBudW1iZXIsIHZpc2libGVGb2N1czogJ2ZpcnN0JyB8ICdsYXN0Jykge1xyXG4gICAgaWYgKFxyXG4gICAgICBpdGVtSW5kZXggPCB0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aCAmJlxyXG4gICAgICBtZW51SXRlbUhhc0NoaWxkcmVuKHRoaXMucGFyc2VkSXRlbXNbaXRlbUluZGV4XSlcclxuICAgICkge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpdGVtSW5kZXhdO1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gdmlzaWJsZUZvY3VzO1xyXG4gICAgICB0aGlzLmV4cGFuZGVkID0gaXRlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmb2N1c0l0ZW0oaXRlbTogbnVtYmVyIHwgUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGxldCBpdGVtSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgIGl0ZW1JbmRleCA9IGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtSW5kZXggPSB0aGlzLnBhcnNlZEl0ZW1zLmluZGV4T2YoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW1JbmRleCA+PSAwICYmIGl0ZW1JbmRleCA8IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYmx1ckFsbEZvY3VzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZvY3VzRm9jdXNhYmxlKGl0ZW1JbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZm9jdXNOZXh0SXRlbShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgbmV4dCA9IChpdGVtSW5kZXggKyAxKSAlIHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoO1xyXG4gICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZm9jdXNQcmV2SXRlbShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgcHJldiA9XHJcbiAgICAgIChpdGVtSW5kZXggLSAxICsgdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGgpICUgdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGg7XHJcbiAgICB0aGlzLmZvY3VzSXRlbShwcmV2KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBibHVyQWxsRm9jdXNhYmxlKCkge1xyXG4gICAgdGhpcy5mb2N1c2FibGVFbGVtZW50cy5mb3JFYWNoKChlbCkgPT5cclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbC5uYXRpdmVFbGVtZW50LCBGT0NVU19WSVNJQkxFKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgZWxSZWYgPSB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmdldChpdGVtSW5kZXgpO1xyXG4gICAgaWYgKGVsUmVmKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxSZWYubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSk7XHJcbiAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENsb3NlcyBtZW51IGlmIHVzZXIgbmF2aWdhdGVzIG91dHNpZGUgaXQgdXNpbmcgVGFiLlxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1c291dCcsIFsnJGV2ZW50J10pXHJcbiAgcHJvdGVjdGVkIGNoZWNrQWN0aXZlRWxlbWVudChldmVudDogRm9jdXNFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuY2xvc2VPbkZvY3VzT3V0KSB7XHJcbiAgICAgIGNvbnN0IHRoaXNFbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcclxuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHx8ICF0aGlzRWwuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWQgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgcHJvdGVjdGVkIG9uRG9jdW1lbnRDbGljayhldmVudDogUG9pbnRlckV2ZW50KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBlbFJlZiA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICghZWxSZWYuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICB0aGlzLmNsb3NlU3VibWVudXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtZWFzdXJlKCkge1xyXG4gICAgdGhpcy5tZWFzdXJlQ2xpZW50U2l6ZSgpO1xyXG4gICAgdGhpcy5yZWFkTWFyZ2luKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVhZE1hcmdpbigpIHtcclxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICBjb25zdCB0b3BWYWwgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXHJcbiAgICAgIFJEVF9NRU5VX01BUkdJTl9UT1BfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGJvdHRvbVZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcclxuICAgICAgUkRUX01FTlVfTUFSR0lOX0JPVFRPTV9QUk9QRVJUWV9OQU1FXHJcbiAgICApO1xyXG4gICAgY29uc3QgbGVmdFZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcclxuICAgICAgUkRUX01FTlVfTUFSR0lOX0xFRlRfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJpZ2h0VmFsID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxyXG4gICAgICBSRFRfTUVOVV9NQVJHSU5fUklHSFRfUFJPUEVSVFlfTkFNRVxyXG4gICAgKTtcclxuICAgIHRoaXMuX2JvZHlNYXJnaW4gPSB7XHJcbiAgICAgIHRvcDogcGFyc2VJbnQodG9wVmFsKSB8fCAwLFxyXG4gICAgICBib3R0b206IHBhcnNlSW50KGJvdHRvbVZhbCkgfHwgMCxcclxuICAgICAgbGVmdDogcGFyc2VJbnQobGVmdFZhbCkgfHwgMCxcclxuICAgICAgcmlnaHQ6IHBhcnNlSW50KHJpZ2h0VmFsKSB8fCAwLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtZWFzdXJlQ2xpZW50U2l6ZSgpIHtcclxuICAgIHRoaXMuX2NsaWVudFNpemUgPSB7XHJcbiAgICAgIHdpZHRoOiB0aGlzLmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbGlzdGVuV2luZG93UmVzaXplKCkge1xyXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRocm90dGxlVGltZSgwLCBhbmltYXRpb25GcmFtZVNjaGVkdWxlciwgeyB0cmFpbGluZzogdHJ1ZSB9KSxcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVhc3VyZSgpO1xyXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVDaGlsZHJlbigpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBsaXN0ZW5TaG9ydGN1dHMoKSB7XHJcbiAgICBjb25zdCBpdGVtc1dpdGhTaG9ydGN1dHMgPSBnZXRNZW51SXRlbXNTaG9ydGN1dHModGhpcy5wYXJzZWRJdGVtcyk7XHJcbiAgICBjb25zdCBzaG9ydGN1dHM6IFJkdFNob3J0Y3V0W10gPSBpdGVtc1dpdGhTaG9ydGN1dHMubWFwKFxyXG4gICAgICAoaXQpID0+IGl0LnNob3J0Y3V0XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc2hvcnRjdXRNYXAgPSB0aGlzLmdldFNob3J0Y3V0TWFwKGl0ZW1zV2l0aFNob3J0Y3V0cyk7XHJcbiAgICB0aGlzLnNob3J0Y3V0U3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNob3J0Y3V0U3ViID0gdGhpcy5zaG9ydGN1dFNlcnZpY2VcclxuICAgICAgLmxpc3RlbihzaG9ydGN1dHMpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKChldnQpID0+IHRoaXMub25TaG9ydGN1dChldnQuc2hvcnRjdXQpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRTaG9ydGN1dE1hcChcclxuICAgIGl0ZW1zV2l0aFNob3J0Y3V0czogUGFyc2VkUmR0TWVudUl0ZW1XaXRoU2hvcnRjdXRbXVxyXG4gICkge1xyXG4gICAgY29uc3Qgc2hvcnRjdXRNYXA6IFJlY29yZDxzdHJpbmcsIFBhcnNlZFJkdE1lbnVJdGVtW10+ID0ge307XHJcbiAgICBpdGVtc1dpdGhTaG9ydGN1dHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBzaG9ydGN1dE1hcFtpdGVtLnNob3J0Y3V0LmhvdGtleXNWYWx1ZV0gPSBpdGVtLnBhdGg7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzaG9ydGN1dE1hcDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvblNob3J0Y3V0KHNob3J0Y3V0OiBSZHRTaG9ydGN1dCkge1xyXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuc2hvcnRjdXRNYXBbc2hvcnRjdXQuaG90a2V5c1ZhbHVlXTtcclxuICAgIGlmICghcGF0aCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYE1lbnUgc2hvcnRjdXQgJHtzaG9ydGN1dC5ob3RrZXlzVmFsdWV9IHdhcyBkZXRlY3RlZCwgYnV0IHRoZXJlIGlzIG5vIHBhdGggYXNzb2NpYXRlZCB3aXRoIGl0LmAsXHJcbiAgICAgICAgdGhpcy5zaG9ydGN1dE1hcFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGFzdCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcclxuICAgIGNvbnN0IGhhc1JvdXRlID0gbWVudUl0ZW1IYXNSb3V0ZShsYXN0KTtcclxuICAgIGNvbnN0IGhhc0NvbW1hbmQgPSB0eXBlb2YgbGFzdC5jb21tYW5kID09PSAnZnVuY3Rpb24nO1xyXG4gICAgaWYgKGhhc1JvdXRlIHx8IGhhc0NvbW1hbmQpIHtcclxuICAgICAgdGhpcy5jbG9zZVN1Ym1lbnVzKGZhbHNlKTtcclxuICAgICAgaWYgKGhhc0NvbW1hbmQpIHtcclxuICAgICAgICBsYXN0LmNvbW1hbmQhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhhc1JvdXRlKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUobGFzdC5yb3V0ZXJMaW5rISk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVJdGVtUmVjdXJzaXZlbHkocGF0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWN0aXZhdGVJdGVtUmVjdXJzaXZlbHkocGF0aDogUGFyc2VkUmR0TWVudUl0ZW1bXSkge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBbLi4ucGF0aF07XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvcnRjdXRNb2RlID09PSBSZHRNZW51U2hvcnRjdXRNb2RlLk9QRU5fU1VCTUVOVSkge1xyXG4gICAgICBjb25zdCBsYXN0ID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XHJcbiAgICAgIGlmIChtZW51SXRlbUhhc0NoaWxkcmVuKGxhc3QpICYmIGxhc3QuaXRlbXNbMF0pIHtcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKGxhc3QuaXRlbXNbMF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGhpc0l0ZW0gPSBjaGlsZHJlbi5zaGlmdCgpITtcclxuXHJcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkID0gdGhpc0l0ZW07XHJcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5pdGVtID09PSB0aGlzSXRlbSk7XHJcbiAgICAgIG92ZXJsYXkhLmZvY3VzSXRlbVJlY3Vyc2l2ZWx5KGNoaWxkcmVuKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWQgPSBudWxsO1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzSXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
383
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxTQUFTLEVBQ1QsU0FBUyxFQUVULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFZLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBZSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25FLE9BQU8sRUFDTCxPQUFPLEVBRVAsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEdBQ2IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6QixvQ0FBb0MsRUFDcEMsa0NBQWtDLEVBQ2xDLG1DQUFtQyxFQUNuQyxpQ0FBaUMsRUFDakMsbUJBQW1CLEdBQ3BCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLGdCQUFnQixHQUdqQixNQUFNLFVBQVUsQ0FBQzs7QUFHbEIsTUFBTSxPQUFnQixvQkFBb0I7SUFJeEMsb0JBQW9CLEdBQXlCLHlCQUF5QixDQUFDO0lBR3ZFLHNCQUFzQixHQUEyQiwyQkFBMkIsQ0FBQztJQUU3RSxzRkFBc0Y7SUFDdEYsa0RBQWtEO0lBQ2xELDJFQUEyRTtJQUMzRSx1RkFBdUY7SUFFdkYsWUFBWSxHQUNWLG1CQUFtQixDQUFDLFlBQVksQ0FBQztJQUduQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBR3ZCLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFWCxFQUFFLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0IsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QixTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckMsS0FBSyxHQUE0QixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEQsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsZUFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUdoRCxRQUFRLENBQXNDO0lBRzlDLGlCQUFpQixDQUFzQztJQUdqRSxPQUFPLEdBQUcsZUFBZSxDQUFDO0lBRWhCLFFBQVEsR0FBNkIsSUFBSSxDQUFDO0lBQzFDLG9CQUFvQixHQUE0QixJQUFJLENBQUM7SUFDckQsV0FBVyxDQUF1QjtJQUU1QyxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUNPLFdBQVcsQ0FBUTtJQUUzQixJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUNPLFdBQVcsQ0FLakI7SUFFUSxjQUFjLENBQXVCO0lBQ3JDLGNBQWMsR0FBdUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMvRCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNqQyxXQUFXLEdBQXdDLEVBQUUsQ0FBQztJQUV2RCxVQUFVLEdBQUc7UUFDcEIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUNsRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQ25FLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO1FBQ3pFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBQ3RFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO1FBQ3RFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO0tBQzFFLENBQUM7SUFFRiwwREFBMEQ7SUFDMUQsY0FBYyxDQUFDLElBQXVCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjO2FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDekMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixtRUFBbUU7UUFDbkUsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QixLQUFLLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsRUFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUMxQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLGFBQWEsR0FBRyxLQUFLO1FBQ2pDLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRVMsV0FBVyxDQUFDLElBQXVCO1FBQzNDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVTLGtCQUFrQixDQUFDLElBQXVCO1FBQ2xELElBQ0UsSUFBSSxDQUFDLFdBQVc7WUFDaEIsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJO1lBQ3RCLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUN6QixDQUFDO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVTLGtCQUFrQixDQUFDLElBQXVCO1FBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRVMsU0FBUyxDQUFDLFNBQWlCLEVBQUUsS0FBb0I7UUFDekQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2hELE1BQU0sUUFBUSxHQUNaLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQzdDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0MsSUFBSSxTQUFTLElBQUksUUFBUSxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLElBQUksUUFBUSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQ2hCLFNBQVMsRUFDVCxLQUFLLENBQUMsR0FBRyxDQUNWLENBQUM7WUFDRixJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFUyxlQUFlLENBQUMsSUFBdUI7UUFDL0MsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVTLFdBQVc7UUFDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRVMsU0FBUyxDQUNqQixLQUEwQixFQUMxQixPQUF5RDtRQUV6RCxJQUFJLGFBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2xDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFFckMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDckMsT0FBTyxhQUFhLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDNUQsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFPLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDbkIsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLGNBQWMsR0FBb0IsUUFBUSxDQUFDO1lBQy9DLEdBQUcsQ0FBQztnQkFDRixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDO2dCQUN6QyxJQUFJLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDMUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQzlDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDbEUsT0FBTyxLQUFLLENBQUM7d0JBQ2YsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsY0FBYyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDekMsQ0FBQyxRQUFRLGNBQWMsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTztvQkFDTCxHQUFHLElBQUk7b0JBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7aUJBQzNDLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsc0JBQXNCLENBQUMsU0FBaUI7UUFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVTLFdBQVcsQ0FBQyxTQUFpQixFQUFFLFlBQThCO1FBQ3JFLElBQ0UsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUNuQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ2hELENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFZLENBQUM7WUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFUyxTQUFTLENBQUMsSUFBZ0M7UUFDbEQsSUFBSSxTQUFpQixDQUFDO1FBRXRCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVTLGFBQWEsQ0FBQyxTQUFpQjtRQUN2QyxNQUFNLElBQUksR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxhQUFhLENBQUMsU0FBaUI7UUFDdkMsTUFBTSxJQUFJLEdBQ1IsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDdEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRVMsZ0JBQWdCO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUMzRCxDQUFDO0lBQ0osQ0FBQztJQUVTLGNBQWMsQ0FBQyxTQUFpQjtRQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNELEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxzREFBc0Q7SUFFNUMsa0JBQWtCLENBQUMsS0FBaUI7UUFDNUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7WUFDeEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztZQUNuQyxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdTLGVBQWUsQ0FBQyxLQUFtQjtRQUMzQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVTLE9BQU87UUFDZixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVTLFVBQVU7UUFDbEIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRSxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQzNDLGlDQUFpQyxDQUNsQyxDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUM5QyxvQ0FBb0MsQ0FDckMsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FDNUMsa0NBQWtDLENBQ25DLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQzdDLG1DQUFtQyxDQUNwQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNqQixHQUFHLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDMUIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2hDLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUM1QixLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFUyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVztZQUNyQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWTtTQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVTLGtCQUFrQjtRQUMxQixTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQzthQUN4QixJQUFJLENBQ0gsWUFBWSxDQUFDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUM1RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3BDO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVTLGVBQWU7UUFDdkIsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkUsTUFBTSxTQUFTLEdBQWtCLGtCQUFrQixDQUFDLEdBQUcsQ0FDckQsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQ3BCLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWU7YUFDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUNqQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3pDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRVMsY0FBYyxDQUN0QixrQkFBbUQ7UUFFbkQsTUFBTSxXQUFXLEdBQXdDLEVBQUUsQ0FBQztRQUM1RCxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVTLFVBQVUsQ0FBQyxRQUFxQjtRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsSUFBSSxDQUNWLGlCQUFpQixRQUFRLENBQUMsWUFBWSx5REFBeUQsRUFDL0YsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDO1FBQ3RELElBQUksUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsT0FBUSxFQUFFLENBQUM7WUFDbEIsQ0FBQztZQUNELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVcsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVTLHVCQUF1QixDQUFDLElBQXlCO1FBQ3pELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRyxDQUFDO1FBRW5DLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztZQUN2RSxPQUFRLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO3VHQXRibUIsb0JBQW9COzJGQUFwQixvQkFBb0Isa01BaUJwQixnQkFBZ0IsK0NBR2hCLGdCQUFnQiwwTkFhdEIsdUJBQXVCOzsyRkFqQ2pCLG9CQUFvQjtrQkFEekMsU0FBUzs4QkFLUixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBSU4sc0JBQXNCO3NCQURyQixLQUFLO2dCQVFOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSXRDLFdBQVc7c0JBRFYsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFjNUIsUUFBUTtzQkFEakIsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSTNCLGlCQUFpQjtzQkFEMUIsWUFBWTt1QkFBQyxlQUFlO2dCQUk3QixPQUFPO3NCQUROLFdBQVc7dUJBQUMsT0FBTztnQkEwUVYsa0JBQWtCO3NCQUQzQixZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVlqQyxlQUFlO3NCQUR4QixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBEZXN0cm95UmVmLFxyXG4gIERpcmVjdGl2ZSxcclxuICBFbGVtZW50UmVmLFxyXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0Um91dGUsIFJkdFJvdXRlclNlcnZpY2UgfSBmcm9tICdAbmdyZHQvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U2hvcnRjdXQsIFJkdFNob3J0Y3V0U2VydmljZSB9IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQge1xyXG4gIEtCX0NPREUsXHJcbiAgUmR0SG9yaXpvbnRhbERpcmVjdGlvbixcclxuICBSZHRTdHJpbmdVdGlscyxcclxuICBSZHRWZXJ0aWNhbERpcmVjdGlvbixcclxufSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLFxyXG4gIGZyb21FdmVudCxcclxuICBTdWJzY3JpcHRpb24sXHJcbiAgdGhyb3R0bGVUaW1lLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZHRNZW51T3ZlcmxheUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgREVGQVVMVF9NRU5VX0hPUklaT05UQUxfRElSLFxyXG4gIERFRkFVTFRfTUVOVV9WRVJUSUNBTF9ESVIsXHJcbiAgUkRUX01FTlVfTUFSR0lOX0JPVFRPTV9QUk9QRVJUWV9OQU1FLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9MRUZUX1BST1BFUlRZX05BTUUsXHJcbiAgUkRUX01FTlVfTUFSR0lOX1JJR0hUX1BST1BFUlRZX05BTUUsXHJcbiAgUkRUX01FTlVfTUFSR0lOX1RPUF9QUk9QRVJUWV9OQU1FLFxyXG4gIFJkdE1lbnVTaG9ydGN1dE1vZGUsXHJcbn0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgUGFyc2VkUmR0TWVudUl0ZW0gfSBmcm9tICcuLi9wcml2YXRlLW1vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgZmluZE5leHRJdGVtV2l0aFByZWZpeCxcclxuICBGT0NVU19WSVNJQkxFLFxyXG4gIGdldENoaWxkUm91dGVzTWFwLFxyXG4gIGdldE1lbnVJdGVtc1Nob3J0Y3V0cyxcclxuICBtZW51SXRlbUhhc0NoaWxkcmVuLFxyXG4gIG1lbnVJdGVtSGFzUm91dGUsXHJcbiAgUGFyc2VkUmR0TWVudUl0ZW1XaXRoU2hvcnRjdXQsXHJcbiAgU2l6ZSxcclxufSBmcm9tICcuLi91dGlscyc7XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJkdE1lbnVCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgQElucHV0KClcclxuICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb24gPSBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHByZWZlcnJlZEhvcml6b250YWxEaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb24gPSBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVI7XHJcblxyXG4gIC8vIE1vZGUgb25seSBtYXR0ZXJzIGlmIGl0ZW0gaGFzIHNob3J0Y3V0IGFuZCBvbmx5IGNoaWxkcmVuLCBubyBjb21tYW5kIG5vciByb3V0ZXJMaW5rXHJcbiAgLy8gRk9DVVNfSVRFTSB3aWxsIHB1dCBmb2N1cyBvbiBpdGVtIHdpdGggc2hvcnRjdXRcclxuICAvLyBPUEVOX1NVQk1FTlUgd2lsbCBvcGVuIGl0cyBzdWJtZW51IGFuZCBwdXQgZm9jdXMgb24gdGhlIGZpcnN0IGl0ZW0gaW4gaXRcclxuICAvLyBJZiBpdGVtIGhhcyBjb21tYW5kIG9yIHJvdXRlckxpbmssIGl0IHdpbGwgYWx3YXlzIGJlIGFjdGl2YXRlZCBhbmQgZXZlcnl0aGluZyBjbG9zZWRcclxuICBASW5wdXQoKVxyXG4gIHNob3J0Y3V0TW9kZTogJ2ZvY3VzLWl0ZW0nIHwgJ29wZW4tc3VibWVudScgPVxyXG4gICAgUmR0TWVudVNob3J0Y3V0TW9kZS5PUEVOX1NVQk1FTlU7XHJcblxyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxyXG4gIGNsb3NlT25Gb2N1c091dCA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxyXG4gIG9wZW5PbkhvdmVyID0gZmFsc2U7XHJcblxyXG4gIHJlYWRvbmx5IGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSByZHRSb3V0ZXIgPSBpbmplY3QoUmR0Um91dGVyU2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvcnRjdXRTZXJ2aWNlID0gaW5qZWN0KFJkdFNob3J0Y3V0U2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFJkdE1lbnVPdmVybGF5Q29tcG9uZW50KVxyXG4gIHByb3RlY3RlZCBjaGlsZHJlbiE6IFF1ZXJ5TGlzdDxSZHRNZW51T3ZlcmxheUNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2ZvY3VzYWJsZUl0ZW0nKVxyXG4gIHByb3RlY3RlZCBmb2N1c2FibGVFbGVtZW50cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxyXG4gIGNsYXNzZXMgPSAncmR0LW1lbnUtYmFzZSc7XHJcblxyXG4gIHByb3RlY3RlZCBleHBhbmRlZDogUGFyc2VkUmR0TWVudUl0ZW0gfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgYXV0b2ZvY3VzU3VibWVudUl0ZW06ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcGFyc2VkSXRlbXMhOiBQYXJzZWRSZHRNZW51SXRlbVtdO1xyXG5cclxuICBnZXQgY2xpZW50U2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRTaXplO1xyXG4gIH1cclxuICBwcml2YXRlIF9jbGllbnRTaXplITogU2l6ZTtcclxuXHJcbiAgZ2V0IGJvZHlNYXJnaW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYm9keU1hcmdpbjtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYm9keU1hcmdpbiE6IHtcclxuICAgIHRvcDogbnVtYmVyO1xyXG4gICAgYm90dG9tOiBudW1iZXI7XHJcbiAgICBsZWZ0OiBudW1iZXI7XHJcbiAgICByaWdodDogbnVtYmVyO1xyXG4gIH07XHJcblxyXG4gIHByb3RlY3RlZCBhbGxQYXJzZWRJdGVtcyE6IFBhcnNlZFJkdE1lbnVJdGVtW107XHJcbiAgcHJvdGVjdGVkIGNoaWxkUm91dGVzTWFwOiBNYXA8UGFyc2VkUmR0TWVudUl0ZW0sIHN0cmluZ1tdW10+ID0gbmV3IE1hcCgpO1xyXG4gIHByb3RlY3RlZCBzaG9ydGN1dFN1YiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBwcm90ZWN0ZWQgc2hvcnRjdXRNYXA6IFJlY29yZDxzdHJpbmcsIFBhcnNlZFJkdE1lbnVJdGVtW10+ID0ge307XHJcblxyXG4gIHJlYWRvbmx5IGtleUFjdGlvbnMgPSB7XHJcbiAgICBbS0JfQ09ERS5BUlJPVy5MRUZUXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNQcmV2SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5SSUdIVF06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmZvY3VzTmV4dEl0ZW0oaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuRE9XTl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLm9wZW5TdWJtZW51KGluZGV4LCAnZmlyc3QnKSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLlVQXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMub3BlblN1Ym1lbnUoaW5kZXgsICdsYXN0JyksXHJcbiAgICBbS0JfQ09ERS5IT01FXTogKCkgPT4gdGhpcy5mb2N1c0l0ZW0oMCksXHJcbiAgICBbS0JfQ09ERS5FTkRdOiAoKSA9PiB0aGlzLmZvY3VzSXRlbSh0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aCAtIDEpLFxyXG4gICAgW0tCX0NPREUuRU5URVJdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5pbnZva2VJdGVtQ2xpY2tCeUluZGV4KGluZGV4KSxcclxuICAgIFtLQl9DT0RFLlNQQUNFQkFSXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuaW52b2tlSXRlbUNsaWNrQnlJbmRleChpbmRleCksXHJcbiAgfTtcclxuXHJcbiAgLy8gUmV0dXJucyBhbGwgcm91dGVzIGFzb2NpYXRlZCB3aXRoIGl0ZW0gb3IgaXRzIHN1Yml0ZW1zLlxyXG4gIGdldENoaWxkUm91dGVzKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGlsZFJvdXRlc01hcC5nZXQoaXRlbSkgPz8gW107XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucmR0Um91dGVyLm5hdmlnYXRpb25FbmQkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKChldikgPT4gdGhpcy5maWx0ZXJJdGVtcygpKTtcclxuICAgIHRoaXMubWVhc3VyZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKHRoaXMuY2hpbGRyZW4pIHtcclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUNoaWxkcmVuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmxpc3RlbldpbmRvd1Jlc2l6ZSgpO1xyXG5cclxuICAgIC8vIE5vdCB1c2luZyB0aW1lb3V0IHJlc3VsdHMgaW4gaG9yaXpvbnRhbCBvdmVyZmxvdyBvbiBodG1sIGVsZW1lbnRcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm1lYXN1cmUoKTtcclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUNoaWxkcmVuKCk7XHJcbiAgICB9LCA1MCk7XHJcbiAgfVxyXG5cclxuICByZWNhbGN1bGF0ZUNoaWxkcmVuKCkge1xyXG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICBjaGlsZC5yZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgICAgIHRoaXMucHJlZmVycmVkSG9yaXpvbnRhbERpcixcclxuICAgICAgICB0aGlzLnByZWZlcnJlZFZlcnRpY2FsRGlyXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlU3VibWVudXMoZm9jdXNFeHBhbmRlZCA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZm9jdXNFeHBhbmRlZCAmJiB0aGlzLmV4cGFuZGVkKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXMuZXhwYW5kZWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBhbmRlZCA9IG51bGw7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAobWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKSAmJiB0aGlzLmV4cGFuZGVkICE9PSBpdGVtKSB7XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSBudWxsO1xyXG4gICAgICB0aGlzLmV4cGFuZGVkID0gaXRlbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBpdGVtLmNvbW1hbmQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgaXRlbS5jb21tYW5kKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25JdGVtUG9pbnRlckVudGVyKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3Blbk9uSG92ZXIgJiZcclxuICAgICAgdGhpcy5leHBhbmRlZCAhPT0gaXRlbSAmJlxyXG4gICAgICBtZW51SXRlbUhhc0NoaWxkcmVuKGl0ZW0pXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWQgPSBpdGVtO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uSXRlbVBvaW50ZXJMZWF2ZShpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgaWYgKHRoaXMub3Blbk9uSG92ZXIgJiYgdGhpcy5leHBhbmRlZCA9PT0gaXRlbSkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbktleURvd24oaXRlbUluZGV4OiBudW1iZXIsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBoYXNBY3Rpb24gPSBldmVudC5jb2RlIGluIHRoaXMua2V5QWN0aW9ucztcclxuICAgIGNvbnN0IGlzTGV0dGVyID1cclxuICAgICAgUmR0U3RyaW5nVXRpbHMuaXNBbHBoYWJldENoYXJhY3RlcihldmVudC5rZXkpIHx8XHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmlzTnVtZXJpY0NoYXJhY3RlcihldmVudC5rZXkpO1xyXG5cclxuICAgIGlmIChoYXNBY3Rpb24gfHwgaXNMZXR0ZXIpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGFzQWN0aW9uKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgdGhpcy5rZXlBY3Rpb25zW2V2ZW50LmNvZGVdKGl0ZW1JbmRleCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzTGV0dGVyKSB7XHJcbiAgICAgIGNvbnN0IG5leHQgPSBmaW5kTmV4dEl0ZW1XaXRoUHJlZml4KFxyXG4gICAgICAgIHRoaXMucGFyc2VkSXRlbXMsXHJcbiAgICAgICAgaXRlbUluZGV4LFxyXG4gICAgICAgIGV2ZW50LmtleVxyXG4gICAgICApO1xyXG4gICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKG5leHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW52b2tlSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAobWVudUl0ZW1IYXNSb3V0ZShpdGVtKSAmJiBpdGVtLnJvdXRlckxpbmspIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoaXRlbS5yb3V0ZXJMaW5rKTtcclxuICAgIH1cclxuICAgIHRoaXMub25JdGVtQ2xpY2soaXRlbSk7XHJcbiAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gJ2ZpcnN0JztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmaWx0ZXJJdGVtcygpIHtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnJkdFJvdXRlci5wYXJzZUFic29sdXRlVXJsKCk7XHJcbiAgICBpZiAoIWN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5wYXJzZWRJdGVtcyA9IHRoaXMuYWxsUGFyc2VkSXRlbXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhcnNlZEl0ZW1zID0gdGhpcy5maWx0ZXJSZWModGhpcy5hbGxQYXJzZWRJdGVtcywgY3VycmVudCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoaWxkUm91dGVzTWFwID0gZ2V0Q2hpbGRSb3V0ZXNNYXAodGhpcy5wYXJzZWRJdGVtcyk7XHJcbiAgICB0aGlzLmxpc3RlblNob3J0Y3V0cygpO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmaWx0ZXJSZWMoXHJcbiAgICBpdGVtczogUGFyc2VkUmR0TWVudUl0ZW1bXSxcclxuICAgIGN1cnJlbnQ6IHsgcm91dGU6IFJkdFJvdXRlOyBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfVxyXG4gICk6IFBhcnNlZFJkdE1lbnVJdGVtW10ge1xyXG4gICAgbGV0IGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50LnJvdXRlO1xyXG4gICAgY29uc3QgY3VycmVudFBhcmFtcyA9IGN1cnJlbnQucGFyYW1zO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlcmVkID0gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmICghaXRlbS5yZXF1aXJlZFBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlcXVpcmVkID0gaXRlbS5yZXF1aXJlZFBhcmVudDtcclxuICAgICAgd2hpbGUgKGN1cnJlbnRQYXJlbnQuYWJzb2x1dGVQYXRoICE9PSByZXF1aXJlZC5hYnNvbHV0ZVBhdGgpIHtcclxuICAgICAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudFBhcmVudC5wYXJlbnQhO1xyXG4gICAgICAgIGlmICghY3VycmVudFBhcmVudCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgcmVxdWlyZWRQYXJlbnQ6IFJkdFJvdXRlIHwgbnVsbCA9IHJlcXVpcmVkO1xyXG4gICAgICBkbyB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHJlcXVpcmVkUGFyZW50LmFic29sdXRlUGF0aDtcclxuICAgICAgICBpZiAocGF0aCBpbiBjdXJyZW50UGFyYW1zKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByZXF1aXJlZFBhcmVudC5zdGF0aWNQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJhbXNbcGF0aF1ba2V5XSAhPT0gcmVxdWlyZWRQYXJlbnQuc3RhdGljUGFyYW1zW2tleV0pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVxdWlyZWRQYXJlbnQgPSByZXF1aXJlZFBhcmVudC5wYXJlbnQ7XHJcbiAgICAgIH0gd2hpbGUgKHJlcXVpcmVkUGFyZW50KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZmlsdGVyZWQubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICBpdGVtczogdGhpcy5maWx0ZXJSZWMoaXRlbS5pdGVtcywgY3VycmVudCksXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW52b2tlSXRlbUNsaWNrQnlJbmRleChpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbaXRlbUluZGV4XTtcclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmludm9rZUl0ZW1DbGljayhpdGVtKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvcGVuU3VibWVudShpdGVtSW5kZXg6IG51bWJlciwgdmlzaWJsZUZvY3VzOiAnZmlyc3QnIHwgJ2xhc3QnKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGl0ZW1JbmRleCA8IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoICYmXHJcbiAgICAgIG1lbnVJdGVtSGFzQ2hpbGRyZW4odGhpcy5wYXJzZWRJdGVtc1tpdGVtSW5kZXhdKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2l0ZW1JbmRleF07XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSB2aXNpYmxlRm9jdXM7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWQgPSBpdGVtO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZvY3VzSXRlbShpdGVtOiBudW1iZXIgfCBQYXJzZWRSZHRNZW51SXRlbSkge1xyXG4gICAgbGV0IGl0ZW1JbmRleDogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgaXRlbUluZGV4ID0gaXRlbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGl0ZW1JbmRleCA9IHRoaXMucGFyc2VkSXRlbXMuaW5kZXhPZihpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXRlbUluZGV4ID49IDAgJiYgaXRlbUluZGV4IDwgdGhpcy5mb2N1c2FibGVFbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5ibHVyQWxsRm9jdXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuZm9jdXNGb2N1c2FibGUoaXRlbUluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmb2N1c05leHRJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBuZXh0ID0gKGl0ZW1JbmRleCArIDEpICUgdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGg7XHJcbiAgICB0aGlzLmZvY3VzSXRlbShuZXh0KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmb2N1c1ByZXZJdGVtKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBwcmV2ID1cclxuICAgICAgKGl0ZW1JbmRleCAtIDEgKyB0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aCkgJSB0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKHByZXYpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGJsdXJBbGxGb2N1c2FibGUoKSB7XHJcbiAgICB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsKSA9PlxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLm5hdGl2ZUVsZW1lbnQsIEZPQ1VTX1ZJU0lCTEUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZvY3VzRm9jdXNhYmxlKGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBlbFJlZiA9IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMuZ2V0KGl0ZW1JbmRleCk7XHJcbiAgICBpZiAoZWxSZWYpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbFJlZi5uYXRpdmVFbGVtZW50LCBGT0NVU19WSVNJQkxFKTtcclxuICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2xvc2VzIG1lbnUgaWYgdXNlciBuYXZpZ2F0ZXMgb3V0c2lkZSBpdCB1c2luZyBUYWIuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmZvY3Vzb3V0JywgWyckZXZlbnQnXSlcclxuICBwcm90ZWN0ZWQgY2hlY2tBY3RpdmVFbGVtZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5jbG9zZU9uRm9jdXNPdXQpIHtcclxuICAgICAgY29uc3QgdGhpc0VsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xyXG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHwgIXRoaXNFbC5jb250YWlucyh0YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBwcm90ZWN0ZWQgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IGVsUmVmID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKCFlbFJlZi5jb250YWlucyh0YXJnZXQpKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VTdWJtZW51cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG1lYXN1cmUoKSB7XHJcbiAgICB0aGlzLm1lYXN1cmVDbGllbnRTaXplKCk7XHJcbiAgICB0aGlzLnJlYWRNYXJnaW4oKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZWFkTWFyZ2luKCkge1xyXG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIGNvbnN0IHRvcFZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcclxuICAgICAgUkRUX01FTlVfTUFSR0lOX1RPUF9QUk9QRVJUWV9OQU1FXHJcbiAgICApO1xyXG4gICAgY29uc3QgYm90dG9tVmFsID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxyXG4gICAgICBSRFRfTUVOVV9NQVJHSU5fQk9UVE9NX1BST1BFUlRZX05BTUVcclxuICAgICk7XHJcbiAgICBjb25zdCBsZWZ0VmFsID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxyXG4gICAgICBSRFRfTUVOVV9NQVJHSU5fTEVGVF9QUk9QRVJUWV9OQU1FXHJcbiAgICApO1xyXG4gICAgY29uc3QgcmlnaHRWYWwgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXHJcbiAgICAgIFJEVF9NRU5VX01BUkdJTl9SSUdIVF9QUk9QRVJUWV9OQU1FXHJcbiAgICApO1xyXG4gICAgdGhpcy5fYm9keU1hcmdpbiA9IHtcclxuICAgICAgdG9wOiBwYXJzZUludCh0b3BWYWwpIHx8IDAsXHJcbiAgICAgIGJvdHRvbTogcGFyc2VJbnQoYm90dG9tVmFsKSB8fCAwLFxyXG4gICAgICBsZWZ0OiBwYXJzZUludChsZWZ0VmFsKSB8fCAwLFxyXG4gICAgICByaWdodDogcGFyc2VJbnQocmlnaHRWYWwpIHx8IDAsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG1lYXN1cmVDbGllbnRTaXplKCkge1xyXG4gICAgdGhpcy5fY2xpZW50U2l6ZSA9IHtcclxuICAgICAgd2lkdGg6IHRoaXMuZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxcclxuICAgICAgaGVpZ2h0OiB0aGlzLmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBsaXN0ZW5XaW5kb3dSZXNpemUoKSB7XHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGhyb3R0bGVUaW1lKDAsIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCB7IHRyYWlsaW5nOiB0cnVlIH0pLFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlKCk7XHJcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUNoaWxkcmVuKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxpc3RlblNob3J0Y3V0cygpIHtcclxuICAgIGNvbnN0IGl0ZW1zV2l0aFNob3J0Y3V0cyA9IGdldE1lbnVJdGVtc1Nob3J0Y3V0cyh0aGlzLnBhcnNlZEl0ZW1zKTtcclxuICAgIGNvbnN0IHNob3J0Y3V0czogUmR0U2hvcnRjdXRbXSA9IGl0ZW1zV2l0aFNob3J0Y3V0cy5tYXAoXHJcbiAgICAgIChpdCkgPT4gaXQuc2hvcnRjdXRcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zaG9ydGN1dE1hcCA9IHRoaXMuZ2V0U2hvcnRjdXRNYXAoaXRlbXNXaXRoU2hvcnRjdXRzKTtcclxuICAgIHRoaXMuc2hvcnRjdXRTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc2hvcnRjdXRTdWIgPSB0aGlzLnNob3J0Y3V0U2VydmljZVxyXG4gICAgICAubGlzdGVuKHNob3J0Y3V0cylcclxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV2dCkgPT4gdGhpcy5vblNob3J0Y3V0KGV2dC5zaG9ydGN1dCkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldFNob3J0Y3V0TWFwKFxyXG4gICAgaXRlbXNXaXRoU2hvcnRjdXRzOiBQYXJzZWRSZHRNZW51SXRlbVdpdGhTaG9ydGN1dFtdXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzaG9ydGN1dE1hcDogUmVjb3JkPHN0cmluZywgUGFyc2VkUmR0TWVudUl0ZW1bXT4gPSB7fTtcclxuICAgIGl0ZW1zV2l0aFNob3J0Y3V0cy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIHNob3J0Y3V0TWFwW2l0ZW0uc2hvcnRjdXQuaG90a2V5c1ZhbHVlXSA9IGl0ZW0ucGF0aDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNob3J0Y3V0TWFwO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uU2hvcnRjdXQoc2hvcnRjdXQ6IFJkdFNob3J0Y3V0KSB7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5zaG9ydGN1dE1hcFtzaG9ydGN1dC5ob3RrZXlzVmFsdWVdO1xyXG4gICAgaWYgKCFwYXRoKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTWVudSBzaG9ydGN1dCAke3Nob3J0Y3V0LmhvdGtleXNWYWx1ZX0gd2FzIGRldGVjdGVkLCBidXQgdGhlcmUgaXMgbm8gcGF0aCBhc3NvY2lhdGVkIHdpdGggaXQuYCxcclxuICAgICAgICB0aGlzLnNob3J0Y3V0TWFwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYXN0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xyXG4gICAgY29uc3QgaGFzUm91dGUgPSBtZW51SXRlbUhhc1JvdXRlKGxhc3QpO1xyXG4gICAgY29uc3QgaGFzQ29tbWFuZCA9IHR5cGVvZiBsYXN0LmNvbW1hbmQgPT09ICdmdW5jdGlvbic7XHJcbiAgICBpZiAoaGFzUm91dGUgfHwgaGFzQ29tbWFuZCkge1xyXG4gICAgICB0aGlzLmNsb3NlU3VibWVudXMoZmFsc2UpO1xyXG4gICAgICBpZiAoaGFzQ29tbWFuZCkge1xyXG4gICAgICAgIGxhc3QuY29tbWFuZCEoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaGFzUm91dGUpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShsYXN0LnJvdXRlckxpbmshKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3RpdmF0ZUl0ZW1SZWN1cnNpdmVseShwYXRoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhY3RpdmF0ZUl0ZW1SZWN1cnNpdmVseShwYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IFsuLi5wYXRoXTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG9ydGN1dE1vZGUgPT09IFJkdE1lbnVTaG9ydGN1dE1vZGUuT1BFTl9TVUJNRU5VKSB7XHJcbiAgICAgIGNvbnN0IGxhc3QgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTtcclxuICAgICAgaWYgKG1lbnVJdGVtSGFzQ2hpbGRyZW4obGFzdCkgJiYgbGFzdC5pdGVtc1swXSkge1xyXG4gICAgICAgIGNoaWxkcmVuLnB1c2gobGFzdC5pdGVtc1swXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0aGlzSXRlbSA9IGNoaWxkcmVuLnNoaWZ0KCkhO1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWQgPSB0aGlzSXRlbTtcclxuICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLml0ZW0gPT09IHRoaXNJdGVtKTtcclxuICAgICAgb3ZlcmxheSEuZm9jdXNJdGVtUmVjdXJzaXZlbHkoY2hpbGRyZW4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leHBhbmRlZCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|