ngx-vflow 1.9.0 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/vflow/components/connection/connection.component.mjs +33 -13
- package/esm2022/lib/vflow/components/edge/edge.component.mjs +3 -3
- package/esm2022/lib/vflow/components/node/node.component.mjs +3 -3
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +8 -10
- package/esm2022/lib/vflow/directives/selectable.directive.mjs +3 -3
- package/esm2022/lib/vflow/interfaces/curve-factory.interface.mjs +2 -0
- package/esm2022/lib/vflow/interfaces/edge.interface.mjs +1 -1
- package/esm2022/lib/vflow/math/edge-path/bezier-path.mjs +12 -14
- package/esm2022/lib/vflow/math/edge-path/smooth-step-path.mjs +5 -5
- package/esm2022/lib/vflow/math/edge-path/straigh-path.mjs +7 -9
- package/esm2022/lib/vflow/models/edge.model.mjs +24 -8
- package/esm2022/lib/vflow/services/flow-entities.service.mjs +3 -1
- package/esm2022/lib/vflow/services/node-rendering.service.mjs +2 -2
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ngx-vflow.mjs +89 -297
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/connection/connection.component.d.ts +4 -2
- package/lib/vflow/interfaces/curve-factory.interface.d.ts +44 -0
- package/lib/vflow/interfaces/edge.interface.d.ts +2 -1
- package/lib/vflow/math/edge-path/bezier-path.d.ts +2 -5
- package/lib/vflow/math/edge-path/smooth-step-path.d.ts +2 -3
- package/lib/vflow/math/edge-path/straigh-path.d.ts +2 -4
- package/lib/vflow/models/edge.model.d.ts +6 -4
- package/lib/vflow/services/flow-entities.service.d.ts +3 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/esm2022/lib/vflow/directives/lazy-for.directive.mjs +0 -243
- package/esm2022/lib/vflow/interfaces/path-data.interface.mjs +0 -2
- package/esm2022/lib/vflow/types/using-points.type.mjs +0 -2
- package/lib/vflow/directives/lazy-for.directive.d.ts +0 -94
- package/lib/vflow/interfaces/path-data.interface.d.ts +0 -8
- package/lib/vflow/types/using-points.type.d.ts +0 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Injector, Input,
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Injector, Input, inject, runInInjectionContext, input, 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';
|
|
@@ -34,7 +34,6 @@ 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 { LazyForDirective } from '../../directives/lazy-for.directive';
|
|
38
37
|
import * as i0 from "@angular/core";
|
|
39
38
|
import * as i1 from "../../directives/changes-controller.directive";
|
|
40
39
|
const changesControllerHostDirective = {
|
|
@@ -87,10 +86,10 @@ export class VflowComponent {
|
|
|
87
86
|
this.optimization = input({
|
|
88
87
|
detachedGroupsLayer: false,
|
|
89
88
|
});
|
|
90
|
-
this.nodeModels =
|
|
91
|
-
this.groups =
|
|
92
|
-
this.nonGroups =
|
|
93
|
-
this.edgeModels =
|
|
89
|
+
this.nodeModels = this.nodeRenderingService.nodes;
|
|
90
|
+
this.groups = this.nodeRenderingService.groups;
|
|
91
|
+
this.nonGroups = this.nodeRenderingService.nonGroups;
|
|
92
|
+
this.edgeModels = this.edgeRenderingService.edges;
|
|
94
93
|
// #endregion
|
|
95
94
|
// #region OUTPUTS
|
|
96
95
|
/**
|
|
@@ -351,7 +350,7 @@ export class VflowComponent {
|
|
|
351
350
|
ComponentEventBusService,
|
|
352
351
|
KeyboardService,
|
|
353
352
|
OverlaysService,
|
|
354
|
-
], 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 (optimization().detachedGroupsLayer) {\n <!-- Groups -->\n
|
|
353
|
+
], 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 (optimization().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 (!optimization().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 <!-- Nodes -->\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", styles: [":host{display:block;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}\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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
355
354
|
}
|
|
356
355
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VflowComponent, decorators: [{
|
|
357
356
|
type: Component,
|
|
@@ -382,8 +381,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
382
381
|
NodeComponent,
|
|
383
382
|
EdgeComponent,
|
|
384
383
|
NgTemplateOutlet,
|
|
385
|
-
|
|
386
|
-
], 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 (optimization().detachedGroupsLayer) {\n <!-- Groups -->\n <svg:g\n *lazyFor=\"let model of groups(); trackBy: trackNodes\"\n node\n [model]=\"model\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n\n <!-- Edges -->\n <svg:g\n *lazyFor=\"let model of edgeModels(); trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n\n <!-- Nodes -->\n <svg:g\n *lazyFor=\"let model of nonGroups(); trackBy: trackNodes\"\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n\n @if (!optimization().detachedGroupsLayer) {\n <!-- Edges -->\n <svg:g\n *lazyFor=\"let model of edgeModels(); trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n\n <!-- Nodes -->\n <svg:g\n *lazyFor=\"let model of nodeModels(); trackBy: trackNodes\"\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n </svg:g>\n\n <!-- Minimap -->\n @if (minimap(); as minimap) {\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n }\n</svg:svg>\n", styles: [":host{display:block;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}\n"] }]
|
|
384
|
+
], 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 (optimization().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 (!optimization().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 <!-- Nodes -->\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", styles: [":host{display:block;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}\n"] }]
|
|
387
385
|
}], propDecorators: { view: [{
|
|
388
386
|
type: Input
|
|
389
387
|
}], minZoom: [{
|
|
@@ -413,4 +411,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
413
411
|
}], edges: [{
|
|
414
412
|
type: Input
|
|
415
413
|
}] } });
|
|
416
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLHFCQUFxQixFQUNyQixLQUFLLEVBQ0wsWUFBWSxFQUNaLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUcxRixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6Qix3QkFBd0IsR0FDekIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0Ms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akIsS0FBSztnQkFTSyxPQUFPO3NCQURqQixLQUFLO2dCQVNLLFVBQVU7c0JBRHBCLEtBQUs7Z0JBYUssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQU1LLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFhSyxVQUFVO3NCQUhwQixLQUFLO3VCQUFDO3dCQUNMLFNBQVMsRUFBRSxDQUFDLFFBQTRCLEVBQUUsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQztxQkFDM0U7Z0JBYVUsUUFBUTtzQkFEbEIsS0FBSztnQkFTSyxvQkFBb0I7c0JBRDlCLEtBQUs7Z0JBU0ssb0JBQW9CO3NCQUQ5QixLQUFLO2dCQVdLLEtBQUs7c0JBRGYsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBdUJkLEtBQUs7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxuICBpbnB1dCxcbiAgY29udGVudENoaWxkLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY05vZGUsIE5vZGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL25vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1hcENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL21hcC1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEcmFnZ2FibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhZ2dhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vZGUubW9kZWwnO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlld3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsLCBvdXRwdXRGcm9tT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkZ2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VkZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9lZGdlLm1vZGVsJztcbmltcG9ydCB7XG4gIENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlLFxuICBFZGdlVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEdyb3VwTm9kZVRlbXBsYXRlRGlyZWN0aXZlLFxuICBOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlLFxuICBOb2RlU3ZnVGVtcGxhdGVEaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IGFkZE5vZGVzVG9FZGdlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2FkZC1ub2Rlcy10by1lZGdlcyc7XG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTcGFjZVBvaW50LCBQb2ludCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFZpZXdwb3J0U3RhdGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3ZpZXdwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Nvbm5lY3Rpb24tc2V0dGluZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb25uZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlZmVyZW5jZUlkZW50aXR5Q2hlY2tlciB9IGZyb20gJy4uLy4uL3V0aWxzL2lkZW50aXR5LWNoZWNrZXIvcmVmZXJlbmNlLWlkZW50aXR5LWNoZWNrZXInO1xuaW1wb3J0IHsgTm9kZXNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRnZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL25vZGUtY2hhbmdlLnR5cGUnO1xuaW1wb3J0IHsgQ2hhbmdlc0NvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NoYW5nZXMtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL2VkZ2UtY2hhbmdlLnR5cGUnO1xuaW1wb3J0IHsgTm9kZVJlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEV2ZW50QnVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbXBvbmVudC1ldmVudC1idXMuc2VydmljZSc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vdHlwZXMvYmFja2dyb3VuZC50eXBlJztcbmltcG9ydCB7IFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9zcGFjZS1wb2ludC1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGaXRWaWV3T3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZml0LXZpZXctb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT3B0aW1pemF0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vcHRpbWl6YXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEtleWJvYXJkU2hvcnRjdXRzIH0gZnJvbSAnLi4vLi4vdHlwZXMva2V5Ym9hcmQtYWN0aW9uLnR5cGUnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMva2V5Ym9hcmQuc2VydmljZSc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1CYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHJhbnNmb3JtLWJhY2tncm91bmQnO1xuaW1wb3J0IHsgT3ZlcmxheXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3ZlcmxheXMuc2VydmljZSc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEVkZ2VDb21wb25lbnQgfSBmcm9tICcuLi9lZGdlL2VkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVDb21wb25lbnQgfSBmcm9tICcuLi9ub2RlL25vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IENvbm5lY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9jb25uZWN0aW9uL2Nvbm5lY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEJhY2tncm91bmRDb21wb25lbnQgfSBmcm9tICcuLi9iYWNrZ3JvdW5kL2JhY2tncm91bmQuY29tcG9uZW50JztcbmltcG9ydCB7IERlZnNDb21wb25lbnQgfSBmcm9tICcuLi9kZWZzL2RlZnMuY29tcG9uZW50JztcbmltcG9ydCB7IEZsb3dTaXplQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZmxvdy1zaXplLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJvb3RQb2ludGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yb290LXBvaW50ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJvb3RTdmdDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yb290LXN2Zy1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSb290U3ZnUmVmZXJlbmNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yZWZlcmVuY2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IEVkZ2VSZW5kZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRnZS1yZW5kZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRTcGFjZVBvaW50cyB9IGZyb20gJy4uLy4uL3V0aWxzL2dldC1zcGFjZS1wb2ludHMnO1xuaW1wb3J0IHsgZ2V0SW50ZXNlY3RpbmdOb2RlcyB9IGZyb20gJy4uLy4uL3V0aWxzL25vZGVzJztcbmltcG9ydCB7IEludGVyc2VjdGluZ05vZGVzT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaW50ZXJzZWN0aW5nLW5vZGVzLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IExhenlGb3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2xhenktZm9yLmRpcmVjdGl2ZSc7XG5cbmNvbnN0IGNoYW5nZXNDb250cm9sbGVySG9zdERpcmVjdGl2ZSA9IHtcbiAgZGlyZWN0aXZlOiBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgb3V0cHV0czogW1xuICAgICdvbk5vZGVzQ2hhbmdlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbicsXG4gICAgJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24uc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbi5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zaXplJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zaXplLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2l6ZS5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5hZGQnLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZC5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZC5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5yZW1vdmUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZS5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZS5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zZWxlY3QnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdC5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmRldGFjaGVkLnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuYWRkJyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2UucmVtb3ZlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2Uuc2VsZWN0JyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3Quc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3QubWFueScsXG4gIF0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd2ZmxvdycsXG4gIHRlbXBsYXRlVXJsOiAnLi92Zmxvdy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZmbG93LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBEcmFnZ2FibGVTZXJ2aWNlLFxuICAgIFZpZXdwb3J0U2VydmljZSxcbiAgICBGbG93U3RhdHVzU2VydmljZSxcbiAgICBGbG93RW50aXRpZXNTZXJ2aWNlLFxuICAgIE5vZGVzQ2hhbmdlU2VydmljZSxcbiAgICBFZGdlQ2hhbmdlc1NlcnZpY2UsXG4gICAgTm9kZVJlbmRlcmluZ1NlcnZpY2UsXG4gICAgRWRnZVJlbmRlcmluZ1NlcnZpY2UsXG4gICAgU2VsZWN0aW9uU2VydmljZSxcbiAgICBGbG93U2V0dGluZ3NTZXJ2aWNlLFxuICAgIENvbXBvbmVudEV2ZW50QnVzU2VydmljZSxcbiAgICBLZXlib2FyZFNlcnZpY2UsXG4gICAgT3ZlcmxheXNTZXJ2aWNlLFxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW2NoYW5nZXNDb250cm9sbGVySG9zdERpcmVjdGl2ZV0sXG4gIGltcG9ydHM6IFtcbiAgICBSb290U3ZnUmVmZXJlbmNlRGlyZWN0aXZlLFxuICAgIFJvb3RTdmdDb250ZXh0RGlyZWN0aXZlLFxuICAgIFJvb3RQb2ludGVyRGlyZWN0aXZlLFxuICAgIEZsb3dTaXplQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgICBEZWZzQ29tcG9uZW50LFxuICAgIEJhY2tncm91bmRDb21wb25lbnQsXG4gICAgTWFwQ29udGV4dERpcmVjdGl2ZSxcbiAgICBTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSxcbiAgICBDb25uZWN0aW9uQ29tcG9uZW50LFxuICAgIE5vZGVDb21wb25lbnQsXG4gICAgRWRnZUNvbXBvbmVudCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIExhenlGb3JEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFZmbG93Q29tcG9uZW50IHtcbiAgLy8gI3JlZ2lvbiBESVxuICBwcml2YXRlIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIGZsb3dFbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSk7XG4gIHByaXZhdGUgbm9kZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KE5vZGVzQ2hhbmdlU2VydmljZSk7XG4gIHByaXZhdGUgZWRnZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KEVkZ2VDaGFuZ2VzU2VydmljZSk7XG4gIHByaXZhdGUgbm9kZVJlbmRlcmluZ1NlcnZpY2UgPSBpbmplY3QoTm9kZVJlbmRlcmluZ1NlcnZpY2UpO1xuICBwcml2YXRlIGVkZ2VSZW5kZXJpbmdTZXJ2aWNlID0gaW5qZWN0KEVkZ2VSZW5kZXJpbmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBmbG93U2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpO1xuICBwcml2YXRlIGNvbXBvbmVudEV2ZW50QnVzU2VydmljZSA9IGluamVjdChDb21wb25lbnRFdmVudEJ1c1NlcnZpY2UpO1xuICBwcml2YXRlIGtleWJvYXJkU2VydmljZSA9IGluamVjdChLZXlib2FyZFNlcnZpY2UpO1xuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBTRVRUSU5HU1xuXG4gIC8qKlxuICAgKiBTaXplIGZvciBmbG93IHZpZXdcbiAgICpcbiAgICogYWNjZXB0c1xuICAgKiAtIGFic29sdXRlIHNpemUgaW4gZm9ybWF0IFt3aWR0aCwgaGVpZ2h0XSBvclxuICAgKiAtICdhdXRvJyB0byBjb21wdXRlIHNpemUgYmFzZWQgb24gcGFyZW50IGVsZW1lbnQgc2l6ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2aWV3KHZpZXc6IFtudW1iZXIsIG51bWJlcl0gfCAnYXV0bycpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2Uudmlldy5zZXQodmlldyk7XG4gIH1cblxuICAvKipcbiAgICogTWluaW11bSB6b29tIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pblpvb20odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5taW5ab29tLnNldCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTWF4aW11bSB6b29tIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heFpvb20odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5tYXhab29tLnNldCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQmFja2dyb3VuZCBmb3IgZmxvd1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBiYWNrZ3JvdW5kKHZhbHVlOiBCYWNrZ3JvdW5kIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmJhY2tncm91bmQuc2V0KHRyYW5zZm9ybUJhY2tncm91bmQodmFsdWUpKTtcbiAgfVxuXG4gIHB1YmxpYyBvcHRpbWl6YXRpb24gPSBpbnB1dDxPcHRpbWl6YXRpb24+KHtcbiAgICBkZXRhY2hlZEdyb3Vwc0xheWVyOiBmYWxzZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEdsb2JhbCBydWxlIGlmIHlvdSBjYW4gb3IgY2FuJ3Qgc2VsZWN0IGVudGl0aWVzXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVudGl0aWVzU2VsZWN0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5lbnRpdGllc1NlbGVjdGFibGUuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQga2V5Ym9hcmRTaG9ydGN1dHModmFsdWU6IEtleWJvYXJkU2hvcnRjdXRzKSB7XG4gICAgdGhpcy5rZXlib2FyZFNlcnZpY2Uuc2V0U2hvcnRjdXRzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyBmb3IgY29ubmVjdGlvbiAoaXQgcmVuZGVycyB3aGVuIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGVkZ2UgYmV0d2VlbiBub2RlcylcbiAgICpcbiAgICogWW91IG5lZWQgdG8gcGFzcyBgQ29ubmVjdGlvblNldHRpbmdzYCBpbiB0aGlzIGlucHV0LlxuICAgKi9cbiAgQElucHV0KHtcbiAgICB0cmFuc2Zvcm06IChzZXR0aW5nczogQ29ubmVjdGlvblNldHRpbmdzKSA9PiBuZXcgQ29ubmVjdGlvbk1vZGVsKHNldHRpbmdzKSxcbiAgfSlcbiAgcHVibGljIHNldCBjb25uZWN0aW9uKGNvbm5lY3Rpb246IENvbm5lY3Rpb25Nb2RlbCkge1xuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uLnNldChjb25uZWN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTbmFwIGdyaWQgZm9yIG5vZGUgbW92ZW1lbnQuIFBhc3NlcyBhcyBbeCwgeV1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc25hcEdyaWQodmFsdWU6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2Uuc25hcEdyaWQuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYWl6aW5nIHotaW5kZXggZm9yIHNlbGVjdGVkIG5vZGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWxldmF0ZU5vZGVzT25TZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZWxldmF0ZU5vZGVzT25TZWxlY3Quc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYWl6aW5nIHotaW5kZXggZm9yIHNlbGVjdGVkIGVkZ2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWxldmF0ZUVkZ2VzT25TZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZWxldmF0ZUVkZ2VzT25TZWxlY3Quc2V0KHZhbHVlKTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBNQUlOX0lOUFVUU1xuICAvKipcbiAgICogTm9kZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IG5vZGVzKG5ld05vZGVzOiBOb2RlW10gfCBEeW5hbWljTm9kZVtdKSB7XG4gICAgY29uc3QgbW9kZWxzID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+XG4gICAgICBSZWZlcmVuY2VJZGVudGl0eUNoZWNrZXIubm9kZXMobmV3Tm9kZXMsIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2RlcygpKSxcbiAgICApO1xuXG4gICAgLy8gVE9ETzogY29uc2lkZXIgY2FsbGluZyBvbmx5IGZvIG5ldyBub2Rlc1xuICAgIC8vIHF1aWNrIGFuZCBkaXJ0eSBiaW5kaW5nIG5vZGVzIHRvIGVkZ2VzXG4gICAgYWRkTm9kZXNUb0VkZ2VzKG1vZGVscywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzKCkpO1xuXG4gICAgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzLnNldChtb2RlbHMpO1xuXG4gICAgbW9kZWxzLmZvckVhY2goKG1vZGVsKSA9PiB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLnB1bGxOb2RlKG1vZGVsKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbm9kZU1vZGVscyA9IGNvbXB1dGVkKCgpID0+IHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2Uubm9kZXMoKSk7XG4gIHByb3RlY3RlZCBncm91cHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLmdyb3VwcygpKTtcbiAgcHJvdGVjdGVkIG5vbkdyb3VwcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2Uubm9uR3JvdXBzKCkpO1xuXG4gIC8qKlxuICAgKiBFZGdlcyB0byByZW5kZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWRnZXMobmV3RWRnZXM6IEVkZ2VbXSkge1xuICAgIGNvbnN0IG5ld01vZGVscyA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PlxuICAgICAgUmVmZXJlbmNlSWRlbnRpdHlDaGVja2VyLmVkZ2VzKG5ld0VkZ2VzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSksXG4gICAgKTtcblxuICAgIC8vIHF1aWNrIGFuZCBkaXJ0eSBiaW5kaW5nIG5vZGVzIHRvIGVkZ2VzXG4gICAgYWRkTm9kZXNUb0VkZ2VzKHRoaXMubm9kZU1vZGVscygpLCBuZXdNb2RlbHMpO1xuXG4gICAgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzLnNldChuZXdNb2RlbHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVkZ2VNb2RlbHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVkZ2VSZW5kZXJpbmdTZXJ2aWNlLmVkZ2VzKCkpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRTXG4gIC8qKlxuICAgKiBFdmVudCB0aGF0IGFjY3VtdWxhdGVzIGFsbCBjdXN0b20gbm9kZSBldmVudHNcbiAgICpcbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9uQ29tcG9uZW50Tm9kZUV2ZW50ID0gb3V0cHV0RnJvbU9ic2VydmFibGU8YW55Pih0aGlzLmNvbXBvbmVudEV2ZW50QnVzU2VydmljZS5ldmVudCQpOyAvLyBUT0RPOiByZXNlYXJjaCBob3cgdG8gcmVtb3ZlIGFueVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBURU1QTEFURVNcbiAgcHJvdGVjdGVkIG5vZGVUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlKTtcblxuICBwcm90ZWN0ZWQgbm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlID0gY29udGVudENoaWxkKE5vZGVTdmdUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIGdyb3VwTm9kZVRlbXBsYXRlRGlyZWN0aXZlID0gY29udGVudENoaWxkKEdyb3VwTm9kZVRlbXBsYXRlRGlyZWN0aXZlKTtcblxuICBwcm90ZWN0ZWQgZWRnZVRlbXBsYXRlRGlyZWN0aXZlID0gY29udGVudENoaWxkKEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIGVkZ2VMYWJlbEh0bWxEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlKTtcblxuICBwcm90ZWN0ZWQgY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlID0gY29udGVudENoaWxkKENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIERJUkVDVElWRVNcbiAgcHJvdGVjdGVkIG1hcENvbnRleHQgPSB2aWV3Q2hpbGQoTWFwQ29udGV4dERpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIHNwYWNlUG9pbnRDb250ZXh0ID0gdmlld0NoaWxkLnJlcXVpcmVkKFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0lHTkFMX0FQSVxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIHZpZXdwb3J0IGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydC5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqXG4gICAqIFNpZ25hbCBmb3IgcmVhZGluZyBub2RlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBub2Rlc0NoYW5nZSA9IHRvU2lnbmFsKHRoaXMubm9kZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkLCB7XG4gICAgaW5pdGlhbFZhbHVlOiBbXSBhcyBOb2RlQ2hhbmdlW10sXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTaWduYWwgdG8gcmVhZGluZyBlZGdlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlZGdlc0NoYW5nZSA9IHRvU2lnbmFsKHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkLCB7XG4gICAgaW5pdGlhbFZhbHVlOiBbXSBhcyBFZGdlQ2hhbmdlW10sXG4gIH0pO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBSWF9BUElcbiAgLyoqXG4gICAqIE9ic2VydmFibGUgd2l0aCB2aWV3cG9ydCBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2aWV3cG9ydENoYW5nZSQgPSB0b09ic2VydmFibGUodGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCkucGlwZShza2lwKDEpKTsgLy8gc2tpcCBkZWZhdWx0IHZhbHVlIHRoYXQgc2V0IGJ5IHNpZ25hbFxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UkID0gdGhpcy5ub2Rlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQ7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgd2l0aCBlZGdlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlZGdlc0NoYW5nZSQgPSB0aGlzLmVkZ2VzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJDtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByb3RlY3RlZCBtYXJrZXJzID0gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm1hcmtlcnM7XG5cbiAgcHJvdGVjdGVkIG1pbmltYXAgPSB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UubWluaW1hcDtcblxuICAvLyAjcmVnaW9uIE1FVEhPRFNfQVBJXG4gIC8qKlxuICAgKiBDaGFuZ2Ugdmlld3BvcnQgdG8gc3BlY2lmaWVkIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB2aWV3cG9ydCB2aWV3cG9ydCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHZpZXdwb3J0VG8odmlld3BvcnQ6IFZpZXdwb3J0U3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7XG4gICAgICBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgc3RhdGU6IHZpZXdwb3J0LFxuICAgICAgZHVyYXRpb246IDAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIHpvb21cbiAgICpcbiAgICogQHBhcmFtIHpvb20gem9vbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHpvb21Ubyh6b29tOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7XG4gICAgICBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgc3RhdGU6IHsgem9vbSB9LFxuICAgICAgZHVyYXRpb246IDAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0byBzcGVjaWZpZWQgY29vcmRpbmF0ZVxuICAgKlxuICAgKiBAcGFyYW0gcG9pbnQgcG9pbnQgd2hlcmUgdG8gbW92ZVxuICAgKi9cbiAgcHVibGljIHBhblRvKHBvaW50OiBQb2ludCk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHtcbiAgICAgIGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsXG4gICAgICBzdGF0ZTogcG9pbnQsXG4gICAgICBkdXJhdGlvbjogMCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmaXRWaWV3KG9wdGlvbnM/OiBGaXRWaWV3T3B0aW9ucykge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLmZpdFZpZXcob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5vZGUgYnkgaWRcbiAgICpcbiAgICogQHBhcmFtIGlkIG5vZGUgaWRcbiAgICovXG4gIHB1YmxpYyBnZXROb2RlPFQgPSB1bmtub3duPihpZDogc3RyaW5nKTogTm9kZTxUPiB8IER5bmFtaWNOb2RlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmdldE5vZGU8VD4oaWQpPy5yYXdOb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgbWV0aG9kIHRvIGdldCBkZXRhY2hlZCBlZGdlc1xuICAgKi9cbiAgcHVibGljIGdldERldGFjaGVkRWRnZXMoKTogRWRnZVtdIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmdldERldGFjaGVkRWRnZXMoKS5tYXAoKGUpID0+IGUuZWRnZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBwb2ludCByZWNlaXZlZCBmcm9tIGRvY3VtZW50IHRvIHBvaW50IG9uIHRoZSBmbG93XG4gICAqL1xuICBwdWJsaWMgZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50OiBQb2ludCk6IFBvaW50O1xuICBwdWJsaWMgZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50OiBQb2ludCwgb3B0aW9ucz86IHsgc3BhY2VzOiBmYWxzZSB9KTogUG9pbnQ7XG4gIC8qKlxuICAgKiBDb252ZXJ0IHBvaW50IHJlY2VpdmVkIGZyb20gZG9jdW1lbnQgdG8gYSBzdGFjayBvZiBzcGFjZSBwb2ludHMgb24gdGhlIGZsb3dcbiAgICogU3BhY2UgcG9pbnQgaGFzIGEgc3BhY2VOb2RlSWQsIGNvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGlzIG5vZGVcbiAgICovXG4gIHB1YmxpYyBkb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQ6IFBvaW50LCBvcHRpb25zPzogeyBzcGFjZXM6IHRydWUgfSk6IFNwYWNlUG9pbnRbXTtcbiAgcHVibGljIGRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludDogUG9pbnQsIG9wdGlvbnM/OiB7IHNwYWNlczogYm9vbGVhbiB9KTogdW5rbm93biB7XG4gICAgY29uc3QgdHJhbnNmb3JtZWRQb2ludCA9IHRoaXMuc3BhY2VQb2ludENvbnRleHQoKS5kb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQpO1xuXG4gICAgaWYgKG9wdGlvbnM/LnNwYWNlcykge1xuICAgICAgcmV0dXJuIGdldFNwYWNlUG9pbnRzKHRyYW5zZm9ybWVkUG9pbnQsIHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2UuZ3JvdXBzKCkpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2Zvcm1lZFBvaW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgbm9kZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5vZGVcbiAgICpcbiAgICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZXNcbiAgICogQHBhcmFtIG5vZGVJZCAtIFRoZSBJRCBvZiB0aGUgbm9kZSB0byBjaGVjayBpbnRlcnNlY3Rpb25zIGZvclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wYXJ0aWFsbHkgLSBJZiB0cnVlLCByZXR1cm5zIG5vZGVzIHRoYXQgcGFydGlhbGx5IGludGVyc2VjdC4gSWYgZmFsc2UsIG9ubHkgcmV0dXJucyBmdWxseSBpbnRlcnNlY3Rpbmcgbm9kZXNcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2Ygbm9kZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5vZGVcbiAgICovXG4gIHB1YmxpYyBnZXRJbnRlc2VjdGluZ05vZGVzPFQ+KFxuICAgIG5vZGVJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEludGVyc2VjdGluZ05vZGVzT3B0aW9ucyA9IHsgcGFydGlhbGx5OiB0cnVlIH0sXG4gICk6IE5vZGU8VD5bXSB8IER5bmFtaWNOb2RlPFQ+W10ge1xuICAgIHJldHVybiBnZXRJbnRlc2VjdGluZ05vZGVzKG5vZGVJZCwgdGhpcy5ub2RlTW9kZWxzKCksIG9wdGlvbnMpLm1hcCgobikgPT4gbi5yYXdOb2RlKSBhc1xuICAgICAgfCBOb2RlPFQ+W11cbiAgICAgIHwgRHluYW1pY05vZGU8VD5bXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIG5vZGUncyBwb3NpdGlvbiB0byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiBhbm90aGVyIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIG5vZGVJZCAtIFRoZSBJRCBvZiB0aGUgbm9kZSB3aG9zZSBwb3NpdGlvbiBzaG91bGQgYmUgY29udmVydGVkXG4gICAqIEBwYXJhbSBzcGFjZU5vZGVJZCAtIFRoZSBJRCBvZiB0aGUgbm9kZSB0aGF0IGRlZmluZXMgdGhlIHRhcmdldCBjb29yZGluYXRlIHNwYWNlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiBudWxsLCByZXR1cm5zIHRoZSBwb3NpdGlvbiBpbiBnbG9iYWwgY29vcmRpbmF0ZXNcbiAgICogQHJldHVybnMge1BvaW50fSBUaGUgY29udmVydGVkIHBvc2l0aW9uLiBSZXR1cm5zIHt4OiBJbmZpbml0eSwgeTogSW5maW5pdHl9IGlmIGVpdGhlciBub2RlIGlzIG5vdCBmb3VuZFxuICAgKi9cbiAgcHVibGljIHRvTm9kZVNwYWNlKG5vZGVJZDogc3RyaW5nLCBzcGFjZU5vZGVJZDogc3RyaW5nIHwgbnVsbCk6IFBvaW50IHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ub2RlTW9kZWxzKCkuZmluZCgobikgPT4gbi5yYXdOb2RlLmlkID09PSBub2RlSWQpO1xuXG4gICAgaWYgKCFub2RlKSByZXR1cm4geyB4OiBJbmZpbml0eSwgeTogSW5maW5pdHkgfTtcblxuICAgIGlmIChzcGFjZU5vZGVJZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vZGUuZ2xvYmFsUG9pbnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb29yZGluYXRlU3BhY2VOb2RlID0gdGhpcy5ub2RlTW9kZWxzKCkuZmluZCgobikgPT4gbi5yYXdOb2RlLmlkID09PSBzcGFjZU5vZGVJZCk7XG5cbiAgICBpZiAoIWNvb3JkaW5hdGVTcGFjZU5vZGUpIHJldHVybiB7IHg6IEluZmluaXR5LCB5OiBJbmZpbml0eSB9O1xuXG4gICAgcmV0dXJuIGdldFNwYWNlUG9pbnRzKG5vZGUuZ2xvYmFsUG9pbnQoKSwgW2Nvb3JkaW5hdGVTcGFjZU5vZGVdKVswXTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgcHJvdGVjdGVkIHRyYWNrTm9kZXMoaWR4OiBudW1iZXIsIHsgcmF3Tm9kZTogbm9kZSB9OiBOb2RlTW9kZWwpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0VkZ2VzKGlkeDogbnVtYmVyLCB7IGVkZ2UgfTogRWRnZU1vZGVsKSB7XG4gICAgcmV0dXJuIGVkZ2U7XG4gIH1cbn1cbiIsIjxzdmc6c3ZnICNmbG93IHJvb3RTdmdSZWYgcm9vdFN2Z0NvbnRleHQgcm9vdFBvaW50ZXIgZmxvd1NpemVDb250cm9sbGVyIGNsYXNzPVwicm9vdC1zdmdcIj5cbiAgPGRlZnMgZmxvd0RlZnMgW21hcmtlcnNdPVwibWFya2VycygpXCIgLz5cblxuICA8ZyBiYWNrZ3JvdW5kIC8+XG5cbiAgPHN2ZzpnIG1hcENvbnRleHQgc3BhY2VQb2ludENvbnRleHQ+XG4gICAgPCEtLSBDb25uZWN0aW9uIC0tPlxuICAgIDxzdmc6ZyBjb25uZWN0aW9uIFttb2RlbF09XCJjb25uZWN0aW9uXCIgW3RlbXBsYXRlXT1cImNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiIC8+XG5cbiAgICBAaWYgKG9wdGltaXphdGlvbigpLmRldGFjaGVkR3JvdXBzTGF5ZXIpIHtcbiAgICAgIDwhLS0gR3JvdXBzIC0tPlxuICAgICAgPHN2ZzpnXG4gICAgICAgICpsYXp5Rm9yPVwibGV0IG1vZGVsIG9mIGdyb3VwcygpOyB0cmFja0J5OiB0cmFja05vZGVzXCJcbiAgICAgICAgbm9kZVxuICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICBbZ3JvdXBOb2RlVGVtcGxhdGVdPVwiZ3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiIC8+XG5cbiAgICAgIDwhLS0gRWRnZXMgIC0tPlxuICAgICAgPHN2ZzpnXG4gICAgICAgICpsYXp5Rm9yPVwibGV0IG1vZGVsIG9mIGVkZ2VNb2RlbHMoKTsgdHJhY2tCeTogdHJhY2tFZGdlc1wiXG4gICAgICAgIGVkZ2VcbiAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICBbZWRnZUxhYmVsSHRtbFRlbXBsYXRlXT1cImVkZ2VMYWJlbEh0bWxEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIiAvPlxuXG4gICAgICA8IS0tIE5vZGVzIC0tPlxuICAgICAgPHN2ZzpnXG4gICAgICAgICpsYXp5Rm9yPVwibGV0IG1vZGVsIG9mIG5vbkdyb3VwcygpOyB0cmFja0J5OiB0cmFja05vZGVzXCJcbiAgICAgICAgbm9kZVxuICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICBbbm9kZVRlbXBsYXRlXT1cIm5vZGVUZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgIFtub2RlU3ZnVGVtcGxhdGVdPVwibm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIm1vZGVsLnBvaW50VHJhbnNmb3JtKClcIiAvPlxuICAgIH1cblxuICAgIEBpZiAoIW9wdGltaXphdGlvbigpLmRldGFjaGVkR3JvdXBzTGF5ZXIpIHtcbiAgICAgIDwhLS0gRWRnZXMgIC0tPlxuICAgICAgPHN2ZzpnXG4gICAgICAgICpsYXp5Rm9yPVwibGV0IG1vZGVsIG9mIGVkZ2VNb2RlbHMoKTsgdHJhY2tCeTogdHJhY2tFZGdlc1wiXG4gICAgICAgIGVkZ2VcbiAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICBbZWRnZUxhYmVsSHRtbFRlbXBsYXRlXT1cImVkZ2VMYWJlbEh0bWxEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIiAvPlxuXG4gICAgICA8IS0tIE5vZGVzIC0tPlxuICAgICAgPHN2ZzpnXG4gICAgICAgICpsYXp5Rm9yPVwibGV0IG1vZGVsIG9mIG5vZGVNb2RlbHMoKTsgdHJhY2tCeTogdHJhY2tOb2Rlc1wiXG4gICAgICAgIG5vZGVcbiAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgW25vZGVUZW1wbGF0ZV09XCJub2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICBbbm9kZVN2Z1RlbXBsYXRlXT1cIm5vZGVTdmdUZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgIFtncm91cE5vZGVUZW1wbGF0ZV09XCJncm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCIgLz5cbiAgICB9XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBNaW5pbWFwIC0tPlxuICBAaWYgKG1pbmltYXAoKTsgYXMgbWluaW1hcCkge1xuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibWluaW1hcC50ZW1wbGF0ZSgpXCIgLz5cbiAgfVxuPC9zdmc6c3ZnPlxuIl19
|
|
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
|
|
@@ -3,7 +3,7 @@ import { SelectionService } from '../services/selection.service';
|
|
|
3
3
|
import { EdgeComponent } from '../components/edge/edge.component';
|
|
4
4
|
import { NodeComponent } from '../components/node/node.component';
|
|
5
5
|
import { FlowSettingsService } from '../services/flow-settings.service';
|
|
6
|
-
import { fromEvent,
|
|
6
|
+
import { fromEvent, tap } from 'rxjs';
|
|
7
7
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export class SelectableDirective {
|
|
@@ -33,7 +33,7 @@ export class SelectableDirective {
|
|
|
33
33
|
return null;
|
|
34
34
|
}
|
|
35
35
|
getEvent$() {
|
|
36
|
-
return
|
|
36
|
+
return fromEvent(this.host.nativeElement, 'click');
|
|
37
37
|
}
|
|
38
38
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
39
39
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: SelectableDirective, isStandalone: true, selector: "[selectable]", ngImport: i0 }); }
|
|
@@ -45,4 +45,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
45
45
|
selector: '[selectable]',
|
|
46
46
|
}]
|
|
47
47
|
}] });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvZGlyZWN0aXZlcy9zZWxlY3RhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFNaEUsTUFBTSxPQUFPLG1CQUFtQjtJQUpoQztRQUtVLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLGVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV2RCxTQUFJLEdBQUcsTUFBTSxDQUFzQixVQUFVLENBQUMsQ0FBQztRQUU3QyxrQkFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7YUFDdkMsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFDeEIsa0JBQWtCLEVBQUUsQ0FDckI7YUFDQSxTQUFTLEVBQUUsQ0FBQztLQXNCaEI7SUFwQlMsTUFBTTtRQUNaLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QixJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLFNBQVM7UUFDZixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRCxDQUFDOytHQWxDVSxtQkFBbUI7bUdBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFKL0IsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGNBQWM7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBFZGdlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9lZGdlL2VkZ2UuY29tcG9uZW50JztcblxuaW1wb3J0IHsgRmxvd0VudGl0eSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxvdy1lbnRpdHkuaW50ZXJmYWNlJztcbmltcG9ydCB7IE5vZGVDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL25vZGUvbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbc2VsZWN0YWJsZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RhYmxlRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBmbG93U2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpO1xuICBwcml2YXRlIHNlbGVjdGlvblNlcnZpY2UgPSBpbmplY3QoU2VsZWN0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcGFyZW50RWRnZSA9IGluamVjdChFZGdlQ29tcG9uZW50LCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHBhcmVudE5vZGUgPSBpbmplY3QoTm9kZUNvbXBvbmVudCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwcml2YXRlIGhvc3QgPSBpbmplY3Q8RWxlbWVudFJlZjxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdE9uRXZlbnQgPSB0aGlzLmdldEV2ZW50JCgpXG4gICAgLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zZWxlY3QoKSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICApXG4gICAgLnN1YnNjcmliZSgpO1xuXG4gIHByaXZhdGUgc2VsZWN0KCkge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXR5KCk7XG4gICAgaWYgKGVudGl0eSAmJiB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZW50aXRpZXNTZWxlY3RhYmxlKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QoZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVudGl0eSgpOiBGbG93RW50aXR5IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMucGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5tb2RlbCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wYXJlbnRFZGdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnRFZGdlLm1vZGVsKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50JCgpIHtcbiAgICByZXR1cm4gZnJvbUV2ZW50KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCAnY2xpY2snKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VydmUtZmFjdG9yeS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9jdXJ2ZS1mYWN0b3J5LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLi90eXBlcy9wb3NpdGlvbi50eXBlJztcbmltcG9ydCB7IEVkZ2VMYWJlbFBvc2l0aW9uIH0gZnJvbSAnLi9lZGdlLWxhYmVsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFZGdlIH0gZnJvbSAnLi9lZGdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEeW5hbWljTm9kZSwgTm9kZSB9IGZyb20gJy4vbm9kZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuL3BvaW50LmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VydmVGYWN0b3J5U2hhcmVkUGFyYW1zIHtcbiAgLyoqIFN0YXJ0aW5nIHBvaW50IGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJ2ZSAqL1xuICBzb3VyY2VQb2ludDogUG9pbnQ7XG4gIC8qKiBFbmRpbmcgcG9pbnQgY29vcmRpbmF0ZXMgb2YgdGhlIGN1cnZlICovXG4gIHRhcmdldFBvaW50OiBQb2ludDtcbiAgLyoqIFBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaGFuZGxlIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2Ugbm9kZSAqL1xuICBzb3VyY2VQb3NpdGlvbjogUG9zaXRpb247XG4gIC8qKiBQb3NpdGlvbiBvZiB0aGUgdGFyZ2V0IGhhbmRsZSByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0IG5vZGUgKi9cbiAgdGFyZ2V0UG9zaXRpb246IFBvc2l0aW9uO1xuICAvKiogQXJyYXkgb2YgYWxsIGVkZ2VzIGluIHRoZSBmbG93ICovXG4gIGFsbEVkZ2VzOiBFZGdlW107XG4gIC8qKiBBcnJheSBvZiBhbGwgbm9kZXMgaW4gdGhlIGZsb3cgKi9cbiAgYWxsTm9kZXM6IE5vZGVbXSB8IER5bmFtaWNOb2RlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvbkN1cnZlRmFjdG9yeVBhcmFtcyBleHRlbmRzIEN1cnZlRmFjdG9yeVNoYXJlZFBhcmFtcyB7XG4gIC8qKiBJbmRpY2F0ZXMgdGhpcyBpcyBhIHRlbXBvcmFyeSBjb25uZWN0aW9uIGJlaW5nIGRyYXduICovXG4gIG1vZGU6ICdjb25uZWN0aW9uJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFZGdlQ3VydmVGYWN0b3J5UGFyYW1zIGV4dGVuZHMgQ3VydmVGYWN0b3J5U2hhcmVkUGFyYW1zIHtcbiAgLyoqIEluZGljYXRlcyB0aGlzIGlzIGEgcGVybWFuZW50IGVkZ2UgKi9cbiAgbW9kZTogJ2VkZ2UnO1xuICAvKiogVGhlIGVkZ2UgaW5zdGFuY2UgdGhpcyBjdXJ2ZSBiZWxvbmdzIHRvICovXG4gIGVkZ2U6IEVkZ2U7XG59XG5cbi8qKlxuICogTGF5b3V0IGluZm9ybWF0aW9uIGZvciBhIGN1cnZlXG4gKiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXJ2ZUxheW91dCB7XG4gIC8qKiBTVkcgcGF0aCBzdHJpbmcgZGVmaW5pbmcgdGhlIGN1cnZlXG4gICAqIChkIGF0dHJpYnV0ZSAtIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9SZWZlcmVuY2UvQXR0cmlidXRlL2QpXG4gICAqICovXG4gIHBhdGg6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHBvaW50cyBmb3IgbGFiZWwgcGxhY2VtZW50IGFsb25nIHRoZSBjdXJ2ZSAqL1xuICBsYWJlbFBvaW50cz86IHsgW2tleSBpbiBFZGdlTGFiZWxQb3NpdGlvbl06IFBvaW50IH07XG59XG5cbmV4cG9ydCB0eXBlIEN1cnZlRmFjdG9yeVBhcmFtcyA9IENvbm5lY3Rpb25DdXJ2ZUZhY3RvcnlQYXJhbXMgfCBFZGdlQ3VydmVGYWN0b3J5UGFyYW1zO1xuXG5leHBvcnQgdHlwZSBDdXJ2ZUZhY3RvcnkgPSAocGFyYW1zOiBDdXJ2ZUZhY3RvcnlQYXJhbXMpID0+IEN1cnZlTGF5b3V0O1xuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9lZGdlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGlvbiB9IGZyb20gJy4vY29ubmVjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ3VydmVGYWN0b3J5IH0gZnJvbSAnLi9jdXJ2ZS1mYWN0b3J5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBFZGdlTGFiZWwsIEVkZ2VMYWJlbFBvc2l0aW9uIH0gZnJvbSAnLi9lZGdlLWxhYmVsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXJrZXIgfSBmcm9tICcuL21hcmtlci5pbnRlcmZhY2UnO1xuXG5leHBvcnQgdHlwZSBFZGdlVHlwZSA9ICdkZWZhdWx0JyB8ICd0ZW1wbGF0ZSc7XG5leHBvcnQgdHlwZSBDdXJ2ZSA9ICdzdHJhaWdodCcgfCAnYmV6aWVyJyB8ICdzbW9vdGgtc3RlcCcgfCAnc3RlcCcgfCBDdXJ2ZUZhY3Rvcnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRnZTxUID0gdW5rbm93bj4gZXh0ZW5kcyBDb25uZWN0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86IEVkZ2VUeXBlO1xuICBjdXJ2ZT86IEN1cnZlO1xuICBkYXRhPzogVDtcbiAgZWRnZUxhYmVscz86IHsgW3Bvc2l0aW9uIGluIEVkZ2VMYWJlbFBvc2l0aW9uXT86IEVkZ2VMYWJlbCB9O1xuICBtYXJrZXJzPzoge1xuICAgIHN0YXJ0PzogTWFya2VyO1xuICAgIGVuZD86IE1hcmtlcjtcbiAgfTtcbiAgcmVjb25uZWN0YWJsZT86IGJvb2xlYW4gfCAnc291cmNlJyB8ICd0YXJnZXQnO1xufVxuIl19
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { getPointOnLineByRatio } from '../point-on-line-by-ratio';
|
|
2
|
-
export function bezierPath(
|
|
3
|
-
const distanceVector = { x:
|
|
4
|
-
const sourceControl = calcControlPoint(
|
|
5
|
-
const targetControl = calcControlPoint(
|
|
6
|
-
const path = `M${
|
|
7
|
-
return getPathData(path,
|
|
2
|
+
export function bezierPath({ sourcePoint, targetPoint, sourcePosition, targetPosition, }) {
|
|
3
|
+
const distanceVector = { x: sourcePoint.x - targetPoint.x, y: sourcePoint.y - targetPoint.y };
|
|
4
|
+
const sourceControl = calcControlPoint(sourcePoint, sourcePosition, distanceVector);
|
|
5
|
+
const targetControl = calcControlPoint(targetPoint, targetPosition, distanceVector);
|
|
6
|
+
const path = `M${sourcePoint.x},${sourcePoint.y} C${sourceControl.x},${sourceControl.y} ${targetControl.x},${targetControl.y} ${targetPoint.x},${targetPoint.y}`;
|
|
7
|
+
return getPathData(path, sourcePoint, targetPoint, sourceControl, targetControl);
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* Calculate control point based on provided point
|
|
@@ -44,15 +44,13 @@ function calcControlPoint(point, pointPosition, distanceVector) {
|
|
|
44
44
|
y: point.y - factorPoint.y * controlOffset,
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
|
-
function getPathData(path, source, target, sourceControl, targetControl
|
|
48
|
-
const [start, center, end] = usingPoints;
|
|
49
|
-
const nullPoint = { x: 0, y: 0 };
|
|
47
|
+
function getPathData(path, source, target, sourceControl, targetControl) {
|
|
50
48
|
return {
|
|
51
49
|
path,
|
|
52
|
-
|
|
53
|
-
start:
|
|
54
|
-
center:
|
|
55
|
-
end:
|
|
50
|
+
labelPoints: {
|
|
51
|
+
start: getPointOnBezier(source, target, sourceControl, targetControl, 0.1),
|
|
52
|
+
center: getPointOnBezier(source, target, sourceControl, targetControl, 0.5),
|
|
53
|
+
end: getPointOnBezier(source, target, sourceControl, targetControl, 0.9),
|
|
56
54
|
},
|
|
57
55
|
};
|
|
58
56
|
}
|
|
@@ -65,4 +63,4 @@ function getPointOnBezier(sourcePoint, targetPoint, sourceControl, targetControl
|
|
|
65
63
|
const fromSecondControlToTarget = getPointOnLineByRatio(targetControl, targetPoint, ratio);
|
|
66
64
|
return getPointOnLineByRatio(getPointOnLineByRatio(fromSourceToFirstControl, fromFirstControlToSecond, ratio), getPointOnLineByRatio(fromFirstControlToSecond, fromSecondControlToTarget, ratio), ratio);
|
|
67
65
|
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV6aWVyLXBhdGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvbWF0aC9lZGdlLXBhdGgvYmV6aWVyLXBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbEUsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUN6QixXQUFXLEVBQ1gsV0FBVyxFQUNYLGNBQWMsRUFDZCxjQUFjLEdBQ0s7SUFDbkIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUU5RixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFcEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLEtBQUssYUFBYSxDQUFDLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVqSyxPQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDbkYsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUVILFNBQVMsZ0JBQWdCLENBQUMsS0FBWSxFQUFFLGFBQXVCLEVBQUUsY0FB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ICcuLi8uLi9pbnRlcmZhY2VzL2N1cnZlLWZhY3RvcnkuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wb2ludC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLi8uLi90eXBlcy9wb3NpdGlvbi50eXBlJztcbmltcG9ydCB7IGdldFBvaW50T25MaW5lQnlSYXRpbyB9IGZyb20gJy4uL3BvaW50LW9uLWxpbmUtYnktcmF0aW8nO1xuXG5leHBvcnQgZnVuY3Rpb24gYmV6aWVyUGF0aCh7XG4gIHNvdXJjZVBvaW50LFxuICB0YXJnZXRQb2ludCxcbiAgc291cmNlUG9zaXRpb24sXG4gIHRhcmdldFBvc2l0aW9uLFxufTogQ3VydmVGYWN0b3J5UGFyYW1zKTogQ3VydmVMYXlvdXQge1xuICBjb25zdCBkaXN0YW5jZVZlY3RvciA9IHsgeDogc291cmNlUG9pbnQueCAtIHRhcmdldFBvaW50LngsIHk6IHNvdXJjZVBvaW50LnkgLSB0YXJnZXRQb2ludC55IH07XG5cbiAgY29uc3Qgc291cmNlQ29udHJvbCA9IGNhbGNDb250cm9sUG9pbnQoc291cmNlUG9pbnQsIHNvdXJjZVBvc2l0aW9uLCBkaXN0YW5jZVZlY3Rvcik7XG4gIGNvbnN0IHRhcmdldENvbnRyb2wgPSBjYWxjQ29udHJvbFBvaW50KHRhcmdldFBvaW50LCB0YXJnZXRQb3NpdGlvbiwgZGlzdGFuY2VWZWN0b3IpO1xuXG4gIGNvbnN0IHBhdGggPSBgTSR7c291cmNlUG9pbnQueH0sJHtzb3VyY2VQb2ludC55fSBDJHtzb3VyY2VDb250cm9sLnh9LCR7c291cmNlQ29udHJvbC55fSAke3RhcmdldENvbnRyb2wueH0sJHt0YXJnZXRDb250cm9sLnl9ICR7dGFyZ2V0UG9pbnQueH0sJHt0YXJnZXRQb2ludC55fWA7XG5cbiAgcmV0dXJuIGdldFBhdGhEYXRhKHBhdGgsIHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCwgc291cmNlQ29udHJvbCwgdGFyZ2V0Q29udHJvbCk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGNvbnRyb2wgcG9pbnQgYmFzZWQgb24gcHJvdmlkZWQgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcG9pbnQgcmVsYXRpdmUgdGhpcyBwb2ludCBjb250cm9sIHBvaW50IGlzIGdvbm5hIGJlIGNvbXB1dGVkICh0aGUgc291cmNlIG9yIHRoZSB0YXJnZXQpXG4gKiBAcGFyYW0gcG9pbnRQb3NpdGlvbiBwb3NpdGlvbiBvZiB7cG9pbnR9IG9uIGJsb2NrXG4gKiBAcGFyYW0gZGlzdGFuY2VWZWN0b3IgdHJhbnNtaXRzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBzb3VyY2UgYW5kIHRoZSB0YXJnZXQgYXMgeCBhbmQgeSBjb29yZGluYXRlc1xuICovXG5cbmZ1bmN0aW9uIGNhbGNDb250cm9sUG9pbnQocG9pbnQ6IFBvaW50LCBwb2ludFBvc2l0aW9uOiBQb3NpdGlvbiwgZGlzdGFuY2VWZWN0b3I6IFBvaW50KSB7XG4gIGNvbnN0IGZhY3RvclBvaW50ID0geyB4OiAwLCB5OiAwIH07XG5cbiAgc3dpdGNoIChwb2ludFBvc2l0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGZhY3RvclBvaW50LnkgPSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGZhY3RvclBvaW50LnkgPSAtMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGZhY3RvclBvaW50LnggPSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBmYWN0b3JQb2ludC54ID0gLTE7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIC8vIFRPRE86IGV4cGxhaW4gbmFtZVxuICBjb25zdCBmdWxsRGlzdGFuY2VWZWN0b3IgPSB7XG4gICAgeDogZGlzdGFuY2VWZWN0b3IueCAqIE1hdGguYWJzKGZhY3RvclBvaW50LngpLFxuICAgIHk6IGRpc3RhbmNlVmVjdG9yLnkgKiBNYXRoLmFicyhmYWN0b3JQb2ludC55KSxcbiAgfTtcblxuICAvLyBUT0RPOiBwcm9iYWJseSBuZWVkIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGVcbiAgY29uc3QgY3VydmF0dXJlID0gMC4yNTtcbiAgLy8gdGhhbmtzIGNvbGxlYWd1ZXMgZnJvbSByZWFjdC9zdmVsdGUgd29ybGRcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3h5Zmxvdy94eWZsb3cvYmxvYi9mMDExNzkzOWJhZTkzNDQ0N2ZhN2YyMzIwODFmOTM3MTY5ZWUyM2I1L3BhY2thZ2VzL3N5c3RlbS9zcmMvdXRpbHMvZWRnZXMvYmV6aWVyLWVkZ2UudHMjTDU2XG4gIGNvbnN0IGNvbnRyb2xPZmZzZXQgPSBjdXJ2YXR1cmUgKiAyNSAqIE1hdGguc3FydChNYXRoLmFicyhmdWxsRGlzdGFuY2VWZWN0b3IueCArIGZ1bGxEaXN0YW5jZVZlY3Rvci55KSk7XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBwb2ludC54ICsgZmFjdG9yUG9pbnQueCAqIGNvbnRyb2xPZmZzZXQsXG4gICAgeTogcG9pbnQueSAtIGZhY3RvclBvaW50LnkgKiBjb250cm9sT2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRQYXRoRGF0YShcbiAgcGF0aDogc3RyaW5nLFxuICBzb3VyY2U6IFBvaW50LFxuICB0YXJnZXQ6IFBvaW50LFxuICBzb3VyY2VDb250cm9sOiBQb2ludCxcbiAgdGFyZ2V0Q29udHJvbDogUG9pbnQsXG4pOiBDdXJ2ZUxheW91dCB7XG4gIHJldHVybiB7XG4gICAgcGF0aCxcbiAgICBsYWJlbFBvaW50czoge1xuICAgICAgc3RhcnQ6IGdldFBvaW50T25CZXppZXIoc291cmNlLCB0YXJnZXQsIHNvdXJjZUNvbnRyb2wsIHRhcmdldENvbnRyb2wsIDAuMSksXG4gICAgICBjZW50ZXI6IGdldFBvaW50T25CZXppZXIoc291cmNlLCB0YXJnZXQsIHNvdXJjZUNvbnRyb2wsIHRhcmdldENvbnRyb2wsIDAuNSksXG4gICAgICBlbmQ6IGdldFBvaW50T25CZXppZXIoc291cmNlLCB0YXJnZXQsIHNvdXJjZUNvbnRyb2wsIHRhcmdldENvbnRyb2wsIDAuOSksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgcG9pbnQgb24gYmV6aWVyIGN1cnZlIGJ5IHJhdGlvXG4gKi9cbmZ1bmN0aW9uIGdldFBvaW50T25CZXppZXIoXG4gIHNvdXJjZVBvaW50OiBQb2ludCxcbiAgdGFyZ2V0UG9pbnQ6IFBvaW50LFxuICBzb3VyY2VDb250cm9sOiBQb2ludCxcbiAgdGFyZ2V0Q29udHJvbDogUG9pbnQsXG4gIHJhdGlvOiBudW1iZXIsXG4pOiBQb2ludCB7XG4gIGNvbnN0IGZyb21Tb3VyY2VUb0ZpcnN0Q29udHJvbDogUG9pbnQgPSBnZXRQb2ludE9uTGluZUJ5UmF0aW8oc291cmNlUG9pbnQsIHNvdXJjZUNvbnRyb2wsIHJhdGlvKTtcbiAgY29uc3QgZnJvbUZpcnN0Q29udHJvbFRvU2Vjb25kOiBQb2ludCA9IGdldFBvaW50T25MaW5lQnlSYXRpbyhzb3VyY2VDb250cm9sLCB0YXJnZXRDb250cm9sLCByYXRpbyk7XG4gIGNvbnN0IGZyb21TZWNvbmRDb250cm9sVG9UYXJnZXQ6IFBvaW50ID0gZ2V0UG9pbnRPbkxpbmVCeVJhdGlvKHRhcmdldENvbnRyb2wsIHRhcmdldFBvaW50LCByYXRpbyk7XG5cbiAgcmV0dXJuIGdldFBvaW50T25MaW5lQnlSYXRpbyhcbiAgICBnZXRQb2ludE9uTGluZUJ5UmF0aW8oZnJvbVNvdXJjZVRvRmlyc3RDb250cm9sLCBmcm9tRmlyc3RDb250cm9sVG9TZWNvbmQsIHJhdGlvKSxcbiAgICBnZXRQb2ludE9uTGluZUJ5UmF0aW8oZnJvbUZpcnN0Q29udHJvbFRvU2Vjb25kLCBmcm9tU2Vjb25kQ29udHJvbFRvVGFyZ2V0LCByYXRpbyksXG4gICAgcmF0aW8sXG4gICk7XG59XG4iXX0=
|
|
@@ -138,11 +138,11 @@ function getBend(a, b, c, size) {
|
|
|
138
138
|
const yDir = a.y < c.y ? -1 : 1;
|
|
139
139
|
return `L ${x},${y + bendSize * yDir}Q ${x},${y} ${x + bendSize * xDir},${y}`;
|
|
140
140
|
}
|
|
141
|
-
export function smoothStepPath(
|
|
141
|
+
export function smoothStepPath({ sourcePoint, targetPoint, sourcePosition, targetPosition }, borderRadius = 5) {
|
|
142
142
|
const [points, labelX, labelY] = getPoints({
|
|
143
|
-
source,
|
|
143
|
+
source: sourcePoint,
|
|
144
144
|
sourcePosition,
|
|
145
|
-
target,
|
|
145
|
+
target: targetPoint,
|
|
146
146
|
targetPosition,
|
|
147
147
|
offset: 20,
|
|
148
148
|
});
|
|
@@ -159,7 +159,7 @@ export function smoothStepPath(source, target, sourcePosition, targetPosition, b
|
|
|
159
159
|
}, '');
|
|
160
160
|
return {
|
|
161
161
|
path,
|
|
162
|
-
|
|
162
|
+
labelPoints: {
|
|
163
163
|
// TODO start and end points temporary unavailable for this path
|
|
164
164
|
start: { x: labelX, y: labelY },
|
|
165
165
|
center: { x: labelX, y: labelY },
|
|
@@ -167,4 +167,4 @@ export function smoothStepPath(source, target, sourcePosition, targetPosition, b
|
|
|
167
167
|
},
|
|
168
168
|
};
|
|
169
169
|
}
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21vb3RoLXN0ZXAtcGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9tYXRoL2VkZ2UtcGF0aC9zbW9vdGgtc3RlcC1wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sZ0JBQWdCLEdBQUc7SUFDdkIsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JCLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3BCLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtDQUN2QixDQUFDO0FBRUYsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFhLEVBQUUsTUFBYTtJQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUU5RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxD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QUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsOEJBQThCO0lBQzlCLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ2hGLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBYSxFQUNiLE1BQWEsRUFDYixjQUF3QixFQUN4QixjQUF3QixFQUN4QixlQUF1QixDQUFDO0lBRXhCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUN6QyxNQUFNO1FBQ04sY0FBYztRQUNkLE1BQU07UUFDTixjQUFjO1FBQ2QsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMvQyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNuRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xELENBQUM7UUFFRCxHQUFHLElBQUksT0FBTyxDQUFDO1FBRWYsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPO1FBQ0wsSUFBSTtRQUNKLE1BQU0sRUFBRTtZQUNOLGdFQUFnRTtZQUNoRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7WUFDL0IsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO1lBQ2hDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtTQUM5QjtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGF0aERhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BhdGgtZGF0YS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BvaW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL3Bvc2l0aW9uLnR5cGUnO1xuXG5jb25zdCBoYW5kbGVEaXJlY3Rpb25zID0ge1xuICBsZWZ0OiB7IHg6IC0xLCB5OiAwIH0sXG4gIHJpZ2h0OiB7IHg6IDEsIHk6IDAgfSxcbiAgdG9wOiB7IHg6IDAsIHk6IC0xIH0sXG4gIGJvdHRvbTogeyB4OiAwLCB5OiAxIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRnZUNlbnRlcihzb3VyY2U6IFBvaW50LCB0YXJnZXQ6IFBvaW50KTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCB4T2Zmc2V0ID0gTWF0aC5hYnModGFyZ2V0LnggLSBzb3VyY2UueCkgLyAyO1xuICBjb25zdCBjZW50ZXJYID0gdGFyZ2V0LnggPCBzb3VyY2UueCA/IHRhcmdldC54ICsgeE9mZnNldCA6IHRhcmdldC54IC0geE9mZnNldDtcblxuICBjb25zdCB5T2Zmc2V0ID0gTWF0aC5hYnModGFyZ2V0LnkgLSBzb3VyY2UueSkgLyAyO1xuICBjb25zdCBjZW50ZXJZID0gdGFyZ2V0LnkgPCBzb3VyY2UueSA/IHRhcmdldC55ICsgeU9mZnNldCA6IHRhcmdldC55IC0geU9mZnNldDtcblxuICByZXR1cm4gW2NlbnRlclgsIGNlbnRlclksIHhPZmZzZXQsIHlPZmZzZXRdO1xufVxuXG5jb25zdCBnZXREaXJlY3Rpb24gPSAoe1xuICBzb3VyY2UsXG4gIHNvdXJjZVBvc2l0aW9uID0gJ2JvdHRvbScsXG4gIHRhcmdldCxcbn06IHtcbiAgc291cmNlOiBQb2ludDtcbiAgc291cmNlUG9zaXRpb246IFBvc2l0aW9uO1xuICB0YXJnZXQ6IFBvaW50O1xufSk6IFBvaW50ID0+IHtcbiAgaWYgKHNvdXJjZVBvc2l0aW9uID09PSAnbGVmdCcgfHwgc291cmNlUG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICByZXR1cm4gc291cmNlLnggPCB0YXJnZXQueCA/IHsgeDogMSwgeTogMCB9IDogeyB4OiAtMSwgeTogMCB9O1xuICB9XG4gIHJldHVybiBzb3VyY2UueSA8IHRhcmdldC55ID8geyB4OiAwLCB5OiAxIH0gOiB7IHg6IDAsIHk6IC0xIH07XG59O1xuXG5jb25zdCBkaXN0YW5jZSA9IChhOiBQb2ludCwgYjogUG9pbnQpID0+IE1hdGguc3FydChNYXRoLnBvdyhiLnggLSBhLngsIDIpICsgTWF0aC5wb3coYi55IC0gYS55LCAyKSk7XG5cbi8vIGl0aCB0aGlzIGZ1bmN0aW9uIHdlIHRyeSB0byBtaW1pYyBhIG9ydGhvZ29uYWwgZWRnZSByb3V0aW5nIGJlaGF2aW91clxuLy8gSXQncyBub3QgYXMgZ29vZCBhcyBhIHJlYWwgb3J0aG9nb25hbCBlZGdlIHJvdXRpbmcgYnV0IGl0J3MgZmFzdGVyIGFuZCBnb29kIGVub3VnaCBhcyBhIGRlZmF1bHQgZm9yIHN0ZXAgYW5kIHNtb290aCBzdGVwIGVkZ2VzXG5mdW5jdGlvbiBnZXRQb2ludHMoe1xuICBzb3VyY2UsXG4gIHNvdXJjZVBvc2l0aW9uID0gJ2JvdHRvbScsXG4gIHRhcmdldCxcbiAgdGFyZ2V0UG9zaXRpb24gPSAndG9wJyxcbiAgb2Zmc2V0LFxufToge1xuICBzb3VyY2U6IFBvaW50O1xuICBzb3VyY2VQb3NpdGlvbjogUG9zaXRpb247XG4gIHRhcmdldDogUG9pbnQ7XG4gIHRhcmdldFBvc2l0aW9uOiBQb3NpdGlvbjtcbiAgb2Zmc2V0OiBudW1iZXI7XG59KTogW1BvaW50W10sIG51bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IHNvdXJjZURpciA9IGhhbmRsZURpcmVjdGlvbnNbc291cmNlUG9zaXRpb25dO1xuICBjb25zdCB0YXJnZXREaXIgPSBoYW5kbGVEaXJlY3Rpb25zW3RhcmdldFBvc2l0aW9uXTtcbiAgY29uc3Qgc291cmNlR2FwcGVkOiBQb2ludCA9IHsgeDogc291cmNlLnggKyBzb3VyY2VEaXIueCAqIG9mZnNldCwgeTogc291cmNlLnkgKyBzb3VyY2VEaXIueSAqIG9mZnNldCB9O1xuICBjb25zdCB0YXJnZXRHYXBwZWQ6IFBvaW50ID0geyB4OiB0YXJnZXQueCArIHRhcmdldERpci54ICogb2Zmc2V0LCB5OiB0YXJnZXQueSArIHRhcmdldERpci55ICogb2Zmc2V0IH07XG4gIGNvbnN0IGRpciA9IGdldERpcmVjdGlvbih7XG4gICAgc291cmNlOiBzb3VyY2VHYXBwZWQsXG4gICAgc291cmNlUG9zaXRpb24sXG4gICAgdGFyZ2V0OiB0YXJnZXRHYXBwZWQsXG4gIH0pO1xuICBjb25zdCBkaXJBY2Nlc3NvciA9IGRpci54ICE9PSAwID8gJ3gnIDogJ3knO1xuICBjb25zdCBjdXJyRGlyID0gZGlyW2RpckFjY2Vzc29yXTtcblxuICBsZXQgcG9pbnRzOiBQb2ludFtdID0gW107XG4gIGxldCBjZW50ZXJYLCBjZW50ZXJZO1xuICBjb25zdCBzb3VyY2VHYXBPZmZzZXQgPSB7IHg6IDAsIHk6IDAgfTtcbiAgY29uc3QgdGFyZ2V0R2FwT2Zmc2V0ID0geyB4OiAwLCB5OiAwIH07XG5cbiAgY29uc3QgW2RlZmF1bHRDZW50ZXJYLCBkZWZhdWx0Q2VudGVyWV0gPSBnZXRFZGdlQ2VudGVyKHNvdXJjZSwgdGFyZ2V0KTtcblxuICAvLyBvcHBvc2l0ZSBoYW5kbGUgcG9zaXRpb25zLCBkZWZhdWx0IGNhc2VcbiAgaWYgKHNvdXJjZURpcltkaXJBY2Nlc3Nvcl0gKiB0YXJnZXREaXJbZGlyQWNjZXNzb3JdID09PSAtMSkge1xuICAgIGNlbnRlclggPSBkZWZhdWx0Q2VudGVyWDtcbiAgICBjZW50ZXJZID0gZGVmYXVsdENlbnRlclk7XG4gICAgLy8gICAgLS0tPlxuICAgIC8vICAgIHxcbiAgICAvLyA+LS0tXG4gICAgY29uc3QgdmVydGljYWxTcGxpdDogUG9pbnRbXSA9IFtcbiAgICAgIHsgeDogY2VudGVyWCwgeTogc291cmNlR2FwcGVkLnkgfSxcbiAgICAgIHsgeDogY2VudGVyWCwgeTogdGFyZ2V0R2FwcGVkLnkgfSxcbiAgICBdO1xuICAgIC8vICAgIHxcbiAgICAvLyAgLS0tXG4gICAgLy8gIHxcbiAgICBjb25zdCBob3Jpem9udGFsU3BsaXQ6IFBvaW50W10gPSBbXG4gICAgICB7IHg6IHNvdXJjZUdhcHBlZC54LCB5OiBjZW50ZXJZIH0sXG4gICAgICB7IHg6IHRhcmdldEdhcHBlZC54LCB5OiBjZW50ZXJZIH0sXG4gICAgXTtcblxuICAgIGlmIChzb3VyY2VEaXJbZGlyQWNjZXNzb3JdID09PSBjdXJyRGlyKSB7XG4gICAgICBwb2ludHMgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gdmVydGljYWxTcGxpdCA6IGhvcml6b250YWxTcGxpdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnRzID0gZGlyQWNjZXNzb3IgPT09ICd4JyA/IGhvcml6b250YWxTcGxpdCA6IHZlcnRpY2FsU3BsaXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHNvdXJjZVRhcmdldCBtZWFucyB3ZSB0YWtlIHggZnJvbSBzb3VyY2UgYW5kIHkgZnJvbSB0YXJnZXQsIHRhcmdldFNvdXJjZSBpcyB0aGUgb3Bwb3NpdGVcbiAgICBjb25zdCBzb3VyY2VUYXJnZXQ6IFBvaW50W10gPSBbeyB4OiBzb3VyY2VHYXBwZWQueCwgeTogdGFyZ2V0R2FwcGVkLnkgfV07XG4gICAgY29uc3QgdGFyZ2V0U291cmNlOiBQb2ludFtdID0gW3sgeDogdGFyZ2V0R2FwcGVkLngsIHk6IHNvdXJjZUdhcHBlZC55IH1dO1xuICAgIC8vIHRoaXMgaGFuZGxlcyBlZGdlcyB3aXRoIHNhbWUgaGFuZGxlIHBvc2l0aW9uc1xuICAgIGlmIChkaXJBY2Nlc3NvciA9PT0gJ3gnKSB7XG4gICAgICBwb2ludHMgPSBzb3VyY2VEaXIueCA9PT0gY3VyckRpciA/IHRhcmdldFNvdXJjZSA6IHNvdXJjZVRhcmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnRzID0gc291cmNlRGlyLnkgPT09IGN1cnJEaXIgPyBzb3VyY2VUYXJnZXQgOiB0YXJnZXRTb3VyY2U7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZVBvc2l0aW9uID09PSB0YXJnZXRQb3NpdGlvbikge1xuICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKHNvdXJjZVtkaXJBY2Nlc3Nvcl0gLSB0YXJnZXRbZGlyQWNjZXNzb3JdKTtcblxuICAgICAgLy8gaWYgYW4gZWRnZSBnb2VzIGZyb20gcmlnaHQgdG8gcmlnaHQgZm9yIGV4YW1wbGUgKHNvdXJjZVBvc2l0aW9uID09PSB0YXJnZXRQb3NpdGlvbikgYW5kIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHNvdXJjZS54IGFuZCB0YXJnZXQueCBpcyBsZXNzIHRoYW4gdGhlIG9mZnNldCwgdGhlIGFkZGVkIHBvaW50IGFuZCB0aGUgZ2FwcGVkIHNvdXJjZS90YXJnZXQgd2lsbCBvdmVybGFwLiBUaGlzIGxlYWRzIHRvIGEgd2VpcmQgZWRnZSBwYXRoLiBUbyBhdm9pZCB0aGlzIHdlIGFkZCBhIGdhcE9mZnNldCB0byB0aGUgc291cmNlL3RhcmdldFxuICAgICAgaWYgKGRpZmYgPD0gb2Zmc2V0KSB7XG4gICAgICAgIGNvbnN0IGdhcE9mZnNldCA9IE1hdGgubWluKG9mZnNldCAtIDEsIG9mZnNldCAtIGRpZmYpO1xuICAgICAgICBpZiAoc291cmNlRGlyW2RpckFjY2Vzc29yXSA9PT0gY3VyckRpcikge1xuICAgICAgICAgIHNvdXJjZUdhcE9mZnNldFtkaXJBY2Nlc3Nvcl0gPSAoc291cmNlR2FwcGVkW2RpckFjY2Vzc29yXSA+IHNvdXJjZVtkaXJBY2Nlc3Nvcl0gPyAtMSA6IDEpICogZ2FwT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldEdhcE9mZnNldFtkaXJBY2Nlc3Nvcl0gPSAodGFyZ2V0R2FwcGVkW2RpckFjY2Vzc29yXSA+IHRhcmdldFtkaXJBY2Nlc3Nvcl0gPyAtMSA6IDEpICogZ2FwT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlc2UgYXJlIGNvbmRpdGlvbnMgZm9yIGhhbmRsaW5nIG1peGVkIGhhbmRsZSBwb3NpdGlvbnMgbGlrZSBSaWdodCAtPiBCb3R0b20gZm9yIGV4YW1wbGVcbiAgICBpZiAoc291cmNlUG9zaXRpb24gIT09IHRhcmdldFBvc2l0aW9uKSB7XG4gICAgICBjb25zdCBkaXJBY2Nlc3Nvck9wcG9zaXRlID0gZGlyQWNjZXNzb3IgPT09ICd4JyA/ICd5JyA6ICd4JztcbiAgICAgIGNvbnN0IGlzU2FtZURpciA9IHNvdXJjZURpcltkaXJBY2Nlc3Nvcl0gPT09IHRhcmdldERpcltkaXJBY2Nlc3Nvck9wcG9zaXRlXTtcbiAgICAgIGNvbnN0IHNvdXJjZUd0VGFyZ2V0T3BwbyA9IHNvdXJjZUdhcHBlZFtkaXJBY2Nlc3Nvck9wcG9zaXRlXSA+IHRhcmdldEdhcHBlZFtkaXJBY2Nlc3Nvck9wcG9zaXRlXTtcbiAgICAgIGNvbnN0IHNvdXJjZUx0VGFyZ2V0T3BwbyA9IHNvdXJjZUdhcHBlZFtkaXJBY2Nlc3Nvck9wcG9zaXRlXSA8IHRhcmdldEdhcHBlZFtkaXJBY2Nlc3Nvck9wcG9zaXRlXTtcbiAgICAgIGNvbnN0IGZsaXBTb3VyY2VUYXJnZXQgPVxuICAgICAgICAoc291cmNlRGlyW2RpckFjY2Vzc29yXSA9PT0gMSAmJiAoKCFpc1NhbWVEaXIgJiYgc291cmNlR3RUYXJnZXRPcHBvKSB8fCAoaXNTYW1lRGlyICYmIHNvdXJjZUx0VGFyZ2V0T3BwbykpKSB8fFxuICAgICAgICAoc291cmNlRGlyW2RpckFjY2Vzc29yXSAhPT0gMSAmJiAoKCFpc1NhbWVEaXIgJiYgc291cmNlTHRUYXJnZXRPcHBvKSB8fCAoaXNTYW1lRGlyICYmIHNvdXJjZUd0VGFyZ2V0T3BwbykpKTtcblxuICAgICAgaWYgKGZsaXBTb3VyY2VUYXJnZXQpIHtcbiAgICAgICAgcG9pbnRzID0gZGlyQWNjZXNzb3IgPT09ICd4JyA/IHNvdXJjZVRhcmdldCA6IHRhcmdldFNvdXJjZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VHYXBQb2ludCA9IHsgeDogc291cmNlR2FwcGVkLnggKyBzb3VyY2VHYXBPZmZzZXQueCwgeTogc291cmNlR2FwcGVkLnkgKyBzb3VyY2VHYXBPZmZzZXQueSB9O1xuICAgIGNvbnN0IHRhcmdldEdhcFBvaW50ID0geyB4OiB0YXJnZXRHYXBwZWQueCArIHRhcmdldEdhcE9mZnNldC54LCB5OiB0YXJnZXRHYXBwZWQueSArIHRhcmdldEdhcE9mZnNldC55IH07XG4gICAgY29uc3QgbWF4WERpc3RhbmNlID0gTWF0aC5tYXgoTWF0aC5hYnMoc291cmNlR2FwUG9pbnQueCAtIHBvaW50c1swXS54KSwgTWF0aC5hYnModGFyZ2V0R2FwUG9pbnQueCAtIHBvaW50c1swXS54KSk7XG4gICAgY29uc3QgbWF4WURpc3RhbmNlID0gTWF0aC5tYXgoTWF0aC5hYnMoc291cmNlR2FwUG9pbnQueSAtIHBvaW50c1swXS55KSwgTWF0aC5hYnModGFyZ2V0R2FwUG9pbnQueSAtIHBvaW50c1swXS55KSk7XG5cbiAgICAvLyB3ZSB3YW50IHRvIHBsYWNlIHRoZSBsYWJlbCBvbiB0aGUgbG9uZ2VzdCBzZWdtZW50IG9mIHRoZSBlZGdlXG4gICAgaWYgKG1heFhEaXN0YW5jZSA+PSBtYXhZRGlzdGFuY2UpIHtcbiAgICAgIGNlbnRlclggPSAoc291cmNlR2FwUG9pbnQueCArIHRhcmdldEdhcFBvaW50LngpIC8gMjtcbiAgICAgIGNlbnRlclkgPSBwb2ludHNbMF0ueTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2VudGVyWCA9IHBvaW50c1swXS54O1xuICAgICAgY2VudGVyWSA9IChzb3VyY2VHYXBQb2ludC55ICsgdGFyZ2V0R2FwUG9pbnQueSkgLyAyO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBhdGhQb2ludHMgPSBbXG4gICAgc291cmNlLFxuICAgIHsgeDogc291cmNlR2FwcGVkLnggKyBzb3VyY2VHYXBPZmZzZXQueCwgeTogc291cmNlR2FwcGVkLnkgKyBzb3VyY2VHYXBPZmZzZXQueSB9LFxuICAgIC4uLnBvaW50cyxcbiAgICB7IHg6IHRhcmdldEdhcHBlZC54ICsgdGFyZ2V0R2FwT2Zmc2V0LngsIHk6IHRhcmdldEdhcHBlZC55ICsgdGFyZ2V0R2FwT2Zmc2V0LnkgfSxcbiAgICB0YXJnZXQsXG4gIF07XG5cbiAgcmV0dXJuIFtwYXRoUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZXTtcbn1cblxuZnVuY3Rpb24gZ2V0QmVuZChhOiBQb2ludCwgYjogUG9pbnQsIGM6IFBvaW50LCBzaXplOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBiZW5kU2l6ZSA9IE1hdGgubWluKGRpc3RhbmNlKGEsIGIpIC8gMiwgZGlzdGFuY2UoYiwgYykgLyAyLCBzaXplKTtcbiAgY29uc3QgeyB4LCB5IH0gPSBiO1xuXG4gIC8vIG5vIGJlbmRcbiAgaWYgKChhLnggPT09IHggJiYgeCA9PT0gYy54KSB8fCAoYS55ID09PSB5ICYmIHkgPT09IGMueSkpIHtcbiAgICByZXR1cm4gYEwke3h9ICR7eX1gO1xuICB9XG5cbiAgLy8gZmlyc3Qgc2VnbWVudCBpcyBob3Jpem9udGFsXG4gIGlmIChhLnkgPT09IHkpIHtcbiAgICBjb25zdCB4RGlyID0gYS54IDwgYy54ID8gLTEgOiAxO1xuICAgIGNvbnN0IHlEaXIgPSBhLnkgPCBjLnkgPyAxIDogLTE7XG4gICAgcmV0dXJuIGBMICR7eCArIGJlbmRTaXplICogeERpcn0sJHt5fVEgJHt4fSwke3l9ICR7eH0sJHt5ICsgYmVuZFNpemUgKiB5RGlyfWA7XG4gIH1cblxuICBjb25zdCB4RGlyID0gYS54IDwgYy54ID8gMSA6IC0xO1xuICBjb25zdCB5RGlyID0gYS55IDwgYy55ID8gLTEgOiAxO1xuICByZXR1cm4gYEwgJHt4fSwke3kgKyBiZW5kU2l6ZSAqIHlEaXJ9USAke3h9LCR7eX0gJHt4ICsgYmVuZFNpemUgKiB4RGlyfSwke3l9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNtb290aFN0ZXBQYXRoKFxuICBzb3VyY2U6IFBvaW50LFxuICB0YXJnZXQ6IFBvaW50LFxuICBzb3VyY2VQb3NpdGlvbjogUG9zaXRpb24sXG4gIHRhcmdldFBvc2l0aW9uOiBQb3NpdGlvbixcbiAgYm9yZGVyUmFkaXVzOiBudW1iZXIgPSA1LFxuKTogUGF0aERhdGEge1xuICBjb25zdCBbcG9pbnRzLCBsYWJlbFgsIGxhYmVsWV0gPSBnZXRQb2ludHMoe1xuICAgIHNvdXJjZSxcbiAgICBzb3VyY2VQb3NpdGlvbixcbiAgICB0YXJnZXQsXG4gICAgdGFyZ2V0UG9zaXRpb24sXG4gICAgb2Zmc2V0OiAyMCxcbiAgfSk7XG5cbiAgY29uc3QgcGF0aCA9IHBvaW50cy5yZWR1Y2U8c3RyaW5nPigocmVzLCBwLCBpKSA9PiB7XG4gICAgbGV0IHNlZ21lbnQgPSAnJztcblxuICAgIGlmIChpID4gMCAmJiBpIDwgcG9pbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHNlZ21lbnQgPSBnZXRCZW5kKHBvaW50c1tpIC0gMV0sIHAsIHBvaW50c1tpICsgMV0sIGJvcmRlclJhZGl1cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnQgPSBgJHtpID09PSAwID8gJ00nIDogJ0wnfSR7cC54fSAke3AueX1gO1xuICAgIH1cblxuICAgIHJlcyArPSBzZWdtZW50O1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfSwgJycpO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aCxcbiAgICBwb2ludHM6IHtcbiAgICAgIC8vIFRPRE8gc3RhcnQgYW5kIGVuZCBwb2ludHMgdGVtcG9yYXJ5IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBhdGhcbiAgICAgIHN0YXJ0OiB7IHg6IGxhYmVsWCwgeTogbGFiZWxZIH0sXG4gICAgICBjZW50ZXI6IHsgeDogbGFiZWxYLCB5OiBsYWJlbFkgfSxcbiAgICAgIGVuZDogeyB4OiBsYWJlbFgsIHk6IGxhYmVsWSB9LFxuICAgIH0sXG4gIH07XG59XG4iXX0=
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21vb3RoLXN0ZXAtcGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9tYXRoL2VkZ2UtcGF0aC9zbW9vdGgtc3RlcC1wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sZ0JBQWdCLEdBQUc7SUFDdkIsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JCLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3BCLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtDQUN2QixDQUFDO0FBRUYsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFhLEVBQUUsTUFBYTtJQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUU5RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUU5RSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsRUFDcEIsTUFBTSxFQUNOLGNBQWMsR0FBRyxRQUFRLEVBQ3pCLE1BQU0sR0FLUCxFQUFTLEVBQUU7SUFDVixJQUFJLGNBQWMsS0FBSyxNQUFNLElBQUksY0FBYyxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzVELE9BQU8sTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFRLEVBQUUsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFcEcsd0VBQXdFO0FBQ3hFLGlJQUFpSTtBQUNqSSxTQUFTLFNBQVMsQ0FBQyxFQUNqQixNQUFNLEVBQ04sY0FBYyxHQUFHLFFBQVEsRUFDekIsTUFBTSxFQUNOLGNBQWMsR0FBRyxLQUFLLEVBQ3RCLE1BQU0sR0FPUDtJQUNDLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sWUFBWSxHQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUN2RyxNQUFNLFlBQVksR0FBVSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDdkcsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDO1FBQ3ZCLE1BQU0sRUFBRSxZQUFZO1FBQ3BCLGNBQWM7UUFDZCxNQUFNLEVBQUUsWUFBWTtLQUNyQixDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDNUMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRWpDLElBQUksTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUN6QixJQUFJLE9BQU8sRUFBRSxPQUFPLENBQUM7SUFDckIsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN2QyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBRXZDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV2RSwwQ0FBMEM7SUFDMUMsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0QsT0FBTyxHQUFHLGNBQWMsQ0FBQztRQUN6QixPQUFPLEdBQUcsY0FBYyxDQUFDO1FBQ3pCLFVBQVU7UUFDVixPQUFPO1FBQ1AsT0FBTztRQUNQLE1BQU0sYUFBYSxHQUFZO1lBQzdCLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRTtZQUNqQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUU7U0FDbEMsQ0FBQztRQUNGLE9BQU87UUFDUCxPQUFPO1FBQ1AsS0FBSztRQUNMLE1BQU0sZUFBZSxHQUFZO1lBQy9CLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRTtZQUNqQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUU7U0FDbEMsQ0FBQztRQUVGLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sR0FBRyxXQUFXLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUNqRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxXQUFXLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTiwyRkFBMkY7UUFDM0YsTUFBTSxZQUFZLEdBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLFlBQVksR0FBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLGdEQUFnRDtRQUNoRCxJQUFJLFdBQVcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN4QixNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ2pFLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxjQUFjLEtBQUssY0FBYyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFFakUsZ1RBQWdUO1lBQ2hULElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNuQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDdkMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztnQkFDeEcsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGVBQWUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQ3hHLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELDRGQUE0RjtRQUM1RixJQUFJLGNBQWMsS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUN0QyxNQUFNLG1CQUFtQixHQUFHLFdBQVcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzVELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM1RSxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2pHLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakcsTUFBTSxnQkFBZ0IsR0FDcEIsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDM0csQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTlHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxHQUFHLFdBQVcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQzdELENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hHLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEgsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsSCxnRUFBZ0U7UUFDaEUsSUFBSSxZQUFZLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakMsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUc7UUFDakIsTUFBTTtRQUNOLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFO1FBQ2hGLEdBQUcsTUFBTTtRQUNULEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFO1FBQ2hGLE1BQU07S0FDUCxDQUFDO0lBRUYsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLENBQVEsRUFBRSxDQUFRLEVBQUUsQ0FBUSxFQUFFLElBQVk7SUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVuQixVQUFVO0lBQ1YsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsOEJBQThCO0lBQzlCLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ2hGLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQXNCLEVBQ2hGLGVBQXVCLENBQUM7SUFFeEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLE1BQU0sRUFBRSxXQUFXO1FBQ25CLGNBQWM7UUFDZCxNQUFNLEVBQUUsV0FBVztRQUNuQixjQUFjO1FBQ2QsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMvQyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNuRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xELENBQUM7UUFFRCxHQUFHLElBQUksT0FBTyxDQUFDO1FBRWYsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPO1FBQ0wsSUFBSTtRQUNKLFdBQVcsRUFBRTtZQUNYLGdFQUFnRTtZQUNoRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7WUFDL0IsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO1lBQ2hDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtTQUM5QjtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VydmVGYWN0b3J5UGFyYW1zLCBDdXJ2ZUxheW91dCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY3VydmUtZmFjdG9yeS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BvaW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL3Bvc2l0aW9uLnR5cGUnO1xuXG5jb25zdCBoYW5kbGVEaXJlY3Rpb25zID0ge1xuICBsZWZ0OiB7IHg6IC0xLCB5OiAwIH0sXG4gIHJpZ2h0OiB7IHg6IDEsIHk6IDAgfSxcbiAgdG9wOiB7IHg6IDAsIHk6IC0xIH0sXG4gIGJvdHRvbTogeyB4OiAwLCB5OiAxIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRnZUNlbnRlcihzb3VyY2U6IFBvaW50LCB0YXJnZXQ6IFBvaW50KTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCB4T2Zmc2V0ID0gTWF0aC5hYnModGFyZ2V0LnggLSBzb3VyY2UueCkgLyAyO1xuICBjb25zdCBjZW50ZXJYID0gdGFyZ2V0LnggPCBzb3VyY2UueCA/IHRhcmdldC54ICsgeE9mZnNldCA6IHRhcmdldC54IC0geE9mZnNldDtcblxuICBjb25zdCB5T2Zmc2V0ID0gTWF0aC5hYnModGFyZ2V0LnkgLSBzb3VyY2UueSkgLyAyO1xuICBjb25zdCBjZW50ZXJZID0gdGFyZ2V0LnkgPCBzb3VyY2UueSA/IHRhcmdldC55ICsgeU9mZnNldCA6IHRhcmdldC55IC0geU9mZnNldDtcblxuICByZXR1cm4gW2NlbnRlclgsIGNlbnRlclksIHhPZmZzZXQsIHlPZmZzZXRdO1xufVxuXG5jb25zdCBnZXREaXJlY3Rpb24gPSAoe1xuICBzb3VyY2UsXG4gIHNvdXJjZVBvc2l0aW9uID0gJ2JvdHRvbScsXG4gIHRhcmdldCxcbn06IHtcbiAgc291cmNlOiBQb2ludDtcbiAgc291cmNlUG9zaXRpb246IFBvc2l0aW9uO1xuICB0YXJnZXQ6IFBvaW50O1xufSk6IFBvaW50ID0+IHtcbiAgaWYgKHNvdXJjZVBvc2l0aW9uID09PSAnbGVmdCcgfHwgc291cmNlUG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICByZXR1cm4gc291cmNlLnggPCB0YXJnZXQueCA/IHsgeDogMSwgeTogMCB9IDogeyB4OiAtMSwgeTogMCB9O1xuICB9XG4gIHJldHVybiBzb3VyY2UueSA8IHRhcmdldC55ID8geyB4OiAwLCB5OiAxIH0gOiB7IHg6IDAsIHk6IC0xIH07XG59O1xuXG5jb25zdCBkaXN0YW5jZSA9IChhOiBQb2ludCwgYjogUG9pbnQpID0+IE1hdGguc3FydChNYXRoLnBvdyhiLnggLSBhLngsIDIpICsgTWF0aC5wb3coYi55IC0gYS55LCAyKSk7XG5cbi8vIGl0aCB0aGlzIGZ1bmN0aW9uIHdlIHRyeSB0byBtaW1pYyBhIG9ydGhvZ29uYWwgZWRnZSByb3V0aW5nIGJlaGF2aW91clxuLy8gSXQncyBub3QgYXMgZ29vZCBhcyBhIHJlYWwgb3J0aG9nb25hbCBlZGdlIHJvdXRpbmcgYnV0IGl0J3MgZmFzdGVyIGFuZCBnb29kIGVub3VnaCBhcyBhIGRlZmF1bHQgZm9yIHN0ZXAgYW5kIHNtb290aCBzdGVwIGVkZ2VzXG5mdW5jdGlvbiBnZXRQb2ludHMoe1xuICBzb3VyY2UsXG4gIHNvdXJjZVBvc2l0aW9uID0gJ2JvdHRvbScsXG4gIHRhcmdldCxcbiAgdGFyZ2V0UG9zaXRpb24gPSAndG9wJyxcbiAgb2Zmc2V0LFxufToge1xuICBzb3VyY2U6IFBvaW50O1xuICBzb3VyY2VQb3NpdGlvbjogUG9zaXRpb247XG4gIHRhcmdldDogUG9pbnQ7XG4gIHRhcmdldFBvc2l0aW9uOiBQb3NpdGlvbjtcbiAgb2Zmc2V0OiBudW1iZXI7XG59KTogW1BvaW50W10sIG51bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IHNvdXJjZURpciA9IGhhbmRsZURpcmVjdGlvbnNbc291cmNlUG9zaXRpb25dO1xuICBjb25zdCB0YXJnZXREaXIgPSBoYW5kbGVEaXJlY3Rpb25zW3RhcmdldFBvc2l0aW9uXTtcbiAgY29uc3Qgc291cmNlR2FwcGVkOiBQb2ludCA9IHsgeDogc291cmNlLnggKyBzb3VyY2VEaXIueCAqIG9mZnNldCwgeTogc291cmNlLnkgKyBzb3VyY2VEaXIueSAqIG9mZnNldCB9O1xuICBjb25zdCB0YXJnZXRHYXBwZWQ6IFBvaW50ID0geyB4OiB0YXJnZXQueCArIHRhcmdldERpci54ICogb2Zmc2V0LCB5OiB0YXJnZXQueSArIHRhcmdldERpci55ICogb2Zmc2V0IH07XG4gIGNvbnN0IGRpciA9IGdldERpcmVjdGlvbih7XG4gICAgc291cmNlOiBzb3VyY2VHYXBwZWQsXG4gICAgc291cmNlUG9zaXRpb24sXG4gICAgdGFyZ2V0OiB0YXJnZXRHYXBwZWQsXG4gIH0pO1xuICBjb25zdCBkaXJBY2Nlc3NvciA9IGRpci54ICE9PSAwID8gJ3gnIDogJ3knO1xuICBjb25zdCBjdXJyRGlyID0gZGlyW2RpckFjY2Vzc29yXTtcblxuICBsZXQgcG9pbnRzOiBQb2ludFtdID0gW107XG4gIGxldCBjZW50ZXJYLCBjZW50ZXJZO1xuICBjb25zdCBzb3VyY2VHYXBPZmZzZXQgPSB7IHg6IDAsIHk6IDAgfTtcbiAgY29uc3QgdGFyZ2V0R2FwT2Zmc2V0ID0geyB4OiAwLCB5OiAwIH07XG5cbiAgY29uc3QgW2RlZmF1bHRDZW50ZXJYLCBkZWZhdWx0Q2VudGVyWV0gPSBnZXRFZGdlQ2VudGVyKHNvdXJjZSwgdGFyZ2V0KTtcblxuICAvLyBvcHBvc2l0ZSBoYW5kbGUgcG9zaXRpb25zLCBkZWZhdWx0IGNhc2VcbiAgaWYgKHNvdXJjZURpcltkaXJBY2Nlc3Nvcl0gKiB0YXJnZXREaXJbZGlyQWNjZXNzb3JdID09PSAtMSkge1xuICAgIGNlbnRlclggPSBkZWZhdWx0Q2VudGVyWDtcbiAgICBjZW50ZXJZID0gZGVmYXVsdENlbnRlclk7XG4gICAgLy8gICAgLS0tPlxuICAgIC8vICAgIHxcbiAgICAvLyA+LS0tXG4gICAgY29uc3QgdmVydGljYWxTcGxpdDogUG9pbnRbXSA9IFtcbiAgICAgIHsgeDogY2VudGVyWCwgeTogc291cmNlR2FwcGVkLnkgfSxcbiAgICAgIHsgeDogY2VudGVyWCwgeTogdGFyZ2V0R2FwcGVkLnkgfSxcbiAgICBdO1xuICAgIC8vICAgIHxcbiAgICAvLyAgLS0tXG4gICAgLy8gIHxcbiAgICBjb25zdCBob3Jpem9udGFsU3BsaXQ6IFBvaW50W10gPSBbXG4gICAgICB7IHg6IHNvdXJjZUdhcHBlZC54LCB5OiBjZW50ZXJZIH0sXG4gICAgICB7IHg6IHRhcmdldEdhcHBlZC54LCB5OiBjZW50ZXJZIH0sXG4gICAgXTtcblxuICAgIGlmIChzb3VyY2VEaXJbZGlyQWNjZXNzb3JdID09PSBjdXJyRGlyKSB7XG4gICAgICBwb2ludHMgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gdmVydGljYWxTcGxpdCA6IGhvcml6b250YWxTcGxpdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnRzID0gZGlyQWNjZXNzb3IgPT09ICd4JyA/IGhvcml6b250YWxTcGxpdCA6IHZlcnRpY2FsU3BsaXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHNvdXJjZVRhcmdldCBtZWFucyB3ZSB0YWtlIHggZnJvbSBzb3VyY2UgYW5kIHkgZnJvbSB0YXJnZXQsIHRhcmdldFNvdXJjZSBpcyB0aGUgb3Bwb3NpdGVcbiAgICBjb25zdCBzb3VyY2VUYXJnZXQ6IFBvaW50W10gPSBbeyB4OiBzb3VyY2VHYXBwZWQueCwgeTogdGFyZ2V0R2FwcGVkLnkgfV07XG4gICAgY29uc3QgdGFyZ2V0U291cmNlOiBQb2ludFtdID0gW3sgeDogdGFyZ2V0R2FwcGVkLngsIHk6IHNvdXJjZUdhcHBlZC55IH1dO1xuICAgIC8vIHRoaXMgaGFuZGxlcyBlZGdlcyB3aXRoIHNhbWUgaGFuZGxlIHBvc2l0aW9uc1xuICAgIGlmIChkaXJBY2Nlc3NvciA9PT0gJ3gnKSB7XG4gICAgICBwb2ludHMgPSBzb3VyY2VEaXIueCA9PT0gY3VyckRpciA/IHRhcmdldFNvdXJjZSA6IHNvdXJjZVRhcmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnRzID0gc291cmNlRGlyLnkgPT09IGN1cnJEaXIgPyBzb3VyY2VUYXJnZXQgOiB0YXJnZXRTb3VyY2U7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZVBvc2l0aW9uID09PSB0YXJnZXRQb3NpdGlvbikge1xuICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKHNvdXJjZVtkaXJBY2Nlc3Nvcl0gLSB0YXJnZXRbZGlyQWNjZXNzb3JdKTtcblxuICAgICAgLy8gaWYgYW4gZWRnZSBnb2VzIGZyb20gcmlnaHQgdG8gcmlnaHQgZm9yIGV4YW1wbGUgKHNvdXJjZVBvc2l0aW9uID09PSB0YXJnZXRQb3NpdGlvbikgYW5kIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHNvdXJjZS54IGFuZCB0YXJnZXQueCBpcyBsZXNzIHRoYW4gdGhlIG9mZnNldCwgdGhlIGFkZGVkIHBvaW50IGFuZCB0aGUgZ2FwcGVkIHNvdXJjZS90YXJnZXQgd2lsbCBvdmVybGFwLiBUaGlzIGxlYWRzIHRvIGEgd2VpcmQgZWRnZSBwYXRoLiBUbyBhdm9pZCB0aGlzIHdlIGFkZCBhIGdhcE9mZnNldCB0byB0aGUgc291cmNlL3RhcmdldFxuICAgICAgaWYgKGRpZmYgPD0gb2Zmc2V0KSB7XG4gICAgICAgIGNvbnN0IGdhcE9mZnNldCA9IE1hdGgubWluKG9mZnNldCAtIDEsIG9mZnNldCAtIGRpZmYpO1xuICAgICAgICBpZiAoc291cmNlRGlyW2RpckFjY2Vzc29yXSA9PT0gY3VyckRpcikge1xuICAgICAgICAgIHNvdXJjZUdhcE9mZnNldFtkaXJBY2Nlc3Nvcl0gPSAoc291cmNlR2FwcGVkW2RpckFjY2Vzc29yXSA+IHNvdXJjZVtkaXJBY2Nlc3Nvcl0gPyAtMSA6IDEpICogZ2FwT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldEdhcE9mZnNldFtkaXJBY2Nlc3Nvcl0gPSAodGFyZ2V0R2FwcGVkW2RpckFjY2Vzc29yXSA+IHRhcmdldFtkaXJBY2Nlc3Nvcl0gPyAtMSA6IDEpICogZ2FwT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlc2UgYXJlIGNvbmRpdGlvbnMgZm9yIGhhbmRsaW5nIG1peGVkIGhhbmRsZSBwb3NpdGlvbnMgbGlrZSBSaWdodCAtPiBCb3R0b20gZm9yIGV4YW1wbGVcbiAgICBpZiAoc291cmNlUG9zaXRpb24gIT09IHRhcmdldFBvc2l0aW9uKSB7XG4gICAgICBjb25zdCBkaXJBY2Nlc3Nvck9wcG9zaXRlID0gZGlyQWNjZXNzb3IgPT09ICd4JyA/ICd5JyA6ICd4JztcbiAgICAgIGNvbnN0IGlzU2FtZURpciA9IHNvdXJjZURpcltkaXJBY2Nlc3Nvcl0gPT09IHRhcmdldERpcltkaXJBY2Nlc3Nvck9wcG9zaXRlXTtcbiAgICAgIGNvbnN0IHNvdXJjZUd0VGFyZ2V0T3BwbyA9IHNvdXJjZUdhcHBlZFtkaXJBY2Nlc3Nvck9wcG9zaXRlXSA+IHRhcmdldEdhcHBlZFtkaXJBY2Nlc3Nvck9wcG9zaXRlXTtcbiAgICAgIGNvbnN0IHNvdXJjZUx0VGFyZ2V0T3BwbyA9IHNvdXJjZUdhcHBlZFtkaXJBY2Nlc3Nvck9wcG9zaXRlXSA8IHRhcmdldEdhcHBlZFtkaXJBY2Nlc3Nvck9wcG9zaXRlXTtcbiAgICAgIGNvbnN0IGZsaXBTb3VyY2VUYXJnZXQgPVxuICAgICAgICAoc291cmNlRGlyW2RpckFjY2Vzc29yXSA9PT0gMSAmJiAoKCFpc1NhbWVEaXIgJiYgc291cmNlR3RUYXJnZXRPcHBvKSB8fCAoaXNTYW1lRGlyICYmIHNvdXJjZUx0VGFyZ2V0T3BwbykpKSB8fFxuICAgICAgICAoc291cmNlRGlyW2RpckFjY2Vzc29yXSAhPT0gMSAmJiAoKCFpc1NhbWVEaXIgJiYgc291cmNlTHRUYXJnZXRPcHBvKSB8fCAoaXNTYW1lRGlyICYmIHNvdXJjZUd0VGFyZ2V0T3BwbykpKTtcblxuICAgICAgaWYgKGZsaXBTb3VyY2VUYXJnZXQpIHtcbiAgICAgICAgcG9pbnRzID0gZGlyQWNjZXNzb3IgPT09ICd4JyA/IHNvdXJjZVRhcmdldCA6IHRhcmdldFNvdXJjZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VHYXBQb2ludCA9IHsgeDogc291cmNlR2FwcGVkLnggKyBzb3VyY2VHYXBPZmZzZXQueCwgeTogc291cmNlR2FwcGVkLnkgKyBzb3VyY2VHYXBPZmZzZXQueSB9O1xuICAgIGNvbnN0IHRhcmdldEdhcFBvaW50ID0geyB4OiB0YXJnZXRHYXBwZWQueCArIHRhcmdldEdhcE9mZnNldC54LCB5OiB0YXJnZXRHYXBwZWQueSArIHRhcmdldEdhcE9mZnNldC55IH07XG4gICAgY29uc3QgbWF4WERpc3RhbmNlID0gTWF0aC5tYXgoTWF0aC5hYnMoc291cmNlR2FwUG9pbnQueCAtIHBvaW50c1swXS54KSwgTWF0aC5hYnModGFyZ2V0R2FwUG9pbnQueCAtIHBvaW50c1swXS54KSk7XG4gICAgY29uc3QgbWF4WURpc3RhbmNlID0gTWF0aC5tYXgoTWF0aC5hYnMoc291cmNlR2FwUG9pbnQueSAtIHBvaW50c1swXS55KSwgTWF0aC5hYnModGFyZ2V0R2FwUG9pbnQueSAtIHBvaW50c1swXS55KSk7XG5cbiAgICAvLyB3ZSB3YW50IHRvIHBsYWNlIHRoZSBsYWJlbCBvbiB0aGUgbG9uZ2VzdCBzZWdtZW50IG9mIHRoZSBlZGdlXG4gICAgaWYgKG1heFhEaXN0YW5jZSA+PSBtYXhZRGlzdGFuY2UpIHtcbiAgICAgIGNlbnRlclggPSAoc291cmNlR2FwUG9pbnQueCArIHRhcmdldEdhcFBvaW50LngpIC8gMjtcbiAgICAgIGNlbnRlclkgPSBwb2ludHNbMF0ueTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2VudGVyWCA9IHBvaW50c1swXS54O1xuICAgICAgY2VudGVyWSA9IChzb3VyY2VHYXBQb2ludC55ICsgdGFyZ2V0R2FwUG9pbnQueSkgLyAyO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBhdGhQb2ludHMgPSBbXG4gICAgc291cmNlLFxuICAgIHsgeDogc291cmNlR2FwcGVkLnggKyBzb3VyY2VHYXBPZmZzZXQueCwgeTogc291cmNlR2FwcGVkLnkgKyBzb3VyY2VHYXBPZmZzZXQueSB9LFxuICAgIC4uLnBvaW50cyxcbiAgICB7IHg6IHRhcmdldEdhcHBlZC54ICsgdGFyZ2V0R2FwT2Zmc2V0LngsIHk6IHRhcmdldEdhcHBlZC55ICsgdGFyZ2V0R2FwT2Zmc2V0LnkgfSxcbiAgICB0YXJnZXQsXG4gIF07XG5cbiAgcmV0dXJuIFtwYXRoUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZXTtcbn1cblxuZnVuY3Rpb24gZ2V0QmVuZChhOiBQb2ludCwgYjogUG9pbnQsIGM6IFBvaW50LCBzaXplOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBiZW5kU2l6ZSA9IE1hdGgubWluKGRpc3RhbmNlKGEsIGIpIC8gMiwgZGlzdGFuY2UoYiwgYykgLyAyLCBzaXplKTtcbiAgY29uc3QgeyB4LCB5IH0gPSBiO1xuXG4gIC8vIG5vIGJlbmRcbiAgaWYgKChhLnggPT09IHggJiYgeCA9PT0gYy54KSB8fCAoYS55ID09PSB5ICYmIHkgPT09IGMueSkpIHtcbiAgICByZXR1cm4gYEwke3h9ICR7eX1gO1xuICB9XG5cbiAgLy8gZmlyc3Qgc2VnbWVudCBpcyBob3Jpem9udGFsXG4gIGlmIChhLnkgPT09IHkpIHtcbiAgICBjb25zdCB4RGlyID0gYS54IDwgYy54ID8gLTEgOiAxO1xuICAgIGNvbnN0IHlEaXIgPSBhLnkgPCBjLnkgPyAxIDogLTE7XG4gICAgcmV0dXJuIGBMICR7eCArIGJlbmRTaXplICogeERpcn0sJHt5fVEgJHt4fSwke3l9ICR7eH0sJHt5ICsgYmVuZFNpemUgKiB5RGlyfWA7XG4gIH1cblxuICBjb25zdCB4RGlyID0gYS54IDwgYy54ID8gMSA6IC0xO1xuICBjb25zdCB5RGlyID0gYS55IDwgYy55ID8gLTEgOiAxO1xuICByZXR1cm4gYEwgJHt4fSwke3kgKyBiZW5kU2l6ZSAqIHlEaXJ9USAke3h9LCR7eX0gJHt4ICsgYmVuZFNpemUgKiB4RGlyfSwke3l9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNtb290aFN0ZXBQYXRoKFxuICB7IHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCwgc291cmNlUG9zaXRpb24sIHRhcmdldFBvc2l0aW9uIH06IEN1cnZlRmFjdG9yeVBhcmFtcyxcbiAgYm9yZGVyUmFkaXVzOiBudW1iZXIgPSA1LFxuKTogQ3VydmVMYXlvdXQge1xuICBjb25zdCBbcG9pbnRzLCBsYWJlbFgsIGxhYmVsWV0gPSBnZXRQb2ludHMoe1xuICAgIHNvdXJjZTogc291cmNlUG9pbnQsXG4gICAgc291cmNlUG9zaXRpb24sXG4gICAgdGFyZ2V0OiB0YXJnZXRQb2ludCxcbiAgICB0YXJnZXRQb3NpdGlvbixcbiAgICBvZmZzZXQ6IDIwLFxuICB9KTtcblxuICBjb25zdCBwYXRoID0gcG9pbnRzLnJlZHVjZTxzdHJpbmc+KChyZXMsIHAsIGkpID0+IHtcbiAgICBsZXQgc2VnbWVudCA9ICcnO1xuXG4gICAgaWYgKGkgPiAwICYmIGkgPCBwb2ludHMubGVuZ3RoIC0gMSkge1xuICAgICAgc2VnbWVudCA9IGdldEJlbmQocG9pbnRzW2kgLSAxXSwgcCwgcG9pbnRzW2kgKyAxXSwgYm9yZGVyUmFkaXVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VnbWVudCA9IGAke2kgPT09IDAgPyAnTScgOiAnTCd9JHtwLnh9ICR7cC55fWA7XG4gICAgfVxuXG4gICAgcmVzICs9IHNlZ21lbnQ7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9LCAnJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIGxhYmVsUG9pbnRzOiB7XG4gICAgICAvLyBUT0RPIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIHRlbXBvcmFyeSB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwYXRoXG4gICAgICBzdGFydDogeyB4OiBsYWJlbFgsIHk6IGxhYmVsWSB9LFxuICAgICAgY2VudGVyOiB7IHg6IGxhYmVsWCwgeTogbGFiZWxZIH0sXG4gICAgICBlbmQ6IHsgeDogbGFiZWxYLCB5OiBsYWJlbFkgfSxcbiAgICB9LFxuICB9O1xufVxuIl19
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { getPointOnLineByRatio } from '../point-on-line-by-ratio';
|
|
2
|
-
export function straightPath(
|
|
3
|
-
const [start, center, end] = usingPoints;
|
|
4
|
-
const nullPoint = { x: 0, y: 0 };
|
|
2
|
+
export function straightPath({ sourcePoint, targetPoint }) {
|
|
5
3
|
return {
|
|
6
|
-
path: `M ${
|
|
7
|
-
|
|
8
|
-
start:
|
|
9
|
-
center:
|
|
10
|
-
end:
|
|
4
|
+
path: `M ${sourcePoint.x},${sourcePoint.y}L ${targetPoint.x},${targetPoint.y}`,
|
|
5
|
+
labelPoints: {
|
|
6
|
+
start: getPointOnLineByRatio(sourcePoint, targetPoint, 0.15),
|
|
7
|
+
center: getPointOnLineByRatio(sourcePoint, targetPoint, 0.5),
|
|
8
|
+
end: getPointOnLineByRatio(sourcePoint, targetPoint, 0.85),
|
|
11
9
|
},
|
|
12
10
|
};
|
|
13
11
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyYWlnaC1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L21hdGgvZWRnZS1wYXRoL3N0cmFpZ2gtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRSxNQUFNLFVBQVUsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBc0I7SUFDM0UsT0FBTztRQUNMLElBQUksRUFBRSxLQUFLLFdBQVcsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLEVBQUU7UUFDOUUsV0FBVyxFQUFFO1lBQ1gsS0FBSyxFQUFFLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDO1lBQzVELE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQztZQUM1RCxHQUFHLEVBQUUscUJBQXFCLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUM7U0FDM0Q7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnZlRmFjdG9yeVBhcmFtcywgQ3VydmVMYXlvdXQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2N1cnZlLWZhY3RvcnkuaW50ZXJmYWNlJztcbmltcG9ydCB7IGdldFBvaW50T25MaW5lQnlSYXRpbyB9IGZyb20gJy4uL3BvaW50LW9uLWxpbmUtYnktcmF0aW8nO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyYWlnaHRQYXRoKHsgc291cmNlUG9pbnQsIHRhcmdldFBvaW50IH06IEN1cnZlRmFjdG9yeVBhcmFtcyk6IEN1cnZlTGF5b3V0IHtcbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBgTSAke3NvdXJjZVBvaW50Lnh9LCR7c291cmNlUG9pbnQueX1MICR7dGFyZ2V0UG9pbnQueH0sJHt0YXJnZXRQb2ludC55fWAsXG4gICAgbGFiZWxQb2ludHM6IHtcbiAgICAgIHN0YXJ0OiBnZXRQb2ludE9uTGluZUJ5UmF0aW8oc291cmNlUG9pbnQsIHRhcmdldFBvaW50LCAwLjE1KSxcbiAgICAgIGNlbnRlcjogZ2V0UG9pbnRPbkxpbmVCeVJhdGlvKHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCwgMC41KSxcbiAgICAgIGVuZDogZ2V0UG9pbnRPbkxpbmVCeVJhdGlvKHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCwgMC44NSksXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|