ngx-vflow 1.11.1 → 1.12.0
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/esm2022/lib/vflow/components/background/background.component.mjs +4 -3
- package/esm2022/lib/vflow/components/node/node.component.mjs +3 -1
- package/esm2022/lib/vflow/components/preview-flow/draw-node.mjs +100 -0
- package/esm2022/lib/vflow/components/preview-flow/preview-flow.component.mjs +62 -0
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +26 -12
- package/esm2022/lib/vflow/directives/map-context.directive.mjs +28 -18
- package/esm2022/lib/vflow/directives/space-point-context.directive.mjs +3 -3
- package/esm2022/lib/vflow/interfaces/node-preview.interface.mjs +2 -0
- package/esm2022/lib/vflow/interfaces/node.interface.mjs +1 -1
- package/esm2022/lib/vflow/interfaces/optimization.interface.mjs +6 -2
- package/esm2022/lib/vflow/models/edge.model.mjs +42 -15
- package/esm2022/lib/vflow/models/handle.model.mjs +3 -1
- package/esm2022/lib/vflow/models/node.model.mjs +6 -1
- package/esm2022/lib/vflow/services/edge-rendering.service.mjs +14 -2
- package/esm2022/lib/vflow/services/flow-settings.service.mjs +3 -1
- package/esm2022/lib/vflow/services/node-rendering.service.mjs +35 -2
- package/esm2022/lib/vflow/services/preview-flow-render-strategy.service.mjs +21 -0
- package/esm2022/lib/vflow/services/viewport.service.mjs +8 -1
- package/esm2022/lib/vflow/utils/assert-injector.mjs +27 -0
- package/esm2022/lib/vflow/utils/signals/extended-computed.mjs +15 -0
- package/esm2022/lib/vflow/utils/signals/to-lazy-signal.mjs +35 -0
- package/esm2022/lib/vflow/utils/viewport.mjs +37 -1
- package/esm2022/public-api.mjs +2 -1
- package/esm2022/testing/component-mocks/vflow-mock.component.mjs +7 -7
- package/fesm2022/ngx-vflow-testing.mjs +6 -6
- package/fesm2022/ngx-vflow-testing.mjs.map +1 -1
- package/fesm2022/ngx-vflow.mjs +436 -46
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/preview-flow/draw-node.d.ts +2 -0
- package/lib/vflow/components/preview-flow/preview-flow.component.d.ts +15 -0
- package/lib/vflow/components/vflow/vflow.component.d.ts +5 -2
- package/lib/vflow/directives/map-context.directive.d.ts +3 -2
- package/lib/vflow/interfaces/node-preview.interface.d.ts +3 -0
- package/lib/vflow/interfaces/node.interface.d.ts +3 -0
- package/lib/vflow/interfaces/optimization.interface.d.ts +17 -1
- package/lib/vflow/models/node.model.d.ts +3 -0
- package/lib/vflow/services/edge-rendering.service.d.ts +2 -0
- package/lib/vflow/services/flow-settings.service.d.ts +2 -0
- package/lib/vflow/services/node-rendering.service.d.ts +4 -0
- package/lib/vflow/services/preview-flow-render-strategy.service.d.ts +12 -0
- package/lib/vflow/services/viewport.service.d.ts +3 -0
- package/lib/vflow/utils/assert-injector.d.ts +44 -0
- package/lib/vflow/utils/signals/extended-computed.d.ts +5 -0
- package/lib/vflow/utils/signals/to-lazy-signal.d.ts +20 -0
- package/lib/vflow/utils/viewport.d.ts +19 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/testing/component-mocks/vflow-mock.component.d.ts +3 -3
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Injector, Input, inject, runInInjectionContext,
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Injector, Input, inject, runInInjectionContext, contentChild, viewChild, } from '@angular/core';
|
|
2
2
|
import { MapContextDirective } from '../../directives/map-context.directive';
|
|
3
3
|
import { DraggableService } from '../../services/draggable.service';
|
|
4
4
|
import { ViewportService } from '../../services/viewport.service';
|
|
5
|
-
import { toObservable,
|
|
5
|
+
import { toObservable, outputFromObservable } from '@angular/core/rxjs-interop';
|
|
6
6
|
import { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, NodeHtmlTemplateDirective, NodeSvgTemplateDirective, } from '../../directives/template.directive';
|
|
7
7
|
import { addNodesToEdges } from '../../utils/add-nodes-to-edges';
|
|
8
8
|
import { skip } from 'rxjs';
|
|
@@ -34,6 +34,9 @@ import { RootSvgReferenceDirective } from '../../directives/reference.directive'
|
|
|
34
34
|
import { EdgeRenderingService } from '../../services/edge-rendering.service';
|
|
35
35
|
import { getSpacePoints } from '../../utils/get-space-points';
|
|
36
36
|
import { getIntesectingNodes } from '../../utils/nodes';
|
|
37
|
+
import { PreviewFlowComponent } from '../preview-flow/preview-flow.component';
|
|
38
|
+
import { PreviewFlowRenderStrategyService, ViewportPreviewFlowRenderStrategyService, } from '../../services/preview-flow-render-strategy.service';
|
|
39
|
+
import { toLazySignal } from '../../utils/signals/to-lazy-signal';
|
|
37
40
|
import * as i0 from "@angular/core";
|
|
38
41
|
import * as i1 from "../../directives/changes-controller.directive";
|
|
39
42
|
const changesControllerHostDirective = {
|
|
@@ -83,9 +86,6 @@ export class VflowComponent {
|
|
|
83
86
|
this.componentEventBusService = inject(ComponentEventBusService);
|
|
84
87
|
this.keyboardService = inject(KeyboardService);
|
|
85
88
|
this.injector = inject(Injector);
|
|
86
|
-
this.optimization = input({
|
|
87
|
-
detachedGroupsLayer: false,
|
|
88
|
-
});
|
|
89
89
|
this.nodeModels = this.nodeRenderingService.nodes;
|
|
90
90
|
this.groups = this.nodeRenderingService.groups;
|
|
91
91
|
this.nonGroups = this.nodeRenderingService.nonGroups;
|
|
@@ -119,13 +119,13 @@ export class VflowComponent {
|
|
|
119
119
|
/**
|
|
120
120
|
* Signal for reading nodes change
|
|
121
121
|
*/
|
|
122
|
-
this.nodesChange =
|
|
122
|
+
this.nodesChange = toLazySignal(this.nodesChangeService.changes$, {
|
|
123
123
|
initialValue: [],
|
|
124
124
|
});
|
|
125
125
|
/**
|
|
126
126
|
* Signal to reading edges change
|
|
127
127
|
*/
|
|
128
|
-
this.edgesChange =
|
|
128
|
+
this.edgesChange = toLazySignal(this.edgesChangeService.changes$, {
|
|
129
129
|
initialValue: [],
|
|
130
130
|
});
|
|
131
131
|
// #endregion
|
|
@@ -145,6 +145,9 @@ export class VflowComponent {
|
|
|
145
145
|
// #endregion
|
|
146
146
|
this.markers = this.flowEntitiesService.markers;
|
|
147
147
|
this.minimap = this.flowEntitiesService.minimap;
|
|
148
|
+
this.flowOptimization = this.flowSettingsService.optimization;
|
|
149
|
+
this.flowWidth = this.flowSettingsService.computedFlowWidth;
|
|
150
|
+
this.flowHeight = this.flowSettingsService.computedFlowHeight;
|
|
148
151
|
}
|
|
149
152
|
// #endregion
|
|
150
153
|
// #region SETTINGS
|
|
@@ -176,6 +179,12 @@ export class VflowComponent {
|
|
|
176
179
|
set background(value) {
|
|
177
180
|
this.flowSettingsService.background.set(transformBackground(value));
|
|
178
181
|
}
|
|
182
|
+
set optimization(newOptimization) {
|
|
183
|
+
this.flowSettingsService.optimization.update((optimization) => ({
|
|
184
|
+
...optimization,
|
|
185
|
+
...newOptimization,
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
179
188
|
/**
|
|
180
189
|
* Global rule if you can or can't select entities
|
|
181
190
|
*/
|
|
@@ -233,7 +242,7 @@ export class VflowComponent {
|
|
|
233
242
|
set edges(newEdges) {
|
|
234
243
|
const newModels = runInInjectionContext(this.injector, () => ReferenceIdentityChecker.edges(newEdges, this.flowEntitiesService.edges()));
|
|
235
244
|
// quick and dirty binding nodes to edges
|
|
236
|
-
addNodesToEdges(this.
|
|
245
|
+
addNodesToEdges(this.flowEntitiesService.nodes(), newModels);
|
|
237
246
|
this.flowEntitiesService.edges.set(newModels);
|
|
238
247
|
}
|
|
239
248
|
// #region METHODS_API
|
|
@@ -336,7 +345,7 @@ export class VflowComponent {
|
|
|
336
345
|
return edge;
|
|
337
346
|
}
|
|
338
347
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VflowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
339
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: VflowComponent, isStandalone: true, selector: "vflow", inputs: { view:
|
|
348
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: VflowComponent, isStandalone: true, selector: "vflow", inputs: { view: "view", minZoom: "minZoom", maxZoom: "maxZoom", background: "background", optimization: "optimization", entitiesSelectable: "entitiesSelectable", keyboardShortcuts: "keyboardShortcuts", connection: ["connection", "connection", (settings) => new ConnectionModel(settings)], snapGrid: "snapGrid", elevateNodesOnSelect: "elevateNodesOnSelect", elevateEdgesOnSelect: "elevateEdgesOnSelect", nodes: "nodes", edges: "edges" }, outputs: { onComponentNodeEvent: "onComponentNodeEvent" }, providers: [
|
|
340
349
|
DraggableService,
|
|
341
350
|
ViewportService,
|
|
342
351
|
FlowStatusService,
|
|
@@ -350,7 +359,8 @@ export class VflowComponent {
|
|
|
350
359
|
ComponentEventBusService,
|
|
351
360
|
KeyboardService,
|
|
352
361
|
OverlaysService,
|
|
353
|
-
|
|
362
|
+
{ provide: PreviewFlowRenderStrategyService, useClass: ViewportPreviewFlowRenderStrategyService },
|
|
363
|
+
], queries: [{ propertyName: "nodeTemplateDirective", first: true, predicate: NodeHtmlTemplateDirective, descendants: true, isSignal: true }, { propertyName: "nodeSvgTemplateDirective", first: true, predicate: NodeSvgTemplateDirective, descendants: true, isSignal: true }, { propertyName: "groupNodeTemplateDirective", first: true, predicate: GroupNodeTemplateDirective, descendants: true, isSignal: true }, { propertyName: "edgeTemplateDirective", first: true, predicate: EdgeTemplateDirective, descendants: true, isSignal: true }, { propertyName: "edgeLabelHtmlDirective", first: true, predicate: EdgeLabelHtmlTemplateDirective, descendants: true, isSignal: true }, { propertyName: "connectionTemplateDirective", first: true, predicate: ConnectionTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "mapContext", first: true, predicate: MapContextDirective, descendants: true, isSignal: true }, { propertyName: "spacePointContext", first: true, predicate: SpacePointContextDirective, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.ChangesControllerDirective, outputs: ["onNodesChange", "onNodesChange", "onNodesChange.position", "onNodesChange.position", "onNodesChange.position.single", "onNodesChange.position.single", "onNodesChange.position.many", "onNodesChange.position.many", "onNodesChange.size", "onNodesChange.size", "onNodesChange.size.single", "onNodesChange.size.single", "onNodesChange.size.many", "onNodesChange.size.many", "onNodesChange.add", "onNodesChange.add", "onNodesChange.add.single", "onNodesChange.add.single", "onNodesChange.add.many", "onNodesChange.add.many", "onNodesChange.remove", "onNodesChange.remove", "onNodesChange.remove.single", "onNodesChange.remove.single", "onNodesChange.remove.many", "onNodesChange.remove.many", "onNodesChange.select", "onNodesChange.select", "onNodesChange.select.single", "onNodesChange.select.single", "onNodesChange.select.many", "onNodesChange.select.many", "onEdgesChange", "onEdgesChange", "onEdgesChange.detached", "onEdgesChange.detached", "onEdgesChange.detached.single", "onEdgesChange.detached.single", "onEdgesChange.detached.many", "onEdgesChange.detached.many", "onEdgesChange.add", "onEdgesChange.add", "onEdgesChange.add.single", "onEdgesChange.add.single", "onEdgesChange.add.many", "onEdgesChange.add.many", "onEdgesChange.remove", "onEdgesChange.remove", "onEdgesChange.remove.single", "onEdgesChange.remove.single", "onEdgesChange.remove.many", "onEdgesChange.remove.many", "onEdgesChange.select", "onEdgesChange.select", "onEdgesChange.select.single", "onEdgesChange.select.single", "onEdgesChange.select.many", "onEdgesChange.select.many"] }], ngImport: i0, template: "<svg:svg #flow rootSvgRef rootSvgContext rootPointer flowSizeController class=\"root-svg\">\n <defs flowDefs [markers]=\"markers()\" />\n\n <g background />\n\n <svg:g mapContext spacePointContext>\n <!-- Connection -->\n <svg:g connection [model]=\"connection\" [template]=\"connectionTemplateDirective()?.templateRef\" />\n\n @if (flowOptimization().detachedGroupsLayer) {\n <!-- Groups -->\n @for (model of groups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n <!-- Nodes -->\n @for (model of nonGroups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n\n @if (!flowOptimization().detachedGroupsLayer) {\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n\n @for (model of nodeModels(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n </svg:g>\n\n <!-- Minimap -->\n @if (minimap(); as minimap) {\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n }\n</svg:svg>\n\n@if (flowOptimization().virtualization) {\n <canvas previewFlow class=\"preview-flow\" [width]=\"flowWidth()\" [height]=\"flowHeight()\"></canvas>\n}\n", styles: [":host{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}.root-svg{grid-row-start:1;grid-column-start:1}.preview-flow{pointer-events:none;grid-row-start:1;grid-column-start:1}\n"], dependencies: [{ kind: "directive", type: RootSvgReferenceDirective, selector: "svg[rootSvgRef]" }, { kind: "directive", type: RootSvgContextDirective, selector: "svg[rootSvgContext]" }, { kind: "directive", type: RootPointerDirective, selector: "svg[rootPointer]" }, { kind: "directive", type: FlowSizeControllerDirective, selector: "svg[flowSizeController]" }, { kind: "component", type: DefsComponent, selector: "defs[flowDefs]", inputs: ["markers"] }, { kind: "component", type: BackgroundComponent, selector: "g[background]" }, { kind: "directive", type: MapContextDirective, selector: "g[mapContext]" }, { kind: "directive", type: SpacePointContextDirective, selector: "g[spacePointContext]" }, { kind: "component", type: ConnectionComponent, selector: "g[connection]", inputs: ["model", "template"] }, { kind: "component", type: NodeComponent, selector: "g[node]", inputs: ["model", "nodeTemplate", "nodeSvgTemplate", "groupNodeTemplate"] }, { kind: "component", type: EdgeComponent, selector: "g[edge]", inputs: ["model", "edgeTemplate", "edgeLabelHtmlTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PreviewFlowComponent, selector: "canvas[previewFlow]", inputs: ["width", "height"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
354
364
|
}
|
|
355
365
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VflowComponent, decorators: [{
|
|
356
366
|
type: Component,
|
|
@@ -368,6 +378,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
368
378
|
ComponentEventBusService,
|
|
369
379
|
KeyboardService,
|
|
370
380
|
OverlaysService,
|
|
381
|
+
{ provide: PreviewFlowRenderStrategyService, useClass: ViewportPreviewFlowRenderStrategyService },
|
|
371
382
|
], hostDirectives: [changesControllerHostDirective], imports: [
|
|
372
383
|
RootSvgReferenceDirective,
|
|
373
384
|
RootSvgContextDirective,
|
|
@@ -381,7 +392,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
381
392
|
NodeComponent,
|
|
382
393
|
EdgeComponent,
|
|
383
394
|
NgTemplateOutlet,
|
|
384
|
-
|
|
395
|
+
PreviewFlowComponent,
|
|
396
|
+
], template: "<svg:svg #flow rootSvgRef rootSvgContext rootPointer flowSizeController class=\"root-svg\">\n <defs flowDefs [markers]=\"markers()\" />\n\n <g background />\n\n <svg:g mapContext spacePointContext>\n <!-- Connection -->\n <svg:g connection [model]=\"connection\" [template]=\"connectionTemplateDirective()?.templateRef\" />\n\n @if (flowOptimization().detachedGroupsLayer) {\n <!-- Groups -->\n @for (model of groups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n <!-- Nodes -->\n @for (model of nonGroups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n\n @if (!flowOptimization().detachedGroupsLayer) {\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n\n @for (model of nodeModels(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n </svg:g>\n\n <!-- Minimap -->\n @if (minimap(); as minimap) {\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n }\n</svg:svg>\n\n@if (flowOptimization().virtualization) {\n <canvas previewFlow class=\"preview-flow\" [width]=\"flowWidth()\" [height]=\"flowHeight()\"></canvas>\n}\n", styles: [":host{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}.root-svg{grid-row-start:1;grid-column-start:1}.preview-flow{pointer-events:none;grid-row-start:1;grid-column-start:1}\n"] }]
|
|
385
397
|
}], propDecorators: { view: [{
|
|
386
398
|
type: Input
|
|
387
399
|
}], minZoom: [{
|
|
@@ -390,6 +402,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
390
402
|
type: Input
|
|
391
403
|
}], background: [{
|
|
392
404
|
type: Input
|
|
405
|
+
}], optimization: [{
|
|
406
|
+
type: Input
|
|
393
407
|
}], entitiesSelectable: [{
|
|
394
408
|
type: Input
|
|
395
409
|
}], keyboardShortcuts: [{
|
|
@@ -411,4 +425,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
411
425
|
}], edges: [{
|
|
412
426
|
type: Input
|
|
413
427
|
}] } });
|
|
414
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLEtBQUssRUFDTCxZQUFZLEVBQ1osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzFGLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsOEJBQThCLEVBQzlCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHdCQUF3QixHQUN6QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTNF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QixLQUFLO2dCQVNLLG9CQUFvQjtzQkFEOUIsS0FBSztnQkFTSyxvQkFBb0I7c0JBRDlCLEtBQUs7Z0JBV0ssS0FBSztzQkFEZixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkF1QmQsS0FBSztzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbiAgaW5wdXQsXG4gIGNvbnRlbnRDaGlsZCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNOb2RlLCBOb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9tYXAtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCwgb3V0cHV0RnJvbU9ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBFZGdlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lZGdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFZGdlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZWRnZS5tb2RlbCc7XG5pbXBvcnQge1xuICBDb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgRWRnZVRlbXBsYXRlRGlyZWN0aXZlLFxuICBHcm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgTm9kZUh0bWxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgTm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlLFxufSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBhZGROb2Rlc1RvRWRnZXMgfSBmcm9tICcuLi8uLi91dGlscy9hZGQtbm9kZXMtdG8tZWRnZXMnO1xuaW1wb3J0IHsgc2tpcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3BhY2VQb2ludCwgUG9pbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BvaW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBWaWV3cG9ydFN0YXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy92aWV3cG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmxvd1N0YXR1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXN0YXR1cy5zZXJ2aWNlJztcbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LWVudGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNldHRpbmdzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jb25uZWN0aW9uLXNldHRpbmdzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29ubmVjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZWZlcmVuY2VJZGVudGl0eUNoZWNrZXIgfSBmcm9tICcuLi8uLi91dGlscy9pZGVudGl0eS1jaGVja2VyL3JlZmVyZW5jZS1pZGVudGl0eS1jaGVja2VyJztcbmltcG9ydCB7IE5vZGVzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IEVkZ2VDaGFuZ2VzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkZ2UtY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVDaGFuZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9ub2RlLWNoYW5nZS50eXBlJztcbmltcG9ydCB7IENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jaGFuZ2VzLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEVkZ2VDaGFuZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9lZGdlLWNoYW5nZS50eXBlJztcbmltcG9ydCB7IE5vZGVSZW5kZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1yZW5kZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRFdmVudEJ1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21wb25lbnQtZXZlbnQtYnVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFja2dyb3VuZCB9IGZyb20gJy4uLy4uL3R5cGVzL2JhY2tncm91bmQudHlwZSc7XG5pbXBvcnQgeyBTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc3BhY2UtcG9pbnQtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRml0Vmlld09wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ZpdC12aWV3LW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9wdGltaXphdGlvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvb3B0aW1pemF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBLZXlib2FyZFNob3J0Y3V0cyB9IGZyb20gJy4uLy4uL3R5cGVzL2tleWJvYXJkLWFjdGlvbi50eXBlJztcbmltcG9ydCB7IEtleWJvYXJkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2tleWJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgdHJhbnNmb3JtQmFja2dyb3VuZCB9IGZyb20gJy4uLy4uL3V0aWxzL3RyYW5zZm9ybS1iYWNrZ3JvdW5kJztcbmltcG9ydCB7IE92ZXJsYXlzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL292ZXJsYXlzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBFZGdlQ29tcG9uZW50IH0gZnJvbSAnLi4vZWRnZS9lZGdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vbm9kZS9ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb25uZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29ubmVjdGlvbi9jb25uZWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFja2dyb3VuZC9iYWNrZ3JvdW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWZzQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVmcy9kZWZzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGbG93U2l6ZUNvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zsb3ctc2l6ZS1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSb290UG9pbnRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcm9vdC1wb2ludGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSb290U3ZnQ29udGV4dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcm9vdC1zdmctY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVmZXJlbmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFZGdlUmVuZGVyaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkZ2UtcmVuZGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0U3BhY2VQb2ludHMgfSBmcm9tICcuLi8uLi91dGlscy9nZXQtc3BhY2UtcG9pbnRzJztcbmltcG9ydCB7IGdldEludGVzZWN0aW5nTm9kZXMgfSBmcm9tICcuLi8uLi91dGlscy9ub2Rlcyc7XG5pbXBvcnQgeyBJbnRlcnNlY3RpbmdOb2Rlc09wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ludGVyc2VjdGluZy1ub2Rlcy1vcHRpb25zLmludGVyZmFjZSc7XG5cbmNvbnN0IGNoYW5nZXNDb250cm9sbGVySG9zdERpcmVjdGl2ZSA9IHtcbiAgZGlyZWN0aXZlOiBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgb3V0cHV0czogW1xuICAgICdvbk5vZGVzQ2hhbmdlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbicsXG4gICAgJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24uc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbi5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zaXplJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zaXplLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2l6ZS5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5hZGQnLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZC5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZC5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5yZW1vdmUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZS5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZS5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zZWxlY3QnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdC5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmRldGFjaGVkLnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuYWRkJyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2UucmVtb3ZlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2Uuc2VsZWN0JyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3Quc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3QubWFueScsXG4gIF0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd2ZmxvdycsXG4gIHRlbXBsYXRlVXJsOiAnLi92Zmxvdy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZmbG93LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBEcmFnZ2FibGVTZXJ2aWNlLFxuICAgIFZpZXdwb3J0U2VydmljZSxcbiAgICBGbG93U3RhdHVzU2VydmljZSxcbiAgICBGbG93RW50aXRpZXNTZXJ2aWNlLFxuICAgIE5vZGVzQ2hhbmdlU2VydmljZSxcbiAgICBFZGdlQ2hhbmdlc1NlcnZpY2UsXG4gICAgTm9kZVJlbmRlcmluZ1NlcnZpY2UsXG4gICAgRWRnZVJlbmRlcmluZ1NlcnZpY2UsXG4gICAgU2VsZWN0aW9uU2VydmljZSxcbiAgICBGbG93U2V0dGluZ3NTZXJ2aWNlLFxuICAgIENvbXBvbmVudEV2ZW50QnVzU2VydmljZSxcbiAgICBLZXlib2FyZFNlcnZpY2UsXG4gICAgT3ZlcmxheXNTZXJ2aWNlLFxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW2NoYW5nZXNDb250cm9sbGVySG9zdERpcmVjdGl2ZV0sXG4gIGltcG9ydHM6IFtcbiAgICBSb290U3ZnUmVmZXJlbmNlRGlyZWN0aXZlLFxuICAgIFJvb3RTdmdDb250ZXh0RGlyZWN0aXZlLFxuICAgIFJvb3RQb2ludGVyRGlyZWN0aXZlLFxuICAgIEZsb3dTaXplQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgICBEZWZzQ29tcG9uZW50LFxuICAgIEJhY2tncm91bmRDb21wb25lbnQsXG4gICAgTWFwQ29udGV4dERpcmVjdGl2ZSxcbiAgICBTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSxcbiAgICBDb25uZWN0aW9uQ29tcG9uZW50LFxuICAgIE5vZGVDb21wb25lbnQsXG4gICAgRWRnZUNvbXBvbmVudCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBWZmxvd0NvbXBvbmVudCB7XG4gIC8vICNyZWdpb24gRElcbiAgcHJpdmF0ZSB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBmbG93RW50aXRpZXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dFbnRpdGllc1NlcnZpY2UpO1xuICBwcml2YXRlIG5vZGVzQ2hhbmdlU2VydmljZSA9IGluamVjdChOb2Rlc0NoYW5nZVNlcnZpY2UpO1xuICBwcml2YXRlIGVkZ2VzQ2hhbmdlU2VydmljZSA9IGluamVjdChFZGdlQ2hhbmdlc1NlcnZpY2UpO1xuICBwcml2YXRlIG5vZGVSZW5kZXJpbmdTZXJ2aWNlID0gaW5qZWN0KE5vZGVSZW5kZXJpbmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlZGdlUmVuZGVyaW5nU2VydmljZSA9IGluamVjdChFZGdlUmVuZGVyaW5nU2VydmljZSk7XG4gIHByaXZhdGUgZmxvd1NldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjb21wb25lbnRFdmVudEJ1c1NlcnZpY2UgPSBpbmplY3QoQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBrZXlib2FyZFNlcnZpY2UgPSBpbmplY3QoS2V5Ym9hcmRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0VUVElOR1NcblxuICAvKipcbiAgICogU2l6ZSBmb3IgZmxvdyB2aWV3XG4gICAqXG4gICAqIGFjY2VwdHNcbiAgICogLSBhYnNvbHV0ZSBzaXplIGluIGZvcm1hdCBbd2lkdGgsIGhlaWdodF0gb3JcbiAgICogLSAnYXV0bycgdG8gY29tcHV0ZSBzaXplIGJhc2VkIG9uIHBhcmVudCBlbGVtZW50IHNpemVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmlldyh2aWV3OiBbbnVtYmVyLCBudW1iZXJdIHwgJ2F1dG8nKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLnZpZXcuc2V0KHZpZXcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gem9vbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW5ab29tKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UubWluWm9vbS5zZXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1heGltdW0gem9vbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhab29tKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UubWF4Wm9vbS5zZXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhY2tncm91bmQgZm9yIGZsb3dcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYmFja2dyb3VuZCh2YWx1ZTogQmFja2dyb3VuZCB8IHN0cmluZykge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5iYWNrZ3JvdW5kLnNldCh0cmFuc2Zvcm1CYWNrZ3JvdW5kKHZhbHVlKSk7XG4gIH1cblxuICBwdWJsaWMgb3B0aW1pemF0aW9uID0gaW5wdXQ8T3B0aW1pemF0aW9uPih7XG4gICAgZGV0YWNoZWRHcm91cHNMYXllcjogZmFsc2UsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBHbG9iYWwgcnVsZSBpZiB5b3UgY2FuIG9yIGNhbid0IHNlbGVjdCBlbnRpdGllc1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbnRpdGllc1NlbGVjdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZW50aXRpZXNTZWxlY3RhYmxlLnNldCh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGtleWJvYXJkU2hvcnRjdXRzKHZhbHVlOiBLZXlib2FyZFNob3J0Y3V0cykge1xuICAgIHRoaXMua2V5Ym9hcmRTZXJ2aWNlLnNldFNob3J0Y3V0cyh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0dGluZ3MgZm9yIGNvbm5lY3Rpb24gKGl0IHJlbmRlcnMgd2hlbiB1c2VyIHRyaWVzIHRvIGNyZWF0ZSBlZGdlIGJldHdlZW4gbm9kZXMpXG4gICAqXG4gICAqIFlvdSBuZWVkIHRvIHBhc3MgYENvbm5lY3Rpb25TZXR0aW5nc2AgaW4gdGhpcyBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCh7XG4gICAgdHJhbnNmb3JtOiAoc2V0dGluZ3M6IENvbm5lY3Rpb25TZXR0aW5ncykgPT4gbmV3IENvbm5lY3Rpb25Nb2RlbChzZXR0aW5ncyksXG4gIH0pXG4gIHB1YmxpYyBzZXQgY29ubmVjdGlvbihjb25uZWN0aW9uOiBDb25uZWN0aW9uTW9kZWwpIHtcbiAgICB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuY29ubmVjdGlvbi5zZXQoY29ubmVjdGlvbik7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogU25hcCBncmlkIGZvciBub2RlIG1vdmVtZW50LiBQYXNzZXMgYXMgW3gsIHldXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNuYXBHcmlkKHZhbHVlOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLnNuYXBHcmlkLnNldCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmFpemluZyB6LWluZGV4IGZvciBzZWxlY3RlZCBub2RlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVsZXZhdGVOb2Rlc09uU2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVsZXZhdGVOb2Rlc09uU2VsZWN0LnNldCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmFpemluZyB6LWluZGV4IGZvciBzZWxlY3RlZCBlZGdlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVsZXZhdGVFZGdlc09uU2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVsZXZhdGVFZGdlc09uU2VsZWN0LnNldCh2YWx1ZSk7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gTUFJTl9JTlBVVFNcbiAgLyoqXG4gICAqIE5vZGVzIHRvIHJlbmRlclxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHNldCBub2RlcyhuZXdOb2RlczogTm9kZVtdIHwgRHluYW1pY05vZGVbXSkge1xuICAgIGNvbnN0IG1vZGVscyA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PlxuICAgICAgUmVmZXJlbmNlSWRlbnRpdHlDaGVja2VyLm5vZGVzKG5ld05vZGVzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2Uubm9kZXMoKSksXG4gICAgKTtcblxuICAgIC8vIFRPRE86IGNvbnNpZGVyIGNhbGxpbmcgb25seSBmbyBuZXcgbm9kZXNcbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyhtb2RlbHMsIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcygpKTtcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2Rlcy5zZXQobW9kZWxzKTtcblxuICAgIG1vZGVscy5mb3JFYWNoKChtb2RlbCkgPT4gdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5wdWxsTm9kZShtb2RlbCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG5vZGVNb2RlbHMgPSB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLm5vZGVzO1xuICBwcm90ZWN0ZWQgZ3JvdXBzID0gdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5ncm91cHM7XG4gIHByb3RlY3RlZCBub25Hcm91cHMgPSB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLm5vbkdyb3VwcztcblxuICAvKipcbiAgICogRWRnZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVkZ2VzKG5ld0VkZ2VzOiBFZGdlW10pIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT5cbiAgICAgIFJlZmVyZW5jZUlkZW50aXR5Q2hlY2tlci5lZGdlcyhuZXdFZGdlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzKCkpLFxuICAgICk7XG5cbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyh0aGlzLm5vZGVNb2RlbHMoKSwgbmV3TW9kZWxzKTtcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcy5zZXQobmV3TW9kZWxzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlZGdlTW9kZWxzID0gdGhpcy5lZGdlUmVuZGVyaW5nU2VydmljZS5lZGdlcztcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gT1VUUFVUU1xuICAvKipcbiAgICogRXZlbnQgdGhhdCBhY2N1bXVsYXRlcyBhbGwgY3VzdG9tIG5vZGUgZXZlbnRzXG4gICAqXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvbkNvbXBvbmVudE5vZGVFdmVudCA9IG91dHB1dEZyb21PYnNlcnZhYmxlPGFueT4odGhpcy5jb21wb25lbnRFdmVudEJ1c1NlcnZpY2UuZXZlbnQkKTsgLy8gVE9ETzogcmVzZWFyY2ggaG93IHRvIHJlbW92ZSBhbnlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gVEVNUExBVEVTXG4gIHByb3RlY3RlZCBub2RlVGVtcGxhdGVEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoTm9kZUh0bWxUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIG5vZGVTdmdUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChOb2RlU3ZnVGVtcGxhdGVEaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBncm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChHcm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIGVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChFZGdlVGVtcGxhdGVEaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBlZGdlTGFiZWxIdG1sRGlyZWN0aXZlID0gY29udGVudENoaWxkKEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIGNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChDb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBESVJFQ1RJVkVTXG4gIHByb3RlY3RlZCBtYXBDb250ZXh0ID0gdmlld0NoaWxkKE1hcENvbnRleHREaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBzcGFjZVBvaW50Q29udGV4dCA9IHZpZXdDaGlsZC5yZXF1aXJlZChTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFNJR05BTF9BUElcbiAgLyoqXG4gICAqIFNpZ25hbCBmb3IgcmVhZGluZyB2aWV3cG9ydCBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQuYXNSZWFkb25seSgpO1xuXG4gIC8qKlxuICAgKiBTaWduYWwgZm9yIHJlYWRpbmcgbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UgPSB0b1NpZ25hbCh0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwge1xuICAgIGluaXRpYWxWYWx1ZTogW10gYXMgTm9kZUNoYW5nZVtdLFxuICB9KTtcblxuICAvKipcbiAgICogU2lnbmFsIHRvIHJlYWRpbmcgZWRnZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWRnZXNDaGFuZ2UgPSB0b1NpZ25hbCh0aGlzLmVkZ2VzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwge1xuICAgIGluaXRpYWxWYWx1ZTogW10gYXMgRWRnZUNoYW5nZVtdLFxuICB9KTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gUlhfQVBJXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnRDaGFuZ2UkID0gdG9PYnNlcnZhYmxlKHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQpLnBpcGUoc2tpcCgxKSk7IC8vIHNraXAgZGVmYXVsdCB2YWx1ZSB0aGF0IHNldCBieSBzaWduYWxcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB3aXRoIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzQ2hhbmdlJCA9IHRoaXMubm9kZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggZWRnZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWRnZXNDaGFuZ2UkID0gdGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQ7XG4gIC8vICNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgbWFya2VycyA9IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5tYXJrZXJzO1xuXG4gIHByb3RlY3RlZCBtaW5pbWFwID0gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm1pbmltYXA7XG5cbiAgLy8gI3JlZ2lvbiBNRVRIT0RTX0FQSVxuICAvKipcbiAgICogQ2hhbmdlIHZpZXdwb3J0IHRvIHNwZWNpZmllZCBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0gdmlld3BvcnQgdmlld3BvcnQgc3RhdGVcbiAgICovXG4gIHB1YmxpYyB2aWV3cG9ydFRvKHZpZXdwb3J0OiBWaWV3cG9ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoe1xuICAgICAgY2hhbmdlVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgIHN0YXRlOiB2aWV3cG9ydCxcbiAgICAgIGR1cmF0aW9uOiAwLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSB6b29tXG4gICAqXG4gICAqIEBwYXJhbSB6b29tIHpvb20gdmFsdWVcbiAgICovXG4gIHB1YmxpYyB6b29tVG8oem9vbTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoe1xuICAgICAgY2hhbmdlVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgIHN0YXRlOiB7IHpvb20gfSxcbiAgICAgIGR1cmF0aW9uOiAwLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdG8gc3BlY2lmaWVkIGNvb3JkaW5hdGVcbiAgICpcbiAgICogQHBhcmFtIHBvaW50IHBvaW50IHdoZXJlIHRvIG1vdmVcbiAgICovXG4gIHB1YmxpYyBwYW5Ubyhwb2ludDogUG9pbnQpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7XG4gICAgICBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgc3RhdGU6IHBvaW50LFxuICAgICAgZHVyYXRpb246IDAsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZml0VmlldyhvcHRpb25zPzogRml0Vmlld09wdGlvbnMpIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS5maXRWaWV3KG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBub2RlIGJ5IGlkXG4gICAqXG4gICAqIEBwYXJhbSBpZCBub2RlIGlkXG4gICAqL1xuICBwdWJsaWMgZ2V0Tm9kZTxUID0gdW5rbm93bj4oaWQ6IHN0cmluZyk6IE5vZGU8VD4gfCBEeW5hbWljTm9kZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5nZXROb2RlPFQ+KGlkKT8ucmF3Tm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIG1ldGhvZCB0byBnZXQgZGV0YWNoZWQgZWRnZXNcbiAgICovXG4gIHB1YmxpYyBnZXREZXRhY2hlZEVkZ2VzKCk6IEVkZ2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5nZXREZXRhY2hlZEVkZ2VzKCkubWFwKChlKSA9PiBlLmVkZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgcG9pbnQgcmVjZWl2ZWQgZnJvbSBkb2N1bWVudCB0byBwb2ludCBvbiB0aGUgZmxvd1xuICAgKi9cbiAgcHVibGljIGRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludDogUG9pbnQpOiBQb2ludDtcbiAgcHVibGljIGRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludDogUG9pbnQsIG9wdGlvbnM/OiB7IHNwYWNlczogZmFsc2UgfSk6IFBvaW50O1xuICAvKipcbiAgICogQ29udmVydCBwb2ludCByZWNlaXZlZCBmcm9tIGRvY3VtZW50IHRvIGEgc3RhY2sgb2Ygc3BhY2UgcG9pbnRzIG9uIHRoZSBmbG93XG4gICAqIFNwYWNlIHBvaW50IGhhcyBhIHNwYWNlTm9kZUlkLCBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBub2RlXG4gICAqL1xuICBwdWJsaWMgZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50OiBQb2ludCwgb3B0aW9ucz86IHsgc3BhY2VzOiB0cnVlIH0pOiBTcGFjZVBvaW50W107XG4gIHB1YmxpYyBkb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQ6IFBvaW50LCBvcHRpb25zPzogeyBzcGFjZXM6IGJvb2xlYW4gfSk6IHVua25vd24ge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkUG9pbnQgPSB0aGlzLnNwYWNlUG9pbnRDb250ZXh0KCkuZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50KTtcblxuICAgIGlmIChvcHRpb25zPy5zcGFjZXMpIHtcbiAgICAgIHJldHVybiBnZXRTcGFjZVBvaW50cyh0cmFuc2Zvcm1lZFBvaW50LCB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLmdyb3VwcygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtZWRQb2ludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIHNwZWNpZmllZCBub2RlXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGVzXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgdG8gY2hlY2sgaW50ZXJzZWN0aW9ucyBmb3JcbiAgICogQHBhcmFtIG9wdGlvbnMucGFydGlhbGx5IC0gSWYgdHJ1ZSwgcmV0dXJucyBub2RlcyB0aGF0IHBhcnRpYWxseSBpbnRlcnNlY3QuIElmIGZhbHNlLCBvbmx5IHJldHVybnMgZnVsbHkgaW50ZXJzZWN0aW5nIG5vZGVzXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIHNwZWNpZmllZCBub2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0SW50ZXNlY3RpbmdOb2RlczxUPihcbiAgICBub2RlSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBJbnRlcnNlY3RpbmdOb2Rlc09wdGlvbnMgPSB7IHBhcnRpYWxseTogdHJ1ZSB9LFxuICApOiBOb2RlPFQ+W10gfCBEeW5hbWljTm9kZTxUPltdIHtcbiAgICByZXR1cm4gZ2V0SW50ZXNlY3RpbmdOb2Rlcyhub2RlSWQsIHRoaXMubm9kZU1vZGVscygpLCBvcHRpb25zKS5tYXAoKG4pID0+IG4ucmF3Tm9kZSkgYXNcbiAgICAgIHwgTm9kZTxUPltdXG4gICAgICB8IER5bmFtaWNOb2RlPFQ+W107XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBub2RlJ3MgcG9zaXRpb24gdG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgYW5vdGhlciBub2RlXG4gICAqXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgd2hvc2UgcG9zaXRpb24gc2hvdWxkIGJlIGNvbnZlcnRlZFxuICAgKiBAcGFyYW0gc3BhY2VOb2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgdGhhdCBkZWZpbmVzIHRoZSB0YXJnZXQgY29vcmRpbmF0ZSBzcGFjZS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgSWYgbnVsbCwgcmV0dXJucyB0aGUgcG9zaXRpb24gaW4gZ2xvYmFsIGNvb3JkaW5hdGVzXG4gICAqIEByZXR1cm5zIHtQb2ludH0gVGhlIGNvbnZlcnRlZCBwb3NpdGlvbi4gUmV0dXJucyB7eDogSW5maW5pdHksIHk6IEluZmluaXR5fSBpZiBlaXRoZXIgbm9kZSBpcyBub3QgZm91bmRcbiAgICovXG4gIHB1YmxpYyB0b05vZGVTcGFjZShub2RlSWQ6IHN0cmluZywgc3BhY2VOb2RlSWQ6IHN0cmluZyB8IG51bGwpOiBQb2ludCB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZU1vZGVscygpLmZpbmQoKG4pID0+IG4ucmF3Tm9kZS5pZCA9PT0gbm9kZUlkKTtcblxuICAgIGlmICghbm9kZSkgcmV0dXJuIHsgeDogSW5maW5pdHksIHk6IEluZmluaXR5IH07XG5cbiAgICBpZiAoc3BhY2VOb2RlSWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBub2RlLmdsb2JhbFBvaW50KCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29vcmRpbmF0ZVNwYWNlTm9kZSA9IHRoaXMubm9kZU1vZGVscygpLmZpbmQoKG4pID0+IG4ucmF3Tm9kZS5pZCA9PT0gc3BhY2VOb2RlSWQpO1xuXG4gICAgaWYgKCFjb29yZGluYXRlU3BhY2VOb2RlKSByZXR1cm4geyB4OiBJbmZpbml0eSwgeTogSW5maW5pdHkgfTtcblxuICAgIHJldHVybiBnZXRTcGFjZVBvaW50cyhub2RlLmdsb2JhbFBvaW50KCksIFtjb29yZGluYXRlU3BhY2VOb2RlXSlbMF07XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByb3RlY3RlZCB0cmFja05vZGVzKGlkeDogbnVtYmVyLCB7IHJhd05vZGU6IG5vZGUgfTogTm9kZU1vZGVsKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tFZGdlcyhpZHg6IG51bWJlciwgeyBlZGdlIH06IEVkZ2VNb2RlbCkge1xuICAgIHJldHVybiBlZGdlO1xuICB9XG59XG4iLCI8c3ZnOnN2ZyAjZmxvdyByb290U3ZnUmVmIHJvb3RTdmdDb250ZXh0IHJvb3RQb2ludGVyIGZsb3dTaXplQ29udHJvbGxlciBjbGFzcz1cInJvb3Qtc3ZnXCI+XG4gIDxkZWZzIGZsb3dEZWZzIFttYXJrZXJzXT1cIm1hcmtlcnMoKVwiIC8+XG5cbiAgPGcgYmFja2dyb3VuZCAvPlxuXG4gIDxzdmc6ZyBtYXBDb250ZXh0IHNwYWNlUG9pbnRDb250ZXh0PlxuICAgIDwhLS0gQ29ubmVjdGlvbiAtLT5cbiAgICA8c3ZnOmcgY29ubmVjdGlvbiBbbW9kZWxdPVwiY29ubmVjdGlvblwiIFt0ZW1wbGF0ZV09XCJjb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIiAvPlxuXG4gICAgQGlmIChvcHRpbWl6YXRpb24oKS5kZXRhY2hlZEdyb3Vwc0xheWVyKSB7XG4gICAgICA8IS0tIEdyb3VwcyAtLT5cbiAgICAgIEBmb3IgKG1vZGVsIG9mIGdyb3VwcygpOyB0cmFjayB0cmFja05vZGVzKCRpbmRleCwgbW9kZWwpKSB7XG4gICAgICAgIDxzdmc6Z1xuICAgICAgICAgIG5vZGVcbiAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgIFtncm91cE5vZGVUZW1wbGF0ZV09XCJncm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIm1vZGVsLnBvaW50VHJhbnNmb3JtKClcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLSBFZGdlcyAgLS0+XG4gICAgICBAZm9yIChtb2RlbCBvZiBlZGdlTW9kZWxzKCk7IHRyYWNrIHRyYWNrRWRnZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgZWRnZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtlZGdlTGFiZWxIdG1sVGVtcGxhdGVdPVwiZWRnZUxhYmVsSHRtbERpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiIC8+XG4gICAgICB9XG4gICAgICA8IS0tIE5vZGVzIC0tPlxuICAgICAgQGZvciAobW9kZWwgb2Ygbm9uR3JvdXBzKCk7IHRyYWNrIHRyYWNrTm9kZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgbm9kZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW25vZGVUZW1wbGF0ZV09XCJub2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtub2RlU3ZnVGVtcGxhdGVdPVwibm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiIC8+XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmICghb3B0aW1pemF0aW9uKCkuZGV0YWNoZWRHcm91cHNMYXllcikge1xuICAgICAgPCEtLSBFZGdlcyAgLS0+XG4gICAgICBAZm9yIChtb2RlbCBvZiBlZGdlTW9kZWxzKCk7IHRyYWNrIHRyYWNrRWRnZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgZWRnZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtlZGdlTGFiZWxIdG1sVGVtcGxhdGVdPVwiZWRnZUxhYmVsSHRtbERpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiIC8+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gTm9kZXMgLS0+XG4gICAgICBAZm9yIChtb2RlbCBvZiBub2RlTW9kZWxzKCk7IHRyYWNrIHRyYWNrTm9kZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgbm9kZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW25vZGVUZW1wbGF0ZV09XCJub2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtub2RlU3ZnVGVtcGxhdGVdPVwibm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbZ3JvdXBOb2RlVGVtcGxhdGVdPVwiZ3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCIgLz5cbiAgICAgIH1cbiAgICB9XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBNaW5pbWFwIC0tPlxuICBAaWYgKG1pbmltYXAoKTsgYXMgbWluaW1hcCkge1xuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibWluaW1hcC50ZW1wbGF0ZSgpXCIgLz5cbiAgfVxuPC9zdmc6c3ZnPlxuIl19
|
|
428
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLFlBQVksRUFDWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdoRixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6Qix3QkFBd0IsR0FDekIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsZUFBZSxFQUFF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QUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxRQUFRLEVBQUUsd0NBQXdDLEVBQUU7cUJBQ2xHLGtCQUNlLENBQUMsOEJBQThCLENBQUMsV0FDdkM7d0JBQ1AseUJBQXlCO3dCQUN6Qix1QkFBdUI7d0JBQ3ZCLG9CQUFvQjt3QkFDcEIsMkJBQTJCO3dCQUMzQixhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQiwwQkFBMEI7d0JBQzFCLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3FCQUNyQjs4QkEyQlUsSUFBSTtzQkFEZCxLQUFLO2dCQVNLLE9BQU87c0JBRGpCLEtBQUs7Z0JBU0ssT0FBTztzQkFEakIsS0FBSztnQkFTSyxVQUFVO3NCQURwQixLQUFLO2dCQU1LLFlBQVk7c0JBRHRCLEtBQUs7Z0JBWUssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQU1LLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFhSyxVQUFVO3NCQUhwQixLQUFLO3VCQUFDO3dCQUNMLFNBQVMsRUFBRSxDQUFDLFFBQTRCLEVBQUUsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQztxQkFDM0U7Z0JBYVUsUUFBUTtzQkFEbEIsS0FBSztnQkFTSyxvQkFBb0I7c0JBRDlCLEtBQUs7Z0JBU0ssb0JBQW9CO3NCQUQ5QixLQUFLO2dCQVdLLEtBQUs7c0JBRGYsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBdUJkLEtBQUs7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgaW5qZWN0LFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIGNvbnRlbnRDaGlsZCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNOb2RlLCBOb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9tYXAtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCBvdXRwdXRGcm9tT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkZ2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VkZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9lZGdlLm1vZGVsJztcbmltcG9ydCB7XG4gIENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlLFxuICBFZGdlVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEdyb3VwTm9kZVRlbXBsYXRlRGlyZWN0aXZlLFxuICBOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlLFxuICBOb2RlU3ZnVGVtcGxhdGVEaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IGFkZE5vZGVzVG9FZGdlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2FkZC1ub2Rlcy10by1lZGdlcyc7XG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTcGFjZVBvaW50LCBQb2ludCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFZpZXdwb3J0U3RhdGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3ZpZXdwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Nvbm5lY3Rpb24tc2V0dGluZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb25uZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlZmVyZW5jZUlkZW50aXR5Q2hlY2tlciB9IGZyb20gJy4uLy4uL3V0aWxzL2lkZW50aXR5LWNoZWNrZXIvcmVmZXJlbmNlLWlkZW50aXR5LWNoZWNrZXInO1xuaW1wb3J0IHsgTm9kZXNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRnZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL25vZGUtY2hhbmdlLnR5cGUnO1xuaW1wb3J0IHsgQ2hhbmdlc0NvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NoYW5nZXMtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL2VkZ2UtY2hhbmdlLnR5cGUnO1xuaW1wb3J0IHsgTm9kZVJlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEV2ZW50QnVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbXBvbmVudC1ldmVudC1idXMuc2VydmljZSc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vdHlwZXMvYmFja2dyb3VuZC50eXBlJztcbmltcG9ydCB7IFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9zcGFjZS1wb2ludC1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGaXRWaWV3T3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZml0LXZpZXctb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT3B0aW1pemF0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vcHRpbWl6YXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEtleWJvYXJkU2hvcnRjdXRzIH0gZnJvbSAnLi4vLi4vdHlwZXMva2V5Ym9hcmQtYWN0aW9uLnR5cGUnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMva2V5Ym9hcmQuc2VydmljZSc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1CYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHJhbnNmb3JtLWJhY2tncm91bmQnO1xuaW1wb3J0IHsgT3ZlcmxheXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3ZlcmxheXMuc2VydmljZSc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEVkZ2VDb21wb25lbnQgfSBmcm9tICcuLi9lZGdlL2VkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVDb21wb25lbnQgfSBmcm9tICcuLi9ub2RlL25vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IENvbm5lY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9jb25uZWN0aW9uL2Nvbm5lY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEJhY2tncm91bmRDb21wb25lbnQgfSBmcm9tICcuLi9iYWNrZ3JvdW5kL2JhY2tncm91bmQuY29tcG9uZW50JztcbmltcG9ydCB7IERlZnNDb21wb25lbnQgfSBmcm9tICcuLi9kZWZzL2RlZnMuY29tcG9uZW50JztcbmltcG9ydCB7IEZsb3dTaXplQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZmxvdy1zaXplLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJvb3RQb2ludGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yb290LXBvaW50ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJvb3RTdmdDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yb290LXN2Zy1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSb290U3ZnUmVmZXJlbmNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yZWZlcmVuY2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IEVkZ2VSZW5kZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRnZS1yZW5kZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRTcGFjZVBvaW50cyB9IGZyb20gJy4uLy4uL3V0aWxzL2dldC1zcGFjZS1wb2ludHMnO1xuaW1wb3J0IHsgZ2V0SW50ZXNlY3RpbmdOb2RlcyB9IGZyb20gJy4uLy4uL3V0aWxzL25vZGVzJztcbmltcG9ydCB7IEludGVyc2VjdGluZ05vZGVzT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaW50ZXJzZWN0aW5nLW5vZGVzLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFByZXZpZXdGbG93Q29tcG9uZW50IH0gZnJvbSAnLi4vcHJldmlldy1mbG93L3ByZXZpZXctZmxvdy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgUHJldmlld0Zsb3dSZW5kZXJTdHJhdGVneVNlcnZpY2UsXG4gIFZpZXdwb3J0UHJldmlld0Zsb3dSZW5kZXJTdHJhdGVneVNlcnZpY2UsXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZXZpZXctZmxvdy1yZW5kZXItc3RyYXRlZ3kuc2VydmljZSc7XG5pbXBvcnQgeyB0b0xhenlTaWduYWwgfSBmcm9tICcuLi8uLi91dGlscy9zaWduYWxzL3RvLWxhenktc2lnbmFsJztcblxuY29uc3QgY2hhbmdlc0NvbnRyb2xsZXJIb3N0RGlyZWN0aXZlID0ge1xuICBkaXJlY3RpdmU6IENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlLFxuICBvdXRwdXRzOiBbXG4gICAgJ29uTm9kZXNDaGFuZ2UnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnBvc2l0aW9uJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbi5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnBvc2l0aW9uLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNpemUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNpemUuc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zaXplLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZCcsXG4gICAgJ29uTm9kZXNDaGFuZ2UuYWRkLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UuYWRkLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucmVtb3ZlLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucmVtb3ZlLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdCcsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0LnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0Lm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5kZXRhY2hlZCcsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5kZXRhY2hlZC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmFkZC5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmFkZC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnJlbW92ZS5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnJlbW92ZS5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3QnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnNlbGVjdC5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnNlbGVjdC5tYW55JyxcbiAgXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3ZmbG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZmbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIERyYWdnYWJsZVNlcnZpY2UsXG4gICAgVmlld3BvcnRTZXJ2aWNlLFxuICAgIEZsb3dTdGF0dXNTZXJ2aWNlLFxuICAgIEZsb3dFbnRpdGllc1NlcnZpY2UsXG4gICAgTm9kZXNDaGFuZ2VTZXJ2aWNlLFxuICAgIEVkZ2VDaGFuZ2VzU2VydmljZSxcbiAgICBOb2RlUmVuZGVyaW5nU2VydmljZSxcbiAgICBFZGdlUmVuZGVyaW5nU2VydmljZSxcbiAgICBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIEZsb3dTZXR0aW5nc1NlcnZpY2UsXG4gICAgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlLFxuICAgIEtleWJvYXJkU2VydmljZSxcbiAgICBPdmVybGF5c1NlcnZpY2UsXG4gICAgeyBwcm92aWRlOiBQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSwgdXNlQ2xhc3M6IFZpZXdwb3J0UHJldmlld0Zsb3dSZW5kZXJTdHJhdGVneVNlcnZpY2UgfSxcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtjaGFuZ2VzQ29udHJvbGxlckhvc3REaXJlY3RpdmVdLFxuICBpbXBvcnRzOiBbXG4gICAgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSxcbiAgICBSb290U3ZnQ29udGV4dERpcmVjdGl2ZSxcbiAgICBSb290UG9pbnRlckRpcmVjdGl2ZSxcbiAgICBGbG93U2l6ZUNvbnRyb2xsZXJEaXJlY3RpdmUsXG4gICAgRGVmc0NvbXBvbmVudCxcbiAgICBCYWNrZ3JvdW5kQ29tcG9uZW50LFxuICAgIE1hcENvbnRleHREaXJlY3RpdmUsXG4gICAgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUsXG4gICAgQ29ubmVjdGlvbkNvbXBvbmVudCxcbiAgICBOb2RlQ29tcG9uZW50LFxuICAgIEVkZ2VDb21wb25lbnQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBQcmV2aWV3Rmxvd0NvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVmZsb3dDb21wb25lbnQge1xuICAvLyAjcmVnaW9uIERJXG4gIHByaXZhdGUgdmlld3BvcnRTZXJ2aWNlID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgZmxvd0VudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBub2Rlc0NoYW5nZVNlcnZpY2UgPSBpbmplY3QoTm9kZXNDaGFuZ2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlZGdlc0NoYW5nZVNlcnZpY2UgPSBpbmplY3QoRWRnZUNoYW5nZXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBub2RlUmVuZGVyaW5nU2VydmljZSA9IGluamVjdChOb2RlUmVuZGVyaW5nU2VydmljZSk7XG4gIHByaXZhdGUgZWRnZVJlbmRlcmluZ1NlcnZpY2UgPSBpbmplY3QoRWRnZVJlbmRlcmluZ1NlcnZpY2UpO1xuICBwcml2YXRlIGZsb3dTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSk7XG4gIHByaXZhdGUgY29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlID0gaW5qZWN0KENvbXBvbmVudEV2ZW50QnVzU2VydmljZSk7XG4gIHByaXZhdGUga2V5Ym9hcmRTZXJ2aWNlID0gaW5qZWN0KEtleWJvYXJkU2VydmljZSk7XG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFNFVFRJTkdTXG5cbiAgLyoqXG4gICAqIFNpemUgZm9yIGZsb3cgdmlld1xuICAgKlxuICAgKiBhY2NlcHRzXG4gICAqIC0gYWJzb2x1dGUgc2l6ZSBpbiBmb3JtYXQgW3dpZHRoLCBoZWlnaHRdIG9yXG4gICAqIC0gJ2F1dG8nIHRvIGNvbXB1dGUgc2l6ZSBiYXNlZCBvbiBwYXJlbnQgZWxlbWVudCBzaXplXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZpZXcodmlldzogW251bWJlciwgbnVtYmVyXSB8ICdhdXRvJykge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS52aWV3LnNldCh2aWV3KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIHpvb20gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWluWm9vbSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLm1pblpvb20uc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHpvb20gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWF4Wm9vbSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLm1heFpvb20uc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCYWNrZ3JvdW5kIGZvciBmbG93XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGJhY2tncm91bmQodmFsdWU6IEJhY2tncm91bmQgfCBzdHJpbmcpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuYmFja2dyb3VuZC5zZXQodHJhbnNmb3JtQmFja2dyb3VuZCh2YWx1ZSkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBvcHRpbWl6YXRpb24obmV3T3B0aW1pemF0aW9uOiBPcHRpbWl6YXRpb24pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2Uub3B0aW1pemF0aW9uLnVwZGF0ZSgob3B0aW1pemF0aW9uKSA9PiAoe1xuICAgICAgLi4ub3B0aW1pemF0aW9uLFxuICAgICAgLi4ubmV3T3B0aW1pemF0aW9uLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHbG9iYWwgcnVsZSBpZiB5b3UgY2FuIG9yIGNhbid0IHNlbGVjdCBlbnRpdGllc1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbnRpdGllc1NlbGVjdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZW50aXRpZXNTZWxlY3RhYmxlLnNldCh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGtleWJvYXJkU2hvcnRjdXRzKHZhbHVlOiBLZXlib2FyZFNob3J0Y3V0cykge1xuICAgIHRoaXMua2V5Ym9hcmRTZXJ2aWNlLnNldFNob3J0Y3V0cyh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0dGluZ3MgZm9yIGNvbm5lY3Rpb24gKGl0IHJlbmRlcnMgd2hlbiB1c2VyIHRyaWVzIHRvIGNyZWF0ZSBlZGdlIGJldHdlZW4gbm9kZXMpXG4gICAqXG4gICAqIFlvdSBuZWVkIHRvIHBhc3MgYENvbm5lY3Rpb25TZXR0aW5nc2AgaW4gdGhpcyBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCh7XG4gICAgdHJhbnNmb3JtOiAoc2V0dGluZ3M6IENvbm5lY3Rpb25TZXR0aW5ncykgPT4gbmV3IENvbm5lY3Rpb25Nb2RlbChzZXR0aW5ncyksXG4gIH0pXG4gIHB1YmxpYyBzZXQgY29ubmVjdGlvbihjb25uZWN0aW9uOiBDb25uZWN0aW9uTW9kZWwpIHtcbiAgICB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuY29ubmVjdGlvbi5zZXQoY29ubmVjdGlvbik7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogU25hcCBncmlkIGZvciBub2RlIG1vdmVtZW50LiBQYXNzZXMgYXMgW3gsIHldXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNuYXBHcmlkKHZhbHVlOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLnNuYXBHcmlkLnNldCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmFpemluZyB6LWluZGV4IGZvciBzZWxlY3RlZCBub2RlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVsZXZhdGVOb2Rlc09uU2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVsZXZhdGVOb2Rlc09uU2VsZWN0LnNldCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmFpemluZyB6LWluZGV4IGZvciBzZWxlY3RlZCBlZGdlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVsZXZhdGVFZGdlc09uU2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVsZXZhdGVFZGdlc09uU2VsZWN0LnNldCh2YWx1ZSk7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gTUFJTl9JTlBVVFNcbiAgLyoqXG4gICAqIE5vZGVzIHRvIHJlbmRlclxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHNldCBub2RlcyhuZXdOb2RlczogTm9kZVtdIHwgRHluYW1pY05vZGVbXSkge1xuICAgIGNvbnN0IG1vZGVscyA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PlxuICAgICAgUmVmZXJlbmNlSWRlbnRpdHlDaGVja2VyLm5vZGVzKG5ld05vZGVzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2Uubm9kZXMoKSksXG4gICAgKTtcblxuICAgIC8vIFRPRE86IGNvbnNpZGVyIGNhbGxpbmcgb25seSBmbyBuZXcgbm9kZXNcbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyhtb2RlbHMsIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcygpKTtcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2Rlcy5zZXQobW9kZWxzKTtcblxuICAgIG1vZGVscy5mb3JFYWNoKChtb2RlbCkgPT4gdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5wdWxsTm9kZShtb2RlbCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG5vZGVNb2RlbHMgPSB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLm5vZGVzO1xuICBwcm90ZWN0ZWQgZ3JvdXBzID0gdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5ncm91cHM7XG4gIHByb3RlY3RlZCBub25Hcm91cHMgPSB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLm5vbkdyb3VwcztcblxuICAvKipcbiAgICogRWRnZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVkZ2VzKG5ld0VkZ2VzOiBFZGdlW10pIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT5cbiAgICAgIFJlZmVyZW5jZUlkZW50aXR5Q2hlY2tlci5lZGdlcyhuZXdFZGdlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzKCkpLFxuICAgICk7XG5cbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyh0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2Uubm9kZXMoKSwgbmV3TW9kZWxzKTtcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcy5zZXQobmV3TW9kZWxzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlZGdlTW9kZWxzID0gdGhpcy5lZGdlUmVuZGVyaW5nU2VydmljZS5lZGdlcztcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gT1VUUFVUU1xuICAvKipcbiAgICogRXZlbnQgdGhhdCBhY2N1bXVsYXRlcyBhbGwgY3VzdG9tIG5vZGUgZXZlbnRzXG4gICAqXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvbkNvbXBvbmVudE5vZGVFdmVudCA9IG91dHB1dEZyb21PYnNlcnZhYmxlPGFueT4odGhpcy5jb21wb25lbnRFdmVudEJ1c1NlcnZpY2UuZXZlbnQkKTsgLy8gVE9ETzogcmVzZWFyY2ggaG93IHRvIHJlbW92ZSBhbnlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gVEVNUExBVEVTXG4gIHByb3RlY3RlZCBub2RlVGVtcGxhdGVEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoTm9kZUh0bWxUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIG5vZGVTdmdUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChOb2RlU3ZnVGVtcGxhdGVEaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBncm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChHcm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIGVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChFZGdlVGVtcGxhdGVEaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBlZGdlTGFiZWxIdG1sRGlyZWN0aXZlID0gY29udGVudENoaWxkKEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIGNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChDb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBESVJFQ1RJVkVTXG4gIHByb3RlY3RlZCBtYXBDb250ZXh0ID0gdmlld0NoaWxkKE1hcENvbnRleHREaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBzcGFjZVBvaW50Q29udGV4dCA9IHZpZXdDaGlsZC5yZXF1aXJlZChTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFNJR05BTF9BUElcbiAgLyoqXG4gICAqIFNpZ25hbCBmb3IgcmVhZGluZyB2aWV3cG9ydCBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQuYXNSZWFkb25seSgpO1xuXG4gIC8qKlxuICAgKiBTaWduYWwgZm9yIHJlYWRpbmcgbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UgPSB0b0xhenlTaWduYWwodGhpcy5ub2Rlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQsIHtcbiAgICBpbml0aWFsVmFsdWU6IFtdIGFzIE5vZGVDaGFuZ2VbXSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFNpZ25hbCB0byByZWFkaW5nIGVkZ2VzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlID0gdG9MYXp5U2lnbmFsKHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkLCB7XG4gICAgaW5pdGlhbFZhbHVlOiBbXSBhcyBFZGdlQ2hhbmdlW10sXG4gIH0pO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBSWF9BUElcbiAgLyoqXG4gICAqIE9ic2VydmFibGUgd2l0aCB2aWV3cG9ydCBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2aWV3cG9ydENoYW5nZSQgPSB0b09ic2VydmFibGUodGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCkucGlwZShza2lwKDEpKTsgLy8gc2tpcCBkZWZhdWx0IHZhbHVlIHRoYXQgc2V0IGJ5IHNpZ25hbFxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UkID0gdGhpcy5ub2Rlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQ7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgd2l0aCBlZGdlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlZGdlc0NoYW5nZSQgPSB0aGlzLmVkZ2VzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJDtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByb3RlY3RlZCBtYXJrZXJzID0gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm1hcmtlcnM7XG4gIHByb3RlY3RlZCBtaW5pbWFwID0gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm1pbmltYXA7XG5cbiAgcHJvdGVjdGVkIGZsb3dPcHRpbWl6YXRpb24gPSB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2Uub3B0aW1pemF0aW9uO1xuICBwcm90ZWN0ZWQgZmxvd1dpZHRoID0gdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd1dpZHRoO1xuICBwcm90ZWN0ZWQgZmxvd0hlaWdodCA9IHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dIZWlnaHQ7XG5cbiAgLy8gI3JlZ2lvbiBNRVRIT0RTX0FQSVxuICAvKipcbiAgICogQ2hhbmdlIHZpZXdwb3J0IHRvIHNwZWNpZmllZCBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0gdmlld3BvcnQgdmlld3BvcnQgc3RhdGVcbiAgICovXG4gIHB1YmxpYyB2aWV3cG9ydFRvKHZpZXdwb3J0OiBWaWV3cG9ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoe1xuICAgICAgY2hhbmdlVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgIHN0YXRlOiB2aWV3cG9ydCxcbiAgICAgIGR1cmF0aW9uOiAwLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSB6b29tXG4gICAqXG4gICAqIEBwYXJhbSB6b29tIHpvb20gdmFsdWVcbiAgICovXG4gIHB1YmxpYyB6b29tVG8oem9vbTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoe1xuICAgICAgY2hhbmdlVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgIHN0YXRlOiB7IHpvb20gfSxcbiAgICAgIGR1cmF0aW9uOiAwLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdG8gc3BlY2lmaWVkIGNvb3JkaW5hdGVcbiAgICpcbiAgICogQHBhcmFtIHBvaW50IHBvaW50IHdoZXJlIHRvIG1vdmVcbiAgICovXG4gIHB1YmxpYyBwYW5Ubyhwb2ludDogUG9pbnQpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7XG4gICAgICBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgc3RhdGU6IHBvaW50LFxuICAgICAgZHVyYXRpb246IDAsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZml0VmlldyhvcHRpb25zPzogRml0Vmlld09wdGlvbnMpIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS5maXRWaWV3KG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBub2RlIGJ5IGlkXG4gICAqXG4gICAqIEBwYXJhbSBpZCBub2RlIGlkXG4gICAqL1xuICBwdWJsaWMgZ2V0Tm9kZTxUID0gdW5rbm93bj4oaWQ6IHN0cmluZyk6IE5vZGU8VD4gfCBEeW5hbWljTm9kZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5nZXROb2RlPFQ+KGlkKT8ucmF3Tm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIG1ldGhvZCB0byBnZXQgZGV0YWNoZWQgZWRnZXNcbiAgICovXG4gIHB1YmxpYyBnZXREZXRhY2hlZEVkZ2VzKCk6IEVkZ2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5nZXREZXRhY2hlZEVkZ2VzKCkubWFwKChlKSA9PiBlLmVkZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgcG9pbnQgcmVjZWl2ZWQgZnJvbSBkb2N1bWVudCB0byBwb2ludCBvbiB0aGUgZmxvd1xuICAgKi9cbiAgcHVibGljIGRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludDogUG9pbnQpOiBQb2ludDtcbiAgcHVibGljIGRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludDogUG9pbnQsIG9wdGlvbnM/OiB7IHNwYWNlczogZmFsc2UgfSk6IFBvaW50O1xuICAvKipcbiAgICogQ29udmVydCBwb2ludCByZWNlaXZlZCBmcm9tIGRvY3VtZW50IHRvIGEgc3RhY2sgb2Ygc3BhY2UgcG9pbnRzIG9uIHRoZSBmbG93XG4gICAqIFNwYWNlIHBvaW50IGhhcyBhIHNwYWNlTm9kZUlkLCBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhpcyBub2RlXG4gICAqL1xuICBwdWJsaWMgZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50OiBQb2ludCwgb3B0aW9ucz86IHsgc3BhY2VzOiB0cnVlIH0pOiBTcGFjZVBvaW50W107XG4gIHB1YmxpYyBkb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQ6IFBvaW50LCBvcHRpb25zPzogeyBzcGFjZXM6IGJvb2xlYW4gfSk6IHVua25vd24ge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkUG9pbnQgPSB0aGlzLnNwYWNlUG9pbnRDb250ZXh0KCkuZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50KTtcblxuICAgIGlmIChvcHRpb25zPy5zcGFjZXMpIHtcbiAgICAgIHJldHVybiBnZXRTcGFjZVBvaW50cyh0cmFuc2Zvcm1lZFBvaW50LCB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLmdyb3VwcygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtZWRQb2ludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIHNwZWNpZmllZCBub2RlXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGVzXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgdG8gY2hlY2sgaW50ZXJzZWN0aW9ucyBmb3JcbiAgICogQHBhcmFtIG9wdGlvbnMucGFydGlhbGx5IC0gSWYgdHJ1ZSwgcmV0dXJucyBub2RlcyB0aGF0IHBhcnRpYWxseSBpbnRlcnNlY3QuIElmIGZhbHNlLCBvbmx5IHJldHVybnMgZnVsbHkgaW50ZXJzZWN0aW5nIG5vZGVzXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIHNwZWNpZmllZCBub2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0SW50ZXNlY3RpbmdOb2RlczxUPihcbiAgICBub2RlSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBJbnRlcnNlY3RpbmdOb2Rlc09wdGlvbnMgPSB7IHBhcnRpYWxseTogdHJ1ZSB9LFxuICApOiBOb2RlPFQ+W10gfCBEeW5hbWljTm9kZTxUPltdIHtcbiAgICByZXR1cm4gZ2V0SW50ZXNlY3RpbmdOb2Rlcyhub2RlSWQsIHRoaXMubm9kZU1vZGVscygpLCBvcHRpb25zKS5tYXAoKG4pID0+IG4ucmF3Tm9kZSkgYXNcbiAgICAgIHwgTm9kZTxUPltdXG4gICAgICB8IER5bmFtaWNOb2RlPFQ+W107XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBub2RlJ3MgcG9zaXRpb24gdG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgYW5vdGhlciBub2RlXG4gICAqXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgd2hvc2UgcG9zaXRpb24gc2hvdWxkIGJlIGNvbnZlcnRlZFxuICAgKiBAcGFyYW0gc3BhY2VOb2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgdGhhdCBkZWZpbmVzIHRoZSB0YXJnZXQgY29vcmRpbmF0ZSBzcGFjZS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgSWYgbnVsbCwgcmV0dXJucyB0aGUgcG9zaXRpb24gaW4gZ2xvYmFsIGNvb3JkaW5hdGVzXG4gICAqIEByZXR1cm5zIHtQb2ludH0gVGhlIGNvbnZlcnRlZCBwb3NpdGlvbi4gUmV0dXJucyB7eDogSW5maW5pdHksIHk6IEluZmluaXR5fSBpZiBlaXRoZXIgbm9kZSBpcyBub3QgZm91bmRcbiAgICovXG4gIHB1YmxpYyB0b05vZGVTcGFjZShub2RlSWQ6IHN0cmluZywgc3BhY2VOb2RlSWQ6IHN0cmluZyB8IG51bGwpOiBQb2ludCB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZU1vZGVscygpLmZpbmQoKG4pID0+IG4ucmF3Tm9kZS5pZCA9PT0gbm9kZUlkKTtcblxuICAgIGlmICghbm9kZSkgcmV0dXJuIHsgeDogSW5maW5pdHksIHk6IEluZmluaXR5IH07XG5cbiAgICBpZiAoc3BhY2VOb2RlSWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBub2RlLmdsb2JhbFBvaW50KCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29vcmRpbmF0ZVNwYWNlTm9kZSA9IHRoaXMubm9kZU1vZGVscygpLmZpbmQoKG4pID0+IG4ucmF3Tm9kZS5pZCA9PT0gc3BhY2VOb2RlSWQpO1xuXG4gICAgaWYgKCFjb29yZGluYXRlU3BhY2VOb2RlKSByZXR1cm4geyB4OiBJbmZpbml0eSwgeTogSW5maW5pdHkgfTtcblxuICAgIHJldHVybiBnZXRTcGFjZVBvaW50cyhub2RlLmdsb2JhbFBvaW50KCksIFtjb29yZGluYXRlU3BhY2VOb2RlXSlbMF07XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByb3RlY3RlZCB0cmFja05vZGVzKGlkeDogbnVtYmVyLCB7IHJhd05vZGU6IG5vZGUgfTogTm9kZU1vZGVsKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tFZGdlcyhpZHg6IG51bWJlciwgeyBlZGdlIH06IEVkZ2VNb2RlbCkge1xuICAgIHJldHVybiBlZGdlO1xuICB9XG59XG4iLCI8c3ZnOnN2ZyAjZmxvdyByb290U3ZnUmVmIHJvb3RTdmdDb250ZXh0IHJvb3RQb2ludGVyIGZsb3dTaXplQ29udHJvbGxlciBjbGFzcz1cInJvb3Qtc3ZnXCI+XG4gIDxkZWZzIGZsb3dEZWZzIFttYXJrZXJzXT1cIm1hcmtlcnMoKVwiIC8+XG5cbiAgPGcgYmFja2dyb3VuZCAvPlxuXG4gIDxzdmc6ZyBtYXBDb250ZXh0IHNwYWNlUG9pbnRDb250ZXh0PlxuICAgIDwhLS0gQ29ubmVjdGlvbiAtLT5cbiAgICA8c3ZnOmcgY29ubmVjdGlvbiBbbW9kZWxdPVwiY29ubmVjdGlvblwiIFt0ZW1wbGF0ZV09XCJjb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIiAvPlxuXG4gICAgQGlmIChmbG93T3B0aW1pemF0aW9uKCkuZGV0YWNoZWRHcm91cHNMYXllcikge1xuICAgICAgPCEtLSBHcm91cHMgLS0+XG4gICAgICBAZm9yIChtb2RlbCBvZiBncm91cHMoKTsgdHJhY2sgdHJhY2tOb2RlcygkaW5kZXgsIG1vZGVsKSkge1xuICAgICAgICA8c3ZnOmdcbiAgICAgICAgICBub2RlXG4gICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgICBbZ3JvdXBOb2RlVGVtcGxhdGVdPVwiZ3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCIgLz5cbiAgICAgIH1cbiAgICAgIDwhLS0gRWRnZXMgIC0tPlxuICAgICAgQGZvciAobW9kZWwgb2YgZWRnZU1vZGVscygpOyB0cmFjayB0cmFja0VkZ2VzKCRpbmRleCwgbW9kZWwpKSB7XG4gICAgICAgIDxzdmc6Z1xuICAgICAgICAgIGVkZ2VcbiAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgIFtlZGdlVGVtcGxhdGVdPVwiZWRnZVRlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbZWRnZUxhYmVsSHRtbFRlbXBsYXRlXT1cImVkZ2VMYWJlbEh0bWxEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLSBOb2RlcyAtLT5cbiAgICAgIEBmb3IgKG1vZGVsIG9mIG5vbkdyb3VwcygpOyB0cmFjayB0cmFja05vZGVzKCRpbmRleCwgbW9kZWwpKSB7XG4gICAgICAgIDxzdmc6Z1xuICAgICAgICAgIG5vZGVcbiAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgIFtub2RlVGVtcGxhdGVdPVwibm9kZVRlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbbm9kZVN2Z1RlbXBsYXRlXT1cIm5vZGVTdmdUZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIm1vZGVsLnBvaW50VHJhbnNmb3JtKClcIiAvPlxuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAoIWZsb3dPcHRpbWl6YXRpb24oKS5kZXRhY2hlZEdyb3Vwc0xheWVyKSB7XG4gICAgICA8IS0tIEVkZ2VzICAtLT5cbiAgICAgIEBmb3IgKG1vZGVsIG9mIGVkZ2VNb2RlbHMoKTsgdHJhY2sgdHJhY2tFZGdlcygkaW5kZXgsIG1vZGVsKSkge1xuICAgICAgICA8c3ZnOmdcbiAgICAgICAgICBlZGdlXG4gICAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgICBbZWRnZVRlbXBsYXRlXT1cImVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgW2VkZ2VMYWJlbEh0bWxUZW1wbGF0ZV09XCJlZGdlTGFiZWxIdG1sRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCIgLz5cbiAgICAgIH1cblxuICAgICAgQGZvciAobW9kZWwgb2Ygbm9kZU1vZGVscygpOyB0cmFjayB0cmFja05vZGVzKCRpbmRleCwgbW9kZWwpKSB7XG4gICAgICAgIDxzdmc6Z1xuICAgICAgICAgIG5vZGVcbiAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgIFtub2RlVGVtcGxhdGVdPVwibm9kZVRlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbbm9kZVN2Z1RlbXBsYXRlXT1cIm5vZGVTdmdUZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgW2dyb3VwTm9kZVRlbXBsYXRlXT1cImdyb3VwTm9kZVRlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiIC8+XG4gICAgICB9XG4gICAgfVxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gTWluaW1hcCAtLT5cbiAgQGlmIChtaW5pbWFwKCk7IGFzIG1pbmltYXApIHtcbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1pbmltYXAudGVtcGxhdGUoKVwiIC8+XG4gIH1cbjwvc3ZnOnN2Zz5cblxuQGlmIChmbG93T3B0aW1pemF0aW9uKCkudmlydHVhbGl6YXRpb24pIHtcbiAgPGNhbnZhcyBwcmV2aWV3RmxvdyBjbGFzcz1cInByZXZpZXctZmxvd1wiIFt3aWR0aF09XCJmbG93V2lkdGgoKVwiIFtoZWlnaHRdPVwiZmxvd0hlaWdodCgpXCI+PC9jYW52YXM+XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Directive, ElementRef, effect, inject, untracked } from '@angular/core';
|
|
1
|
+
import { Directive, ElementRef, NgZone, effect, inject, signal, untracked } from '@angular/core';
|
|
2
2
|
import { select } from 'd3-selection';
|
|
3
3
|
import { zoom, zoomIdentity } from 'd3-zoom';
|
|
4
4
|
import { ViewportService } from '../services/viewport.service';
|
|
@@ -14,8 +14,9 @@ export class MapContextDirective {
|
|
|
14
14
|
this.selectionService = inject(SelectionService);
|
|
15
15
|
this.viewportService = inject(ViewportService);
|
|
16
16
|
this.flowSettingsService = inject(FlowSettingsService);
|
|
17
|
+
this.zone = inject(NgZone);
|
|
17
18
|
this.rootSvgSelection = select(this.rootSvg);
|
|
18
|
-
this.
|
|
19
|
+
this.transform = signal('');
|
|
19
20
|
this.viewportForSelection = {};
|
|
20
21
|
// under the hood this effect triggers handleZoom, so error throws without this flag
|
|
21
22
|
this.manualViewportChangeEffect = effect(() => {
|
|
@@ -51,7 +52,7 @@ export class MapContextDirective {
|
|
|
51
52
|
this.handleZoom = ({ transform }) => {
|
|
52
53
|
// update public signal for user to read
|
|
53
54
|
this.viewportService.readableViewport.set(mapTransformToViewportState(transform));
|
|
54
|
-
this.
|
|
55
|
+
this.transform.set(transform.toString());
|
|
55
56
|
};
|
|
56
57
|
this.handleZoomStart = ({ transform }) => {
|
|
57
58
|
this.viewportForSelection = {
|
|
@@ -59,12 +60,16 @@ export class MapContextDirective {
|
|
|
59
60
|
};
|
|
60
61
|
};
|
|
61
62
|
this.handleZoomEnd = ({ transform, sourceEvent }) => {
|
|
62
|
-
this.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
this.zone.run(() => {
|
|
64
|
+
this.viewportForSelection = {
|
|
65
|
+
...this.viewportForSelection,
|
|
66
|
+
end: mapTransformToViewportState(transform),
|
|
67
|
+
target: evTarget(sourceEvent),
|
|
68
|
+
};
|
|
69
|
+
this.viewportService.triggerViewportChangeEvent('end');
|
|
70
|
+
// TODO: maybe use triggerViewportChangeEvent instead of this method?
|
|
71
|
+
this.selectionService.setViewport(this.viewportForSelection);
|
|
72
|
+
});
|
|
68
73
|
};
|
|
69
74
|
this.filterCondition = (event) => {
|
|
70
75
|
if (event.type === 'mousedown' || event.type === 'touchstart') {
|
|
@@ -74,22 +79,27 @@ export class MapContextDirective {
|
|
|
74
79
|
};
|
|
75
80
|
}
|
|
76
81
|
ngOnInit() {
|
|
77
|
-
this.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
this.zone.runOutsideAngular(() => {
|
|
83
|
+
this.zoomBehavior = zoom()
|
|
84
|
+
.scaleExtent([this.flowSettingsService.minZoom(), this.flowSettingsService.maxZoom()])
|
|
85
|
+
.filter(this.filterCondition)
|
|
86
|
+
.on('start', this.handleZoomStart)
|
|
87
|
+
.on('zoom', this.handleZoom)
|
|
88
|
+
.on('end', this.handleZoomEnd);
|
|
89
|
+
this.rootSvgSelection.call(this.zoomBehavior).on('dblclick.zoom', null);
|
|
90
|
+
});
|
|
84
91
|
}
|
|
85
92
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MapContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
86
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: MapContextDirective, isStandalone: true, selector: "g[mapContext]", ngImport: i0 }); }
|
|
93
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: MapContextDirective, isStandalone: true, selector: "g[mapContext]", host: { properties: { "attr.transform": "transform()" } }, ngImport: i0 }); }
|
|
87
94
|
}
|
|
88
95
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MapContextDirective, decorators: [{
|
|
89
96
|
type: Directive,
|
|
90
97
|
args: [{
|
|
91
98
|
standalone: true,
|
|
92
99
|
selector: 'g[mapContext]',
|
|
100
|
+
host: {
|
|
101
|
+
'[attr.transform]': 'transform()',
|
|
102
|
+
},
|
|
93
103
|
}]
|
|
94
104
|
}] });
|
|
95
105
|
const mapTransformToViewportState = (transform) => ({
|
|
@@ -103,4 +113,4 @@ const evTarget = (anyEvent) => {
|
|
|
103
113
|
}
|
|
104
114
|
return undefined;
|
|
105
115
|
};
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWNvbnRleHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2RpcmVjdGl2ZXMvbWFwLWNvbnRleHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUE0QyxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGdCQUFnQixFQUF3QixNQUFNLCtCQUErQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQU14RSxNQUFNLE9BQU8sbUJBQW1CO0lBSmhDO1FBS1ksWUFBTyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNwRCxTQUFJLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDakUscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsb0JBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFbEQscUJBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMs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LEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUUsQ0FBQzsrR0FsRVUsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxlQUFlO2lCQUMxQjs7QUFxR0QsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLFNBQXdCLEVBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqQixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDZCxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7Q0FDZixDQUFDLENBQUM7QUFFSCxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQWEsRUFBdUIsRUFBRTtJQUN0RCxJQUFJLFFBQVEsWUFBWSxLQUFLLElBQUksUUFBUSxDQUFDLE1BQU0sWUFBWSxPQUFPLEVBQUUsQ0FBQztRQUNwRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT25Jbml0LCBlZmZlY3QsIGluamVjdCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tICdkMy1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgRDNab29tRXZlbnQsIFpvb21CZWhhdmlvciwgWm9vbVRyYW5zZm9ybSwgem9vbSwgem9vbUlkZW50aXR5IH0gZnJvbSAnZDMtem9vbSc7XG5pbXBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy92aWV3cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IGlzRGVmaW5lZCB9IGZyb20gJy4uL3V0aWxzL2lzLWRlZmluZWQnO1xuaW1wb3J0IHsgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSB9IGZyb20gJy4vcmVmZXJlbmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBWaWV3cG9ydFN0YXRlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92aWV3cG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZSwgVmlld3BvcnRGb3JTZWxlY3Rpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnZ1ttYXBDb250ZXh0XScsXG59KVxuZXhwb3J0IGNsYXNzIE1hcENvbnRleHREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcm90ZWN0ZWQgcm9vdFN2ZyA9IGluamVjdChSb290U3ZnUmVmZXJlbmNlRGlyZWN0aXZlKS5lbGVtZW50O1xuICBwcm90ZWN0ZWQgaG9zdCA9IGluamVjdDxFbGVtZW50UmVmPFNWR0dFbGVtZW50Pj4oRWxlbWVudFJlZikubmF0aXZlRWxlbWVudDtcbiAgcHJvdGVjdGVkIHNlbGVjdGlvblNlcnZpY2UgPSBpbmplY3QoU2VsZWN0aW9uU2VydmljZSk7XG4gIHByb3RlY3RlZCB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIGZsb3dTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIHJvb3RTdmdTZWxlY3Rpb24gPSBzZWxlY3QodGhpcy5yb290U3ZnKTtcbiAgcHJvdGVjdGVkIHpvb21hYmxlU2VsZWN0aW9uID0gc2VsZWN0KHRoaXMuaG9zdCk7XG5cbiAgcHJvdGVjdGVkIHZpZXdwb3J0Rm9yU2VsZWN0aW9uOiBQYXJ0aWFsPFZpZXdwb3J0Rm9yU2VsZWN0aW9uPiA9IHt9O1xuXG4gIC8vIHVuZGVyIHRoZSBob29kIHRoaXMgZWZmZWN0IHRyaWdnZXJzIGhhbmRsZVpvb20sIHNvIGVycm9yIHRocm93cyB3aXRob3V0IHRoaXMgZmxhZ1xuICBwcm90ZWN0ZWQgbWFudWFsVmlld3BvcnRDaGFuZ2VFZmZlY3QgPSBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0KCk7XG4gICAgICBjb25zdCBzdGF0ZSA9IHZpZXdwb3J0LnN0YXRlO1xuXG4gICAgICBpZiAodmlld3BvcnQuY2hhbmdlVHlwZSA9PT0gJ2luaXRpYWwnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgb25seSB6b29tIHByb3ZpZGVkXG4gICAgICBpZiAoaXNEZWZpbmVkKHN0YXRlLnpvb20pICYmICFpc0RlZmluZWQoc3RhdGUueCkgJiYgIWlzRGVmaW5lZChzdGF0ZS55KSkge1xuICAgICAgICB0aGlzLnJvb3RTdmdTZWxlY3Rpb24udHJhbnNpdGlvbigpLmR1cmF0aW9uKHZpZXdwb3J0LmR1cmF0aW9uKS5jYWxsKHRoaXMuem9vbUJlaGF2aW9yLnNjYWxlVG8sIHN0YXRlLnpvb20pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgb25seSBwYW4gcHJvdmlkZWRcbiAgICAgIGlmIChpc0RlZmluZWQoc3RhdGUueCkgJiYgaXNEZWZpbmVkKHN0YXRlLnkpICYmICFpc0RlZmluZWQoc3RhdGUuem9vbSkpIHtcbiAgICAgICAgLy8gcmVtYWluIHNhbWUgem9vbSB2YWx1ZVxuICAgICAgICBjb25zdCB6b29tID0gdW50cmFja2VkKHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQpLnpvb207XG5cbiAgICAgICAgdGhpcy5yb290U3ZnU2VsZWN0aW9uXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgIC5kdXJhdGlvbih2aWV3cG9ydC5kdXJhdGlvbilcbiAgICAgICAgICAuY2FsbCh0aGlzLnpvb21CZWhhdmlvci50cmFuc2Zvcm0sIHpvb21JZGVudGl0eS50cmFuc2xhdGUoc3RhdGUueCwgc3RhdGUueSkuc2NhbGUoem9vbSkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2hvbGUgdmlld29ydCBzdGF0ZSBwcm92aWRlZFxuICAgICAgaWYgKGlzRGVmaW5lZChzdGF0ZS54KSAmJiBpc0RlZmluZWQoc3RhdGUueSkgJiYgaXNEZWZpbmVkKHN0YXRlLnpvb20pKSB7XG4gICAgICAgIHRoaXMucm9vdFN2Z1NlbGVjdGlvblxuICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAuZHVyYXRpb24odmlld3BvcnQuZHVyYXRpb24pXG4gICAgICAgICAgLmNhbGwodGhpcy56b29tQmVoYXZpb3IudHJhbnNmb3JtLCB6b29tSWRlbnRpdHkudHJhbnNsYXRlKHN0YXRlLngsIHN0YXRlLnkpLnNjYWxlKHN0YXRlLnpvb20pKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgcHJvdGVjdGVkIHpvb21CZWhhdmlvciE6IFpvb21CZWhhdmlvcjxTVkdTVkdFbGVtZW50LCB1bmtub3duPjtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy56b29tQmVoYXZpb3IgPSB6b29tPFNWR1NWR0VsZW1lbnQsIHVua25vd24+KClcbiAgICAgIC5zY2FsZUV4dGVudChbdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLm1pblpvb20oKSwgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLm1heFpvb20oKV0pXG4gICAgICAuZmlsdGVyKHRoaXMuZmlsdGVyQ29uZGl0aW9uKVxuICAgICAgLm9uKCdzdGFydCcsIHRoaXMuaGFuZGxlWm9vbVN0YXJ0KVxuICAgICAgLm9uKCd6b29tJywgdGhpcy5oYW5kbGVab29tKVxuICAgICAgLm9uKCdlbmQnLCB0aGlzLmhhbmRsZVpvb21FbmQpO1xuXG4gICAgdGhpcy5yb290U3ZnU2VsZWN0aW9uLmNhbGwodGhpcy56b29tQmVoYXZpb3IpLm9uKCdkYmxjbGljay56b29tJywgbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVpvb20gPSAoeyB0cmFuc2Zvcm0gfTogWm9vbUV2ZW50KSA9PiB7XG4gICAgLy8gdXBkYXRlIHB1YmxpYyBzaWduYWwgZm9yIHVzZXIgdG8gcmVhZFxuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQuc2V0KG1hcFRyYW5zZm9ybVRvVmlld3BvcnRTdGF0ZSh0cmFuc2Zvcm0pKTtcblxuICAgIHRoaXMuem9vbWFibGVTZWxlY3Rpb24uYXR0cigndHJhbnNmb3JtJywgdHJhbnNmb3JtLnRvU3RyaW5nKCkpO1xuICB9O1xuXG4gIHByaXZhdGUgaGFuZGxlWm9vbVN0YXJ0ID0gKHsgdHJhbnNmb3JtIH06IFpvb21FdmVudCkgPT4ge1xuICAgIHRoaXMudmlld3BvcnRGb3JTZWxlY3Rpb24gPSB7XG4gICAgICBzdGFydDogbWFwVHJhbnNmb3JtVG9WaWV3cG9ydFN0YXRlKHRyYW5zZm9ybSksXG4gICAgfTtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZVpvb21FbmQgPSAoeyB0cmFuc2Zvcm0sIHNvdXJjZUV2ZW50IH06IFpvb21FdmVudCkgPT4ge1xuICAgIHRoaXMudmlld3BvcnRGb3JTZWxlY3Rpb24gPSB7XG4gICAgICAuLi50aGlzLnZpZXdwb3J0Rm9yU2VsZWN0aW9uLFxuICAgICAgZW5kOiBtYXBUcmFuc2Zvcm1Ub1ZpZXdwb3J0U3RhdGUodHJhbnNmb3JtKSxcbiAgICAgIHRhcmdldDogZXZUYXJnZXQoc291cmNlRXZlbnQpLFxuICAgIH07XG5cbiAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2V0Vmlld3BvcnQodGhpcy52aWV3cG9ydEZvclNlbGVjdGlvbiBhcyBWaWV3cG9ydEZvclNlbGVjdGlvbik7XG4gIH07XG5cbiAgcHJpdmF0ZSBmaWx0ZXJDb25kaXRpb24gPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgcmV0dXJuIChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuY2xvc2VzdCgnLnZmbG93LW5vZGUnKSA9PT0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxuY29uc3QgbWFwVHJhbnNmb3JtVG9WaWV3cG9ydFN0YXRlID0gKHRyYW5zZm9ybTogWm9vbVRyYW5zZm9ybSk6IFZpZXdwb3J0U3RhdGUgPT4gKHtcbiAgem9vbTogdHJhbnNmb3JtLmssXG4gIHg6IHRyYW5zZm9ybS54LFxuICB5OiB0cmFuc2Zvcm0ueSxcbn0pO1xuXG5jb25zdCBldlRhcmdldCA9IChhbnlFdmVudDogYW55KTogRWxlbWVudCB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChhbnlFdmVudCBpbnN0YW5jZW9mIEV2ZW50ICYmIGFueUV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICByZXR1cm4gYW55RXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmRlY2xhcmUgbW9kdWxlICdkMy1zZWxlY3Rpb24nIHtcbiAgaW50ZXJmYWNlIFNlbGVjdGlvbjxHRWxlbWVudCBleHRlbmRzIEJhc2VUeXBlLCBEYXR1bSwgUEVsZW1lbnQgZXh0ZW5kcyBCYXNlVHlwZSwgUERhdHVtPiB7XG4gICAgdHJhbnNpdGlvbigpOiBTZWxlY3Rpb248R0VsZW1lbnQsIERhdHVtLCBQRWxlbWVudCwgUERhdHVtPjtcbiAgICBkdXJhdGlvbihkdXJhdGlvbjogbnVtYmVyKTogU2VsZWN0aW9uPEdFbGVtZW50LCBEYXR1bSwgUEVsZW1lbnQsIFBEYXR1bT47XG4gIH1cbn1cblxudHlwZSBab29tRXZlbnQgPSBEM1pvb21FdmVudDxTVkdTVkdFbGVtZW50LCB1bmtub3duPjtcbiJdfQ==
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWNvbnRleHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2RpcmVjdGl2ZXMvbWFwLWNvbnRleHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQTRDLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQXdCLE1BQU0sK0JBQStCLENBQUM7QUFDdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBU3hFLE1BQU0sT0FBTyxtQkFBbUI7SUFQaEM7UUFRWSxZQUFPLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3BELFNBQUksR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUNqRSxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsRCxTQUFJLEdBQUcsTUFBTSxDQUFDLE1B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ZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgTmdab25lLCBPbkluaXQsIGVmZmVjdCwgaW5qZWN0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnZDMtc2VsZWN0aW9uJztcbmltcG9ydCB7IEQzWm9vbUV2ZW50LCBab29tQmVoYXZpb3IsIFpvb21UcmFuc2Zvcm0sIHpvb20sIHpvb21JZGVudGl0eSB9IGZyb20gJ2QzLXpvb20nO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdmlld3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICcuLi91dGlscy9pcy1kZWZpbmVkJztcbmltcG9ydCB7IFJvb3RTdmdSZWZlcmVuY2VEaXJlY3RpdmUgfSBmcm9tICcuL3JlZmVyZW5jZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVmlld3BvcnRTdGF0ZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmlld3BvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UsIFZpZXdwb3J0Rm9yU2VsZWN0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2dbbWFwQ29udGV4dF0nLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLnRyYW5zZm9ybV0nOiAndHJhbnNmb3JtKCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBNYXBDb250ZXh0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJvdGVjdGVkIHJvb3RTdmcgPSBpbmplY3QoUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSkuZWxlbWVudDtcbiAgcHJvdGVjdGVkIGhvc3QgPSBpbmplY3Q8RWxlbWVudFJlZjxTVkdHRWxlbWVudD4+KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnQ7XG4gIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KFNlbGVjdGlvblNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgdmlld3BvcnRTZXJ2aWNlID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSk7XG4gIHByb3RlY3RlZCBmbG93U2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpO1xuICBwcm90ZWN0ZWQgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIHByb3RlY3RlZCByb290U3ZnU2VsZWN0aW9uID0gc2VsZWN0KHRoaXMucm9vdFN2Zyk7XG5cbiAgcHJvdGVjdGVkIHRyYW5zZm9ybSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcblxuICBwcm90ZWN0ZWQgdmlld3BvcnRGb3JTZWxlY3Rpb246IFBhcnRpYWw8Vmlld3BvcnRGb3JTZWxlY3Rpb24+ID0ge307XG5cbiAgLy8gdW5kZXIgdGhlIGhvb2QgdGhpcyBlZmZlY3QgdHJpZ2dlcnMgaGFuZGxlWm9vbSwgc28gZXJyb3IgdGhyb3dzIHdpdGhvdXQgdGhpcyBmbGFnXG4gIHByb3RlY3RlZCBtYW51YWxWaWV3cG9ydENoYW5nZUVmZmVjdCA9IGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQoKTtcbiAgICAgIGNvbnN0IHN0YXRlID0gdmlld3BvcnQuc3RhdGU7XG5cbiAgICAgIGlmICh2aWV3cG9ydC5jaGFuZ2VUeXBlID09PSAnaW5pdGlhbCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBvbmx5IHpvb20gcHJvdmlkZWRcbiAgICAgIGlmIChpc0RlZmluZWQoc3RhdGUuem9vbSkgJiYgIWlzRGVmaW5lZChzdGF0ZS54KSAmJiAhaXNEZWZpbmVkKHN0YXRlLnkpKSB7XG4gICAgICAgIHRoaXMucm9vdFN2Z1NlbGVjdGlvbi50cmFuc2l0aW9uKCkuZHVyYXRpb24odmlld3BvcnQuZHVyYXRpb24pLmNhbGwodGhpcy56b29tQmVoYXZpb3Iuc2NhbGVUbywgc3RhdGUuem9vbSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBvbmx5IHBhbiBwcm92aWRlZFxuICAgICAgaWYgKGlzRGVmaW5lZChzdGF0ZS54KSAmJiBpc0RlZmluZWQoc3RhdGUueSkgJiYgIWlzRGVmaW5lZChzdGF0ZS56b29tKSkge1xuICAgICAgICAvLyByZW1haW4gc2FtZSB6b29tIHZhbHVlXG4gICAgICAgIGNvbnN0IHpvb20gPSB1bnRyYWNrZWQodGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCkuem9vbTtcblxuICAgICAgICB0aGlzLnJvb3RTdmdTZWxlY3Rpb25cbiAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgLmR1cmF0aW9uKHZpZXdwb3J0LmR1cmF0aW9uKVxuICAgICAgICAgIC5jYWxsKHRoaXMuem9vbUJlaGF2aW9yLnRyYW5zZm9ybSwgem9vbUlkZW50aXR5LnRyYW5zbGF0ZShzdGF0ZS54LCBzdGF0ZS55KS5zY2FsZSh6b29tKSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB3aG9sZSB2aWV3b3J0IHN0YXRlIHByb3ZpZGVkXG4gICAgICBpZiAoaXNEZWZpbmVkKHN0YXRlLngpICYmIGlzRGVmaW5lZChzdGF0ZS55KSAmJiBpc0RlZmluZWQoc3RhdGUuem9vbSkpIHtcbiAgICAgICAgdGhpcy5yb290U3ZnU2VsZWN0aW9uXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgIC5kdXJhdGlvbih2aWV3cG9ydC5kdXJhdGlvbilcbiAgICAgICAgICAuY2FsbCh0aGlzLnpvb21CZWhhdmlvci50cmFuc2Zvcm0sIHpvb21JZGVudGl0eS50cmFuc2xhdGUoc3RhdGUueCwgc3RhdGUueSkuc2NhbGUoc3RhdGUuem9vbSkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICBwcm90ZWN0ZWQgem9vbUJlaGF2aW9yITogWm9vbUJlaGF2aW9yPFNWR1NWR0VsZW1lbnQsIHVua25vd24+O1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy56b29tQmVoYXZpb3IgPSB6b29tPFNWR1NWR0VsZW1lbnQsIHVua25vd24+KClcbiAgICAgICAgLnNjYWxlRXh0ZW50KFt0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UubWluWm9vbSgpLCB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UubWF4Wm9vbSgpXSlcbiAgICAgICAgLmZpbHRlcih0aGlzLmZpbHRlckNvbmRpdGlvbilcbiAgICAgICAgLm9uKCdzdGFydCcsIHRoaXMuaGFuZGxlWm9vbVN0YXJ0KVxuICAgICAgICAub24oJ3pvb20nLCB0aGlzLmhhbmRsZVpvb20pXG4gICAgICAgIC5vbignZW5kJywgdGhpcy5oYW5kbGVab29tRW5kKTtcblxuICAgICAgdGhpcy5yb290U3ZnU2VsZWN0aW9uLmNhbGwodGhpcy56b29tQmVoYXZpb3IpLm9uKCdkYmxjbGljay56b29tJywgbnVsbCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVpvb20gPSAoeyB0cmFuc2Zvcm0gfTogWm9vbUV2ZW50KSA9PiB7XG4gICAgLy8gdXBkYXRlIHB1YmxpYyBzaWduYWwgZm9yIHVzZXIgdG8gcmVhZFxuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQuc2V0KG1hcFRyYW5zZm9ybVRvVmlld3BvcnRTdGF0ZSh0cmFuc2Zvcm0pKTtcblxuICAgIHRoaXMudHJhbnNmb3JtLnNldCh0cmFuc2Zvcm0udG9TdHJpbmcoKSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBoYW5kbGVab29tU3RhcnQgPSAoeyB0cmFuc2Zvcm0gfTogWm9vbUV2ZW50KSA9PiB7XG4gICAgdGhpcy52aWV3cG9ydEZvclNlbGVjdGlvbiA9IHtcbiAgICAgIHN0YXJ0OiBtYXBUcmFuc2Zvcm1Ub1ZpZXdwb3J0U3RhdGUodHJhbnNmb3JtKSxcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgaGFuZGxlWm9vbUVuZCA9ICh7IHRyYW5zZm9ybSwgc291cmNlRXZlbnQgfTogWm9vbUV2ZW50KSA9PiB7XG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLnZpZXdwb3J0Rm9yU2VsZWN0aW9uID0ge1xuICAgICAgICAuLi50aGlzLnZpZXdwb3J0Rm9yU2VsZWN0aW9uLFxuICAgICAgICBlbmQ6IG1hcFRyYW5zZm9ybVRvVmlld3BvcnRTdGF0ZSh0cmFuc2Zvcm0pLFxuICAgICAgICB0YXJnZXQ6IGV2VGFyZ2V0KHNvdXJjZUV2ZW50KSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLnRyaWdnZXJWaWV3cG9ydENoYW5nZUV2ZW50KCdlbmQnKTtcblxuICAgICAgLy8gVE9ETzogbWF5YmUgdXNlIHRyaWdnZXJWaWV3cG9ydENoYW5nZUV2ZW50IGluc3RlYWQgb2YgdGhpcyBtZXRob2Q/XG4gICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2V0Vmlld3BvcnQodGhpcy52aWV3cG9ydEZvclNlbGVjdGlvbiBhcyBWaWV3cG9ydEZvclNlbGVjdGlvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBmaWx0ZXJDb25kaXRpb24gPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgcmV0dXJuIChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuY2xvc2VzdCgnLnZmbG93LW5vZGUnKSA9PT0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxuY29uc3QgbWFwVHJhbnNmb3JtVG9WaWV3cG9ydFN0YXRlID0gKHRyYW5zZm9ybTogWm9vbVRyYW5zZm9ybSk6IFZpZXdwb3J0U3RhdGUgPT4gKHtcbiAgem9vbTogdHJhbnNmb3JtLmssXG4gIHg6IHRyYW5zZm9ybS54LFxuICB5OiB0cmFuc2Zvcm0ueSxcbn0pO1xuXG5jb25zdCBldlRhcmdldCA9IChhbnlFdmVudDogYW55KTogRWxlbWVudCB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChhbnlFdmVudCBpbnN0YW5jZW9mIEV2ZW50ICYmIGFueUV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICByZXR1cm4gYW55RXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmRlY2xhcmUgbW9kdWxlICdkMy1zZWxlY3Rpb24nIHtcbiAgaW50ZXJmYWNlIFNlbGVjdGlvbjxHRWxlbWVudCBleHRlbmRzIEJhc2VUeXBlLCBEYXR1bSwgUEVsZW1lbnQgZXh0ZW5kcyBCYXNlVHlwZSwgUERhdHVtPiB7XG4gICAgdHJhbnNpdGlvbigpOiBTZWxlY3Rpb248R0VsZW1lbnQsIERhdHVtLCBQRWxlbWVudCwgUERhdHVtPjtcbiAgICBkdXJhdGlvbihkdXJhdGlvbjogbnVtYmVyKTogU2VsZWN0aW9uPEdFbGVtZW50LCBEYXR1bSwgUEVsZW1lbnQsIFBEYXR1bT47XG4gIH1cbn1cblxudHlwZSBab29tRXZlbnQgPSBEM1pvb21FdmVudDxTVkdTVkdFbGVtZW50LCB1bmtub3duPjtcbiJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Directive, ElementRef, computed, inject } from '@angular/core';
|
|
2
|
-
import { toSignal } from '@angular/core/rxjs-interop';
|
|
3
2
|
import { RootSvgReferenceDirective } from './reference.directive';
|
|
4
3
|
import { RootPointerDirective } from './root-pointer.directive';
|
|
4
|
+
import { toLazySignal } from '../utils/signals/to-lazy-signal';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export class SpacePointContextDirective {
|
|
7
7
|
constructor() {
|
|
@@ -21,7 +21,7 @@ export class SpacePointContextDirective {
|
|
|
21
21
|
y: movement.y,
|
|
22
22
|
});
|
|
23
23
|
});
|
|
24
|
-
this.pointerMovement =
|
|
24
|
+
this.pointerMovement = toLazySignal(this.pointerMovementDirective.pointerMovement$);
|
|
25
25
|
}
|
|
26
26
|
documentPointToFlowPoint(documentPoint) {
|
|
27
27
|
const point = this.rootSvg.createSVGPoint();
|
|
@@ -39,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
39
39
|
selector: 'g[spacePointContext]',
|
|
40
40
|
}]
|
|
41
41
|
}] });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2UtcG9pbnQtY29udGV4dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvZGlyZWN0aXZlcy9zcGFjZS1wb2ludC1jb250ZXh0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFNL0QsTUFBTSxPQUFPLDBCQUEwQjtJQUp2QztRQUtVLDZCQUF3QixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hELFlBQU8sR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDcEQsU0FBSSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUMsYUFBYSxDQUFDO1FBRXpFOztXQUVHO1FBQ0kseUJBQW9CLEdBQWtCLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBRXhDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDeEIsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO2dCQUNuQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ2IsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ2QsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSSxvQkFBZSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQVN2RjtJQVBRLHdCQUF3QixDQUFDLGFBQW9CO1FBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUMsS0FBSyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzFCLEtBQUssQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUUxQixPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7K0dBN0JVLDBCQUEwQjttR0FBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQUp0QyxTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsc0JBQXNCO2lCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgU2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb290U3ZnUmVmZXJlbmNlRGlyZWN0aXZlIH0gZnJvbSAnLi9yZWZlcmVuY2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wb2ludC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUm9vdFBvaW50ZXJEaXJlY3RpdmUgfSBmcm9tICcuL3Jvb3QtcG9pbnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdG9MYXp5U2lnbmFsIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFscy90by1sYXp5LXNpZ25hbCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2dbc3BhY2VQb2ludENvbnRleHRdJyxcbn0pXG5leHBvcnQgY2xhc3MgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUge1xuICBwcml2YXRlIHBvaW50ZXJNb3ZlbWVudERpcmVjdGl2ZSA9IGluamVjdChSb290UG9pbnRlckRpcmVjdGl2ZSk7XG4gIHByaXZhdGUgcm9vdFN2ZyA9IGluamVjdChSb290U3ZnUmVmZXJlbmNlRGlyZWN0aXZlKS5lbGVtZW50O1xuICBwcml2YXRlIGhvc3QgPSBpbmplY3Q8RWxlbWVudFJlZjxTVkdHRWxlbWVudD4+KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFNpZ25hbCB3aXRoIGN1cnJlbnQgbW91c2UgcG9zaXRpb24gaW4gc3ZnIHNwYWNlXG4gICAqL1xuICBwdWJsaWMgc3ZnQ3VycmVudFNwYWNlUG9pbnQ6IFNpZ25hbDxQb2ludD4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbW92ZW1lbnQgPSB0aGlzLnBvaW50ZXJNb3ZlbWVudCgpO1xuXG4gICAgaWYgKCFtb3ZlbWVudCkge1xuICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludCh7XG4gICAgICB4OiBtb3ZlbWVudC54LFxuICAgICAgeTogbW92ZW1lbnQueSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcHVibGljIHBvaW50ZXJNb3ZlbWVudCA9IHRvTGF6eVNpZ25hbCh0aGlzLnBvaW50ZXJNb3ZlbWVudERpcmVjdGl2ZS5wb2ludGVyTW92ZW1lbnQkKTtcblxuICBwdWJsaWMgZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KGRvY3VtZW50UG9pbnQ6IFBvaW50KSB7XG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLnJvb3RTdmcuY3JlYXRlU1ZHUG9pbnQoKTtcbiAgICBwb2ludC54ID0gZG9jdW1lbnRQb2ludC54O1xuICAgIHBvaW50LnkgPSBkb2N1bWVudFBvaW50Lnk7XG5cbiAgICByZXR1cm4gcG9pbnQubWF0cml4VHJhbnNmb3JtKHRoaXMuaG9zdC5nZXRTY3JlZW5DVE0oKSEuaW52ZXJzZSgpKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1wcmV2aWV3LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9pbnRlcmZhY2VzL25vZGUtcHJldmlldy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTm9kZVByZXZpZXcge1xuICBzdHlsZTogUGljazxQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+LCAnYmFja2dyb3VuZENvbG9yJyB8ICdib3JkZXJDb2xvcicgfCAnYm9yZGVyV2lkdGgnIHwgJ2JvcmRlclJhZGl1cyc+O1xufVxuIl19
|
|
@@ -42,4 +42,4 @@ export function isTemplateStaticGroupNode(node) {
|
|
|
42
42
|
export function isTemplateDynamicGroupNode(node) {
|
|
43
43
|
return node.type === 'template-group';
|
|
44
44
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQXlIcEgsTUFBTSxVQUFVLFlBQVksQ0FBSSxJQUE4QjtJQUM1RCxPQUFPLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUM7QUFDMUMsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUksSUFBOEI7SUFDN0QsT0FBTyxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUksSUFBYTtJQUNwRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBSSxJQUFvQjtJQUM1RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEYsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBSSxJQUFhO0lBQ25ELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBSSxJQUFvQjtJQUMzRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUksSUFBYTtJQUN0RCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUksSUFBb0I7SUFDOUQsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQVU7SUFDNUMsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQWlCO0lBQ3BELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxJQUFVO0lBQ2pELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxJQUFpQjtJQUN6RCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUksSUFBYTtJQUN4RCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FBSSxJQUFvQjtJQUNoRSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4vcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEN1c3RvbU5vZGVDb21wb25lbnQgfSBmcm9tICcuLi9wdWJsaWMtY29tcG9uZW50cy9jdXN0b20tbm9kZS9jdXN0b20tbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tRHluYW1pY05vZGVDb21wb25lbnQgfSBmcm9tICcuLi9wdWJsaWMtY29tcG9uZW50cy9jdXN0b20tZHluYW1pYy1ub2RlL2N1c3RvbS1keW5hbWljLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVQcmV2aWV3IH0gZnJvbSAnLi9ub2RlLXByZXZpZXcuaW50ZXJmYWNlJztcblxuZXhwb3J0IHR5cGUgTm9kZTxUID0gYW55PiA9XG4gIHwgRGVmYXVsdE5vZGVcbiAgfCBIdG1sVGVtcGxhdGVOb2RlPFQ+XG4gIHwgU3ZnVGVtcGxhdGVOb2RlPFQ+XG4gIHwgQ29tcG9uZW50Tm9kZTxUPlxuICB8IERlZmF1bHRHcm91cE5vZGVcbiAgfCBUZW1wbGF0ZUdyb3VwTm9kZTxUPjtcblxuZXhwb3J0IHR5cGUgRHluYW1pY05vZGU8VCA9IGFueT4gPVxuICB8IERlZmF1bHREeW5hbWljTm9kZVxuICB8IEh0bWxUZW1wbGF0ZUR5bmFtaWNOb2RlPFQ+XG4gIHwgU3ZnVGVtcGxhdGVEeW5hbWljTm9kZTxUPlxuICB8IENvbXBvbmVudER5bmFtaWNOb2RlPFQ+XG4gIHwgRGVmYXVsdER5bmFtaWNHcm91cE5vZGVcbiAgfCBUZW1wbGF0ZUR5bmFtaWNHcm91cE5vZGU8VD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkTm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBvaW50OiBQb2ludDtcbiAgZHJhZ2dhYmxlPzogYm9vbGVhbjtcbiAgcGFyZW50SWQ/OiBzdHJpbmcgfCBudWxsO1xuICBwcmV2aWV3PzogTm9kZVByZXZpZXc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkRHluYW1pY05vZGUge1xuICBpZDogc3RyaW5nO1xuICBwb2ludDogV3JpdGFibGVTaWduYWw8UG9pbnQ+O1xuICBkcmFnZ2FibGU/OiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgcGFyZW50SWQ/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbiAgcHJldmlldz86IFdyaXRhYmxlU2lnbmFsPE5vZGVQcmV2aWV3Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0Tm9kZSBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnZGVmYXVsdCc7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdER5bmFtaWNOb2RlIGV4dGVuZHMgU2hhcmVkRHluYW1pY05vZGUge1xuICB0eXBlOiAnZGVmYXVsdCc7XG4gIHRleHQ/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuICB3aWR0aD86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4gIGhlaWdodD86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbFRlbXBsYXRlTm9kZTxUID0gYW55PiBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnaHRtbC10ZW1wbGF0ZSc7XG4gIGRhdGE/OiBUO1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN2Z1RlbXBsYXRlTm9kZTxUID0gYW55PiBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnc3ZnLXRlbXBsYXRlJztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGRhdGE/OiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxUZW1wbGF0ZUR5bmFtaWNOb2RlPFQgPSBhbnk+IGV4dGVuZHMgU2hhcmVkRHluYW1pY05vZGUge1xuICB0eXBlOiAnaHRtbC10ZW1wbGF0ZSc7XG4gIGRhdGE/OiBXcml0YWJsZVNpZ25hbDxUPjtcbiAgd2lkdGg/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBoZWlnaHQ/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN2Z1RlbXBsYXRlRHluYW1pY05vZGU8VCA9IGFueT4gZXh0ZW5kcyBTaGFyZWREeW5hbWljTm9kZSB7XG4gIHR5cGU6ICdzdmctdGVtcGxhdGUnO1xuICB3aWR0aDogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbiAgaGVpZ2h0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBkYXRhPzogV3JpdGFibGVTaWduYWw8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdEdyb3VwTm9kZSBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnZGVmYXVsdC1ncm91cCc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBjb2xvcj86IHN0cmluZztcbiAgcmVzaXphYmxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0RHluYW1pY0dyb3VwTm9kZSBleHRlbmRzIFNoYXJlZER5bmFtaWNOb2RlIHtcbiAgdHlwZTogJ2RlZmF1bHQtZ3JvdXAnO1xuICB3aWR0aDogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbiAgaGVpZ2h0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBjb2xvcj86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4gIHJlc2l6YWJsZT86IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlR3JvdXBOb2RlPFQ+IGV4dGVuZHMgU2hhcmVkTm9kZSB7XG4gIHR5cGU6ICd0ZW1wbGF0ZS1ncm91cCc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkYXRhPzogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZUR5bmFtaWNHcm91cE5vZGU8VD4gZXh0ZW5kcyBTaGFyZWREeW5hbWljTm9kZSB7XG4gIHR5cGU6ICd0ZW1wbGF0ZS1ncm91cCc7XG4gIHdpZHRoOiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBoZWlnaHQ6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4gIGRhdGE/OiBXcml0YWJsZVNpZ25hbDxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnROb2RlPFQgPSBhbnk+IGV4dGVuZHMgU2hhcmVkTm9kZSB7XG4gIHR5cGU6IFR5cGU8Q3VzdG9tTm9kZUNvbXBvbmVudDxUPj47XG4gIGRhdGE/OiBUO1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudER5bmFtaWNOb2RlPFQgPSBhbnk+IGV4dGVuZHMgU2hhcmVkRHluYW1pY05vZGUge1xuICB0eXBlOiBUeXBlPEN1c3RvbUR5bmFtaWNOb2RlQ29tcG9uZW50PFQ+PjtcbiAgZGF0YT86IFdyaXRhYmxlU2lnbmFsPFQ+O1xuICB3aWR0aD86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4gIGhlaWdodD86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YXRpY05vZGU8VD4obm9kZTogTm9kZTxUPiB8IER5bmFtaWNOb2RlPFQ+KTogbm9kZSBpcyBOb2RlPFQ+IHtcbiAgcmV0dXJuIHR5cGVvZiBub2RlLnBvaW50ICE9PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEeW5hbWljTm9kZTxUPihub2RlOiBOb2RlPFQ+IHwgRHluYW1pY05vZGU8VD4pOiBub2RlIGlzIER5bmFtaWNOb2RlPFQ+IHtcbiAgcmV0dXJuIHR5cGVvZiBub2RlLnBvaW50ID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wb25lbnRTdGF0aWNOb2RlPFQ+KG5vZGU6IE5vZGU8VD4pOiBub2RlIGlzIENvbXBvbmVudE5vZGU8VD4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mLmNhbGwoQ3VzdG9tTm9kZUNvbXBvbmVudCwgbm9kZS50eXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcG9uZW50RHluYW1pY05vZGU8VD4obm9kZTogRHluYW1pY05vZGU8VD4pOiBub2RlIGlzIENvbXBvbmVudER5bmFtaWNOb2RlPFQ+IHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZi5jYWxsKEN1c3RvbUR5bmFtaWNOb2RlQ29tcG9uZW50LCBub2RlLnR5cGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZVN0YXRpY05vZGU8VD4obm9kZTogTm9kZTxUPik6IG5vZGUgaXMgSHRtbFRlbXBsYXRlTm9kZTxUPiB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdodG1sLXRlbXBsYXRlJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcGxhdGVEeW5hbWljTm9kZTxUPihub2RlOiBEeW5hbWljTm9kZTxUPik6IG5vZGUgaXMgSHRtbFRlbXBsYXRlRHluYW1pY05vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N2Z1RlbXBsYXRlU3RhdGljTm9kZTxUPihub2RlOiBOb2RlPFQ+KTogbm9kZSBpcyBTdmdUZW1wbGF0ZU5vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnc3ZnLXRlbXBsYXRlJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3ZnVGVtcGxhdGVEeW5hbWljTm9kZTxUPihub2RlOiBEeW5hbWljTm9kZTxUPik6IG5vZGUgaXMgU3ZnVGVtcGxhdGVEeW5hbWljTm9kZTxUPiB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdodG1sLXRlbXBsYXRlJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmYXVsdFN0YXRpY05vZGUobm9kZTogTm9kZSk6IG5vZGUgaXMgRGVmYXVsdE5vZGUge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnZGVmYXVsdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmF1bHREeW5hbWljTm9kZShub2RlOiBEeW5hbWljTm9kZSk6IG5vZGUgaXMgRGVmYXVsdER5bmFtaWNOb2RlIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2RlZmF1bHQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZhdWx0U3RhdGljR3JvdXBOb2RlKG5vZGU6IE5vZGUpOiBub2RlIGlzIERlZmF1bHRHcm91cE5vZGUge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnZGVmYXVsdC1ncm91cCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmF1bHREeW5hbWljR3JvdXBOb2RlKG5vZGU6IER5bmFtaWNOb2RlKTogbm9kZSBpcyBEZWZhdWx0RHluYW1pY0dyb3VwTm9kZSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdkZWZhdWx0LWdyb3VwJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcGxhdGVTdGF0aWNHcm91cE5vZGU8VD4obm9kZTogTm9kZTxUPik6IG5vZGUgaXMgVGVtcGxhdGVHcm91cE5vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAndGVtcGxhdGUtZ3JvdXAnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZUR5bmFtaWNHcm91cE5vZGU8VD4obm9kZTogRHluYW1pY05vZGU8VD4pOiBub2RlIGlzIFRlbXBsYXRlRHluYW1pY0dyb3VwTm9kZTxUPiB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICd0ZW1wbGF0ZS1ncm91cCc7XG59XG4iXX0=
|