@cuby-ui/core 0.0.104 → 0.0.106
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/components/context-menu/context-menu.component.d.ts +5 -5
- package/components/root/index.d.ts +1 -0
- package/components/root/root.options.d.ts +1 -0
- package/components/select/select.component.d.ts +6 -2
- package/esm2020/components/context-menu/context-menu.component.mjs +24 -23
- package/esm2020/components/root/index.mjs +2 -1
- package/esm2020/components/root/root.component.mjs +3 -2
- package/esm2020/components/root/root.options.mjs +2 -0
- package/esm2020/components/select/select.component.mjs +38 -6
- package/fesm2015/cuby-ui-core.mjs +252 -219
- package/fesm2015/cuby-ui-core.mjs.map +1 -1
- package/fesm2020/cuby-ui-core.mjs +251 -218
- package/fesm2020/cuby-ui-core.mjs.map +1 -1
- package/package.json +3 -3
- package/styles/theme.scss +4 -0
- package/styles/variables/colors.scss +2 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { OnInit, AfterViewInit } from '@angular/core';
|
|
1
|
+
import type { OnInit, AfterViewInit, TemplateRef } from '@angular/core';
|
|
2
2
|
import type { CuiContextMenuItem } from '../../interfaces';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@cuby-ui/cdk";
|
|
5
5
|
export declare class CuiContextMenuComponent implements OnInit, AfterViewInit {
|
|
6
6
|
private readonly changeDetectorRef;
|
|
7
|
-
private readonly
|
|
7
|
+
private readonly viewContainerRef;
|
|
8
8
|
private readonly document;
|
|
9
9
|
private readonly documentElement;
|
|
10
10
|
private readonly window;
|
|
@@ -15,11 +15,10 @@ export declare class CuiContextMenuComponent implements OnInit, AfterViewInit {
|
|
|
15
15
|
protected readonly EXTRA_OFFSET_TOP = 0;
|
|
16
16
|
protected isVisible: boolean;
|
|
17
17
|
protected targetEventListener: (event: MouseEvent) => void;
|
|
18
|
+
protected node?: HTMLDivElement;
|
|
18
19
|
items: CuiContextMenuItem[];
|
|
19
20
|
target: HTMLElement;
|
|
20
|
-
|
|
21
|
-
protected clientX?: number;
|
|
22
|
-
protected clientY?: number;
|
|
21
|
+
protected readonly list: TemplateRef<any>;
|
|
23
22
|
ngOnInit(): void;
|
|
24
23
|
ngAfterViewInit(): void;
|
|
25
24
|
protected onSelect(item: CuiContextMenuItem): void;
|
|
@@ -31,6 +30,7 @@ export declare class CuiContextMenuComponent implements OnInit, AfterViewInit {
|
|
|
31
30
|
private initHidingSubscription;
|
|
32
31
|
private initHidingFromWindowEvent;
|
|
33
32
|
private close;
|
|
33
|
+
private renderList;
|
|
34
34
|
private changePosition;
|
|
35
35
|
static ɵfac: i0.ɵɵFactoryDeclaration<CuiContextMenuComponent, never>;
|
|
36
36
|
static ɵcmp: i0.ɵɵComponentDeclaration<CuiContextMenuComponent, "cui-context-menu[items][target]", never, { "items": "items"; "target": "target"; }, {}, never, never, false, [{ directive: typeof i1.CuiClickOutsideDirective; inputs: {}; outputs: {}; }, { directive: typeof i1.CuiTargetDirective; inputs: { "ccTarget": "target"; }; outputs: {}; }]>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CUI_ROOT_SELECTOR = "cui-root";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { OnInit } from '@angular/core';
|
|
1
|
+
import type { OnInit, TemplateRef } from '@angular/core';
|
|
2
2
|
import { ElementRef } from '@angular/core';
|
|
3
3
|
import { ControlValueAccessor } from '@angular/forms';
|
|
4
4
|
import type { CuiOnChange, CuiOnTouched, CuiNullable } from '@cuby-ui/cdk';
|
|
@@ -10,6 +10,7 @@ export declare class CuiSelectComponent implements ControlValueAccessor, OnInit
|
|
|
10
10
|
private readonly element;
|
|
11
11
|
private readonly document;
|
|
12
12
|
private readonly changeDetectorRef;
|
|
13
|
+
private readonly viewContainerRef;
|
|
13
14
|
private readonly destroy$;
|
|
14
15
|
private readonly cuiTextFieldController;
|
|
15
16
|
private readonly cuiClickOutsideDirective;
|
|
@@ -23,7 +24,9 @@ export declare class CuiSelectComponent implements ControlValueAccessor, OnInit
|
|
|
23
24
|
protected selectedOption?: CuiOption;
|
|
24
25
|
options: CuiOption[];
|
|
25
26
|
defaultOptionText?: string;
|
|
26
|
-
protected
|
|
27
|
+
protected readonly button: ElementRef<HTMLButtonElement>;
|
|
28
|
+
protected readonly getOptionsListHeightContainer: ElementRef<HTMLUListElement>;
|
|
29
|
+
protected readonly optionsWrapper: TemplateRef<unknown>;
|
|
27
30
|
protected gap: string;
|
|
28
31
|
protected get id(): string | undefined;
|
|
29
32
|
protected get size(): CuiSizeSm | CuiSizeMd;
|
|
@@ -38,6 +41,7 @@ export declare class CuiSelectComponent implements ControlValueAccessor, OnInit
|
|
|
38
41
|
protected onSelect(option: CuiOption): void;
|
|
39
42
|
protected onSwitch(): void;
|
|
40
43
|
protected onClose(): void;
|
|
44
|
+
protected onWindowResize(): void;
|
|
41
45
|
private initClickOutsideSubscription;
|
|
42
46
|
private open;
|
|
43
47
|
private close;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component,
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, inject, Input, ViewContainerRef, ViewChild, } from '@angular/core';
|
|
2
2
|
import { DOCUMENT } from '@angular/common';
|
|
3
3
|
import { fromEvent, take, takeUntil } from 'rxjs';
|
|
4
4
|
import { CuiDestroyService, CuiClickOutsideDirective, CuiTargetDirective, CUI_WINDOW } from '@cuby-ui/cdk';
|
|
5
|
+
import { CUI_ROOT_SELECTOR } from '../root';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "@cuby-ui/cdk";
|
|
7
8
|
import * as i2 from "@angular/common";
|
|
@@ -9,7 +10,7 @@ import * as i3 from "../svg/svg.component";
|
|
|
9
10
|
export class CuiContextMenuComponent {
|
|
10
11
|
constructor() {
|
|
11
12
|
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
12
|
-
this.
|
|
13
|
+
this.viewContainerRef = inject(ViewContainerRef);
|
|
13
14
|
this.document = inject(DOCUMENT);
|
|
14
15
|
this.documentElement = this.document.documentElement;
|
|
15
16
|
this.window = inject(CUI_WINDOW);
|
|
@@ -19,7 +20,6 @@ export class CuiContextMenuComponent {
|
|
|
19
20
|
this.EXTRA_OFFSET_LEFT = 0;
|
|
20
21
|
this.EXTRA_OFFSET_TOP = 0;
|
|
21
22
|
this.isVisible = false;
|
|
22
|
-
this.isHidden = false;
|
|
23
23
|
}
|
|
24
24
|
ngOnInit() {
|
|
25
25
|
this.initClickOutsideSubscription();
|
|
@@ -28,7 +28,7 @@ export class CuiContextMenuComponent {
|
|
|
28
28
|
this.initTargetElementListener();
|
|
29
29
|
}
|
|
30
30
|
onSelect(item) {
|
|
31
|
-
this.
|
|
31
|
+
this.close();
|
|
32
32
|
item.command?.();
|
|
33
33
|
}
|
|
34
34
|
onClose() {
|
|
@@ -47,7 +47,7 @@ export class CuiContextMenuComponent {
|
|
|
47
47
|
if (this.target.contains(target)) {
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
|
-
this.
|
|
50
|
+
this.close();
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
initTargetElementListener() {
|
|
@@ -55,7 +55,9 @@ export class CuiContextMenuComponent {
|
|
|
55
55
|
event.stopPropagation();
|
|
56
56
|
this.document.body.click();
|
|
57
57
|
this.isVisible = !this.isVisible;
|
|
58
|
+
this.viewContainerRef.clear();
|
|
58
59
|
if (this.isVisible) {
|
|
60
|
+
this.renderList();
|
|
59
61
|
this.changePosition(event.clientX, event.clientY);
|
|
60
62
|
this.initHidingSubscription();
|
|
61
63
|
}
|
|
@@ -79,13 +81,19 @@ export class CuiContextMenuComponent {
|
|
|
79
81
|
}
|
|
80
82
|
close() {
|
|
81
83
|
this.isVisible = false;
|
|
84
|
+
this.viewContainerRef.clear();
|
|
85
|
+
}
|
|
86
|
+
renderList() {
|
|
87
|
+
const embeddedViewRef = this.viewContainerRef.createEmbeddedView(this.list);
|
|
88
|
+
this.node = embeddedViewRef.rootNodes[0];
|
|
89
|
+
embeddedViewRef.detectChanges();
|
|
90
|
+
this.document.querySelector(CUI_ROOT_SELECTOR).appendChild(this.node);
|
|
82
91
|
}
|
|
83
92
|
changePosition(x, y) {
|
|
84
|
-
this.isHidden = true;
|
|
85
93
|
setTimeout(() => {
|
|
86
94
|
const { clientWidth, clientHeight } = this.documentElement;
|
|
87
|
-
const width = this.
|
|
88
|
-
const height = this.
|
|
95
|
+
const width = this.node.offsetWidth;
|
|
96
|
+
const height = this.node.offsetHeight;
|
|
89
97
|
let left = x;
|
|
90
98
|
let top = y;
|
|
91
99
|
if (left + width > clientWidth) {
|
|
@@ -96,15 +104,14 @@ export class CuiContextMenuComponent {
|
|
|
96
104
|
}
|
|
97
105
|
left = Math.max(left, this.EXTRA_OFFSET_LEFT);
|
|
98
106
|
top = Math.max(top, this.EXTRA_OFFSET_TOP);
|
|
99
|
-
this.
|
|
100
|
-
this.
|
|
101
|
-
this.clientY = top;
|
|
107
|
+
this.node.style.left = left + 'px';
|
|
108
|
+
this.node.style.top = top + 'px';
|
|
102
109
|
this.changeDetectorRef.markForCheck();
|
|
103
110
|
});
|
|
104
111
|
}
|
|
105
112
|
}
|
|
106
113
|
CuiContextMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CuiContextMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
107
|
-
CuiContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CuiContextMenuComponent, selector: "cui-context-menu[items][target]", inputs: { items: "items", target: "target" }, host: { listeners: { "window:resize": "onClose()", "click": "onStopClickPropagation($event)" },
|
|
114
|
+
CuiContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CuiContextMenuComponent, selector: "cui-context-menu[items][target]", inputs: { items: "items", target: "target" }, host: { listeners: { "window:resize": "onClose()", "click": "onStopClickPropagation($event)" } }, providers: [CuiDestroyService], viewQueries: [{ propertyName: "list", first: true, predicate: ["list"], descendants: true }], hostDirectives: [{ directive: i1.CuiClickOutsideDirective }, { directive: i1.CuiTargetDirective, inputs: ["ccTarget", "target"] }], ngImport: i0, template: "<ng-template #list>\n <div class=\"c-container\">\n <ul\n *ngIf=\"isVisible\"\n class=\"c-ul\"\n >\n <li\n *ngFor=\"let item of items; trackBy: trackByFn\"\n [style.color]=\"item.color\"\n >\n <button\n type=\"button\"\n class=\"c-button\"\n (click)=\"onSelect(item)\"\n >\n <cui-svg\n *ngIf=\"item.icon\"\n [icon]=\"item.icon\"\n [color]=\"item.color\"\n ></cui-svg>\n <span>{{ item.label }}</span>\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n", styles: [":host{display:none}.c-container{position:fixed;width:268px;border-radius:8px}.c-ul{padding:7px 0;margin:0;list-style:none;font-weight:400;font-size:14px;line-height:20px;box-shadow:0 1px 4px #0000000a,0 1px 4px #0000000a;border:1px solid var(--cui-base-200);border-radius:inherit;background:var(--cui-base-0);color:var(--cui-base-900);font-family:var(--cui-main-font)}.c-button{padding:8px 11px 8px 0;border:0;flex-shrink:0;outline:none;cursor:pointer;appearance:none;color:inherit;font:inherit;background:inherit;text-decoration:none;-webkit-tap-highlight-color:transparent;padding:8px 11px;width:100%;display:flex;align-items:center;gap:12px}.c-button:active{background:var(--cui-base-50)}@media (hover: hover){.c-button:hover{background:var(--cui-base-50)}}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CuiSvgComponent, selector: "cui-svg[icon]", inputs: ["width", "height", "strokeWidth", "color", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
108
115
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CuiContextMenuComponent, decorators: [{
|
|
109
116
|
type: Component,
|
|
110
117
|
args: [{ selector: 'cui-context-menu[items][target]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CuiDestroyService], hostDirectives: [
|
|
@@ -113,20 +120,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
113
120
|
directive: CuiTargetDirective,
|
|
114
121
|
inputs: ['ccTarget: target']
|
|
115
122
|
}
|
|
116
|
-
], template: "<ul\n
|
|
123
|
+
], template: "<ng-template #list>\n <div class=\"c-container\">\n <ul\n *ngIf=\"isVisible\"\n class=\"c-ul\"\n >\n <li\n *ngFor=\"let item of items; trackBy: trackByFn\"\n [style.color]=\"item.color\"\n >\n <button\n type=\"button\"\n class=\"c-button\"\n (click)=\"onSelect(item)\"\n >\n <cui-svg\n *ngIf=\"item.icon\"\n [icon]=\"item.icon\"\n [color]=\"item.color\"\n ></cui-svg>\n <span>{{ item.label }}</span>\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n", styles: [":host{display:none}.c-container{position:fixed;width:268px;border-radius:8px}.c-ul{padding:7px 0;margin:0;list-style:none;font-weight:400;font-size:14px;line-height:20px;box-shadow:0 1px 4px #0000000a,0 1px 4px #0000000a;border:1px solid var(--cui-base-200);border-radius:inherit;background:var(--cui-base-0);color:var(--cui-base-900);font-family:var(--cui-main-font)}.c-button{padding:8px 11px 8px 0;border:0;flex-shrink:0;outline:none;cursor:pointer;appearance:none;color:inherit;font:inherit;background:inherit;text-decoration:none;-webkit-tap-highlight-color:transparent;padding:8px 11px;width:100%;display:flex;align-items:center;gap:12px}.c-button:active{background:var(--cui-base-50)}@media (hover: hover){.c-button:hover{background:var(--cui-base-50)}}\n"] }]
|
|
117
124
|
}], propDecorators: { items: [{
|
|
118
125
|
type: Input
|
|
119
126
|
}], target: [{
|
|
120
127
|
type: Input
|
|
121
|
-
}],
|
|
122
|
-
type:
|
|
123
|
-
args: ['
|
|
124
|
-
}], clientX: [{
|
|
125
|
-
type: HostBinding,
|
|
126
|
-
args: ['style.left.px']
|
|
127
|
-
}], clientY: [{
|
|
128
|
-
type: HostBinding,
|
|
129
|
-
args: ['style.top.px']
|
|
128
|
+
}], list: [{
|
|
129
|
+
type: ViewChild,
|
|
130
|
+
args: ['list']
|
|
130
131
|
}], onClose: [{
|
|
131
132
|
type: HostListener,
|
|
132
133
|
args: ['window:resize']
|
|
@@ -134,4 +135,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
134
135
|
type: HostListener,
|
|
135
136
|
args: ['click', ['$event']]
|
|
136
137
|
}] } });
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFrQjNHLE1BQU0sT0FBTyx1QkFBdUI7SUFkcEM7UUFlbUIsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUMsWUFBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDM0MsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixvQkFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2hELFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELDZC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LDhKQ3ZCaEMseWFBcUJBOzRGRFdhLHVCQUF1QjtrQkFkbkMsU0FBUzsrQkFDRSxpQ0FBaUMsbUJBRzFCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFDZDt3QkFDZCx3QkFBd0I7d0JBQ3hCOzRCQUNFLFNBQVMsRUFBRSxrQkFBa0I7NEJBQzdCLE1BQU0sRUFBRSxDQUFDLGtCQUFrQixDQUFDO3lCQUM3QjtxQkFDRjs4QkFtQk0sS0FBSztzQkFEWCxLQUFLO2dCQUlDLE1BQU07c0JBRFosS0FBSztnQkFJTixRQUFRO3NCQURQLFdBQVc7dUJBQUMsZUFBZTtnQkFJbEIsT0FBTztzQkFEaEIsV0FBVzt1QkFBQyxlQUFlO2dCQUlsQixPQUFPO3NCQURoQixXQUFXO3VCQUFDLGNBQWM7Z0JBa0JqQixPQUFPO3NCQURoQixZQUFZO3VCQUFDLGVBQWU7Z0JBTW5CLHNCQUFzQjtzQkFEL0IsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDdWlEZXN0cm95U2VydmljZSwgQ3VpQ2xpY2tPdXRzaWRlRGlyZWN0aXZlLCBDdWlUYXJnZXREaXJlY3RpdmUsIENVSV9XSU5ET1cgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuXG5pbXBvcnQgdHlwZSB7IEN1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjdWktY29udGV4dC1tZW51W2l0ZW1zXVt0YXJnZXRdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRleHQtbWVudS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbQ3VpRGVzdHJveVNlcnZpY2VdLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIEN1aUNsaWNrT3V0c2lkZURpcmVjdGl2ZSxcbiAgICB7XG4gICAgICBkaXJlY3RpdmU6IEN1aVRhcmdldERpcmVjdGl2ZSxcbiAgICAgIGlucHV0czogWydjY1RhcmdldDogdGFyZ2V0J11cbiAgICB9XG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEN1aUNvbnRleHRNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3cgPSBpbmplY3QoQ1VJX1dJTkRPVyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBpbmplY3QoQ3VpRGVzdHJveVNlcnZpY2UsIHsgc2VsZjogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdWlDbGlja091dHNpZGVEaXJlY3RpdmUgPSBpbmplY3QoQ3VpQ2xpY2tPdXRzaWRlRGlyZWN0aXZlLCB7IHNlbGY6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VpVGFyZ2V0RGlyZWN0aXZlID0gaW5qZWN0KEN1aVRhcmdldERpcmVjdGl2ZSwgeyBzZWxmOiB0cnVlIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBFWFRSQV9PRkZTRVRfTEVGVCA9IDA7XG4gIHByb3RlY3RlZCByZWFkb25seSBFWFRSQV9PRkZTRVRfVE9QID0gMDtcblxuICBwcm90ZWN0ZWQgaXNWaXNpYmxlID0gZmFsc2U7XG4gIHByb3RlY3RlZCB0YXJnZXRFdmVudExpc3RlbmVyITogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpdGVtcyE6IEN1aUNvbnRleHRNZW51SXRlbVtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0YXJnZXQhOiBIVE1MRWxlbWVudDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLl9oaWRkZW4nKVxuICBpc0hpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUubGVmdC5weCcpXG4gIHByb3RlY3RlZCBjbGllbnRYPzogbnVtYmVyO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUudG9wLnB4JylcbiAgcHJvdGVjdGVkIGNsaWVudFk/OiBudW1iZXI7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdENsaWNrT3V0c2lkZVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRUYXJnZXRFbGVtZW50TGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblNlbGVjdChpdGVtOiBDdWlDb250ZXh0TWVudUl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgaXRlbS5jb21tYW5kPy4oKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBwcm90ZWN0ZWQgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCBvblN0b3BDbGlja1Byb3BhZ2F0aW9uKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tCeUZuKF86IG51bWJlciwgaXRlbTogQ3VpQ29udGV4dE1lbnVJdGVtKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5sYWJlbDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENsaWNrT3V0c2lkZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmN1aUNsaWNrT3V0c2lkZURpcmVjdGl2ZS5jdWlDbGlja091dHNpZGVcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHRhcmdldCkgPT4ge1xuICAgICAgICBpZiAodGhpcy50YXJnZXQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0VGFyZ2V0RWxlbWVudExpc3RlbmVyKCk6IHZvaWQge1xuICAgIHRoaXMudGFyZ2V0RXZlbnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmRvY3VtZW50LmJvZHkuY2xpY2soKTtcblxuICAgICAgdGhpcy5pc1Zpc2libGUgPSAhdGhpcy5pc1Zpc2libGU7XG5cbiAgICAgIGlmICh0aGlzLmlzVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmNoYW5nZVBvc2l0aW9uKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICB0aGlzLmluaXRIaWRpbmdTdWJzY3JpcHRpb24oKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9O1xuXG4gICAgdGhpcy5jdWlUYXJnZXREaXJlY3RpdmUuY2xpY2tlZFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLnRhcmdldEV2ZW50TGlzdGVuZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0SGlkaW5nU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdEhpZGluZ0Zyb21XaW5kb3dFdmVudCgnc2Nyb2xsJyk7XG4gICAgdGhpcy5pbml0SGlkaW5nRnJvbVdpbmRvd0V2ZW50KCdyZXNpemUnKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEhpZGluZ0Zyb21XaW5kb3dFdmVudChldmVudE5hbWU6IGtleW9mIFdpbmRvd0V2ZW50TWFwKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50KHRoaXMud2luZG93LCBldmVudE5hbWUpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VQb3NpdGlvbih4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaXNIaWRkZW4gPSB0cnVlO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQgfSA9IHRoaXMuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgbGV0IGxlZnQgPSB4O1xuICAgICAgbGV0IHRvcCA9IHk7XG5cbiAgICAgIGlmIChsZWZ0ICsgd2lkdGggPiBjbGllbnRXaWR0aCkge1xuICAgICAgICBsZWZ0IC09IHdpZHRoO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9wICsgaGVpZ2h0ID4gY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgIHRvcCAtPSBoZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIGxlZnQgPSBNYXRoLm1heChsZWZ0LCB0aGlzLkVYVFJBX09GRlNFVF9MRUZUKTtcbiAgICAgIHRvcCA9IE1hdGgubWF4KHRvcCwgdGhpcy5FWFRSQV9PRkZTRVRfVE9QKTtcblxuICAgICAgdGhpcy5pc0hpZGRlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jbGllbnRYID0gbGVmdDtcbiAgICAgIHRoaXMuY2xpZW50WSA9IHRvcDtcblxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHVsXG4gICpuZ0lmPVwiaXNWaXNpYmxlXCJcbiAgY2xhc3M9XCJjLXVsXCJcbj5cbiAgPGxpXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgW3N0eWxlLmNvbG9yXT1cIml0ZW0uY29sb3JcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJjLWJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwib25TZWxlY3QoaXRlbSlcIlxuICAgID5cbiAgICAgIDxjdWktc3ZnXG4gICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcbiAgICAgICAgW2ljb25dPVwiaXRlbS5pY29uXCJcbiAgICAgICAgW2NvbG9yXT1cIml0ZW0uY29sb3JcIlxuICAgICAgPjwvY3VpLXN2Zz5cbiAgICAgIDxzcGFuPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvbGk+XG48L3VsPlxuIl19
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUczRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7O0FBZ0I1QyxNQUFNLE9BQU8sdUJBQXVCO0lBZHBDO1FBZW1CLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsb0JBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUNoRCxXQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLGFBQVEsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFB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LElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzlDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUUzQyxJQUFJLENBQUMsSUFBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNwQyxJQUFJLENBQUMsSUFBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztZQUVsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztxSEE3SVUsdUJBQXVCO3lHQUF2Qix1QkFBdUIsME1BVHZCLENBQUMsaUJBQWlCLENBQUMsNFBDeEJoQyxzbUJBMEJBOzRGRE9hLHVCQUF1QjtrQkFkbkMsU0FBUzsrQkFDRSxpQ0FBaUMsbUJBRzFCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFDZDt3QkFDZCx3QkFBd0I7d0JBQ3hCOzRCQUNFLFNBQVMsRUFBRSxrQkFBa0I7NEJBQzdCLE1BQU0sRUFBRSxDQUFDLGtCQUFrQixDQUFDO3lCQUM3QjtxQkFDRjs4QkFvQk0sS0FBSztzQkFEWCxLQUFLO2dCQUlDLE1BQU07c0JBRFosS0FBSztnQkFJYSxJQUFJO3NCQUR0QixTQUFTO3VCQUFDLE1BQU07Z0JBa0JQLE9BQU87c0JBRGhCLFlBQVk7dUJBQUMsZUFBZTtnQkFNbkIsc0JBQXNCO3NCQUQvQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT25Jbml0LCBBZnRlclZpZXdJbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGZyb21FdmVudCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEN1aURlc3Ryb3lTZXJ2aWNlLCBDdWlDbGlja091dHNpZGVEaXJlY3RpdmUsIEN1aVRhcmdldERpcmVjdGl2ZSwgQ1VJX1dJTkRPVyB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5cbmltcG9ydCB0eXBlIHsgQ3VpQ29udGV4dE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDVUlfUk9PVF9TRUxFQ1RPUiB9IGZyb20gJy4uL3Jvb3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjdWktY29udGV4dC1tZW51W2l0ZW1zXVt0YXJnZXRdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRleHQtbWVudS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbQ3VpRGVzdHJveVNlcnZpY2VdLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIEN1aUNsaWNrT3V0c2lkZURpcmVjdGl2ZSxcbiAgICB7XG4gICAgICBkaXJlY3RpdmU6IEN1aVRhcmdldERpcmVjdGl2ZSxcbiAgICAgIGlucHV0czogWydjY1RhcmdldDogdGFyZ2V0J11cbiAgICB9XG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEN1aUNvbnRleHRNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRFbGVtZW50ID0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2luZG93ID0gaW5qZWN0KENVSV9XSU5ET1cpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gaW5qZWN0KEN1aURlc3Ryb3lTZXJ2aWNlLCB7IHNlbGY6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VpQ2xpY2tPdXRzaWRlRGlyZWN0aXZlID0gaW5qZWN0KEN1aUNsaWNrT3V0c2lkZURpcmVjdGl2ZSwgeyBzZWxmOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1aVRhcmdldERpcmVjdGl2ZSA9IGluamVjdChDdWlUYXJnZXREaXJlY3RpdmUsIHsgc2VsZjogdHJ1ZSB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRVhUUkFfT0ZGU0VUX0xFRlQgPSAwO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRVhUUkFfT0ZGU0VUX1RPUCA9IDA7XG5cbiAgcHJvdGVjdGVkIGlzVmlzaWJsZSA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgdGFyZ2V0RXZlbnRMaXN0ZW5lciE6IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgcHJvdGVjdGVkIG5vZGU/OiBIVE1MRGl2RWxlbWVudDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaXRlbXMhOiBDdWlDb250ZXh0TWVudUl0ZW1bXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdGFyZ2V0ITogSFRNTEVsZW1lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnbGlzdCcpXG4gIHByb3RlY3RlZCByZWFkb25seSBsaXN0ITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Q2xpY2tPdXRzaWRlU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdFRhcmdldEVsZW1lbnRMaXN0ZW5lcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uU2VsZWN0KGl0ZW06IEN1aUNvbnRleHRNZW51SXRlbSk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2UoKTtcblxuICAgIGl0ZW0uY29tbWFuZD8uKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgcHJvdGVjdGVkIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgb25TdG9wQ2xpY2tQcm9wYWdhdGlvbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrQnlGbihfOiBudW1iZXIsIGl0ZW06IEN1aUNvbnRleHRNZW51SXRlbSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0ubGFiZWw7XG4gIH1cblxuICBwcml2YXRlIGluaXRDbGlja091dHNpZGVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5jdWlDbGlja091dHNpZGVEaXJlY3RpdmUuY3VpQ2xpY2tPdXRzaWRlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCh0YXJnZXQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0VGFyZ2V0RWxlbWVudExpc3RlbmVyKCk6IHZvaWQge1xuICAgIHRoaXMudGFyZ2V0RXZlbnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmRvY3VtZW50LmJvZHkuY2xpY2soKTtcblxuICAgICAgdGhpcy5pc1Zpc2libGUgPSAhdGhpcy5pc1Zpc2libGU7XG4gICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblxuICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyTGlzdCgpO1xuICAgICAgICB0aGlzLmNoYW5nZVBvc2l0aW9uKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICB0aGlzLmluaXRIaWRpbmdTdWJzY3JpcHRpb24oKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9O1xuXG4gICAgdGhpcy5jdWlUYXJnZXREaXJlY3RpdmUuY2xpY2tlZFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLnRhcmdldEV2ZW50TGlzdGVuZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0SGlkaW5nU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdEhpZGluZ0Zyb21XaW5kb3dFdmVudCgnc2Nyb2xsJyk7XG4gICAgdGhpcy5pbml0SGlkaW5nRnJvbVdpbmRvd0V2ZW50KCdyZXNpemUnKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEhpZGluZ0Zyb21XaW5kb3dFdmVudChldmVudE5hbWU6IGtleW9mIFdpbmRvd0V2ZW50TWFwKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50KHRoaXMud2luZG93LCBldmVudE5hbWUpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJMaXN0KCk6IHZvaWQge1xuICAgIGNvbnN0IGVtYmVkZGVkVmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5saXN0KTtcblxuICAgIHRoaXMubm9kZSA9IGVtYmVkZGVkVmlld1JlZi5yb290Tm9kZXNbMF07XG5cbiAgICBlbWJlZGRlZFZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKENVSV9ST09UX1NFTEVDVE9SKSEuYXBwZW5kQ2hpbGQodGhpcy5ub2RlISk7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVBvc2l0aW9uKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQgfSA9IHRoaXMuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLm5vZGUhLm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5ub2RlIS5vZmZzZXRIZWlnaHQ7XG4gICAgICBsZXQgbGVmdCA9IHg7XG4gICAgICBsZXQgdG9wID0geTtcblxuICAgICAgaWYgKGxlZnQgKyB3aWR0aCA+IGNsaWVudFdpZHRoKSB7XG4gICAgICAgIGxlZnQgLT0gd2lkdGg7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b3AgKyBoZWlnaHQgPiBjbGllbnRIZWlnaHQpIHtcbiAgICAgICAgdG9wIC09IGhlaWdodDtcbiAgICAgIH1cblxuICAgICAgbGVmdCA9IE1hdGgubWF4KGxlZnQsIHRoaXMuRVhUUkFfT0ZGU0VUX0xFRlQpO1xuICAgICAgdG9wID0gTWF0aC5tYXgodG9wLCB0aGlzLkVYVFJBX09GRlNFVF9UT1ApO1xuXG4gICAgICB0aGlzLm5vZGUhLnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcbiAgICAgIHRoaXMubm9kZSEuc3R5bGUudG9wID0gdG9wICsgJ3B4JztcblxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNsaXN0PlxuICA8ZGl2IGNsYXNzPVwiYy1jb250YWluZXJcIj5cbiAgICA8dWxcbiAgICAgICpuZ0lmPVwiaXNWaXNpYmxlXCJcbiAgICAgIGNsYXNzPVwiYy11bFwiXG4gICAgPlxuICAgICAgPGxpXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiaXRlbS5jb2xvclwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImMtYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3QoaXRlbSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGN1aS1zdmdcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgIFtpY29uXT1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICBbY29sb3JdPVwiaXRlbS5jb2xvclwiXG4gICAgICAgICAgPjwvY3VpLXN2Zz5cbiAgICAgICAgICA8c3Bhbj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './root.component';
|
|
2
2
|
export * from './root.module';
|
|
3
|
-
|
|
3
|
+
export * from './root.options';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvcm9vdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Jvb3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcm9vdC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9yb290Lm9wdGlvbnMnO1xuIl19
|
|
@@ -3,6 +3,7 @@ import { DOCUMENT } from '@angular/common';
|
|
|
3
3
|
import { CuiDestroyService } from '@cuby-ui/cdk';
|
|
4
4
|
import { takeUntil } from 'rxjs';
|
|
5
5
|
import { CuiThemeService } from '../../services';
|
|
6
|
+
import { CUI_ROOT_SELECTOR } from './root.options';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "../dialog/dialogs.component";
|
|
8
9
|
import * as i2 from "../alert/alerts.component";
|
|
@@ -25,6 +26,6 @@ CuiRootComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version
|
|
|
25
26
|
CuiRootComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CuiRootComponent, selector: "cui-root", providers: [CuiDestroyService], ngImport: i0, template: "<div class=\"c-content\">\n <ng-content />\n</div>\n<cui-dialogs />\n<cui-alerts />\n", styles: [".c-content{isolation:isolate}\n"], dependencies: [{ kind: "component", type: i1.CuiDialogsComponent, selector: "cui-dialogs" }, { kind: "component", type: i2.CuiAlertsComponent, selector: "cui-alerts" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
26
27
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CuiRootComponent, decorators: [{
|
|
27
28
|
type: Component,
|
|
28
|
-
args: [{ selector:
|
|
29
|
+
args: [{ selector: CUI_ROOT_SELECTOR, changeDetection: ChangeDetectionStrategy.OnPush, providers: [CuiDestroyService], template: "<div class=\"c-content\">\n <ng-content />\n</div>\n<cui-dialogs />\n<cui-alerts />\n", styles: [".c-content{isolation:isolate}\n"] }]
|
|
29
30
|
}] });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvcm9vdC9yb290LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9yb290L3Jvb3QudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBU25ELE1BQU0sT0FBTyxnQkFBZ0I7SUFQN0I7UUFRbUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixXQUFNLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pDLGFBQVEsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztLQVd2RDtJQVRRLFFBQVE7UUFDYixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxNQUFNO2FBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7OzhHQWJVLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLG1DQUZoQixDQUFDLGlCQUFpQixDQUFDLDBCQ2RoQyx3RkFLQTs0RkRXYSxnQkFBZ0I7a0JBUDVCLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEN1aURlc3Ryb3lTZXJ2aWNlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDdWlUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDVUlfUk9PVF9TRUxFQ1RPUiB9IGZyb20gJy4vcm9vdC5vcHRpb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBDVUlfUk9PVF9TRUxFQ1RPUixcbiAgdGVtcGxhdGVVcmw6ICcuL3Jvb3QudGVtcGxhdGUuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Jvb3Quc3R5bGUuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbQ3VpRGVzdHJveVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEN1aVJvb3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0aGVtZSQgPSBpbmplY3QoQ3VpVGhlbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IGluamVjdChDdWlEZXN0cm95U2VydmljZSk7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdFRoZW1lU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRUaGVtZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnRoZW1lJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh0aGVtZSA9PiB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2N1aVRoZW1lJywgdGhlbWUpKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImMtY29udGVudFwiPlxuICA8bmctY29udGVudCAvPlxuPC9kaXY+XG48Y3VpLWRpYWxvZ3MgLz5cbjxjdWktYWxlcnRzIC8+XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const CUI_ROOT_SELECTOR = 'cui-root';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC5vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jb21wb25lbnRzL3Jvb3Qvcm9vdC5vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBDVUlfUk9PVF9TRUxFQ1RPUiA9ICdjdWktcm9vdCc7Il19
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, ElementRef, ViewChild, HostBinding } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, ElementRef, ViewChild, HostBinding, ViewContainerRef, HostListener } from '@angular/core';
|
|
2
2
|
import { DOCUMENT } from '@angular/common';
|
|
3
3
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
4
|
import { CuiDestroyService } from '@cuby-ui/cdk';
|
|
5
5
|
import { cuiProvide, CuiClickOutsideDirective } from '@cuby-ui/cdk';
|
|
6
6
|
import { takeUntil } from 'rxjs';
|
|
7
7
|
import { CUI_TEXT_FIELD_CONTROLLER, CUI_TEXT_FILED_CONTROLLER_PROVIDER } from '../../directives';
|
|
8
|
+
import { CUI_ROOT_SELECTOR } from '../root';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@cuby-ui/cdk";
|
|
10
11
|
import * as i2 from "@angular/common";
|
|
@@ -14,6 +15,7 @@ export class CuiSelectComponent {
|
|
|
14
15
|
this.element = inject(ElementRef).nativeElement;
|
|
15
16
|
this.document = inject(DOCUMENT);
|
|
16
17
|
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
18
|
+
this.viewContainerRef = inject(ViewContainerRef);
|
|
17
19
|
this.destroy$ = inject(CuiDestroyService, { self: true });
|
|
18
20
|
this.cuiTextFieldController = inject(CUI_TEXT_FIELD_CONTROLLER);
|
|
19
21
|
this.cuiClickOutsideDirective = inject(CuiClickOutsideDirective, { self: true });
|
|
@@ -75,6 +77,10 @@ export class CuiSelectComponent {
|
|
|
75
77
|
onClose() {
|
|
76
78
|
this.close();
|
|
77
79
|
}
|
|
80
|
+
onWindowResize() {
|
|
81
|
+
this.button.nativeElement.blur();
|
|
82
|
+
this.close();
|
|
83
|
+
}
|
|
78
84
|
initClickOutsideSubscription() {
|
|
79
85
|
this.cuiClickOutsideDirective.cuiClickOutside
|
|
80
86
|
.pipe(takeUntil(this.destroy$))
|
|
@@ -87,37 +93,63 @@ export class CuiSelectComponent {
|
|
|
87
93
|
}
|
|
88
94
|
open() {
|
|
89
95
|
this.isOpened = true;
|
|
90
|
-
const { bottom: elementRectBottom } = this.element.getBoundingClientRect();
|
|
96
|
+
const { top: elementRectTop, left: elementRectLeft, bottom: elementRectBottom } = this.element.getBoundingClientRect();
|
|
91
97
|
const distanceToBottom = this.document.documentElement.clientHeight
|
|
92
98
|
- (elementRectBottom + this.SPACE_BETWEEN_BUTTON_AND_OPTIONS);
|
|
99
|
+
const embeddedViewRef = this.viewContainerRef.createEmbeddedView(this.optionsWrapper);
|
|
100
|
+
const node = embeddedViewRef.rootNodes[0];
|
|
101
|
+
const nodeStyles = node.style;
|
|
93
102
|
this.isOptionsListAbove = distanceToBottom < this.getOptionsListHeightContainer.nativeElement.offsetHeight;
|
|
103
|
+
embeddedViewRef.detectChanges();
|
|
104
|
+
nodeStyles.width = this.element.offsetWidth + 'px';
|
|
105
|
+
nodeStyles.left = window.scrollX + elementRectLeft + 'px';
|
|
106
|
+
if (this.isOptionsListAbove) {
|
|
107
|
+
nodeStyles.top = window.scrollY + elementRectTop
|
|
108
|
+
- this.getOptionsListHeightContainer.nativeElement.offsetHeight
|
|
109
|
+
- this.SPACE_BETWEEN_BUTTON_AND_OPTIONS
|
|
110
|
+
+ 'px';
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
nodeStyles.top = window.scrollY + elementRectBottom + this.SPACE_BETWEEN_BUTTON_AND_OPTIONS + 'px';
|
|
114
|
+
}
|
|
115
|
+
this.document.querySelector(CUI_ROOT_SELECTOR).appendChild(embeddedViewRef.rootNodes[0]);
|
|
94
116
|
}
|
|
95
117
|
close() {
|
|
96
118
|
this.isOpened = false;
|
|
119
|
+
this.viewContainerRef.clear();
|
|
97
120
|
}
|
|
98
121
|
}
|
|
99
122
|
CuiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CuiSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
100
|
-
CuiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CuiSelectComponent, selector: "cui-select[options]", inputs: { options: "options", defaultOptionText: "defaultOptionText" }, host: { properties: { "style.--c-gap": "this.gap" } }, providers: [
|
|
123
|
+
CuiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CuiSelectComponent, selector: "cui-select[options]", inputs: { options: "options", defaultOptionText: "defaultOptionText" }, host: { listeners: { "window:resize": "onWindowResize()" }, properties: { "style.--c-gap": "this.gap" } }, providers: [
|
|
101
124
|
CUI_TEXT_FILED_CONTROLLER_PROVIDER,
|
|
102
125
|
cuiProvide(NG_VALUE_ACCESSOR, CuiSelectComponent, true),
|
|
103
126
|
CuiDestroyService
|
|
104
|
-
], viewQueries: [{ propertyName: "getOptionsListHeightContainer", first: true, predicate: ["getOptionsListHeightContainer"], descendants: true }], hostDirectives: [{ directive: i1.CuiClickOutsideDirective }], ngImport: i0, template: "<button\n type=\"button\"\n [attr.id]=\"id\"\n [attr.data-size]=\"size\"\n [disabled]=\"isDisabled\"\n class=\"c-button\"\n [class.c-button_with-error]=\"isError\"\n (click)=\"onSwitch()\"\n>\n <ng-container *ngIf=\"selectedOption; else placeholderTemplate\">\n {{ selectedOption.label }}\n </ng-container>\n <ng-template #placeholderTemplate>\n <span class=\"c-placeholder\">{{ placeholder }}</span>\n </ng-template>\n <cui-svg\n icon=\"cuiIconChevronDown\"\n color=\"var(--cui-base-500)\"\n />\n</button>\n<
|
|
127
|
+
], viewQueries: [{ propertyName: "button", first: true, predicate: ["button"], descendants: true }, { propertyName: "getOptionsListHeightContainer", first: true, predicate: ["getOptionsListHeightContainer"], descendants: true }, { propertyName: "optionsWrapper", first: true, predicate: ["optionsWrapper"], descendants: true }], hostDirectives: [{ directive: i1.CuiClickOutsideDirective }], ngImport: i0, template: "<button\n #button\n type=\"button\"\n [attr.id]=\"id\"\n [attr.data-size]=\"size\"\n [disabled]=\"isDisabled\"\n class=\"c-button\"\n [class.c-button_active]=\"isOpened\"\n [class.c-button_with-error]=\"isError\"\n (click)=\"onSwitch()\"\n>\n <ng-container *ngIf=\"selectedOption; else placeholderTemplate\">\n {{ selectedOption.label }}\n </ng-container>\n <ng-template #placeholderTemplate>\n <span class=\"c-placeholder\">{{ placeholder }}</span>\n </ng-template>\n <cui-svg\n icon=\"cuiIconChevronDown\"\n color=\"var(--cui-base-500)\"\n />\n</button>\n<ng-template #optionsWrapper>\n <div\n class=\"c-options__wrapper\"\n [class.c-options__wrapper_top]=\"isOptionsListAbove\"\n >\n <ng-container *ngTemplateOutlet=\"optionsList\"/>\n </div>\n</ng-template>\n<div\n #getOptionsListHeightContainer\n class=\"c-get-options-list-height-container\"\n>\n <ng-container *ngTemplateOutlet=\"optionsList\"/>\n</div>\n<ng-template #optionsList>\n <ul\n class=\"c-options\"\n [class.c-options_top]=\"isOptionsListAbove\"\n >\n <ng-container *ngIf=\"options.length; else empty\">\n <li *ngFor=\"let option of options; trackBy: trackByFn\">\n <button\n type=\"button\"\n class=\"c-option-button\"\n [class.c-option-button_selected]=\"selectedOption === option\"\n (click)=\"onSelect(option)\"\n >\n <span>{{ option.label }}</span>\n <cui-svg\n *ngIf=\"selectedOption === option\"\n icon=\"cuiIconCheckSm\"\n color=\"var(--cui-info)\"\n class=\"c-option-button__icon\"\n />\n </button>\n </li>\n </ng-container>\n <ng-template #empty>\n <li *ngIf=\"defaultOptionText\">\n <button\n type=\"button\"\n class=\"c-option-button\"\n (click)=\"onClose()\"\n >\n {{ defaultOptionText }}\n </button>\n </li>\n </ng-template>\n </ul>\n</ng-template>\n", styles: [":host{display:block;font-family:var(--cui-main-font);position:relative}.c-button{border:0;flex-shrink:0;outline:none;appearance:none;color:inherit;font:inherit;background:inherit;text-decoration:none;-webkit-tap-highlight-color:transparent;padding:0 13px;font-weight:400;font-size:14px;line-height:20px;display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;border:1px solid var(--cui-base-200);border-radius:8px;cursor:pointer;background:var(--cui-input);color:var(--cui-base-900);font-family:var(--cui-main-font)}.c-button:hover{border-color:var(--cui-base-300)}.c-button_active.c-button_active,.c-button:focus{box-shadow:0 0 0 2px var(--cui-focus);border-color:var(--cui-info)}.c-button:disabled{cursor:not-allowed;opacity:.5;background:var(--cui-base-50);border-color:var(--cui-base-200)}.c-button[data-size=sm]{padding-top:7px;padding-bottom:7px}.c-button[data-size=md]{padding-top:8px;padding-bottom:8px}.c-button_with-error{border-color:var(--cui-danger)}.c-button_with-error:focus{box-shadow:0 0 0 2px #d92d2040;border-color:var(--cui-danger)}.c-placeholder{color:var(--cui-base-400)}.c-options__wrapper{position:absolute;font-family:var(--cui-main-font)}.c-get-options-list-height-container{position:fixed;visibility:hidden}.c-options{padding:7px 0;margin:0;list-style:none;font-weight:400;font-size:14px;line-height:20px;box-shadow:0 1px 4px #0000000a,0 1px 4px #0000000a;overflow:auto;max-height:180px;border:1px solid var(--cui-base-200);border-radius:8px;background:var(--cui-base-0);color:var(--cui-base-900)}.c-option-button{padding:8px 11px 8px 0;border:0;flex-shrink:0;outline:none;cursor:pointer;appearance:none;color:inherit;font:inherit;background:inherit;text-decoration:none;-webkit-tap-highlight-color:transparent;padding:8px 11px;width:100%;display:flex;align-items:center;gap:12px}.c-option-button:active{background:var(--cui-base-50)}@media (hover: hover){.c-option-button:hover{background:var(--cui-base-50)}}.c-option-button_selected{background:var(--cui-base-50)}.c-option-button__icon{margin-left:auto}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.CuiSvgComponent, selector: "cui-svg[icon]", inputs: ["width", "height", "strokeWidth", "color", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
105
128
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CuiSelectComponent, decorators: [{
|
|
106
129
|
type: Component,
|
|
107
130
|
args: [{ selector: 'cui-select[options]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
108
131
|
CUI_TEXT_FILED_CONTROLLER_PROVIDER,
|
|
109
132
|
cuiProvide(NG_VALUE_ACCESSOR, CuiSelectComponent, true),
|
|
110
133
|
CuiDestroyService
|
|
111
|
-
], hostDirectives: [CuiClickOutsideDirective], template: "<button\n type=\"button\"\n [attr.id]=\"id\"\n [attr.data-size]=\"size\"\n [disabled]=\"isDisabled\"\n class=\"c-button\"\n [class.c-button_with-error]=\"isError\"\n (click)=\"onSwitch()\"\n>\n <ng-container *ngIf=\"selectedOption; else placeholderTemplate\">\n {{ selectedOption.label }}\n </ng-container>\n <ng-template #placeholderTemplate>\n <span class=\"c-placeholder\">{{ placeholder }}</span>\n </ng-template>\n <cui-svg\n icon=\"cuiIconChevronDown\"\n color=\"var(--cui-base-500)\"\n />\n</button>\n<
|
|
134
|
+
], hostDirectives: [CuiClickOutsideDirective], template: "<button\n #button\n type=\"button\"\n [attr.id]=\"id\"\n [attr.data-size]=\"size\"\n [disabled]=\"isDisabled\"\n class=\"c-button\"\n [class.c-button_active]=\"isOpened\"\n [class.c-button_with-error]=\"isError\"\n (click)=\"onSwitch()\"\n>\n <ng-container *ngIf=\"selectedOption; else placeholderTemplate\">\n {{ selectedOption.label }}\n </ng-container>\n <ng-template #placeholderTemplate>\n <span class=\"c-placeholder\">{{ placeholder }}</span>\n </ng-template>\n <cui-svg\n icon=\"cuiIconChevronDown\"\n color=\"var(--cui-base-500)\"\n />\n</button>\n<ng-template #optionsWrapper>\n <div\n class=\"c-options__wrapper\"\n [class.c-options__wrapper_top]=\"isOptionsListAbove\"\n >\n <ng-container *ngTemplateOutlet=\"optionsList\"/>\n </div>\n</ng-template>\n<div\n #getOptionsListHeightContainer\n class=\"c-get-options-list-height-container\"\n>\n <ng-container *ngTemplateOutlet=\"optionsList\"/>\n</div>\n<ng-template #optionsList>\n <ul\n class=\"c-options\"\n [class.c-options_top]=\"isOptionsListAbove\"\n >\n <ng-container *ngIf=\"options.length; else empty\">\n <li *ngFor=\"let option of options; trackBy: trackByFn\">\n <button\n type=\"button\"\n class=\"c-option-button\"\n [class.c-option-button_selected]=\"selectedOption === option\"\n (click)=\"onSelect(option)\"\n >\n <span>{{ option.label }}</span>\n <cui-svg\n *ngIf=\"selectedOption === option\"\n icon=\"cuiIconCheckSm\"\n color=\"var(--cui-info)\"\n class=\"c-option-button__icon\"\n />\n </button>\n </li>\n </ng-container>\n <ng-template #empty>\n <li *ngIf=\"defaultOptionText\">\n <button\n type=\"button\"\n class=\"c-option-button\"\n (click)=\"onClose()\"\n >\n {{ defaultOptionText }}\n </button>\n </li>\n </ng-template>\n </ul>\n</ng-template>\n", styles: [":host{display:block;font-family:var(--cui-main-font);position:relative}.c-button{border:0;flex-shrink:0;outline:none;appearance:none;color:inherit;font:inherit;background:inherit;text-decoration:none;-webkit-tap-highlight-color:transparent;padding:0 13px;font-weight:400;font-size:14px;line-height:20px;display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;border:1px solid var(--cui-base-200);border-radius:8px;cursor:pointer;background:var(--cui-input);color:var(--cui-base-900);font-family:var(--cui-main-font)}.c-button:hover{border-color:var(--cui-base-300)}.c-button_active.c-button_active,.c-button:focus{box-shadow:0 0 0 2px var(--cui-focus);border-color:var(--cui-info)}.c-button:disabled{cursor:not-allowed;opacity:.5;background:var(--cui-base-50);border-color:var(--cui-base-200)}.c-button[data-size=sm]{padding-top:7px;padding-bottom:7px}.c-button[data-size=md]{padding-top:8px;padding-bottom:8px}.c-button_with-error{border-color:var(--cui-danger)}.c-button_with-error:focus{box-shadow:0 0 0 2px #d92d2040;border-color:var(--cui-danger)}.c-placeholder{color:var(--cui-base-400)}.c-options__wrapper{position:absolute;font-family:var(--cui-main-font)}.c-get-options-list-height-container{position:fixed;visibility:hidden}.c-options{padding:7px 0;margin:0;list-style:none;font-weight:400;font-size:14px;line-height:20px;box-shadow:0 1px 4px #0000000a,0 1px 4px #0000000a;overflow:auto;max-height:180px;border:1px solid var(--cui-base-200);border-radius:8px;background:var(--cui-base-0);color:var(--cui-base-900)}.c-option-button{padding:8px 11px 8px 0;border:0;flex-shrink:0;outline:none;cursor:pointer;appearance:none;color:inherit;font:inherit;background:inherit;text-decoration:none;-webkit-tap-highlight-color:transparent;padding:8px 11px;width:100%;display:flex;align-items:center;gap:12px}.c-option-button:active{background:var(--cui-base-50)}@media (hover: hover){.c-option-button:hover{background:var(--cui-base-50)}}.c-option-button_selected{background:var(--cui-base-50)}.c-option-button__icon{margin-left:auto}\n"] }]
|
|
112
135
|
}], propDecorators: { options: [{
|
|
113
136
|
type: Input
|
|
114
137
|
}], defaultOptionText: [{
|
|
115
138
|
type: Input
|
|
139
|
+
}], button: [{
|
|
140
|
+
type: ViewChild,
|
|
141
|
+
args: ['button']
|
|
116
142
|
}], getOptionsListHeightContainer: [{
|
|
117
143
|
type: ViewChild,
|
|
118
144
|
args: ['getOptionsListHeightContainer']
|
|
145
|
+
}], optionsWrapper: [{
|
|
146
|
+
type: ViewChild,
|
|
147
|
+
args: ['optionsWrapper']
|
|
119
148
|
}], gap: [{
|
|
120
149
|
type: HostBinding,
|
|
121
150
|
args: ['style.--c-gap']
|
|
151
|
+
}], onWindowResize: [{
|
|
152
|
+
type: HostListener,
|
|
153
|
+
args: ['window:resize']
|
|
122
154
|
}] } });
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9zZWxlY3Qvc2VsZWN0LnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWpDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQWNqRyxNQUFNLE9BQU8sa0JBQWtCO0lBWi9CO1FBYW1CLFlBQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQzNDLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELDJCQUFzQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzNELDZCQUF3QixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTFFLHFDQUFnQyxHQUFHLENBQUMsQ0FBQztRQUU5QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQWlCM0IsUUFBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxJQUFJLENBQUM7S0FtRzlEO0lBakdDLElBQWMsRUFBRTtRQUNkLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBYyxJQUFJO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBYyxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBYyxPQUFPO1FBQ25CLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQztJQUM3QyxDQUFDO0lBRVMsU0FBUyxDQUFDLENBQVMsRUFBRSxJQUFlO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFrQixDQUFDO1FBRXpDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBd0I7UUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEVBQWdCO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFVBQW1CO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBRTdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRVMsUUFBUSxDQUFDLE1BQWlCO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztRQUU3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFUyxRQUFRO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUNuRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFWixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRVMsT0FBTztRQUNmLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFTyw0QkFBNEI7UUFDbEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWU7YUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ2xCO1lBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sSUFBSTtRQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBRXJCLE1BQU0sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0UsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZO2NBQy9ELENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdCQUFnQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO0lBQzdHLENBQUM7SUFFTyxLQUFLO1FBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQzs7Z0hBOUhVLGtCQUFrQjtvR0FBbEIsa0JBQWtCLDZLQVBsQjtRQUNULGtDQUFrQztRQUNsQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDO1FBQ3ZELGlCQUFpQjtLQUNsQix3T0MvQkgscTBEQW1FQTs0RkRqQ2Esa0JBQWtCO2tCQVo5QixTQUFTOytCQUNFLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNULGtDQUFrQzt3QkFDbEMsVUFBVSxDQUFDLGlCQUFpQixzQkFBc0IsSUFBSSxDQUFDO3dCQUN2RCxpQkFBaUI7cUJBQ2xCLGtCQUNlLENBQUMsd0JBQXdCLENBQUM7OEJBcUJuQyxPQUFPO3NCQURiLEtBQUs7Z0JBSUMsaUJBQWlCO3NCQUR2QixLQUFLO2dCQUlJLDZCQUE2QjtzQkFEdEMsU0FBUzt1QkFBQywrQkFBK0I7Z0JBSWhDLEdBQUc7c0JBRFosV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBpbmplY3QsXG4gIElucHV0LFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBDdWlPbkNoYW5nZSwgQ3VpT25Ub3VjaGVkLCBDdWlOdWxsYWJsZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgeyBDdWlEZXN0cm95U2VydmljZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgeyBjdWlQcm92aWRlLCBDdWlDbGlja091dHNpZGVEaXJlY3RpdmUgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB0eXBlIHsgQ3VpT3B0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IEN1aVNpemVNZCwgQ3VpU2l6ZVNtIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ1VJX1RFWFRfRklFTERfQ09OVFJPTExFUiwgQ1VJX1RFWFRfRklMRURfQ09OVFJPTExFUl9QUk9WSURFUiB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjdWktc2VsZWN0W29wdGlvbnNdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC50ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LnN0eWxlLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIENVSV9URVhUX0ZJTEVEX0NPTlRST0xMRVJfUFJPVklERVIsXG4gICAgY3VpUHJvdmlkZShOR19WQUxVRV9BQ0NFU1NPUiwgQ3VpU2VsZWN0Q29tcG9uZW50LCB0cnVlKSxcbiAgICBDdWlEZXN0cm95U2VydmljZVxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW0N1aUNsaWNrT3V0c2lkZURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgQ3VpU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBpbmplY3QoQ3VpRGVzdHJveVNlcnZpY2UsIHsgc2VsZjogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdWlUZXh0RmllbGRDb250cm9sbGVyID0gaW5qZWN0KENVSV9URVhUX0ZJRUxEX0NPTlRST0xMRVIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1aUNsaWNrT3V0c2lkZURpcmVjdGl2ZSA9IGluamVjdChDdWlDbGlja091dHNpZGVEaXJlY3RpdmUsIHsgc2VsZjogdHJ1ZSB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgU1BBQ0VfQkVUV0VFTl9CVVRUT05fQU5EX09QVElPTlMgPSAzO1xuXG4gIHByb3RlY3RlZCBpc09wZW5lZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgaXNPcHRpb25zTGlzdEFib3ZlID0gZmFsc2U7XG4gIHByb3RlY3RlZCB2YWx1ZSE6IEN1aU51bGxhYmxlPHVua25vd24+O1xuICBwcm90ZWN0ZWQgb25DaGFuZ2UhOiBDdWlPbkNoYW5nZTx1bmtub3duPjtcbiAgcHJvdGVjdGVkIG9uVG91Y2hlZCE6IEN1aU9uVG91Y2hlZDtcbiAgcHJvdGVjdGVkIGlzRGlzYWJsZWQhOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRPcHRpb24/OiBDdWlPcHRpb247XG5cbiAgQElucHV0KClcbiAgcHVibGljIG9wdGlvbnMhOiBDdWlPcHRpb25bXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGVmYXVsdE9wdGlvblRleHQ/OiBzdHJpbmc7XG5cbiAgQFZpZXdDaGlsZCgnZ2V0T3B0aW9uc0xpc3RIZWlnaHRDb250YWluZXInKVxuICBwcm90ZWN0ZWQgZ2V0T3B0aW9uc0xpc3RIZWlnaHRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxVTGlzdEVsZW1lbnQ+O1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUuLS1jLWdhcCcpXG4gIHByb3RlY3RlZCBnYXAgPSBgJHt0aGlzLlNQQUNFX0JFVFdFRU5fQlVUVE9OX0FORF9PUFRJT05TfXB4YDtcblxuICBwcm90ZWN0ZWQgZ2V0IGlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY3VpVGV4dEZpZWxkQ29udHJvbGxlci5pZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgc2l6ZSgpOiBDdWlTaXplU20gfCBDdWlTaXplTWQge1xuICAgIHJldHVybiB0aGlzLmN1aVRleHRGaWVsZENvbnRyb2xsZXIuc2l6ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jdWlUZXh0RmllbGRDb250cm9sbGVyLnBsYWNlaG9sZGVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1aVRleHRGaWVsZENvbnRyb2xsZXIuaXNFcnJvcjtcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0J5Rm4oXzogbnVtYmVyLCBpdGVtOiBDdWlPcHRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmxhYmVsO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlIGFzIEN1aU9wdGlvbjtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogQ3VpT25DaGFuZ2U8dW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IEN1aU9uVG91Y2hlZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Q2xpY2tPdXRzaWRlU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TZWxlY3Qob3B0aW9uOiBDdWlPcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBvcHRpb247XG5cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub25Td2l0Y2goKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uU3dpdGNoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcHRpb25zLmxlbmd0aCAmJiAhdGhpcy5kZWZhdWx0T3B0aW9uVGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc09wZW5lZCkge1xuICAgICAgdGhpcy5vcGVuKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRDbGlja091dHNpZGVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5jdWlDbGlja091dHNpZGVEaXJlY3RpdmUuY3VpQ2xpY2tPdXRzaWRlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuZWQpIHtcbiAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5pc09wZW5lZCA9IHRydWU7XG5cbiAgICBjb25zdCB7IGJvdHRvbTogZWxlbWVudFJlY3RCb3R0b20gfSA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBkaXN0YW5jZVRvQm90dG9tID0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgICAtIChlbGVtZW50UmVjdEJvdHRvbSArIHRoaXMuU1BBQ0VfQkVUV0VFTl9CVVRUT05fQU5EX09QVElPTlMpO1xuXG4gICAgdGhpcy5pc09wdGlvbnNMaXN0QWJvdmUgPSBkaXN0YW5jZVRvQm90dG9tIDwgdGhpcy5nZXRPcHRpb25zTGlzdEhlaWdodENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5pc09wZW5lZCA9IGZhbHNlO1xuICB9XG59XG4iLCI8YnV0dG9uXG4gIHR5cGU9XCJidXR0b25cIlxuICBbYXR0ci5pZF09XCJpZFwiXG4gIFthdHRyLmRhdGEtc2l6ZV09XCJzaXplXCJcbiAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICBjbGFzcz1cImMtYnV0dG9uXCJcbiAgW2NsYXNzLmMtYnV0dG9uX3dpdGgtZXJyb3JdPVwiaXNFcnJvclwiXG4gIChjbGljayk9XCJvblN3aXRjaCgpXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkT3B0aW9uOyBlbHNlIHBsYWNlaG9sZGVyVGVtcGxhdGVcIj5cbiAgICB7eyBzZWxlY3RlZE9wdGlvbi5sYWJlbCB9fVxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlclRlbXBsYXRlPlxuICAgIDxzcGFuIGNsYXNzPVwiYy1wbGFjZWhvbGRlclwiPnt7IHBsYWNlaG9sZGVyIH19PC9zcGFuPlxuICA8L25nLXRlbXBsYXRlPlxuICA8Y3VpLXN2Z1xuICAgIGljb249XCJjdWlJY29uQ2hldnJvbkRvd25cIlxuICAgIGNvbG9yPVwidmFyKC0tY3VpLWJhc2UtNTAwKVwiXG4gIC8+XG48L2J1dHRvbj5cbjxkaXZcbiAgKm5nSWY9XCJpc09wZW5lZFwiXG4gIGNsYXNzPVwiYy1vcHRpb25zX193cmFwcGVyXCJcbiAgW2NsYXNzLmMtb3B0aW9uc19fd3JhcHBlcl90b3BdPVwiaXNPcHRpb25zTGlzdEFib3ZlXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm9wdGlvbnNMaXN0XCIvPlxuPC9kaXY+XG48ZGl2XG4gICNnZXRPcHRpb25zTGlzdEhlaWdodENvbnRhaW5lclxuICBjbGFzcz1cImMtZ2V0LW9wdGlvbnMtbGlzdC1oZWlnaHQtY29udGFpbmVyXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm9wdGlvbnNMaXN0XCIvPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI29wdGlvbnNMaXN0PlxuICA8dWxcbiAgICBjbGFzcz1cImMtb3B0aW9uc1wiXG4gICAgW2NsYXNzLmMtb3B0aW9uc190b3BdPVwiaXNPcHRpb25zTGlzdEFib3ZlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zLmxlbmd0aDsgZWxzZSBlbXB0eVwiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uczsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImMtb3B0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgW2NsYXNzLmMtb3B0aW9uLWJ1dHRvbl9zZWxlY3RlZF09XCJzZWxlY3RlZE9wdGlvbiA9PT0gb3B0aW9uXCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3Qob3B0aW9uKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj57eyBvcHRpb24ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPGN1aS1zdmdcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRPcHRpb24gPT09IG9wdGlvblwiXG4gICAgICAgICAgICBpY29uPVwiY3VpSWNvbkNoZWNrU21cIlxuICAgICAgICAgICAgY29sb3I9XCJ2YXIoLS1jdWktaW5mbylcIlxuICAgICAgICAgICAgY2xhc3M9XCJjLW9wdGlvbi1idXR0b25fX2ljb25cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgICAgPGxpICpuZ0lmPVwiZGVmYXVsdE9wdGlvblRleHRcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYy1vcHRpb24tYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwib25DbG9zZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGRlZmF1bHRPcHRpb25UZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9zZWxlY3Qvc2VsZWN0LnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJakMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGtDQUFrQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDOzs7OztBQWM1QyxNQUFNLE9BQU8sa0JBQWtCO0lBWi9CO1FBYW1CLFlBQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQzNDLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFn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dkIsY0FBYztzQkFEaEMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSWpCLEdBQUc7c0JBRFosV0FBVzt1QkFBQyxlQUFlO2dCQTRFbEIsY0FBYztzQkFEdkIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBPbkluaXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkLFxuICBIb3N0QmluZGluZyxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBDdWlPbkNoYW5nZSwgQ3VpT25Ub3VjaGVkLCBDdWlOdWxsYWJsZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgeyBDdWlEZXN0cm95U2VydmljZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgeyBjdWlQcm92aWRlLCBDdWlDbGlja091dHNpZGVEaXJlY3RpdmUgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB0eXBlIHsgQ3VpT3B0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IEN1aVNpemVNZCwgQ3VpU2l6ZVNtIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ1VJX1RFWFRfRklFTERfQ09OVFJPTExFUiwgQ1VJX1RFWFRfRklMRURfQ09OVFJPTExFUl9QUk9WSURFUiB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgQ1VJX1JPT1RfU0VMRUNUT1IgfSBmcm9tICcuLi9yb290JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3VpLXNlbGVjdFtvcHRpb25zXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QudGVtcGxhdGUuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5zdHlsZS5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBDVUlfVEVYVF9GSUxFRF9DT05UUk9MTEVSX1BST1ZJREVSLFxuICAgIGN1aVByb3ZpZGUoTkdfVkFMVUVfQUNDRVNTT1IsIEN1aVNlbGVjdENvbXBvbmVudCwgdHJ1ZSksXG4gICAgQ3VpRGVzdHJveVNlcnZpY2VcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtDdWlDbGlja091dHNpZGVEaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIEN1aVNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZikubmF0aXZlRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBpbmplY3QoQ3VpRGVzdHJveVNlcnZpY2UsIHtzZWxmOiB0cnVlfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VpVGV4dEZpZWxkQ29udHJvbGxlciA9IGluamVjdChDVUlfVEVYVF9GSUVMRF9DT05UUk9MTEVSKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdWlDbGlja091dHNpZGVEaXJlY3RpdmUgPSBpbmplY3QoQ3VpQ2xpY2tPdXRzaWRlRGlyZWN0aXZlLCB7c2VsZjogdHJ1ZX0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBTUEFDRV9CRVRXRUVOX0JVVFRPTl9BTkRfT1BUSU9OUyA9IDM7XG5cbiAgcHJvdGVjdGVkIGlzT3BlbmVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBpc09wdGlvbnNMaXN0QWJvdmUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHZhbHVlITogQ3VpTnVsbGFibGU8dW5rbm93bj47XG4gIHByb3RlY3RlZCBvbkNoYW5nZSE6IEN1aU9uQ2hhbmdlPHVua25vd24+O1xuICBwcm90ZWN0ZWQgb25Ub3VjaGVkITogQ3VpT25Ub3VjaGVkO1xuICBwcm90ZWN0ZWQgaXNEaXNhYmxlZCE6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBzZWxlY3RlZE9wdGlvbj86IEN1aU9wdGlvbjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgb3B0aW9ucyE6IEN1aU9wdGlvbltdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWZhdWx0T3B0aW9uVGV4dD86IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdidXR0b24nKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnV0dG9uITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgnZ2V0T3B0aW9uc0xpc3RIZWlnaHRDb250YWluZXInKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2V0T3B0aW9uc0xpc3RIZWlnaHRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxVTGlzdEVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ29wdGlvbnNXcmFwcGVyJylcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnNXcmFwcGVyITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS4tLWMtZ2FwJylcbiAgcHJvdGVjdGVkIGdhcCA9IGAke3RoaXMuU1BBQ0VfQkVUV0VFTl9CVVRUT05fQU5EX09QVElPTlN9cHhgO1xuXG4gIHByb3RlY3RlZCBnZXQgaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jdWlUZXh0RmllbGRDb250cm9sbGVyLmlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBzaXplKCk6IEN1aVNpemVTbSB8IEN1aVNpemVNZCB7XG4gICAgcmV0dXJuIHRoaXMuY3VpVGV4dEZpZWxkQ29udHJvbGxlci5zaXplO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmN1aVRleHRGaWVsZENvbnRyb2xsZXIucGxhY2Vob2xkZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VpVGV4dEZpZWxkQ29udHJvbGxlci5pc0Vycm9yO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrQnlGbihfOiBudW1iZXIsIGl0ZW06IEN1aU9wdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0ubGFiZWw7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUgYXMgQ3VpT3B0aW9uO1xuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBDdWlPbkNoYW5nZTx1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogQ3VpT25Ub3VjaGVkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRDbGlja091dHNpZGVTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblNlbGVjdChvcHRpb246IEN1aU9wdGlvbik6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBvcHRpb24udmFsdWU7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbjtcblxuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5vblN3aXRjaCgpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Td2l0Y2goKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubGVuZ3RoICYmICF0aGlzLmRlZmF1bHRPcHRpb25UZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzT3BlbmVkKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBwcm90ZWN0ZWQgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgdGhpcy5idXR0b24ubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q2xpY2tPdXRzaWRlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuY3VpQ2xpY2tPdXRzaWRlRGlyZWN0aXZlLmN1aUNsaWNrT3V0c2lkZVxuICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzT3BlbmVkKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLmlzT3BlbmVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHRvcDogZWxlbWVudFJlY3RUb3AsXG4gICAgICBsZWZ0OiBlbGVtZW50UmVjdExlZnQsXG4gICAgICBib3R0b206IGVsZW1lbnRSZWN0Qm90dG9tXG4gICAgfSA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBkaXN0YW5jZVRvQm90dG9tID0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgICAtIChlbGVtZW50UmVjdEJvdHRvbSArIHRoaXMuU1BBQ0VfQkVUV0VFTl9CVVRUT05fQU5EX09QVElPTlMpO1xuICAgIGNvbnN0IGVtYmVkZGVkVmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5vcHRpb25zV3JhcHBlcik7XG4gICAgY29uc3Qgbm9kZSA9IGVtYmVkZGVkVmlld1JlZi5yb290Tm9kZXNbMF07XG4gICAgY29uc3Qgbm9kZVN0eWxlcyA9IG5vZGUuc3R5bGU7XG5cbiAgICB0aGlzLmlzT3B0aW9uc0xpc3RBYm92ZSA9IGRpc3RhbmNlVG9Cb3R0b20gPCB0aGlzLmdldE9wdGlvbnNMaXN0SGVpZ2h0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gICAgZW1iZWRkZWRWaWV3UmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgIG5vZGVTdHlsZXMud2lkdGggPSB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xuICAgIG5vZGVTdHlsZXMubGVmdCA9IHdpbmRvdy5zY3JvbGxYICsgZWxlbWVudFJlY3RMZWZ0ICsgJ3B4JztcblxuICAgIGlmICh0aGlzLmlzT3B0aW9uc0xpc3RBYm92ZSkge1xuICAgICAgbm9kZVN0eWxlcy50b3AgPSB3aW5kb3cuc2Nyb2xsWSArIGVsZW1lbnRSZWN0VG9wXG4gICAgICAgIC0gdGhpcy5nZXRPcHRpb25zTGlzdEhlaWdodENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodFxuICAgICAgICAtIHRoaXMuU1BBQ0VfQkVUV0VFTl9CVVRUT05fQU5EX09QVElPTlNcbiAgICAgICAgKyAncHgnO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlU3R5bGVzLnRvcCA9IHdpbmRvdy5zY3JvbGxZICsgZWxlbWVudFJlY3RCb3R0b20gKyB0aGlzLlNQQUNFX0JFVFdFRU5fQlVUVE9OX0FORF9PUFRJT05TICsgJ3B4JztcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoQ1VJX1JPT1RfU0VMRUNUT1IpIS5hcHBlbmRDaGlsZChlbWJlZGRlZFZpZXdSZWYucm9vdE5vZGVzWzBdKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5pc09wZW5lZCA9IGZhbHNlO1xuXG4gICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gIH1cbn1cbiIsIjxidXR0b25cbiAgI2J1dHRvblxuICB0eXBlPVwiYnV0dG9uXCJcbiAgW2F0dHIuaWRdPVwiaWRcIlxuICBbYXR0ci5kYXRhLXNpemVdPVwic2l6ZVwiXG4gIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgY2xhc3M9XCJjLWJ1dHRvblwiXG4gIFtjbGFzcy5jLWJ1dHRvbl9hY3RpdmVdPVwiaXNPcGVuZWRcIlxuICBbY2xhc3MuYy1idXR0b25fd2l0aC1lcnJvcl09XCJpc0Vycm9yXCJcbiAgKGNsaWNrKT1cIm9uU3dpdGNoKClcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRPcHRpb247IGVsc2UgcGxhY2Vob2xkZXJUZW1wbGF0ZVwiPlxuICAgIHt7IHNlbGVjdGVkT3B0aW9uLmxhYmVsIH19XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyVGVtcGxhdGU+XG4gICAgPHNwYW4gY2xhc3M9XCJjLXBsYWNlaG9sZGVyXCI+e3sgcGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxjdWktc3ZnXG4gICAgaWNvbj1cImN1aUljb25DaGV2cm9uRG93blwiXG4gICAgY29sb3I9XCJ2YXIoLS1jdWktYmFzZS01MDApXCJcbiAgLz5cbjwvYnV0dG9uPlxuPG5nLXRlbXBsYXRlICNvcHRpb25zV3JhcHBlcj5cbiAgPGRpdlxuICAgICAgY2xhc3M9XCJjLW9wdGlvbnNfX3dyYXBwZXJcIlxuICAgICAgW2NsYXNzLmMtb3B0aW9uc19fd3JhcHBlcl90b3BdPVwiaXNPcHRpb25zTGlzdEFib3ZlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb25zTGlzdFwiLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPGRpdlxuICAjZ2V0T3B0aW9uc0xpc3RIZWlnaHRDb250YWluZXJcbiAgY2xhc3M9XCJjLWdldC1vcHRpb25zLWxpc3QtaGVpZ2h0LWNvbnRhaW5lclwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb25zTGlzdFwiLz5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNvcHRpb25zTGlzdD5cbiAgPHVsXG4gICAgY2xhc3M9XCJjLW9wdGlvbnNcIlxuICAgIFtjbGFzcy5jLW9wdGlvbnNfdG9wXT1cImlzT3B0aW9uc0xpc3RBYm92ZVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9ucy5sZW5ndGg7IGVsc2UgZW1wdHlcIj5cbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjLW9wdGlvbi1idXR0b25cIlxuICAgICAgICAgIFtjbGFzcy5jLW9wdGlvbi1idXR0b25fc2VsZWN0ZWRdPVwic2VsZWN0ZWRPcHRpb24gPT09IG9wdGlvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KG9wdGlvbilcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4+e3sgb3B0aW9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDxjdWktc3ZnXG4gICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkT3B0aW9uID09PSBvcHRpb25cIlxuICAgICAgICAgICAgaWNvbj1cImN1aUljb25DaGVja1NtXCJcbiAgICAgICAgICAgIGNvbG9yPVwidmFyKC0tY3VpLWluZm8pXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYy1vcHRpb24tYnV0dG9uX19pY29uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgIDxsaSAqbmdJZj1cImRlZmF1bHRPcHRpb25UZXh0XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImMtb3B0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBkZWZhdWx0T3B0aW9uVGV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|