@ngutil/layout 0.0.63 → 0.0.65
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/docking/docking-backdrop.component.d.ts +2 -2
- package/docking/docking-layout.component.d.ts +9 -15
- package/docking/docking-panel.component.d.ts +18 -38
- package/esm2022/docking/docking-backdrop.component.mjs +8 -9
- package/esm2022/docking/docking-content.component.mjs +3 -3
- package/esm2022/docking/docking-layout.component.mjs +30 -161
- package/esm2022/docking/docking-panel.component.mjs +52 -197
- package/esm2022/l9/range.mjs +43 -21
- package/fesm2022/ngutil-layout.mjs +131 -383
- package/fesm2022/ngutil-layout.mjs.map +1 -1
- package/l9/range.d.ts +19 -7
- package/package.json +3 -3
|
@@ -1,215 +1,70 @@
|
|
|
1
|
-
import { Component, ElementRef, inject,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { Component, computed, ElementRef, inject, input, model, viewChild } from "@angular/core";
|
|
2
|
+
import { takeUntilDestroyed, toObservable, toSignal } from "@angular/core/rxjs-interop";
|
|
3
|
+
import { switchMap } from "rxjs";
|
|
4
|
+
import { coerceBoolAttr } from "@ngutil/common";
|
|
4
5
|
import { DimensionWatcher } from "@ngutil/style";
|
|
5
6
|
import { L9Range } from "../l9/range";
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
const DEFAULT_POSITION = L9Range.coerce("left");
|
|
8
|
-
|
|
9
|
-
const AUTO_SIZE = NumberWithUnit.coerce("auto");
|
|
10
|
-
export class DockingPanelComponent extends Destructible {
|
|
11
|
-
#dimWatcher;
|
|
12
|
-
set positionInput(val) {
|
|
13
|
-
const coerced = L9Range.coerce(val);
|
|
14
|
-
if (coerced.orient === "rect") {
|
|
15
|
-
throw new Error(`Invalid position value: ${val}`);
|
|
16
|
-
}
|
|
17
|
-
if (!this.position.value.isEq(coerced)) {
|
|
18
|
-
this.position.next(coerced);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
set stateInput(val) {
|
|
22
|
-
if (this.state.value !== val) {
|
|
23
|
-
this.state.next(val);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
set modeInput(val) {
|
|
27
|
-
if (this.mode.value !== val) {
|
|
28
|
-
this.mode.next(val);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
set fullSizeInput(val) {
|
|
32
|
-
const coerced = NumberWithUnit.coerce(val, "px");
|
|
33
|
-
if (this.#fullSize.value !== coerced) {
|
|
34
|
-
this.#fullSize.next(coerced);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
#fullSize;
|
|
38
|
-
set miniSizeInput(val) {
|
|
39
|
-
const coerced = NumberWithUnit.coerce(val, "px");
|
|
40
|
-
if (this.#miniSize.value !== coerced) {
|
|
41
|
-
this.#miniSize.next(coerced);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
#miniSize;
|
|
45
|
-
set minimizable(val) {
|
|
46
|
-
this.#minimizable = coerceBoolAttr(val);
|
|
47
|
-
this.#minimizableAuto = false;
|
|
48
|
-
}
|
|
49
|
-
get minimizable() {
|
|
50
|
-
return this.#minimizable;
|
|
51
|
-
}
|
|
52
|
-
#minimizable;
|
|
53
|
-
#minimizableAuto;
|
|
54
|
-
set backdrop(val) {
|
|
55
|
-
this.#backdrop = coerceBoolAttr(val);
|
|
56
|
-
}
|
|
57
|
-
get backdrop() {
|
|
58
|
-
return this.#backdrop;
|
|
59
|
-
}
|
|
60
|
-
#backdrop;
|
|
61
|
-
#contentSize;
|
|
62
|
-
#autoSize;
|
|
63
|
-
// TODO: better animation handling in min -> hidden -> min -> full
|
|
9
|
+
export class DockingPanelComponent {
|
|
64
10
|
constructor() {
|
|
65
|
-
super();
|
|
66
|
-
this.el = inject((ElementRef));
|
|
67
11
|
this.#dimWatcher = inject(DimensionWatcher);
|
|
68
|
-
this.
|
|
69
|
-
this.
|
|
70
|
-
|
|
71
|
-
this
|
|
72
|
-
this
|
|
73
|
-
this
|
|
74
|
-
this
|
|
75
|
-
this
|
|
76
|
-
this
|
|
77
|
-
this
|
|
78
|
-
|
|
79
|
-
pos
|
|
80
|
-
|
|
81
|
-
if (pos.orient === "horizontal") {
|
|
82
|
-
return dim.height;
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
return dim.width;
|
|
86
|
-
}
|
|
87
|
-
}), shareReplay(1));
|
|
88
|
-
this.fullSize = this.#fullSize.pipe(switchMap(size => {
|
|
89
|
-
if (size.unit === "auto") {
|
|
90
|
-
return this.#autoSize;
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
return of(size);
|
|
94
|
-
}
|
|
95
|
-
}), shareReplay(1));
|
|
96
|
-
this.miniSize = this.#miniSize.pipe(switchMap(size => {
|
|
97
|
-
if (size.unit === "auto") {
|
|
98
|
-
return this.#autoSize;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
return of(size);
|
|
102
|
-
}
|
|
103
|
-
}), shareReplay(1));
|
|
104
|
-
this.changes = combineLatest({
|
|
105
|
-
position: this.position,
|
|
106
|
-
state: this.state,
|
|
107
|
-
mode: this.mode,
|
|
108
|
-
fullSize: this.fullSize,
|
|
109
|
-
miniSize: this.miniSize,
|
|
110
|
-
contentSize: this.#contentSize
|
|
12
|
+
this.el = inject(ElementRef);
|
|
13
|
+
this.position = input(DEFAULT_POSITION, { transform: L9Range.coerce });
|
|
14
|
+
// TODO: linkedSignal
|
|
15
|
+
this.opened = model(false);
|
|
16
|
+
this._opened = computed(() => coerceBoolAttr(this.opened()));
|
|
17
|
+
this.mode = input("rigid");
|
|
18
|
+
this.maxSize = input(undefined);
|
|
19
|
+
this.backdrop = input(false);
|
|
20
|
+
this.gridArea = computed(() => this.position().intoGridArea());
|
|
21
|
+
this.orient = computed(() => this.position().orient);
|
|
22
|
+
this.side = computed(() => {
|
|
23
|
+
const pos = this.position();
|
|
24
|
+
return pos.orient === "horizontal" ? pos.cells[0].v : pos.cells[0].h;
|
|
111
25
|
});
|
|
112
|
-
this.
|
|
113
|
-
|
|
114
|
-
|
|
26
|
+
this.content = viewChild.required("content", { read: ElementRef });
|
|
27
|
+
this.dimension$ = toObservable(this.content).pipe(switchMap(content => this.#dimWatcher.watch(content, "border-box")), takeUntilDestroyed());
|
|
28
|
+
this.dimension = toSignal(this.dimension$);
|
|
29
|
+
this.contentSize = computed(() => {
|
|
30
|
+
const dim = this.dimension();
|
|
31
|
+
if (!dim) {
|
|
32
|
+
return 0;
|
|
115
33
|
}
|
|
116
|
-
|
|
117
|
-
state: changes.state,
|
|
118
|
-
orient: changes.position.orient,
|
|
119
|
-
mode: changes.mode,
|
|
120
|
-
side: changes.position.orient === "horizontal" ? changes.position.cells[0].v : changes.position.cells[0].h
|
|
121
|
-
});
|
|
122
|
-
const isHorizontal = changes.position.orient === "horizontal";
|
|
123
|
-
let w = null;
|
|
124
|
-
let h = null;
|
|
125
|
-
// TODO: when change state from mini -> hidden, currently wrong behavior
|
|
126
|
-
// the good behavior is to not gain fullSize ang go to hidden
|
|
127
|
-
if (changes.state === "mini") {
|
|
128
|
-
if (isHorizontal) {
|
|
129
|
-
h = changes.miniSize.unit === "auto" ? changes.contentSize.height : changes.miniSize;
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
w = changes.miniSize.unit === "auto" ? changes.contentSize.width : changes.miniSize;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
if (isHorizontal) {
|
|
137
|
-
h = changes.fullSize.unit === "auto" ? changes.contentSize.height : changes.fullSize;
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
w = changes.fullSize.unit === "auto" ? changes.contentSize.width : changes.fullSize;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
FastDOM.setStyle(this.el.nativeElement, {
|
|
144
|
-
"--docking-panel-w": w != null ? `${w}` : null,
|
|
145
|
-
"--docking-panel-h": h != null ? `${h}` : null,
|
|
146
|
-
"--docking-panel-content-w": changes.contentSize.width,
|
|
147
|
-
"--docking-panel-content-h": changes.contentSize.height
|
|
148
|
-
}, () => FastDOM.setAttributes(this.el.nativeElement, { animate: "" }));
|
|
34
|
+
return this.orient() === "horizontal" ? dim.height : dim.width;
|
|
149
35
|
});
|
|
150
36
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
37
|
+
#dimWatcher;
|
|
38
|
+
// readonly backdropSize = computed(() => {
|
|
39
|
+
// const mode = this.backdrop()
|
|
40
|
+
// if (mode === true || mode === "full") {
|
|
41
|
+
// return L9Range.coerce("top:left-bottom:right").intoGridArea()
|
|
42
|
+
// } else if (mode === "panel-size") {
|
|
43
|
+
// const pos = this.position()
|
|
44
|
+
// if (pos.orient === "horizontal") {
|
|
45
|
+
// }
|
|
46
|
+
// return ""
|
|
47
|
+
// }
|
|
48
|
+
// return null
|
|
49
|
+
// })
|
|
162
50
|
open() {
|
|
163
|
-
this.
|
|
51
|
+
this.opened.set(true);
|
|
164
52
|
}
|
|
165
53
|
close() {
|
|
166
|
-
this.
|
|
167
|
-
}
|
|
168
|
-
minimize() {
|
|
169
|
-
if (this.minimizable) {
|
|
170
|
-
this.state.next("mini");
|
|
171
|
-
}
|
|
54
|
+
this.opened.set(false);
|
|
172
55
|
}
|
|
173
56
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DockingPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
174
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
175
|
-
<div class="nu-docking-wrapper" #content>
|
|
176
|
-
<ng-content></ng-content>
|
|
177
|
-
</div>
|
|
178
|
-
`, isInline: true, styles: [":host{---docking-panel-t: var(--docking-panel-t, auto);---docking-panel-r: var(--docking-panel-r, auto);---docking-panel-b: var(--docking-panel-b, auto);---docking-panel-l: var(--docking-panel-l, auto);---docking-panel-w: var(--docking-panel-w, auto);---docking-panel-h: var(--docking-panel-h, auto);---docking-panel-content-w: var(--docking-panel-content-w, var(---docking-panel-w));---docking-panel-content-g: var(--docking-panel-content-g, var(---docking-panel-h));display:flex;flex-flow:column nowrap;align-items:stretch;position:absolute;box-sizing:border-box;overflow:hidden;top:var(---docking-panel-t);right:var(---docking-panel-r);bottom:var(---docking-panel-b);left:var(---docking-panel-l);width:var(---docking-panel-w);height:var(---docking-panel-h)}:host[animate]{transition:transform var(---docking-layout-anim-duration) var(---docking-layout-anim-ease),width var(---docking-layout-anim-duration) var(---docking-layout-anim-ease),height var(---docking-layout-anim-duration) var(---docking-layout-anim-ease)}:host[side=top],:host[side=left]{---docking-panel-t-hide: -100%;---docking-panel-t-visible: 0%}:host[side=bottom],:host[side=right]{---docking-panel-t-hide: 100%;---docking-panel-t-visible: 0%}:host[state=hidden]{animation:var(---docking-layout-anim-duration) var(---docking-layout-anim-ease) hide;animation-fill-mode:forwards}:host[state=hidden][orient=horizontal]{transform:translateY(var(---docking-panel-t-hide))}:host[state=hidden][orient=vertical]{transform:translate(var(---docking-panel-t-hide))}:host:not([state=hidden]){visibility:visible}:host:not([state=hidden])[orient=horizontal]{transform:translateY(var(---docking-panel-t-visible))}:host:not([state=hidden])[orient=vertical]{transform:translate(var(---docking-panel-t-visible))}:host .nu-docking-wrapper{display:flex;flex-direction:column;align-items:stretch}:host[orient=horizontal] .nu-docking-wrapper{width:100%;min-width:100%;max-width:100%}:host[orient=vertical] .nu-docking-wrapper{height:100%;min-height:100%;max-height:100%}@keyframes hide{99%{visibility:visible}to{visibility:hidden}}\n"] }); }
|
|
57
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.6", type: DockingPanelComponent, isStandalone: true, selector: "nu-docking-panel", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, opened: { classPropertyName: "opened", publicName: "opened", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, maxSize: { classPropertyName: "maxSize", publicName: "maxSize", isSignal: true, isRequired: false, transformFunction: null }, backdrop: { classPropertyName: "backdrop", publicName: "backdrop", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "openedChange" }, host: { properties: { "style.grid-area": "gridArea()", "style.--nudp-content-size.px": "contentSize()", "attr.state": "_opened() ? 'opened' : 'closed'", "attr.orient": "orient()", "attr.side": "side()", "attr.mode": "mode()" } }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, read: ElementRef, isSignal: true }], exportAs: ["nuDockingPanel"], ngImport: i0, template: `<div class="wrapper" #content><ng-content /></div>`, isInline: true, styles: [":host{--nudp-tx: 0;--nudp-ty: 0;--nudp-t: auto;--nudp-r: auto;--nudp-b: auto;--nudp-l: auto;display:block;position:relative;z-index:100}:host .wrapper{all:inherit;display:grid;grid-template-columns:auto;grid-template-rows:auto;align-items:stretch;justify-items:stretch;position:absolute;top:var(--nudp-t);right:var(--nudp-r);bottom:var(--nudp-b);left:var(--nudp-l);width:auto;height:auto;transition:transform .2s cubic-bezier(0,0,.2,1);transform:translate(var(--nudp-tx),var(--nudp-ty))}:host[mode=rigid]{overflow:clip}:host[mode=rigid][orient=horizontal]{transition:height .2s cubic-bezier(0,0,.2,1);height:var(--nudp-content-size)}:host[mode=rigid][orient=horizontal][state=closed]{height:0px}:host[mode=rigid][orient=vertical]{transition:width .2s cubic-bezier(0,0,.2,1);width:var(--nudp-content-size)}:host[mode=rigid][orient=vertical][state=closed]{width:0}:host[mode=over]{z-index:300}:host[orient=horizontal]{--nudp-l: 0px;--nudp-r: 0px}:host[orient=horizontal][side=top]{--nudp-t: 0px}:host[orient=horizontal][side=top][state=closed]{--nudp-ty: -100%}:host[orient=horizontal][side=bottom]{--nudp-b: 0px}:host[orient=horizontal][side=bottom][state=closed]{--nudp-ty: 100%}:host[orient=horizontal]:not([mode=rigid]){height:0px}:host[orient=vertical]{--nudp-t: 0px;--nudp-b: 0px}:host[orient=vertical][side=left]{--nudp-l: 0px}:host[orient=vertical][side=left][state=closed]{--nudp-tx: -100%}:host[orient=vertical][side=right]{--nudp-r: 0px}:host[orient=vertical][side=right][state=closed]{--nudp-tx: 100%}:host[orient=vertical]:not([mode=rigid]){width:0px}\n"] }); }
|
|
179
58
|
}
|
|
180
59
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DockingPanelComponent, decorators: [{
|
|
181
60
|
type: Component,
|
|
182
|
-
args: [{
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
args: ["position"]
|
|
193
|
-
}], stateInput: [{
|
|
194
|
-
type: Input,
|
|
195
|
-
args: ["state"]
|
|
196
|
-
}], state: [{
|
|
197
|
-
type: Output,
|
|
198
|
-
args: ["stateChanges"]
|
|
199
|
-
}], modeInput: [{
|
|
200
|
-
type: Input,
|
|
201
|
-
args: ["mode"]
|
|
202
|
-
}], fullSizeInput: [{
|
|
203
|
-
type: Input,
|
|
204
|
-
args: ["fullSize"]
|
|
205
|
-
}], miniSizeInput: [{
|
|
206
|
-
type: Input,
|
|
207
|
-
args: ["miniSize"]
|
|
208
|
-
}], minimizable: [{
|
|
209
|
-
type: Input,
|
|
210
|
-
args: ["minimizable"]
|
|
211
|
-
}], backdrop: [{
|
|
212
|
-
type: Input,
|
|
213
|
-
args: ["backdrop"]
|
|
214
|
-
}] } });
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2luZy1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2RvY2tpbmcvZG9ja2luZy1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV0RyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRWpILE9BQU8sRUFFSCxjQUFjLEVBQ2QsWUFBWSxFQUNaLE9BQU8sRUFDUCxjQUFjLEVBRWpCLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRWhELE9BQU8sRUFBRSxPQUFPLEVBQWUsTUFBTSxhQUFhLENBQUE7O0FBS2xELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUMvQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDL0MsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQWEvQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsWUFBWTtJQUUxQyxXQUFXLENBQTJCO0lBSS9DLElBQ0ksYUFBYSxDQUFDLEdBQTBCO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbkMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDckQsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUdELElBQ0ksVUFBVSxDQUFDLEdBQXNCO1FBQ2pDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDeEIsQ0FBQztJQUNMLENBQUM7SUFJRCxJQUNJLFNBQVMsQ0FBQyxHQUFxQjtRQUMvQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lBR0QsSUFDSSxhQUFhLENBQUMsR0FBd0I7UUFDdEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDaEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNoQyxDQUFDO0lBQ0wsQ0FBQztJQUNRLFNBQVMsQ0FBaUQ7SUFFbkUsSUFDSSxhQUFhLENBQUMsR0FBd0I7UUFDdEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDaEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNoQyxDQUFDO0lBQ0wsQ0FBQztJQUNRLFNBQVMsQ0FBbUQ7SUFFckUsSUFDSSxXQUFXLENBQUMsR0FBaUI7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtJQUNqQyxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFBO0lBQzVCLENBQUM7SUFDRCxZQUFZLENBQWlCO0lBQzdCLGdCQUFnQixDQUFnQjtJQUVoQyxJQUNJLFFBQVEsQ0FBQyxHQUFpQjtRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN4QyxDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBO0lBQ3pCLENBQUM7SUFDRCxTQUFTLENBQWlCO0lBRWpCLFlBQVksQ0FBMEU7SUFFdEYsU0FBUyxDQVlqQjtJQWlDRCxrRUFBa0U7SUFDbEU7UUFDSSxLQUFLLEVBQUUsQ0FBQTtRQTFIRixPQUFFLEdBQUcsTUFBTSxDQUFDLENBQUEsVUFBdUIsQ0FBQSxDQUFDLENBQUE7UUFDcEMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQWV0QyxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQVUsZ0JBQWdCLENBQUMsQ0FBQTtRQVN6RCxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQW9CLE1BQU0sQ0FBQyxDQUFBO1FBUXRELFNBQUksR0FBRyxJQUFJLGVBQWUsQ0FBbUIsT0FBTyxDQUFDLENBQUE7UUFTckQsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFpQixTQUFTLENBQUMsQ0FBQTtRQVMxRCxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQWlCLFdBQVcsQ0FBQyxDQUFBO1FBVXJFLGlCQUFZLEdBQVksS0FBSyxDQUFBO1FBQzdCLHFCQUFnQixHQUFZLElBQUksQ0FBQTtRQVNoQyxjQUFTLEdBQVksS0FBSyxDQUFBO1FBRWpCLGlCQUFZLEdBQUcsSUFBSSxhQUFhLENBQW9ELENBQUMsQ0FBQyxDQUFBO1FBRXRGLGNBQVMsR0FBRyxhQUFhLENBQUM7WUFDL0IsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3RCLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUNyQixDQUFDLENBQUMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDakIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUM5QixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUE7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQTtZQUNwQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNqQixDQUFBO1FBRVEsYUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDYixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbkIsQ0FBQztRQUNMLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQTtRQUVRLGFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDbkMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUE7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ25CLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUE7UUFFUSxZQUFPLEdBQUcsYUFBYSxDQUFDO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDakMsQ0FBQyxDQUFBO1FBTUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUE7WUFDeEQsQ0FBQztZQUVELE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3pDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDcEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtnQkFDL0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUNsQixJQUFJLEVBQ0EsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0csQ0FBQyxDQUFBO1lBRUYsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFBO1lBQzdELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQTtZQUNaLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQTtZQUVaLHdFQUF3RTtZQUN4RSw2REFBNkQ7WUFDN0QsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixJQUFJLFlBQVksRUFBRSxDQUFDO29CQUNmLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFBO2dCQUN4RixDQUFDO3FCQUFNLENBQUM7b0JBQ0osQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUE7Z0JBQ3ZGLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDZixDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQTtnQkFDeEYsQ0FBQztxQkFBTSxDQUFDO29CQUNKLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFBO2dCQUN2RixDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sQ0FBQyxRQUFRLENBQ1osSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQ3JCO2dCQUNJLG1CQUFtQixFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQzlDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQzlDLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSztnQkFDdEQsMkJBQTJCLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNO2FBQzFELEVBQ0QsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUN0RSxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDdkQsSUFBSSxDQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNOLE9BQU87Z0JBQ0gsS0FBSyxFQUFFLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO2dCQUMxQyxNQUFNLEVBQUUsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7YUFDL0MsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMzQixDQUFDO0lBQ0wsQ0FBQzs4R0FyTVEscUJBQXFCO2tHQUFyQixxQkFBcUIsOGNBR0EsVUFBVSxnR0FUOUI7Ozs7S0FJVDs7MkZBRVEscUJBQXFCO2tCQVhqQyxTQUFTO2lDQUNNLElBQUksWUFDTixrQkFBa0IsWUFDbEIsZ0JBQWdCLFlBRWhCOzs7O0tBSVQ7d0RBTVEsT0FBTztzQkFEZixTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJcEQsYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxVQUFVO2dCQWNiLFVBQVU7c0JBRGIsS0FBSzt1QkFBQyxPQUFPO2dCQU9MLEtBQUs7c0JBRGIsTUFBTTt1QkFBQyxjQUFjO2dCQUlsQixTQUFTO3NCQURaLEtBQUs7dUJBQUMsTUFBTTtnQkFTVCxhQUFhO3NCQURoQixLQUFLO3VCQUFDLFVBQVU7Z0JBVWIsYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxVQUFVO2dCQVViLFdBQVc7c0JBRGQsS0FBSzt1QkFBQyxhQUFhO2dCQVloQixRQUFRO3NCQURYLEtBQUs7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHtcbiAgICBCb29sZWFuSW5wdXQsXG4gICAgY29lcmNlQm9vbEF0dHIsXG4gICAgRGVzdHJ1Y3RpYmxlLFxuICAgIEZhc3RET00sXG4gICAgTnVtYmVyV2l0aFVuaXQsXG4gICAgTnVtYmVyV2l0aFVuaXRJbnB1dFxufSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuaW1wb3J0IHsgRGltZW5zaW9uV2F0Y2hlciB9IGZyb20gXCJAbmd1dGlsL3N0eWxlXCJcblxuaW1wb3J0IHsgTDlSYW5nZSwgTDlSYW5nZU5hbWUgfSBmcm9tIFwiLi4vbDkvcmFuZ2VcIlxuXG5leHBvcnQgdHlwZSBEb2NraW5nUGFuZWxTdGF0ZSA9IFwiZnVsbFwiIHwgXCJtaW5pXCIgfCBcImhpZGRlblwiXG5leHBvcnQgdHlwZSBEb2NraW5nUGFuZWxNb2RlID0gXCJvdmVyXCIgfCBcInB1c2hcIiB8IFwicmlnaWRcIlxuXG5jb25zdCBERUZBVUxUX1BPU0lUSU9OID0gTDlSYW5nZS5jb2VyY2UoXCJsZWZ0XCIpXG5jb25zdCBISURERU5fU0laRSA9IG5ldyBOdW1iZXJXaXRoVW5pdCgwLCBcInB4XCIpXG5jb25zdCBBVVRPX1NJWkUgPSBOdW1iZXJXaXRoVW5pdC5jb2VyY2UoXCJhdXRvXCIpXG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwibnUtZG9ja2luZy1wYW5lbFwiLFxuICAgIGV4cG9ydEFzOiBcIm51RG9ja2luZ1BhbmVsXCIsXG4gICAgc3R5bGVVcmw6IFwiLi9kb2NraW5nLXBhbmVsLmNvbXBvbmVudC5zY3NzXCIsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cIm51LWRvY2tpbmctd3JhcHBlclwiICNjb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIERvY2tpbmdQYW5lbENvbXBvbmVudCBleHRlbmRzIERlc3RydWN0aWJsZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIHJlYWRvbmx5IGVsID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KVxuICAgIHJlYWRvbmx5ICNkaW1XYXRjaGVyID0gaW5qZWN0KERpbWVuc2lvbldhdGNoZXIpXG4gICAgQFZpZXdDaGlsZChcImNvbnRlbnRcIiwgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICByZWFkb25seSBjb250ZW50ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cblxuICAgIEBJbnB1dChcInBvc2l0aW9uXCIpXG4gICAgc2V0IHBvc2l0aW9uSW5wdXQodmFsOiBMOVJhbmdlIHwgTDlSYW5nZU5hbWUpIHtcbiAgICAgICAgY29uc3QgY29lcmNlZCA9IEw5UmFuZ2UuY29lcmNlKHZhbClcbiAgICAgICAgaWYgKGNvZXJjZWQub3JpZW50ID09PSBcInJlY3RcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBvc2l0aW9uIHZhbHVlOiAke3ZhbH1gKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnBvc2l0aW9uLnZhbHVlLmlzRXEoY29lcmNlZCkpIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ubmV4dChjb2VyY2VkKVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlYWRvbmx5IHBvc2l0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMOVJhbmdlPihERUZBVUxUX1BPU0lUSU9OKVxuXG4gICAgQElucHV0KFwic3RhdGVcIilcbiAgICBzZXQgc3RhdGVJbnB1dCh2YWw6IERvY2tpbmdQYW5lbFN0YXRlKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnZhbHVlICE9PSB2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUubmV4dCh2YWwpXG4gICAgICAgIH1cbiAgICB9XG4gICAgQE91dHB1dChcInN0YXRlQ2hhbmdlc1wiKVxuICAgIHJlYWRvbmx5IHN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb2NraW5nUGFuZWxTdGF0ZT4oXCJmdWxsXCIpXG5cbiAgICBASW5wdXQoXCJtb2RlXCIpXG4gICAgc2V0IG1vZGVJbnB1dCh2YWw6IERvY2tpbmdQYW5lbE1vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZS52YWx1ZSAhPT0gdmFsKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGUubmV4dCh2YWwpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZG9ubHkgbW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9ja2luZ1BhbmVsTW9kZT4oXCJyaWdpZFwiKVxuXG4gICAgQElucHV0KFwiZnVsbFNpemVcIilcbiAgICBzZXQgZnVsbFNpemVJbnB1dCh2YWw6IE51bWJlcldpdGhVbml0SW5wdXQpIHtcbiAgICAgICAgY29uc3QgY29lcmNlZCA9IE51bWJlcldpdGhVbml0LmNvZXJjZSh2YWwsIFwicHhcIilcbiAgICAgICAgaWYgKHRoaXMuI2Z1bGxTaXplLnZhbHVlICE9PSBjb2VyY2VkKSB7XG4gICAgICAgICAgICB0aGlzLiNmdWxsU2l6ZS5uZXh0KGNvZXJjZWQpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZG9ubHkgI2Z1bGxTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOdW1iZXJXaXRoVW5pdD4oQVVUT19TSVpFKVxuXG4gICAgQElucHV0KFwibWluaVNpemVcIilcbiAgICBzZXQgbWluaVNpemVJbnB1dCh2YWw6IE51bWJlcldpdGhVbml0SW5wdXQpIHtcbiAgICAgICAgY29uc3QgY29lcmNlZCA9IE51bWJlcldpdGhVbml0LmNvZXJjZSh2YWwsIFwicHhcIilcbiAgICAgICAgaWYgKHRoaXMuI21pbmlTaXplLnZhbHVlICE9PSBjb2VyY2VkKSB7XG4gICAgICAgICAgICB0aGlzLiNtaW5pU2l6ZS5uZXh0KGNvZXJjZWQpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZG9ubHkgI21pbmlTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOdW1iZXJXaXRoVW5pdD4oSElEREVOX1NJWkUpXG5cbiAgICBASW5wdXQoXCJtaW5pbWl6YWJsZVwiKVxuICAgIHNldCBtaW5pbWl6YWJsZSh2YWw6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLiNtaW5pbWl6YWJsZSA9IGNvZXJjZUJvb2xBdHRyKHZhbClcbiAgICAgICAgdGhpcy4jbWluaW1pemFibGVBdXRvID0gZmFsc2VcbiAgICB9XG4gICAgZ2V0IG1pbmltaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWluaW1pemFibGVcbiAgICB9XG4gICAgI21pbmltaXphYmxlOiBib29sZWFuID0gZmFsc2VcbiAgICAjbWluaW1pemFibGVBdXRvOiBib29sZWFuID0gdHJ1ZVxuXG4gICAgQElucHV0KFwiYmFja2Ryb3BcIilcbiAgICBzZXQgYmFja2Ryb3AodmFsOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy4jYmFja2Ryb3AgPSBjb2VyY2VCb29sQXR0cih2YWwpXG4gICAgfVxuICAgIGdldCBiYWNrZHJvcCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2JhY2tkcm9wXG4gICAgfVxuICAgICNiYWNrZHJvcDogYm9vbGVhbiA9IGZhbHNlXG5cbiAgICByZWFkb25seSAjY29udGVudFNpemUgPSBuZXcgUmVwbGF5U3ViamVjdDx7IHdpZHRoOiBOdW1iZXJXaXRoVW5pdDsgaGVpZ2h0OiBOdW1iZXJXaXRoVW5pdCB9PigxKVxuXG4gICAgcmVhZG9ubHkgI2F1dG9TaXplID0gY29tYmluZUxhdGVzdCh7XG4gICAgICAgIGRpbTogdGhpcy4jY29udGVudFNpemUsXG4gICAgICAgIHBvczogdGhpcy5wb3NpdGlvblxuICAgIH0pLnBpcGUoXG4gICAgICAgIG1hcCgoeyBkaW0sIHBvcyB9KSA9PiB7XG4gICAgICAgICAgICBpZiAocG9zLm9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGltLmhlaWdodFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGltLndpZHRoXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGZ1bGxTaXplID0gdGhpcy4jZnVsbFNpemUucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHNpemUgPT4ge1xuICAgICAgICAgICAgaWYgKHNpemUudW5pdCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jYXV0b1NpemVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHNpemUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IG1pbmlTaXplID0gdGhpcy4jbWluaVNpemUucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHNpemUgPT4ge1xuICAgICAgICAgICAgaWYgKHNpemUudW5pdCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jYXV0b1NpemVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHNpemUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGNoYW5nZXMgPSBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb24sXG4gICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgIGZ1bGxTaXplOiB0aGlzLmZ1bGxTaXplLFxuICAgICAgICBtaW5pU2l6ZTogdGhpcy5taW5pU2l6ZSxcbiAgICAgICAgY29udGVudFNpemU6IHRoaXMuI2NvbnRlbnRTaXplXG4gICAgfSlcblxuICAgIC8vIFRPRE86IGJldHRlciBhbmltYXRpb24gaGFuZGxpbmcgaW4gbWluIC0+IGhpZGRlbiAtPiBtaW4gLT4gZnVsbFxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpXG5cbiAgICAgICAgdGhpcy5kLnN1Yih0aGlzLmNoYW5nZXMpLnN1YnNjcmliZShjaGFuZ2VzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNtaW5pbWl6YWJsZUF1dG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNtaW5pbWl6YWJsZSA9IHRoaXMuI21pbmlTaXplLnZhbHVlLnZhbHVlICE9PSAwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEZhc3RET00uc2V0QXR0cmlidXRlcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogY2hhbmdlcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBvcmllbnQ6IGNoYW5nZXMucG9zaXRpb24ub3JpZW50LFxuICAgICAgICAgICAgICAgIG1vZGU6IGNoYW5nZXMubW9kZSxcbiAgICAgICAgICAgICAgICBzaWRlOlxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnBvc2l0aW9uLm9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIgPyBjaGFuZ2VzLnBvc2l0aW9uLmNlbGxzWzBdLnYgOiBjaGFuZ2VzLnBvc2l0aW9uLmNlbGxzWzBdLmhcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGNoYW5nZXMucG9zaXRpb24ub3JpZW50ID09PSBcImhvcml6b250YWxcIlxuICAgICAgICAgICAgbGV0IHcgPSBudWxsXG4gICAgICAgICAgICBsZXQgaCA9IG51bGxcblxuICAgICAgICAgICAgLy8gVE9ETzogd2hlbiBjaGFuZ2Ugc3RhdGUgZnJvbSBtaW5pIC0+IGhpZGRlbiwgY3VycmVudGx5IHdyb25nIGJlaGF2aW9yXG4gICAgICAgICAgICAvLyB0aGUgZ29vZCBiZWhhdmlvciBpcyB0byBub3QgZ2FpbiBmdWxsU2l6ZSBhbmcgZ28gdG8gaGlkZGVuXG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zdGF0ZSA9PT0gXCJtaW5pXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGggPSBjaGFuZ2VzLm1pbmlTaXplLnVuaXQgPT09IFwiYXV0b1wiID8gY2hhbmdlcy5jb250ZW50U2l6ZS5oZWlnaHQgOiBjaGFuZ2VzLm1pbmlTaXplXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdyA9IGNoYW5nZXMubWluaVNpemUudW5pdCA9PT0gXCJhdXRvXCIgPyBjaGFuZ2VzLmNvbnRlbnRTaXplLndpZHRoIDogY2hhbmdlcy5taW5pU2l6ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgICAgICBoID0gY2hhbmdlcy5mdWxsU2l6ZS51bml0ID09PSBcImF1dG9cIiA/IGNoYW5nZXMuY29udGVudFNpemUuaGVpZ2h0IDogY2hhbmdlcy5mdWxsU2l6ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHcgPSBjaGFuZ2VzLmZ1bGxTaXplLnVuaXQgPT09IFwiYXV0b1wiID8gY2hhbmdlcy5jb250ZW50U2l6ZS53aWR0aCA6IGNoYW5nZXMuZnVsbFNpemVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEZhc3RET00uc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCItLWRvY2tpbmctcGFuZWwtd1wiOiB3ICE9IG51bGwgPyBgJHt3fWAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIi0tZG9ja2luZy1wYW5lbC1oXCI6IGggIT0gbnVsbCA/IGAke2h9YCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiLS1kb2NraW5nLXBhbmVsLWNvbnRlbnQtd1wiOiBjaGFuZ2VzLmNvbnRlbnRTaXplLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICBcIi0tZG9ja2luZy1wYW5lbC1jb250ZW50LWhcIjogY2hhbmdlcy5jb250ZW50U2l6ZS5oZWlnaHRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICgpID0+IEZhc3RET00uc2V0QXR0cmlidXRlcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHsgYW5pbWF0ZTogXCJcIiB9KVxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kXG4gICAgICAgICAgICAuc3ViKHRoaXMuI2RpbVdhdGNoZXIud2F0Y2godGhpcy5jb250ZW50LCBcInNjcm9sbC1ib3hcIikpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoZGltID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBuZXcgTnVtYmVyV2l0aFVuaXQoZGltLndpZHRoLCBcInB4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBuZXcgTnVtYmVyV2l0aFVuaXQoZGltLmhlaWdodCwgXCJweFwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy4jY29udGVudFNpemUpXG4gICAgfVxuXG4gICAgb3BlbigpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5uZXh0KFwiZnVsbFwiKVxuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLnN0YXRlLm5leHQoXCJoaWRkZW5cIilcbiAgICB9XG5cbiAgICBtaW5pbWl6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubWluaW1pemFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUubmV4dChcIm1pbmlcIilcbiAgICAgICAgfVxuICAgIH1cbn1cblxudHlwZSBDaGFuZ2VzT2JzZXJ2YWJsZSA9IHR5cGVvZiBEb2NraW5nUGFuZWxDb21wb25lbnQucHJvdG90eXBlLmNoYW5nZXNcbmV4cG9ydCB0eXBlIERvY2tpbmdQYW5lbENoYW5nZXMgPSBDaGFuZ2VzT2JzZXJ2YWJsZSBleHRlbmRzIE9ic2VydmFibGU8aW5mZXIgVD4gPyBUIDogbmV2ZXJcbiJdfQ==
|
|
61
|
+
args: [{ selector: "nu-docking-panel", exportAs: "nuDockingPanel", standalone: true, host: {
|
|
62
|
+
"[style.grid-area]": "gridArea()",
|
|
63
|
+
"[style.--nudp-content-size.px]": "contentSize()",
|
|
64
|
+
"[attr.state]": "_opened() ? 'opened' : 'closed'",
|
|
65
|
+
"[attr.orient]": "orient()",
|
|
66
|
+
"[attr.side]": "side()",
|
|
67
|
+
"[attr.mode]": "mode()"
|
|
68
|
+
}, template: `<div class="wrapper" #content><ng-content /></div>`, styles: [":host{--nudp-tx: 0;--nudp-ty: 0;--nudp-t: auto;--nudp-r: auto;--nudp-b: auto;--nudp-l: auto;display:block;position:relative;z-index:100}:host .wrapper{all:inherit;display:grid;grid-template-columns:auto;grid-template-rows:auto;align-items:stretch;justify-items:stretch;position:absolute;top:var(--nudp-t);right:var(--nudp-r);bottom:var(--nudp-b);left:var(--nudp-l);width:auto;height:auto;transition:transform .2s cubic-bezier(0,0,.2,1);transform:translate(var(--nudp-tx),var(--nudp-ty))}:host[mode=rigid]{overflow:clip}:host[mode=rigid][orient=horizontal]{transition:height .2s cubic-bezier(0,0,.2,1);height:var(--nudp-content-size)}:host[mode=rigid][orient=horizontal][state=closed]{height:0px}:host[mode=rigid][orient=vertical]{transition:width .2s cubic-bezier(0,0,.2,1);width:var(--nudp-content-size)}:host[mode=rigid][orient=vertical][state=closed]{width:0}:host[mode=over]{z-index:300}:host[orient=horizontal]{--nudp-l: 0px;--nudp-r: 0px}:host[orient=horizontal][side=top]{--nudp-t: 0px}:host[orient=horizontal][side=top][state=closed]{--nudp-ty: -100%}:host[orient=horizontal][side=bottom]{--nudp-b: 0px}:host[orient=horizontal][side=bottom][state=closed]{--nudp-ty: 100%}:host[orient=horizontal]:not([mode=rigid]){height:0px}:host[orient=vertical]{--nudp-t: 0px;--nudp-b: 0px}:host[orient=vertical][side=left]{--nudp-l: 0px}:host[orient=vertical][side=left][state=closed]{--nudp-tx: -100%}:host[orient=vertical][side=right]{--nudp-r: 0px}:host[orient=vertical][side=right][state=closed]{--nudp-tx: 100%}:host[orient=vertical]:not([mode=rigid]){width:0px}\n"] }]
|
|
69
|
+
}] });
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2luZy1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2RvY2tpbmcvZG9ja2luZy1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNoRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRXZGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBOztBQU1yQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7QUFpQi9DLE1BQU0sT0FBTyxxQkFBcUI7SUFmbEM7UUFnQmEsZ0JBQVcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUN0QyxPQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRXZCLGFBQVEsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDMUUscUJBQXFCO1FBQ1osV0FBTSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQTtRQUM5QixZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3ZELFNBQUksR0FBRyxLQUFLLENBQW1CLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZDLFlBQU8sR0FBRyxLQUFLLENBQTRCLFNBQVMsQ0FBQyxDQUFBO1FBQ3JELGFBQVEsR0FBRyxLQUFLLENBQWUsS0FBSyxDQUFDLENBQUE7UUFFckMsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtRQUN6RCxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMvQyxTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7WUFDM0IsT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hFLENBQUMsQ0FBQyxDQUFBO1FBRU8sWUFBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFFN0QsZUFBVSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNqRCxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFDbkUsa0JBQWtCLEVBQUUsQ0FDdkIsQ0FBQTtRQUNRLGNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRXJDLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7WUFDNUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNQLE9BQU8sQ0FBQyxDQUFBO1lBQ1osQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQTtRQUNsRSxDQUFDLENBQUMsQ0FBQTtLQXdCTDtJQXhEWSxXQUFXLENBQTJCO0lBa0MvQywyQ0FBMkM7SUFDM0MsbUNBQW1DO0lBQ25DLDhDQUE4QztJQUM5Qyx3RUFBd0U7SUFDeEUsMENBQTBDO0lBQzFDLHNDQUFzQztJQUN0Qyw2Q0FBNkM7SUFFN0MsWUFBWTtJQUVaLG9CQUFvQjtJQUNwQixRQUFRO0lBQ1Isa0JBQWtCO0lBQ2xCLEtBQUs7SUFFTCxJQUFJO1FBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMxQixDQUFDOzhHQXhEUSxxQkFBcUI7a0dBQXJCLHFCQUFxQixraUNBbUIyQixVQUFVLDJFQXJCekQsb0RBQW9EOzsyRkFFckQscUJBQXFCO2tCQWZqQyxTQUFTOytCQUNJLGtCQUFrQixZQUNsQixnQkFBZ0IsY0FDZCxJQUFJLFFBQ1Y7d0JBQ0YsbUJBQW1CLEVBQUUsWUFBWTt3QkFDakMsZ0NBQWdDLEVBQUUsZUFBZTt3QkFDakQsY0FBYyxFQUFFLGlDQUFpQzt3QkFDakQsZUFBZSxFQUFFLFVBQVU7d0JBQzNCLGFBQWEsRUFBRSxRQUFRO3dCQUN2QixhQUFhLEVBQUUsUUFBUTtxQkFDMUIsWUFFUyxvREFBb0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgdmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wXCJcblxuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBjb2VyY2VCb29sQXR0ciB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5pbXBvcnQgeyBEaW1lbnNpb25XYXRjaGVyIH0gZnJvbSBcIkBuZ3V0aWwvc3R5bGVcIlxuXG5pbXBvcnQgeyBMOVJhbmdlIH0gZnJvbSBcIi4uL2w5L3JhbmdlXCJcblxuZXhwb3J0IHR5cGUgRG9ja2luZ1BhbmVsU3RhdGUgPSBcImZ1bGxcIiB8IFwibWluaVwiIHwgXCJoaWRkZW5cIlxuZXhwb3J0IHR5cGUgRG9ja2luZ1BhbmVsTW9kZSA9IFwib3ZlclwiIHwgXCJwdXNoXCIgfCBcInJpZ2lkXCJcbmV4cG9ydCB0eXBlIEJhY2tkcm9wTW9kZSA9IGJvb2xlYW4gfCBcImZ1bGxcIiB8IFwicGFuZWwtc2l6ZVwiXG5cbmNvbnN0IERFRkFVTFRfUE9TSVRJT04gPSBMOVJhbmdlLmNvZXJjZShcImxlZnRcIilcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibnUtZG9ja2luZy1wYW5lbFwiLFxuICAgIGV4cG9ydEFzOiBcIm51RG9ja2luZ1BhbmVsXCIsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0OiB7XG4gICAgICAgIFwiW3N0eWxlLmdyaWQtYXJlYV1cIjogXCJncmlkQXJlYSgpXCIsXG4gICAgICAgIFwiW3N0eWxlLi0tbnVkcC1jb250ZW50LXNpemUucHhdXCI6IFwiY29udGVudFNpemUoKVwiLFxuICAgICAgICBcIlthdHRyLnN0YXRlXVwiOiBcIl9vcGVuZWQoKSA/ICdvcGVuZWQnIDogJ2Nsb3NlZCdcIixcbiAgICAgICAgXCJbYXR0ci5vcmllbnRdXCI6IFwib3JpZW50KClcIixcbiAgICAgICAgXCJbYXR0ci5zaWRlXVwiOiBcInNpZGUoKVwiLFxuICAgICAgICBcIlthdHRyLm1vZGVdXCI6IFwibW9kZSgpXCJcbiAgICB9LFxuICAgIHN0eWxlVXJsOiBcIi4vZG9ja2luZy1wYW5lbC5jb21wb25lbnQuc2Nzc1wiLFxuICAgIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cIndyYXBwZXJcIiAjY29udGVudD48bmctY29udGVudCAvPjwvZGl2PmBcbn0pXG5leHBvcnQgY2xhc3MgRG9ja2luZ1BhbmVsQ29tcG9uZW50IHtcbiAgICByZWFkb25seSAjZGltV2F0Y2hlciA9IGluamVjdChEaW1lbnNpb25XYXRjaGVyKVxuICAgIHJlYWRvbmx5IGVsID0gaW5qZWN0KEVsZW1lbnRSZWYpXG5cbiAgICByZWFkb25seSBwb3NpdGlvbiA9IGlucHV0KERFRkFVTFRfUE9TSVRJT04sIHsgdHJhbnNmb3JtOiBMOVJhbmdlLmNvZXJjZSB9KVxuICAgIC8vIFRPRE86IGxpbmtlZFNpZ25hbFxuICAgIHJlYWRvbmx5IG9wZW5lZCA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKVxuICAgIHJlYWRvbmx5IF9vcGVuZWQgPSBjb21wdXRlZCgoKSA9PiBjb2VyY2VCb29sQXR0cih0aGlzLm9wZW5lZCgpKSlcbiAgICByZWFkb25seSBtb2RlID0gaW5wdXQ8RG9ja2luZ1BhbmVsTW9kZT4oXCJyaWdpZFwiKVxuICAgIHJlYWRvbmx5IG1heFNpemUgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsPih1bmRlZmluZWQpXG4gICAgcmVhZG9ubHkgYmFja2Ryb3AgPSBpbnB1dDxCYWNrZHJvcE1vZGU+KGZhbHNlKVxuXG4gICAgcmVhZG9ubHkgZ3JpZEFyZWEgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBvc2l0aW9uKCkuaW50b0dyaWRBcmVhKCkpXG4gICAgcmVhZG9ubHkgb3JpZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wb3NpdGlvbigpLm9yaWVudClcbiAgICByZWFkb25seSBzaWRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLnBvc2l0aW9uKClcbiAgICAgICAgcmV0dXJuIHBvcy5vcmllbnQgPT09IFwiaG9yaXpvbnRhbFwiID8gcG9zLmNlbGxzWzBdLnYgOiBwb3MuY2VsbHNbMF0uaFxuICAgIH0pXG5cbiAgICByZWFkb25seSBjb250ZW50ID0gdmlld0NoaWxkLnJlcXVpcmVkKFwiY29udGVudFwiLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcblxuICAgIHJlYWRvbmx5IGRpbWVuc2lvbiQgPSB0b09ic2VydmFibGUodGhpcy5jb250ZW50KS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoY29udGVudCA9PiB0aGlzLiNkaW1XYXRjaGVyLndhdGNoKGNvbnRlbnQsIFwiYm9yZGVyLWJveFwiKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgKVxuICAgIHJlYWRvbmx5IGRpbWVuc2lvbiA9IHRvU2lnbmFsKHRoaXMuZGltZW5zaW9uJClcblxuICAgIHJlYWRvbmx5IGNvbnRlbnRTaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkaW0gPSB0aGlzLmRpbWVuc2lvbigpXG4gICAgICAgIGlmICghZGltKSB7XG4gICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWVudCgpID09PSBcImhvcml6b250YWxcIiA/IGRpbS5oZWlnaHQgOiBkaW0ud2lkdGhcbiAgICB9KVxuXG4gICAgLy8gcmVhZG9ubHkgYmFja2Ryb3BTaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vICAgICBjb25zdCBtb2RlID0gdGhpcy5iYWNrZHJvcCgpXG4gICAgLy8gICAgIGlmIChtb2RlID09PSB0cnVlIHx8IG1vZGUgPT09IFwiZnVsbFwiKSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gTDlSYW5nZS5jb2VyY2UoXCJ0b3A6bGVmdC1ib3R0b206cmlnaHRcIikuaW50b0dyaWRBcmVhKClcbiAgICAvLyAgICAgfSBlbHNlIGlmIChtb2RlID09PSBcInBhbmVsLXNpemVcIikge1xuICAgIC8vICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5wb3NpdGlvbigpXG4gICAgLy8gICAgICAgICBpZiAocG9zLm9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIpIHtcblxuICAgIC8vICAgICAgICAgfVxuXG4gICAgLy8gICAgICAgICByZXR1cm4gXCJcIlxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiBudWxsXG4gICAgLy8gfSlcblxuICAgIG9wZW4oKSB7XG4gICAgICAgIHRoaXMub3BlbmVkLnNldCh0cnVlKVxuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLm9wZW5lZC5zZXQoZmFsc2UpXG4gICAgfVxufVxuIl19
|
package/esm2022/l9/range.mjs
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* -----------------------------------------------
|
|
3
|
-
* | TOP:LEFT | TOP:CENTER | TOP:RIGHT |
|
|
4
|
-
* -----------------------------------------------
|
|
5
|
-
* | MIDDLE:LEFT | MIDDLE:CENTER | MIDDLE:RIGH |
|
|
6
|
-
* -----------------------------------------------
|
|
7
|
-
* | BOTTOMN:LEFT | BOTTOM:CENTER | BOTTOM:RIGHT |
|
|
8
|
-
* -----------------------------------------------
|
|
9
|
-
*/
|
|
10
1
|
const vertical = ["top", "middle", "bottom"];
|
|
11
2
|
const horizontal = ["left", "center", "right"];
|
|
3
|
+
export const L9GridTopLeft = { row: 1, col: 1 };
|
|
12
4
|
export class L9Cell {
|
|
13
5
|
static coerce(value) {
|
|
14
|
-
const [
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
const [v1, v2] = value.split(":");
|
|
7
|
+
const v = vertical.includes(v1) ? v1 : v2;
|
|
8
|
+
const h = horizontal.includes(v1) ? v1 : v2;
|
|
9
|
+
if (v === h) {
|
|
10
|
+
throw new Error(`Invalid cell value: ${value}`);
|
|
17
11
|
}
|
|
18
|
-
|
|
12
|
+
return new L9Cell(v, h);
|
|
19
13
|
}
|
|
20
14
|
constructor(v, h) {
|
|
21
15
|
this.v = v;
|
|
22
16
|
this.h = h;
|
|
23
17
|
}
|
|
18
|
+
intoGridArea(gridTopLeft = L9GridTopLeft) {
|
|
19
|
+
return `${gridTopLeft.row + vertical.indexOf(this.v)}/${gridTopLeft.col + horizontal.indexOf(this.h)}`;
|
|
20
|
+
}
|
|
21
|
+
isEq(other) {
|
|
22
|
+
return this.v === other.v && this.h === other.h;
|
|
23
|
+
}
|
|
24
24
|
}
|
|
25
25
|
export class L9Range {
|
|
26
26
|
static coerce(value) {
|
|
@@ -50,18 +50,40 @@ export class L9Range {
|
|
|
50
50
|
}
|
|
51
51
|
return false;
|
|
52
52
|
}
|
|
53
|
+
intoGridArea(gridTopLeft = L9GridTopLeft) {
|
|
54
|
+
const start = this.cells[0];
|
|
55
|
+
const end = this.cells[this.cells.length - 1];
|
|
56
|
+
const endTopLeft = { row: gridTopLeft.row + 1, col: gridTopLeft.col + 1 };
|
|
57
|
+
return `${start.intoGridArea(gridTopLeft)}/${end.intoGridArea(endTopLeft)}`;
|
|
58
|
+
}
|
|
59
|
+
intoRect() {
|
|
60
|
+
const start = this.cells[0];
|
|
61
|
+
const end = this.cells[this.cells.length - 1];
|
|
62
|
+
const x = horizontal.indexOf(start.h);
|
|
63
|
+
const y = vertical.indexOf(start.v);
|
|
64
|
+
return { x, y, width: horizontal.indexOf(end.h) - x + 1, height: vertical.indexOf(end.v) - y + 1 };
|
|
65
|
+
}
|
|
53
66
|
#determineOrient() {
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
67
|
+
const rect = this.intoRect();
|
|
68
|
+
if (rect.width === rect.height) {
|
|
69
|
+
// corner
|
|
70
|
+
if (rect.x === rect.y) {
|
|
71
|
+
return "vertical";
|
|
72
|
+
}
|
|
73
|
+
if (rect.x === 0 || rect.x === 2) {
|
|
74
|
+
return "vertical";
|
|
75
|
+
}
|
|
76
|
+
else if (rect.y === 0 || rect.y === 2) {
|
|
77
|
+
return "horizontal";
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (rect.width > rect.height) {
|
|
57
81
|
return "horizontal";
|
|
58
82
|
}
|
|
59
|
-
else if (
|
|
83
|
+
else if (rect.height > rect.width) {
|
|
60
84
|
return "vertical";
|
|
61
85
|
}
|
|
62
|
-
|
|
63
|
-
return "rect";
|
|
64
|
-
}
|
|
86
|
+
return "vertical";
|
|
65
87
|
}
|
|
66
88
|
}
|
|
67
89
|
function parse(value) {
|
|
@@ -106,4 +128,4 @@ function parse(value) {
|
|
|
106
128
|
}
|
|
107
129
|
return cells;
|
|
108
130
|
}
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2w5L3JhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBVSxDQUFBO0FBQ3JELE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVUsQ0FBQTtBQVF2RCxNQUFNLE9BQU8sTUFBTTtJQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBaUI7UUFDM0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRS9CLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQVEsQ0FBQyxFQUFFLENBQUM7WUFDL0QsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFRLEVBQUUsQ0FBUSxDQUFDLENBQUE7UUFDekMsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUVELFlBQ29CLENBQWEsRUFDYixDQUFlO1FBRGYsTUFBQyxHQUFELENBQUMsQ0FBWTtRQUNiLE1BQUMsR0FBRCxDQUFDLENBQWM7SUFDaEMsQ0FBQztDQUNQO0FBRUQsTUFBTSxPQUFPLE9BQU87SUFDaEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUE0QjtRQUN0QyxJQUFJLEtBQUssWUFBWSxPQUFPLEVBQUUsQ0FBQztZQUMzQixPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0IsQ0FBQztJQUNMLENBQUM7SUFLRCxZQUFZ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QUcsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNyQyxLQUFLLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDeEQsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQixNQUFNLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIHwgVE9QOkxFRlQgICAgIHwgIFRPUDpDRU5URVIgICB8IFRPUDpSSUdIVCAgICB8XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogfCBNSURETEU6TEVGVCAgfCBNSURETEU6Q0VOVEVSIHwgTUlERExFOlJJR0ggIHxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiB8IEJPVFRPTU46TEVGVCB8IEJPVFRPTTpDRU5URVIgfCBCT1RUT006UklHSFQgfFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCB2ZXJ0aWNhbCA9IFtcInRvcFwiLCBcIm1pZGRsZVwiLCBcImJvdHRvbVwiXSBhcyBjb25zdFxuY29uc3QgaG9yaXpvbnRhbCA9IFtcImxlZnRcIiwgXCJjZW50ZXJcIiwgXCJyaWdodFwiXSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBMOVZlcnRpY2FsID0gXCJ0b3BcIiB8IFwibWlkZGxlXCIgfCBcImJvdHRvbVwiXG5leHBvcnQgdHlwZSBMOUhvcml6b250YWwgPSBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCJcbmV4cG9ydCB0eXBlIEw5Q2VsbE5hbWUgPSBgJHtMOVZlcnRpY2FsfToke0w5SG9yaXpvbnRhbH1gXG5leHBvcnQgdHlwZSBMOVJhbmdlTmFtZSA9IEw5VmVydGljYWwgfCBMOUhvcml6b250YWwgfCBMOUNlbGxOYW1lIHwgYCR7TDlDZWxsTmFtZX0tJHtMOUNlbGxOYW1lfWBcbmV4cG9ydCB0eXBlIEw5T3JpZW50ID0gXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCIgfCBcInJlY3RcIlxuXG5leHBvcnQgY2xhc3MgTDlDZWxsIHtcbiAgICBzdGF0aWMgY29lcmNlKHZhbHVlOiBMOUNlbGxOYW1lKSB7XG4gICAgICAgIGNvbnN0IFt2LCBoXSA9IHZhbHVlLnNwbGl0KFwiOlwiKVxuXG4gICAgICAgIGlmICh2ZXJ0aWNhbC5pbmNsdWRlcyh2IGFzIGFueSkgJiYgaG9yaXpvbnRhbC5pbmNsdWRlcyhoIGFzIGFueSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTDlDZWxsKHYgYXMgYW55LCBoIGFzIGFueSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjZWxsIHZhbHVlOiAke3ZhbHVlfWApXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSB2OiBMOVZlcnRpY2FsLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgaDogTDlIb3Jpem9udGFsXG4gICAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgTDlSYW5nZSB7XG4gICAgc3RhdGljIGNvZXJjZSh2YWx1ZTogTDlSYW5nZSB8IEw5UmFuZ2VOYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEw5UmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMOVJhbmdlKHZhbHVlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgY2VsbHM6IEFycmF5PEw5Q2VsbD5cbiAgICByZWFkb25seSBvcmllbnQ6IEw5T3JpZW50XG5cbiAgICBjb25zdHJ1Y3RvcihyYW5nZTogTDlSYW5nZU5hbWUpIHtcbiAgICAgICAgdGhpcy5jZWxscyA9IHBhcnNlKHJhbmdlKVxuICAgICAgICB0aGlzLm9yaWVudCA9IHRoaXMuI2RldGVybWluZU9yaWVudCgpXG4gICAgfVxuXG4gICAgaXNFcShvdGhlcjogTDlSYW5nZSkge1xuICAgICAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBMOVJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxmRmlyc3QgPSB0aGlzLmNlbGxzWzBdXG4gICAgICAgICAgICBjb25zdCBvdGhlckZpcnN0ID0gb3RoZXIuY2VsbHNbMF1cblxuICAgICAgICAgICAgaWYgKHNlbGZGaXJzdC5oICE9PSBvdGhlckZpcnN0LmggfHwgc2VsZkZpcnN0LnYgIT09IG90aGVyRmlyc3Qudikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzZWxmTGFzdCA9IHRoaXMuY2VsbHNbdGhpcy5jZWxscy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgY29uc3Qgb3RoZXJMYXN0ID0gb3RoZXIuY2VsbHNbb3RoZXIuY2VsbHMubGVuZ3RoIC0gMV1cblxuICAgICAgICAgICAgaWYgKHNlbGZMYXN0LmggPT09IG90aGVyTGFzdC5oICYmIHNlbGZMYXN0LnYgPT09IG90aGVyTGFzdC52KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAjZGV0ZXJtaW5lT3JpZW50KCk6IEw5T3JpZW50IHtcbiAgICAgICAgY29uc3QgeyB2OiBzdiwgaDogc2ggfSA9IHRoaXMuY2VsbHNbMF1cbiAgICAgICAgY29uc3QgeyB2OiBldiwgaDogZWggfSA9IHRoaXMuY2VsbHNbdGhpcy5jZWxscy5sZW5ndGggLSAxXVxuXG4gICAgICAgIGlmIChzdiA9PT0gZXYpIHtcbiAgICAgICAgICAgIHJldHVybiBcImhvcml6b250YWxcIlxuICAgICAgICB9IGVsc2UgaWYgKHNoID09PSBlaCkge1xuICAgICAgICAgICAgcmV0dXJuIFwidmVydGljYWxcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwicmVjdFwiXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHZhbHVlOiBhbnkpOiBBcnJheTxMOUNlbGw+IHtcbiAgICBjb25zdCBjZWxsczogQXJyYXk8TDlDZWxsPiA9IFtdXG5cbiAgICBpZiAodmVydGljYWwuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaCBvZiBob3Jpem9udGFsKSB7XG4gICAgICAgICAgICBjZWxscy5wdXNoKG5ldyBMOUNlbGwodmFsdWUsIGgpKVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChob3Jpem9udGFsLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmVydGljYWwpIHtcbiAgICAgICAgICAgIGNlbGxzLnB1c2gobmV3IEw5Q2VsbCh2LCB2YWx1ZSkpXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluY2x1ZGVzKFwiLVwiKSkge1xuICAgICAgICBjb25zdCBbYmVnaW4sIGVuZF0gPSB2YWx1ZS5zcGxpdChcIi1cIilcbiAgICAgICAgY29uc3QgYmVnaW5DZWxscyA9IHBhcnNlKGJlZ2luKVxuICAgICAgICBjb25zdCBlbmRDZWxscyA9IHBhcnNlKGVuZClcblxuICAgICAgICBpZiAoYmVnaW5DZWxscy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGJlZ2luIHJhbmdlIHZhbHVlOiAke2JlZ2lufWApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW5kQ2VsbHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXJyZW50bHkgbm90IHN1cHBvcnRlZCBlbmQgcmFuZ2UgdmFsdWU6ICR7ZW5kfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHY6IGJ2LCBoOiBiaCB9ID0gYmVnaW5DZWxsc1swXVxuICAgICAgICBjb25zdCB7IHY6IGV2LCBoOiBlaCB9ID0gZW5kQ2VsbHNbMF1cblxuICAgICAgICBjb25zdCB2c3RhcnQgPSBNYXRoLm1pbih2ZXJ0aWNhbC5pbmRleE9mKGJ2IGFzIGFueSksIHZlcnRpY2FsLmluZGV4T2YoZXYgYXMgYW55KSlcbiAgICAgICAgY29uc3QgdmVuZCA9IE1hdGgubWF4KHZlcnRpY2FsLmluZGV4T2YoYnYgYXMgYW55KSwgdmVydGljYWwuaW5kZXhPZihldiBhcyBhbnkpKVxuICAgICAgICBjb25zdCBoc3RhcnQgPSBNYXRoLm1pbihob3Jpem9udGFsLmluZGV4T2YoYmggYXMgYW55KSwgaG9yaXpvbnRhbC5pbmRleE9mKGVoIGFzIGFueSkpXG4gICAgICAgIGNvbnN0IGhlbmQgPSBNYXRoLm1heChob3Jpem9udGFsLmluZGV4T2YoYmggYXMgYW55KSwgaG9yaXpvbnRhbC5pbmRleE9mKGVoIGFzIGFueSkpXG5cbiAgICAgICAgZm9yIChsZXQgdmkgPSB2c3RhcnQ7IHZpIDw9IHZlbmQ7IHZpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGhpID0gaHN0YXJ0OyBoaSA8PSBoZW5kOyBoaSsrKSB7XG4gICAgICAgICAgICAgICAgY2VsbHMucHVzaChuZXcgTDlDZWxsKHZlcnRpY2FsW3ZpXSwgaG9yaXpvbnRhbFtoaV0pKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAgICAgY2VsbHMucHVzaChMOUNlbGwuY29lcmNlKHZhbHVlKSlcbiAgICB9XG5cbiAgICBpZiAoY2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBVbmRlZmluZWQgbDljZWxsOiBcIiR7dmFsdWV9XCJgKVxuICAgIH1cblxuICAgIHJldHVybiBjZWxsc1xufVxuIl19
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2w5L3JhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQVUsQ0FBQTtBQUNyRCxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUE7QUFRdkQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUE7QUFFL0MsTUFBTSxPQUFPLE1BQU07SUFDZixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQWlCO1FBQzNCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNqQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNoRCxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVsRCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDbkQsQ0FBQztRQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBUSxFQUFFLENBQVEsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxZQUNvQixDQUFhLEVBQ2IsQ0FBZTtRQURmLE1BQUMsR0FBRCxDQUFDLENBQVk7UUFDYixNQUFDLEdBQUQsQ0FBQyxDQUFjO0lBQ2hDLENBQUM7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S0FBSyxDQUFDLDRDQUE0QyxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBQ3RFLENBQUM7UUFFRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQVMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLENBQUMsQ0FBQTtRQUNqRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFTLENBQUMsQ0FBQyxDQUFBO1FBQy9FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFTLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQVMsQ0FBQyxDQUFDLENBQUE7UUFDckYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQVMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLENBQUMsQ0FBQTtRQUVuRixLQUFLLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDckMsS0FBSyxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNyQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3hELENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztTQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckIsTUFBTSxLQUFLLENBQUMsc0JBQXNCLEtBQUssR0FBRyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiB8IFRPUDpMRUZUICAgICB8ICBUT1A6Q0VOVEVSICAgfCBUT1A6UklHSFQgICAgfFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogfCBNSURETEU6TEVGVCAgfCBNSURETEU6Q0VOVEVSIHwgTUlERExFOlJJR0hUIHxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIHwgQk9UVE9NTjpMRUZUIHwgQk9UVE9NOkNFTlRFUiB8IEJPVFRPTTpSSUdIVCB8XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5pbXBvcnQgeyBSZWN0IH0gZnJvbSBcIkBuZ3V0aWwvc3R5bGVcIlxuXG5jb25zdCB2ZXJ0aWNhbCA9IFtcInRvcFwiLCBcIm1pZGRsZVwiLCBcImJvdHRvbVwiXSBhcyBjb25zdFxuY29uc3QgaG9yaXpvbnRhbCA9IFtcImxlZnRcIiwgXCJjZW50ZXJcIiwgXCJyaWdodFwiXSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBMOVZlcnRpY2FsID0gKHR5cGVvZiB2ZXJ0aWNhbClbbnVtYmVyXVxuZXhwb3J0IHR5cGUgTDlIb3Jpem9udGFsID0gKHR5cGVvZiBob3Jpem9udGFsKVtudW1iZXJdXG5leHBvcnQgdHlwZSBMOUNlbGxOYW1lID0gYCR7TDlWZXJ0aWNhbH06JHtMOUhvcml6b250YWx9YCB8IGAke0w5SG9yaXpvbnRhbH06JHtMOVZlcnRpY2FsfWBcbmV4cG9ydCB0eXBlIEw5UmFuZ2VOYW1lID0gTDlWZXJ0aWNhbCB8IEw5SG9yaXpvbnRhbCB8IEw5Q2VsbE5hbWUgfCBgJHtMOUNlbGxOYW1lfS0ke0w5Q2VsbE5hbWV9YFxuZXhwb3J0IHR5cGUgTDlPcmllbnQgPSBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIlxuXG5leHBvcnQgY29uc3QgTDlHcmlkVG9wTGVmdCA9IHsgcm93OiAxLCBjb2w6IDEgfVxuXG5leHBvcnQgY2xhc3MgTDlDZWxsIHtcbiAgICBzdGF0aWMgY29lcmNlKHZhbHVlOiBMOUNlbGxOYW1lKSB7XG4gICAgICAgIGNvbnN0IFt2MSwgdjJdID0gdmFsdWUuc3BsaXQoXCI6XCIpXG4gICAgICAgIGNvbnN0IHYgPSB2ZXJ0aWNhbC5pbmNsdWRlcyh2MSBhcyBhbnkpID8gdjEgOiB2MlxuICAgICAgICBjb25zdCBoID0gaG9yaXpvbnRhbC5pbmNsdWRlcyh2MSBhcyBhbnkpID8gdjEgOiB2MlxuXG4gICAgICAgIGlmICh2ID09PSBoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2VsbCB2YWx1ZTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMOUNlbGwodiBhcyBhbnksIGggYXMgYW55KVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgdjogTDlWZXJ0aWNhbCxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGg6IEw5SG9yaXpvbnRhbFxuICAgICkge31cblxuICAgIGludG9HcmlkQXJlYShncmlkVG9wTGVmdDogdHlwZW9mIEw5R3JpZFRvcExlZnQgPSBMOUdyaWRUb3BMZWZ0KSB7XG4gICAgICAgIHJldHVybiBgJHtncmlkVG9wTGVmdC5yb3cgKyB2ZXJ0aWNhbC5pbmRleE9mKHRoaXMudil9LyR7Z3JpZFRvcExlZnQuY29sICsgaG9yaXpvbnRhbC5pbmRleE9mKHRoaXMuaCl9YFxuICAgIH1cblxuICAgIGlzRXEob3RoZXI6IEw5Q2VsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ID09PSBvdGhlci52ICYmIHRoaXMuaCA9PT0gb3RoZXIuaFxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEw5UmFuZ2Uge1xuICAgIHN0YXRpYyBjb2VyY2UodmFsdWU6IEw5UmFuZ2UgfCBMOVJhbmdlTmFtZSkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMOVJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTDlSYW5nZSh2YWx1ZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlYWRvbmx5IGNlbGxzOiBBcnJheTxMOUNlbGw+XG4gICAgcmVhZG9ubHkgb3JpZW50OiBMOU9yaWVudFxuXG4gICAgY29uc3RydWN0b3IocmFuZ2U6IEw5UmFuZ2VOYW1lKSB7XG4gICAgICAgIHRoaXMuY2VsbHMgPSBwYXJzZShyYW5nZSlcbiAgICAgICAgdGhpcy5vcmllbnQgPSB0aGlzLiNkZXRlcm1pbmVPcmllbnQoKVxuICAgIH1cblxuICAgIGlzRXEob3RoZXI6IEw5UmFuZ2UpIHtcbiAgICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgTDlSYW5nZSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZkZpcnN0ID0gdGhpcy5jZWxsc1swXVxuICAgICAgICAgICAgY29uc3Qgb3RoZXJGaXJzdCA9IG90aGVyLmNlbGxzWzBdXG5cbiAgICAgICAgICAgIGlmIChzZWxmRmlyc3QuaCAhPT0gb3RoZXJGaXJzdC5oIHx8IHNlbGZGaXJzdC52ICE9PSBvdGhlckZpcnN0LnYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VsZkxhc3QgPSB0aGlzLmNlbGxzW3RoaXMuY2VsbHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgIGNvbnN0IG90aGVyTGFzdCA9IG90aGVyLmNlbGxzW290aGVyLmNlbGxzLmxlbmd0aCAtIDFdXG5cbiAgICAgICAgICAgIGlmIChzZWxmTGFzdC5oID09PSBvdGhlckxhc3QuaCAmJiBzZWxmTGFzdC52ID09PSBvdGhlckxhc3Qudikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaW50b0dyaWRBcmVhKGdyaWRUb3BMZWZ0OiB0eXBlb2YgTDlHcmlkVG9wTGVmdCA9IEw5R3JpZFRvcExlZnQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNlbGxzWzBdXG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuY2VsbHNbdGhpcy5jZWxscy5sZW5ndGggLSAxXVxuICAgICAgICBjb25zdCBlbmRUb3BMZWZ0ID0geyByb3c6IGdyaWRUb3BMZWZ0LnJvdyArIDEsIGNvbDogZ3JpZFRvcExlZnQuY29sICsgMSB9XG4gICAgICAgIHJldHVybiBgJHtzdGFydC5pbnRvR3JpZEFyZWEoZ3JpZFRvcExlZnQpfS8ke2VuZC5pbnRvR3JpZEFyZWEoZW5kVG9wTGVmdCl9YFxuICAgIH1cblxuICAgIGludG9SZWN0KCk6IFJlY3Qge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuY2VsbHNbMF1cbiAgICAgICAgY29uc3QgZW5kID0gdGhpcy5jZWxsc1t0aGlzLmNlbGxzLmxlbmd0aCAtIDFdXG4gICAgICAgIGNvbnN0IHggPSBob3Jpem9udGFsLmluZGV4T2Yoc3RhcnQuaClcbiAgICAgICAgY29uc3QgeSA9IHZlcnRpY2FsLmluZGV4T2Yoc3RhcnQudilcblxuICAgICAgICByZXR1cm4geyB4LCB5LCB3aWR0aDogaG9yaXpvbnRhbC5pbmRleE9mKGVuZC5oKSAtIHggKyAxLCBoZWlnaHQ6IHZlcnRpY2FsLmluZGV4T2YoZW5kLnYpIC0geSArIDEgfVxuICAgIH1cblxuICAgICNkZXRlcm1pbmVPcmllbnQoKTogTDlPcmllbnQge1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5pbnRvUmVjdCgpXG4gICAgICAgIGlmIChyZWN0LndpZHRoID09PSByZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgLy8gY29ybmVyXG4gICAgICAgICAgICBpZiAocmVjdC54ID09PSByZWN0LnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ2ZXJ0aWNhbFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZWN0LnggPT09IDAgfHwgcmVjdC54ID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidmVydGljYWxcIlxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZWN0LnkgPT09IDAgfHwgcmVjdC55ID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVjdC53aWR0aCA+IHJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJob3Jpem9udGFsXCJcbiAgICAgICAgfSBlbHNlIGlmIChyZWN0LmhlaWdodCA+IHJlY3Qud2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBcInZlcnRpY2FsXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBcInZlcnRpY2FsXCJcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHZhbHVlOiBhbnkpOiBBcnJheTxMOUNlbGw+IHtcbiAgICBjb25zdCBjZWxsczogQXJyYXk8TDlDZWxsPiA9IFtdXG5cbiAgICBpZiAodmVydGljYWwuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaCBvZiBob3Jpem9udGFsKSB7XG4gICAgICAgICAgICBjZWxscy5wdXNoKG5ldyBMOUNlbGwodmFsdWUsIGgpKVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChob3Jpem9udGFsLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmVydGljYWwpIHtcbiAgICAgICAgICAgIGNlbGxzLnB1c2gobmV3IEw5Q2VsbCh2LCB2YWx1ZSkpXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluY2x1ZGVzKFwiLVwiKSkge1xuICAgICAgICBjb25zdCBbYmVnaW4sIGVuZF0gPSB2YWx1ZS5zcGxpdChcIi1cIilcbiAgICAgICAgY29uc3QgYmVnaW5DZWxscyA9IHBhcnNlKGJlZ2luKVxuICAgICAgICBjb25zdCBlbmRDZWxscyA9IHBhcnNlKGVuZClcblxuICAgICAgICBpZiAoYmVnaW5DZWxscy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGJlZ2luIHJhbmdlIHZhbHVlOiAke2JlZ2lufWApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW5kQ2VsbHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXJyZW50bHkgbm90IHN1cHBvcnRlZCBlbmQgcmFuZ2UgdmFsdWU6ICR7ZW5kfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHY6IGJ2LCBoOiBiaCB9ID0gYmVnaW5DZWxsc1swXVxuICAgICAgICBjb25zdCB7IHY6IGV2LCBoOiBlaCB9ID0gZW5kQ2VsbHNbMF1cblxuICAgICAgICBjb25zdCB2c3RhcnQgPSBNYXRoLm1pbih2ZXJ0aWNhbC5pbmRleE9mKGJ2IGFzIGFueSksIHZlcnRpY2FsLmluZGV4T2YoZXYgYXMgYW55KSlcbiAgICAgICAgY29uc3QgdmVuZCA9IE1hdGgubWF4KHZlcnRpY2FsLmluZGV4T2YoYnYgYXMgYW55KSwgdmVydGljYWwuaW5kZXhPZihldiBhcyBhbnkpKVxuICAgICAgICBjb25zdCBoc3RhcnQgPSBNYXRoLm1pbihob3Jpem9udGFsLmluZGV4T2YoYmggYXMgYW55KSwgaG9yaXpvbnRhbC5pbmRleE9mKGVoIGFzIGFueSkpXG4gICAgICAgIGNvbnN0IGhlbmQgPSBNYXRoLm1heChob3Jpem9udGFsLmluZGV4T2YoYmggYXMgYW55KSwgaG9yaXpvbnRhbC5pbmRleE9mKGVoIGFzIGFueSkpXG5cbiAgICAgICAgZm9yIChsZXQgdmkgPSB2c3RhcnQ7IHZpIDw9IHZlbmQ7IHZpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGhpID0gaHN0YXJ0OyBoaSA8PSBoZW5kOyBoaSsrKSB7XG4gICAgICAgICAgICAgICAgY2VsbHMucHVzaChuZXcgTDlDZWxsKHZlcnRpY2FsW3ZpXSwgaG9yaXpvbnRhbFtoaV0pKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAgICAgY2VsbHMucHVzaChMOUNlbGwuY29lcmNlKHZhbHVlKSlcbiAgICB9XG5cbiAgICBpZiAoY2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBVbmRlZmluZWQgbDljZWxsOiBcIiR7dmFsdWV9XCJgKVxuICAgIH1cblxuICAgIHJldHVybiBjZWxsc1xufVxuIl19
|