@plait/common 0.29.0 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/algorithms/a-star.d.ts +10 -0
- package/algorithms/data-structures/graph.d.ts +14 -0
- package/algorithms/data-structures/index.d.ts +2 -0
- package/algorithms/data-structures/priority-queue.d.ts +16 -0
- package/algorithms/index.d.ts +2 -0
- package/constants/default.d.ts +1 -0
- package/esm2022/algorithms/a-star.mjs +57 -0
- package/esm2022/algorithms/data-structures/graph.mjs +47 -0
- package/esm2022/algorithms/data-structures/index.mjs +3 -0
- package/esm2022/algorithms/data-structures/priority-queue.mjs +13 -0
- package/esm2022/algorithms/index.mjs +3 -0
- package/esm2022/constants/default.mjs +2 -1
- package/esm2022/public-api.mjs +2 -1
- package/esm2022/utils/elbow-line-route.mjs +248 -0
- package/esm2022/utils/image.mjs +11 -1
- package/esm2022/utils/index.mjs +2 -1
- package/esm2022/utils/line-path.mjs +13 -2
- package/fesm2022/plait-common.mjs +384 -2
- package/fesm2022/plait-common.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/utils/elbow-line-route.d.ts +32 -0
- package/utils/image.d.ts +4 -1
- package/utils/index.d.ts +1 -0
- package/utils/line-path.d.ts +1 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Point } from '@plait/core';
|
|
2
|
+
import { PointGraph, PointNode } from './data-structures/graph';
|
|
3
|
+
export declare class AStar {
|
|
4
|
+
private graph;
|
|
5
|
+
cameFrom: Map<PointNode, PointNode>;
|
|
6
|
+
constructor(graph: PointGraph);
|
|
7
|
+
heuristic(a: Point, b: Point): number;
|
|
8
|
+
search(start: Point, end: Point, previousStart: Point): void;
|
|
9
|
+
getRoute(start: Point, end: Point): Point[];
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Point } from '@plait/core';
|
|
2
|
+
export declare class PointNode {
|
|
3
|
+
data: Point;
|
|
4
|
+
distance: number;
|
|
5
|
+
adjacentNodes: PointNode[];
|
|
6
|
+
constructor(data: Point);
|
|
7
|
+
}
|
|
8
|
+
export declare class PointGraph {
|
|
9
|
+
private index;
|
|
10
|
+
add(p: Point): void;
|
|
11
|
+
connect(a: Point, b: Point): void;
|
|
12
|
+
has(p: Point): boolean;
|
|
13
|
+
get(p: Point): PointNode | null;
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PointNode } from './graph';
|
|
2
|
+
export declare class PriorityQueue {
|
|
3
|
+
list: {
|
|
4
|
+
node: PointNode;
|
|
5
|
+
priority: number;
|
|
6
|
+
}[];
|
|
7
|
+
constructor();
|
|
8
|
+
enqueue(item: {
|
|
9
|
+
node: PointNode;
|
|
10
|
+
priority: number;
|
|
11
|
+
}): void;
|
|
12
|
+
dequeue(): {
|
|
13
|
+
node: PointNode;
|
|
14
|
+
priority: number;
|
|
15
|
+
} | undefined;
|
|
16
|
+
}
|
package/constants/default.d.ts
CHANGED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { PriorityQueue } from './data-structures/priority-queue';
|
|
2
|
+
export class AStar {
|
|
3
|
+
constructor(graph) {
|
|
4
|
+
this.graph = graph;
|
|
5
|
+
this.cameFrom = new Map();
|
|
6
|
+
}
|
|
7
|
+
heuristic(a, b) {
|
|
8
|
+
return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);
|
|
9
|
+
}
|
|
10
|
+
search(start, end, previousStart) {
|
|
11
|
+
const frontier = new PriorityQueue();
|
|
12
|
+
const startNode = this.graph.get(start);
|
|
13
|
+
this.cameFrom = new Map();
|
|
14
|
+
const costSoFar = new Map();
|
|
15
|
+
costSoFar.set(startNode, 0);
|
|
16
|
+
frontier.enqueue({ node: startNode, priority: 0 });
|
|
17
|
+
while (frontier.list.length > 0) {
|
|
18
|
+
var current = frontier.dequeue();
|
|
19
|
+
if (!current) {
|
|
20
|
+
throw new Error(`can't find current`);
|
|
21
|
+
}
|
|
22
|
+
const currentPoint = current.node.data;
|
|
23
|
+
if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
current.node.adjacentNodes.forEach(next => {
|
|
27
|
+
let newCost = costSoFar.get(current.node) + this.heuristic(next.data, current.node.data);
|
|
28
|
+
const previousNode = this.cameFrom.get(current.node);
|
|
29
|
+
// 拐点权重
|
|
30
|
+
const previousPoint = previousNode ? previousNode.data : previousStart;
|
|
31
|
+
const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];
|
|
32
|
+
const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];
|
|
33
|
+
if (!x && !y) {
|
|
34
|
+
newCost = newCost + 1;
|
|
35
|
+
}
|
|
36
|
+
if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next))) {
|
|
37
|
+
costSoFar.set(next, newCost);
|
|
38
|
+
const priority = newCost + this.heuristic(next.data, end);
|
|
39
|
+
frontier.enqueue({ node: next, priority });
|
|
40
|
+
this.cameFrom.set(next, current.node);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
getRoute(start, end) {
|
|
46
|
+
const result = [];
|
|
47
|
+
let temp = end;
|
|
48
|
+
while (temp[0] !== start[0] || temp[1] !== start[1]) {
|
|
49
|
+
const node = this.graph.get(temp);
|
|
50
|
+
const preNode = this.cameFrom.get(node);
|
|
51
|
+
result.unshift(preNode.data);
|
|
52
|
+
temp = preNode.data;
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYS1zdGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9hbGdvcml0aG1zL2Etc3Rhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFakUsTUFBTSxPQUFPLEtBQUs7SUFHZCxZQUFvQixLQUFpQjtRQUFqQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFDcEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFRLEVBQUUsQ0FBUTtRQUN4QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNLENBQUMsS0FBWSxFQUFFLEdBQVUsRUFBRSxhQUFvQjtRQUNqRCxNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7UUFDL0MsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEQsT0FBTyxRQUFRLENBQUMsSUFBSSxD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QUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsSUFBSSxHQUFHLE9BQVEsQ0FBQyxJQUFJLENBQUM7U0FDeEI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBvaW50R3JhcGgsIFBvaW50Tm9kZSB9IGZyb20gJy4vZGF0YS1zdHJ1Y3R1cmVzL2dyYXBoJztcbmltcG9ydCB7IFByaW9yaXR5UXVldWUgfSBmcm9tICcuL2RhdGEtc3RydWN0dXJlcy9wcmlvcml0eS1xdWV1ZSc7XG5cbmV4cG9ydCBjbGFzcyBBU3RhciB7XG4gICAgY2FtZUZyb206IE1hcDxQb2ludE5vZGUsIFBvaW50Tm9kZT47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyYXBoOiBQb2ludEdyYXBoKSB7XG4gICAgICAgIHRoaXMuY2FtZUZyb20gPSBuZXcgTWFwPFBvaW50Tm9kZSwgUG9pbnROb2RlPigpO1xuICAgIH1cblxuICAgIGhldXJpc3RpYyhhOiBQb2ludCwgYjogUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKGFbMF0gLSBiWzBdKSArIE1hdGguYWJzKGFbMV0gLSBiWzFdKTtcbiAgICB9XG5cbiAgICBzZWFyY2goc3RhcnQ6IFBvaW50LCBlbmQ6IFBvaW50LCBwcmV2aW91c1N0YXJ0OiBQb2ludCkge1xuICAgICAgICBjb25zdCBmcm9udGllciA9IG5ldyBQcmlvcml0eVF1ZXVlKCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IHRoaXMuZ3JhcGguZ2V0KHN0YXJ0KTtcbiAgICAgICAgdGhpcy5jYW1lRnJvbSA9IG5ldyBNYXA8UG9pbnROb2RlLCBQb2ludE5vZGU+KCk7XG4gICAgICAgIGNvbnN0IGNvc3RTb0ZhciA9IG5ldyBNYXA8UG9pbnROb2RlLCBudW1iZXI+KCk7XG4gICAgICAgIGNvc3RTb0Zhci5zZXQoc3RhcnROb2RlISwgMCk7XG4gICAgICAgIGZyb250aWVyLmVucXVldWUoeyBub2RlOiBzdGFydE5vZGUhLCBwcmlvcml0eTogMCB9KTtcbiAgICAgICAgd2hpbGUgKGZyb250aWVyLmxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBmcm9udGllci5kZXF1ZXVlKCk7XG5cbiAgICAgICAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3QgZmluZCBjdXJyZW50YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UG9pbnQgPSBjdXJyZW50IS5ub2RlLmRhdGE7XG4gICAgICAgICAgICBpZiAoY3VycmVudFBvaW50WzBdID09PSBlbmRbMF0gJiYgY3VycmVudFBvaW50WzFdID09PSBlbmRbMV0pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQubm9kZS5hZGphY2VudE5vZGVzLmZvckVhY2gobmV4dCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld0Nvc3QgPSBjb3N0U29GYXIuZ2V0KGN1cnJlbnQhLm5vZGUpISArIHRoaXMuaGV1cmlzdGljKG5leHQuZGF0YSwgY3VycmVudCEubm9kZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c05vZGUgPSB0aGlzLmNhbWVGcm9tLmdldChjdXJyZW50IS5ub2RlKTtcbiAgICAgICAgICAgICAgICAvLyDmi5DngrnmnYPph41cbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1BvaW50ID0gcHJldmlvdXNOb2RlID8gcHJldmlvdXNOb2RlLmRhdGEgOiBwcmV2aW91c1N0YXJ0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBwcmV2aW91c1BvaW50WzBdID09PSBjdXJyZW50Py5ub2RlLmRhdGFbMF0gJiYgcHJldmlvdXNQb2ludFswXSA9PT0gbmV4dC5kYXRhWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBwcmV2aW91c1BvaW50WzFdID09PSBjdXJyZW50Py5ub2RlLmRhdGFbMV0gJiYgcHJldmlvdXNQb2ludFsxXSA9PT0gbmV4dC5kYXRhWzFdO1xuICAgICAgICAgICAgICAgIGlmICgheCAmJiAheSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdDb3N0ID0gbmV3Q29zdCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghY29zdFNvRmFyLmhhcyhuZXh0KSB8fCAoY29zdFNvRmFyLmdldChuZXh0KSAmJiBuZXdDb3N0IDwgY29zdFNvRmFyLmdldChuZXh0KSEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvc3RTb0Zhci5zZXQobmV4dCwgbmV3Q29zdCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByaW9yaXR5ID0gbmV3Q29zdCArIHRoaXMuaGV1cmlzdGljKG5leHQuZGF0YSwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgZnJvbnRpZXIuZW5xdWV1ZSh7IG5vZGU6IG5leHQsIHByaW9yaXR5IH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbWVGcm9tLnNldChuZXh0LCBjdXJyZW50IS5ub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJvdXRlKHN0YXJ0OiBQb2ludCwgZW5kOiBQb2ludCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IHRlbXAgPSBlbmQ7XG4gICAgICAgIHdoaWxlICh0ZW1wWzBdICE9PSBzdGFydFswXSB8fCB0ZW1wWzFdICE9PSBzdGFydFsxXSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ3JhcGguZ2V0KHRlbXApO1xuICAgICAgICAgICAgY29uc3QgcHJlTm9kZSA9IHRoaXMuY2FtZUZyb20uZ2V0KG5vZGUhKTtcbiAgICAgICAgICAgIHJlc3VsdC51bnNoaWZ0KHByZU5vZGUhLmRhdGEpO1xuICAgICAgICAgICAgdGVtcCA9IHByZU5vZGUhLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export class PointNode {
|
|
2
|
+
constructor(data) {
|
|
3
|
+
this.data = data;
|
|
4
|
+
this.distance = Number.MAX_SAFE_INTEGER;
|
|
5
|
+
this.adjacentNodes = [];
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export class PointGraph {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.index = {};
|
|
11
|
+
}
|
|
12
|
+
add(p) {
|
|
13
|
+
const x = p[0];
|
|
14
|
+
const y = p[1];
|
|
15
|
+
const xs = x.toString(), ys = y.toString();
|
|
16
|
+
if (!(xs in this.index)) {
|
|
17
|
+
this.index[xs] = {};
|
|
18
|
+
}
|
|
19
|
+
if (!(ys in this.index[xs])) {
|
|
20
|
+
this.index[xs][ys] = new PointNode(p);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
connect(a, b) {
|
|
24
|
+
const nodeA = this.get(a);
|
|
25
|
+
const nodeB = this.get(b);
|
|
26
|
+
if (!nodeA || !nodeB) {
|
|
27
|
+
throw new Error(`A point was not found`);
|
|
28
|
+
}
|
|
29
|
+
nodeA.adjacentNodes.push(nodeB);
|
|
30
|
+
}
|
|
31
|
+
has(p) {
|
|
32
|
+
const x = p[0];
|
|
33
|
+
const y = p[1];
|
|
34
|
+
const xs = x.toString(), ys = y.toString();
|
|
35
|
+
return xs in this.index && ys in this.index[xs];
|
|
36
|
+
}
|
|
37
|
+
get(p) {
|
|
38
|
+
const x = p[0];
|
|
39
|
+
const y = p[1];
|
|
40
|
+
const xs = x.toString(), ys = y.toString();
|
|
41
|
+
if (xs in this.index && ys in this.index[xs]) {
|
|
42
|
+
return this.index[xs][ys];
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2FsZ29yaXRobXMvZGF0YS1zdHJ1Y3R1cmVzL2dyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxTQUFTO0lBR2xCLFlBQW1CLElBQVc7UUFBWCxTQUFJLEdBQUosSUFBSSxDQUFPO1FBRnZCLGFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDbkMsa0JBQWEsR0FBZ0IsRUFBRSxDQUFDO0lBQ04sQ0FBQztDQUNyQztBQUVELE1BQU0sT0FBTyxVQUFVO0lBQXZCO1FBQ1ksVUFBSyxHQUFnRCxFQUFFLENBQUM7SUE4Q3BFLENBQUM7SUE1Q0csR0FBRyxDQUFDLENBQVE7UUFDUixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFdEIsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN2QjtRQUNELElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBUSxFQUFFLENBQVE7UUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELEdBQUcsQ0FBQyxDQUFRO1FBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELEdBQUcsQ0FBQyxDQUFRO1FBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXRCLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQsIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBQb2ludE5vZGUge1xuICAgIHB1YmxpYyBkaXN0YW5jZSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgIHB1YmxpYyBhZGphY2VudE5vZGVzOiBQb2ludE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhOiBQb2ludCkge31cbn1cblxuZXhwb3J0IGNsYXNzIFBvaW50R3JhcGgge1xuICAgIHByaXZhdGUgaW5kZXg6IHsgW3g6IHN0cmluZ106IHsgW3k6IHN0cmluZ106IFBvaW50Tm9kZSB9IH0gPSB7fTtcblxuICAgIGFkZChwOiBQb2ludCkge1xuICAgICAgICBjb25zdCB4ID0gcFswXTtcbiAgICAgICAgY29uc3QgeSA9IHBbMV07XG4gICAgICAgIGNvbnN0IHhzID0geC50b1N0cmluZygpLFxuICAgICAgICAgICAgeXMgPSB5LnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaWYgKCEoeHMgaW4gdGhpcy5pbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhbeHNdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoeXMgaW4gdGhpcy5pbmRleFt4c10pKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV4W3hzXVt5c10gPSBuZXcgUG9pbnROb2RlKHApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbm5lY3QoYTogUG9pbnQsIGI6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVBID0gdGhpcy5nZXQoYSk7XG4gICAgICAgIGNvbnN0IG5vZGVCID0gdGhpcy5nZXQoYik7XG5cbiAgICAgICAgaWYgKCFub2RlQSB8fCAhbm9kZUIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQSBwb2ludCB3YXMgbm90IGZvdW5kYCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlQS5hZGphY2VudE5vZGVzLnB1c2gobm9kZUIpO1xuICAgIH1cblxuICAgIGhhcyhwOiBQb2ludCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB4ID0gcFswXTtcbiAgICAgICAgY29uc3QgeSA9IHBbMV07XG4gICAgICAgIGNvbnN0IHhzID0geC50b1N0cmluZygpLFxuICAgICAgICAgICAgeXMgPSB5LnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiB4cyBpbiB0aGlzLmluZGV4ICYmIHlzIGluIHRoaXMuaW5kZXhbeHNdO1xuICAgIH1cblxuICAgIGdldChwOiBQb2ludCk6IFBvaW50Tm9kZSB8IG51bGwge1xuICAgICAgICBjb25zdCB4ID0gcFswXTtcbiAgICAgICAgY29uc3QgeSA9IHBbMV07XG4gICAgICAgIGNvbnN0IHhzID0geC50b1N0cmluZygpLFxuICAgICAgICAgICAgeXMgPSB5LnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaWYgKHhzIGluIHRoaXMuaW5kZXggJiYgeXMgaW4gdGhpcy5pbmRleFt4c10pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4W3hzXVt5c107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './graph';
|
|
2
|
+
export * from './priority-queue';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2FsZ29yaXRobXMvZGF0YS1zdHJ1Y3R1cmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2dyYXBoJztcbmV4cG9ydCAqIGZyb20gJy4vcHJpb3JpdHktcXVldWUnO1xuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class PriorityQueue {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.list = [];
|
|
4
|
+
}
|
|
5
|
+
enqueue(item) {
|
|
6
|
+
this.list.push(item);
|
|
7
|
+
this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);
|
|
8
|
+
}
|
|
9
|
+
dequeue() {
|
|
10
|
+
return this.list.shift();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpb3JpdHktcXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2FsZ29yaXRobXMvZGF0YS1zdHJ1Y3R1cmVzL3ByaW9yaXR5LXF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxhQUFhO0lBR3RCO1FBQ0ksSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUEyQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnROb2RlIH0gZnJvbSAnLi9ncmFwaCc7XG5cbmV4cG9ydCBjbGFzcyBQcmlvcml0eVF1ZXVlIHtcbiAgICBsaXN0OiB7IG5vZGU6IFBvaW50Tm9kZTsgcHJpb3JpdHk6IG51bWJlciB9W107XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5saXN0ID0gW107XG4gICAgfVxuXG4gICAgZW5xdWV1ZShpdGVtOiB7IG5vZGU6IFBvaW50Tm9kZTsgcHJpb3JpdHk6IG51bWJlciB9KSB7XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3Quc29ydCgoaXRlbTEsIGl0ZW0yKSA9PiBpdGVtMS5wcmlvcml0eSAtIGl0ZW0yLnByaW9yaXR5KTtcbiAgICB9XG5cbiAgICBkZXF1ZXVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXN0LnNoaWZ0KCk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './a-star';
|
|
2
|
+
export * from './data-structures';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2FsZ29yaXRobXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYS1zdGFyJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1zdHJ1Y3R1cmVzJztcbiJdfQ==
|
|
@@ -2,4 +2,5 @@ export const BASE = 4;
|
|
|
2
2
|
export const PRIMARY_COLOR = '#6698FF';
|
|
3
3
|
export const RESIZE_HANDLE_DIAMETER = 8;
|
|
4
4
|
export const WithTextPluginKey = 'plait-text-plugin-key';
|
|
5
|
-
|
|
5
|
+
export const DEFAULT_ROUTE_MARGIN = 30;
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29uc3RhbnRzL2RlZmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQztBQUN6RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQkFTRSA9IDQ7XG5leHBvcnQgY29uc3QgUFJJTUFSWV9DT0xPUiA9ICcjNjY5OEZGJztcbmV4cG9ydCBjb25zdCBSRVNJWkVfSEFORExFX0RJQU1FVEVSID0gODtcbmV4cG9ydCBjb25zdCBXaXRoVGV4dFBsdWdpbktleSA9ICdwbGFpdC10ZXh0LXBsdWdpbi1rZXknO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUk9VVEVfTUFSR0lOID0gMzA7XG4iXX0=
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -9,4 +9,5 @@ export * from './plugins';
|
|
|
9
9
|
export * from './utils';
|
|
10
10
|
export * from './core/plugin-element';
|
|
11
11
|
export * from './core/image-base.component';
|
|
12
|
-
|
|
12
|
+
export * from './algorithms';
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGNBQWMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdXRpbHNcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyYXRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2Zvcm1zJztcbmV4cG9ydCAqIGZyb20gJy4vc2hhcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2lucyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS9wbHVnaW4tZWxlbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvaW1hZ2UtYmFzZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hbGdvcml0aG1zJ1xuIl19
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { Direction, RectangleClient } from '@plait/core';
|
|
2
|
+
import { removeDuplicatePoints } from '../utils';
|
|
3
|
+
import { DEFAULT_ROUTE_MARGIN } from '../constants';
|
|
4
|
+
import { AStar, PointGraph } from '../algorithms';
|
|
5
|
+
export const generateElbowLineRoute = (options) => {
|
|
6
|
+
const { nextSourcePoint, nextTargetPoint } = options;
|
|
7
|
+
const points = getGraphPoints(options);
|
|
8
|
+
const graph = createGraph(points);
|
|
9
|
+
const aStar = new AStar(graph);
|
|
10
|
+
aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);
|
|
11
|
+
let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);
|
|
12
|
+
route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];
|
|
13
|
+
const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);
|
|
14
|
+
const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);
|
|
15
|
+
const xAxis = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);
|
|
16
|
+
const yAxis = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);
|
|
17
|
+
route = routeAdjust(route, { xAxis, yAxis, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle });
|
|
18
|
+
return route;
|
|
19
|
+
};
|
|
20
|
+
const routeAdjust = (path, options) => {
|
|
21
|
+
// 基于 middleX/middleY 中线纠正 path
|
|
22
|
+
// 1. 找垂直/水平的线段
|
|
23
|
+
// 2. 找到和middleX/middleY相交的点
|
|
24
|
+
// 3. 基于垂直/水平的线段分别和相交点构建矩形
|
|
25
|
+
// 4. 判断矩形相交
|
|
26
|
+
// 5. 处理 path
|
|
27
|
+
const { sourceRectangle, targetRectangle, xAxis, yAxis } = options;
|
|
28
|
+
if (xAxis !== undefined) {
|
|
29
|
+
const optionsX = getAdjustOptions(path, xAxis, true);
|
|
30
|
+
const resultX = optionsX.pointOfHit &&
|
|
31
|
+
adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle });
|
|
32
|
+
if (resultX) {
|
|
33
|
+
path = resultX;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (yAxis !== undefined) {
|
|
37
|
+
const optionsY = getAdjustOptions(path, yAxis, false);
|
|
38
|
+
const resultY = optionsY.pointOfHit &&
|
|
39
|
+
adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle });
|
|
40
|
+
if (resultY) {
|
|
41
|
+
path = resultY;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return path;
|
|
45
|
+
};
|
|
46
|
+
const adjust = (route, options) => {
|
|
47
|
+
const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;
|
|
48
|
+
let result = null;
|
|
49
|
+
parallelPaths.forEach(parallelPath => {
|
|
50
|
+
// 构建矩形
|
|
51
|
+
const tempRect = RectangleClient.toRectangleClient([pointOfHit, parallelPath[0], parallelPath[1]]);
|
|
52
|
+
if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {
|
|
53
|
+
const getCornerCount = (path) => {
|
|
54
|
+
let cornerCount = 0;
|
|
55
|
+
for (let index = 1; index < path.length - 1; index++) {
|
|
56
|
+
const pre = path[index - 1];
|
|
57
|
+
const current = path[index];
|
|
58
|
+
const next = path[index + 1];
|
|
59
|
+
if (pre &&
|
|
60
|
+
current &&
|
|
61
|
+
next &&
|
|
62
|
+
!((Math.floor(current[0]) === Math.floor(pre[0]) && Math.floor(current[0]) === Math.floor(next[0])) ||
|
|
63
|
+
(Math.floor(current[1]) === Math.floor(pre[1]) && Math.floor(current[1]) === Math.floor(next[1])))) {
|
|
64
|
+
cornerCount++;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return cornerCount;
|
|
68
|
+
};
|
|
69
|
+
const tempCorners = RectangleClient.getCornerPoints(tempRect);
|
|
70
|
+
const indexRangeInPath = [];
|
|
71
|
+
const indexRangeInCorner = [];
|
|
72
|
+
route.forEach((point, index) => {
|
|
73
|
+
const cornerResult = tempCorners.findIndex(corner => Math.floor(corner[0]) === Math.floor(point[0]) && Math.floor(corner[1]) === Math.floor(point[1]));
|
|
74
|
+
if (cornerResult !== -1) {
|
|
75
|
+
indexRangeInPath.push(index);
|
|
76
|
+
indexRangeInCorner.push(cornerResult);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
const newPath = [...route];
|
|
80
|
+
const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index));
|
|
81
|
+
const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;
|
|
82
|
+
newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);
|
|
83
|
+
const cornerCount = getCornerCount([...route]);
|
|
84
|
+
const newCornerCount = getCornerCount([...newPath]);
|
|
85
|
+
if (newCornerCount <= cornerCount) {
|
|
86
|
+
result = newPath;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return null;
|
|
90
|
+
});
|
|
91
|
+
return result;
|
|
92
|
+
};
|
|
93
|
+
const getAdjustOptions = (path, middle, isHorizontal) => {
|
|
94
|
+
const parallelPaths = [];
|
|
95
|
+
let start = null;
|
|
96
|
+
let pointOfHit = null;
|
|
97
|
+
const axis = isHorizontal ? 0 : 1;
|
|
98
|
+
for (let index = 0; index < path.length; index++) {
|
|
99
|
+
const previous = path[index - 1];
|
|
100
|
+
const current = path[index];
|
|
101
|
+
if (start === null && previous && previous[axis] === current[axis]) {
|
|
102
|
+
start = previous;
|
|
103
|
+
}
|
|
104
|
+
if (start !== null) {
|
|
105
|
+
if (previous[axis] !== current[axis]) {
|
|
106
|
+
parallelPaths.push([start, previous]);
|
|
107
|
+
start = null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (current[axis] === middle) {
|
|
111
|
+
pointOfHit = current;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (start) {
|
|
115
|
+
parallelPaths.push([start, path[path.length - 1]]);
|
|
116
|
+
}
|
|
117
|
+
return { pointOfHit, parallelPaths };
|
|
118
|
+
};
|
|
119
|
+
export const getGraphPoints = (options) => {
|
|
120
|
+
const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;
|
|
121
|
+
const x = [];
|
|
122
|
+
const y = [];
|
|
123
|
+
let result = [];
|
|
124
|
+
[sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {
|
|
125
|
+
x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);
|
|
126
|
+
y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);
|
|
127
|
+
});
|
|
128
|
+
const rectanglesX = [
|
|
129
|
+
sourceOuterRectangle.x,
|
|
130
|
+
sourceOuterRectangle.x + sourceOuterRectangle.width,
|
|
131
|
+
targetOuterRectangle.x,
|
|
132
|
+
targetOuterRectangle.x + targetOuterRectangle.width
|
|
133
|
+
].sort((a, b) => a - b);
|
|
134
|
+
x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);
|
|
135
|
+
const rectanglesY = [
|
|
136
|
+
sourceOuterRectangle.y,
|
|
137
|
+
sourceOuterRectangle.y + sourceOuterRectangle.height,
|
|
138
|
+
targetOuterRectangle.y,
|
|
139
|
+
targetOuterRectangle.y + targetOuterRectangle.height
|
|
140
|
+
].sort((a, b) => a - b);
|
|
141
|
+
y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);
|
|
142
|
+
for (let i = 0; i < x.length; i++) {
|
|
143
|
+
for (let j = 0; j < y.length; j++) {
|
|
144
|
+
const point = [x[i], y[j]];
|
|
145
|
+
const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);
|
|
146
|
+
const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);
|
|
147
|
+
if (!isInSource && !isInTarget) {
|
|
148
|
+
result.push(point);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
result = removeDuplicatePoints(result).filter(point => {
|
|
153
|
+
const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);
|
|
154
|
+
const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);
|
|
155
|
+
return !isInSource && !isInTarget;
|
|
156
|
+
});
|
|
157
|
+
return result;
|
|
158
|
+
};
|
|
159
|
+
export const createGraph = (points) => {
|
|
160
|
+
const graph = new PointGraph();
|
|
161
|
+
const Xs = [];
|
|
162
|
+
const Ys = [];
|
|
163
|
+
points.forEach(p => {
|
|
164
|
+
const x = p[0], y = p[1];
|
|
165
|
+
if (Xs.indexOf(x) < 0)
|
|
166
|
+
Xs.push(x);
|
|
167
|
+
if (Ys.indexOf(y) < 0)
|
|
168
|
+
Ys.push(y);
|
|
169
|
+
graph.add(p);
|
|
170
|
+
});
|
|
171
|
+
Xs.sort((a, b) => a - b);
|
|
172
|
+
Ys.sort((a, b) => a - b);
|
|
173
|
+
const inHotIndex = (p) => graph.has(p);
|
|
174
|
+
for (let i = 0; i < Xs.length; i++) {
|
|
175
|
+
for (let j = 0; j < Ys.length; j++) {
|
|
176
|
+
const point = [Xs[i], Ys[j]];
|
|
177
|
+
if (!inHotIndex(point))
|
|
178
|
+
continue;
|
|
179
|
+
if (i > 0) {
|
|
180
|
+
const otherPoint = [Xs[i - 1], Ys[j]];
|
|
181
|
+
if (inHotIndex(otherPoint)) {
|
|
182
|
+
graph.connect(otherPoint, point);
|
|
183
|
+
graph.connect(point, otherPoint);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (j > 0) {
|
|
187
|
+
const otherPoint = [Xs[i], Ys[j - 1]];
|
|
188
|
+
if (inHotIndex(otherPoint)) {
|
|
189
|
+
graph.connect(otherPoint, point);
|
|
190
|
+
graph.connect(point, otherPoint);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return graph;
|
|
196
|
+
};
|
|
197
|
+
export const reduceRouteMargin = (sourceRectangle, targetRectangle) => {
|
|
198
|
+
const defaultOffset = DEFAULT_ROUTE_MARGIN;
|
|
199
|
+
let sourceOffset = new Array(4).fill(defaultOffset);
|
|
200
|
+
let targetOffset = new Array(4).fill(defaultOffset);
|
|
201
|
+
const sourceOuterRectangle = RectangleClient.inflate(sourceRectangle, defaultOffset * 2);
|
|
202
|
+
const targetOuterRectangle = RectangleClient.inflate(targetRectangle, defaultOffset * 2);
|
|
203
|
+
const isHit = RectangleClient.isHit(sourceOuterRectangle, targetOuterRectangle);
|
|
204
|
+
if (isHit) {
|
|
205
|
+
const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);
|
|
206
|
+
const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);
|
|
207
|
+
if (leftToRight > 0 && leftToRight < defaultOffset * 2) {
|
|
208
|
+
const offset = leftToRight / 2;
|
|
209
|
+
sourceOffset[3] = offset;
|
|
210
|
+
targetOffset[1] = offset;
|
|
211
|
+
}
|
|
212
|
+
if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {
|
|
213
|
+
const offset = rightToLeft / 2;
|
|
214
|
+
targetOffset[3] = offset;
|
|
215
|
+
sourceOffset[1] = offset;
|
|
216
|
+
}
|
|
217
|
+
const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);
|
|
218
|
+
const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);
|
|
219
|
+
if (topToBottom > 0 && topToBottom < defaultOffset * 2) {
|
|
220
|
+
const offset = topToBottom / 2;
|
|
221
|
+
sourceOffset[0] = offset;
|
|
222
|
+
targetOffset[2] = offset;
|
|
223
|
+
}
|
|
224
|
+
if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {
|
|
225
|
+
const offset = bottomToTop / 2;
|
|
226
|
+
sourceOffset[2] = offset;
|
|
227
|
+
targetOffset[0] = offset;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return { sourceOffset, targetOffset };
|
|
231
|
+
};
|
|
232
|
+
export const getNextPoint = (point, outerRectangle, direction) => {
|
|
233
|
+
switch (direction) {
|
|
234
|
+
case Direction.top: {
|
|
235
|
+
return [point[0], outerRectangle.y];
|
|
236
|
+
}
|
|
237
|
+
case Direction.bottom: {
|
|
238
|
+
return [point[0], outerRectangle.y + outerRectangle.height];
|
|
239
|
+
}
|
|
240
|
+
case Direction.right: {
|
|
241
|
+
return [outerRectangle.x + outerRectangle.width, point[1]];
|
|
242
|
+
}
|
|
243
|
+
default: {
|
|
244
|
+
return [outerRectangle.x, point[1]];
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxib3ctbGluZS1yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvZWxib3ctbGluZS1yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFTLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBMkJsRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE9BQThCLEVBQUUsRUFBRTtJQUNyRSxNQUFNLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNyRCxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEUsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDN0QsS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2xHLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2xHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkksTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsSSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ2pJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBYSxFQUFFLE9BQTJCLEVBQUUsRUFBRTtJQUMvRCwrQkFBK0I7SUFDL0IsZUFBZTtJQUNmLDRCQUE0QjtJQUM1QiwwQkFBMEI7SUFDMUIsWUFBWTtJQUNaLGFBQWE7SUFDYixNQUFNLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ25FLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUNyQixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELE1BQU0sT0FBTyxHQUNULFFBQVEsQ0FBQyxVQUFVO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUMvSCxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksR0FBRyxPQUFPLENBQUM7U0FDbEI7S0FDSjtJQUNELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUNyQixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUNULFFBQVEsQ0FBQyxVQUFVO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUMvSCxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksR0FBRyxPQUFPLENBQUM7U0FDbEI7S0FDSjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBYyxFQUFFLE9BQXNCLEVBQUUsRUFBRTtJQUN0RCxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2hGLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ2pDLE9BQU87UUFDUCxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLEVBQUU7WUFDeEcsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFhLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2xELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDN0IsSUFDSSxHQUFHO3dCQUNILE9BQU87d0JBQ1AsSUFBSTt3QkFDSixDQUFDLENBQ0csQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNqRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDcEcsRUFDSDt3QkFDRSxXQUFXLEVBQUUsQ0FBQztxQkFDakI7aUJBQ0o7Z0JBQ0QsT0FBTyxXQUFXLENBQUM7WUFDdkIsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5RCxNQUFNLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztZQUN0QyxNQUFNLGtCQUFrQixHQUFhLEVBQUUsQ0FBQztZQUN4QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMzQixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUN0QyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzdHLENBQUM7Z0JBQ0YsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ3JCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDN0Isa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUN6QztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzNCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBVSxDQUFDO1lBQ2hHLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZHLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDdEUsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNwRCxJQUFJLGNBQWMsSUFBSSxXQUFXLEVBQUU7Z0JBQy9CLE1BQU0sR0FBRyxPQUFPLENBQUM7YUFDcEI7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQWEsRUFBRSxNQUFjLEVBQUUsWUFBcUIsRUFBRSxFQUFFO0lBQzlFLE1BQU0sYUFBYSxHQUFxQixFQUFFLENBQUM7SUFDM0MsSUFBSSxLQUFLLEdBQWlCLElBQUksQ0FBQztJQUMvQixJQUFJLFVBQVUsR0FBaUIsSUFBSSxDQUFDO0lBQ3BDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbEMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hFLEtBQUssR0FBRyxRQUFRLENBQUM7U0FDcEI7UUFDRCxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDaEIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNsQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLEtBQUssR0FBRyxJQUFJLENBQUM7YUFDaEI7U0FDSjtRQUNELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE1BQU0sRUFBRTtZQUMxQixVQUFVLEdBQUcsT0FBTyxDQUFDO1NBQ3hCO0tBQ0o7SUFDRCxJQUFJLEtBQUssRUFBRTtRQUNQLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3REO0lBQ0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsQ0FBQztBQUN6QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUE4QixFQUFFLEVBQUU7SUFDN0QsTUFBTSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDakcsTUFBTSxDQUFDLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sQ0FBQyxHQUFhLEVBQUUsQ0FBQztJQUN2QixJQUFJLE1BQU0sR0FBWSxFQUFFLENBQUM7SUFFekIsQ0FBQyxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUM3RCxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RixDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sV0FBVyxHQUFHO1FBQ2hCLG9CQUFvQixDQUFDLENBQUM7UUFDdEIsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLEtBQUs7UUFDbkQsb0JBQW9CLENBQUMsQ0FBQztRQUN0QixvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsS0FBSztLQUN0RCxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsTUFBTSxXQUFXLEdBQUc7UUFDaEIsb0JBQW9CLENBQUMsQ0FBQztRQUN0QixvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsTUFBTTtRQUNwRCxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3RCLG9CQUFvQixDQUFDLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNO0tBQ3ZELENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMvQixNQUFNLEtBQUssR0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkYsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEI7U0FDSjtLQUNKO0lBQ0QsTUFBTSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNsRCxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkYsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25GLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtJQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQy9CLE1BQU0sRUFBRSxHQUFhLEVBQUUsQ0FBQztJQUN4QixNQUFNLEVBQUUsR0FBYSxFQUFFLENBQUM7SUFDeEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNmLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDVixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6QixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBUSxFQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hDLE1BQU0sS0FBSyxHQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO2dCQUFFLFNBQVM7WUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNQLE1BQU0sVUFBVSxHQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ3hCLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNqQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztpQkFDcEM7YUFDSjtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDUCxNQUFNLFVBQVUsR0FBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUN4QixLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDakMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7aUJBQ3BDO2FBQ0o7U0FDSjtLQUNKO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxlQUFnQyxFQUFFLGVBQWdDLEVBQUUsRUFBRTtJQUNwRyxNQUFNLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQztJQUMzQyxJQUFJLFlBQVksR0FBYSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUQsSUFBSSxZQUFZLEdBQWEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlELE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUNoRixJQUFJLEtBQUssRUFBRTtRQUNQLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRixNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEYsSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxhQUFhLEdBQUcsQ0FBQyxFQUFFO1lBQ3BELE1BQU0sTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDL0IsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxhQUFhLEdBQUcsQ0FBQyxFQUFFO1lBQ3BELE1BQU0sTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDL0IsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1NBQzVCO1FBRUQsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRixJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxHQUFHLGFBQWEsR0FBRyxDQUFDLEVBQUU7WUFDcEQsTUFBTSxNQUFNLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUMvQixZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDNUI7UUFDRCxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxHQUFHLGFBQWEsR0FBRyxDQUFDLEVBQUU7WUFDcEQsTUFBTSxNQUFNLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUMvQixZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDNUI7S0FDSjtJQUNELE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBWSxFQUFFLGNBQStCLEVBQUUsU0FBb0IsRUFBUyxFQUFFO0lBQ3ZHLFFBQVEsU0FBUyxFQUFFO1FBQ2YsS0FBSyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7UUFDRCxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ0wsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7S0FDSjtBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGlvbiwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IHJlbW92ZUR1cGxpY2F0ZVBvaW50cyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IERFRkFVTFRfUk9VVEVfTUFSR0lOIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFTdGFyLCBQb2ludEdyYXBoIH0gZnJvbSAnLi4vYWxnb3JpdGhtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxib3dMaW5lUm91dGVPcHRpb25zIHtcbiAgICBzb3VyY2VQb2ludDogUG9pbnQ7XG4gICAgbmV4dFNvdXJjZVBvaW50OiBQb2ludDtcbiAgICBzb3VyY2VSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbiAgICBzb3VyY2VPdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xuICAgIHRhcmdldFBvaW50OiBQb2ludDtcbiAgICBuZXh0VGFyZ2V0UG9pbnQ6IFBvaW50O1xuICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgdGFyZ2V0UmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVBZGp1c3RPcHRpb25zIHtcbiAgICB4QXhpcz86IG51bWJlcjtcbiAgICB5QXhpcz86IG51bWJlcjtcbiAgICBzb3VyY2VSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbiAgICB0YXJnZXRSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGp1c3RPcHRpb25zIHtcbiAgICBwYXJhbGxlbFBhdGhzOiBbUG9pbnQsIFBvaW50XVtdO1xuICAgIHBvaW50T2ZIaXQ6IFBvaW50O1xuICAgIHNvdXJjZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xuICAgIHRhcmdldFJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVFbGJvd0xpbmVSb3V0ZSA9IChvcHRpb25zOiBFbGJvd0xpbmVSb3V0ZU9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IG5leHRTb3VyY2VQb2ludCwgbmV4dFRhcmdldFBvaW50IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHBvaW50cyA9IGdldEdyYXBoUG9pbnRzKG9wdGlvbnMpO1xuICAgIGNvbnN0IGdyYXBoID0gY3JlYXRlR3JhcGgocG9pbnRzKTtcbiAgICBjb25zdCBhU3RhciA9IG5ldyBBU3RhcihncmFwaCk7XG4gICAgYVN0YXIuc2VhcmNoKG5leHRTb3VyY2VQb2ludCwgbmV4dFRhcmdldFBvaW50LCBvcHRpb25zLnNvdXJjZVBvaW50KTtcbiAgICBsZXQgcm91dGUgPSBhU3Rhci5nZXRSb3V0ZShuZXh0U291cmNlUG9pbnQsIG5leHRUYXJnZXRQb2ludCk7XG4gICAgcm91dGUgPSBbb3B0aW9ucy5zb3VyY2VQb2ludCwgLi4ucm91dGUsIG5leHRUYXJnZXRQb2ludCwgb3B0aW9ucy50YXJnZXRQb2ludF07XG4gICAgY29uc3QgaXNIaXRYID0gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0WChvcHRpb25zLnNvdXJjZU91dGVyUmVjdGFuZ2xlLCBvcHRpb25zLnRhcmdldE91dGVyUmVjdGFuZ2xlKTtcbiAgICBjb25zdCBpc0hpdFkgPSBSZWN0YW5nbGVDbGllbnQuaXNIaXRZKG9wdGlvbnMuc291cmNlT3V0ZXJSZWN0YW5nbGUsIG9wdGlvbnMudGFyZ2V0T3V0ZXJSZWN0YW5nbGUpO1xuICAgIGNvbnN0IHhBeGlzID0gaXNIaXRYID8gdW5kZWZpbmVkIDogUmVjdGFuZ2xlQ2xpZW50LmdldEdhcENlbnRlcihvcHRpb25zLnNvdXJjZU91dGVyUmVjdGFuZ2xlLCBvcHRpb25zLnRhcmdldE91dGVyUmVjdGFuZ2xlLCBmYWxzZSk7XG4gICAgY29uc3QgeUF4aXMgPSBpc0hpdFkgPyB1bmRlZmluZWQgOiBSZWN0YW5nbGVDbGllbnQuZ2V0R2FwQ2VudGVyKG9wdGlvbnMuc291cmNlT3V0ZXJSZWN0YW5nbGUsIG9wdGlvbnMudGFyZ2V0T3V0ZXJSZWN0YW5nbGUsIHRydWUpO1xuICAgIHJvdXRlID0gcm91dGVBZGp1c3Qocm91dGUsIHsgeEF4aXMsIHlBeGlzLCBzb3VyY2VSZWN0YW5nbGU6IG9wdGlvbnMuc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGU6IG9wdGlvbnMudGFyZ2V0UmVjdGFuZ2xlIH0pO1xuICAgIHJldHVybiByb3V0ZTtcbn07XG5cbmNvbnN0IHJvdXRlQWRqdXN0ID0gKHBhdGg6IFBvaW50W10sIG9wdGlvbnM6IFJvdXRlQWRqdXN0T3B0aW9ucykgPT4ge1xuICAgIC8vIOWfuuS6jiBtaWRkbGVYL21pZGRsZVkg5Lit57q/57qg5q2jIHBhdGhcbiAgICAvLyAxLiDmib7lnoLnm7Qv5rC05bmz55qE57q/5q61XG4gICAgLy8gMi4g5om+5Yiw5ZKMbWlkZGxlWC9taWRkbGVZ55u45Lqk55qE54K5XG4gICAgLy8gMy4g5Z+65LqO5Z6C55u0L+awtOW5s+eahOe6v+auteWIhuWIq+WSjOebuOS6pOeCueaehOW7uuefqeW9olxuICAgIC8vIDQuIOWIpOaWreefqeW9ouebuOS6pFxuICAgIC8vIDUuIOWkhOeQhiBwYXRoXG4gICAgY29uc3QgeyBzb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSwgeEF4aXMsIHlBeGlzIH0gPSBvcHRpb25zO1xuICAgIGlmICh4QXhpcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNYID0gZ2V0QWRqdXN0T3B0aW9ucyhwYXRoLCB4QXhpcywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdFggPVxuICAgICAgICAgICAgb3B0aW9uc1gucG9pbnRPZkhpdCAmJlxuICAgICAgICAgICAgYWRqdXN0KHBhdGgsIHsgcGFyYWxsZWxQYXRoczogb3B0aW9uc1gucGFyYWxsZWxQYXRocywgcG9pbnRPZkhpdDogb3B0aW9uc1gucG9pbnRPZkhpdCwgc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGUgfSk7XG4gICAgICAgIGlmIChyZXN1bHRYKSB7XG4gICAgICAgICAgICBwYXRoID0gcmVzdWx0WDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoeUF4aXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvcHRpb25zWSA9IGdldEFkanVzdE9wdGlvbnMocGF0aCwgeUF4aXMsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgcmVzdWx0WSA9XG4gICAgICAgICAgICBvcHRpb25zWS5wb2ludE9mSGl0ICYmXG4gICAgICAgICAgICBhZGp1c3QocGF0aCwgeyBwYXJhbGxlbFBhdGhzOiBvcHRpb25zWS5wYXJhbGxlbFBhdGhzLCBwb2ludE9mSGl0OiBvcHRpb25zWS5wb2ludE9mSGl0LCBzb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSB9KTtcbiAgICAgICAgaWYgKHJlc3VsdFkpIHtcbiAgICAgICAgICAgIHBhdGggPSByZXN1bHRZO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xufTtcblxuY29uc3QgYWRqdXN0ID0gKHJvdXRlOiBQb2ludFtdLCBvcHRpb25zOiBBZGp1c3RPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBwYXJhbGxlbFBhdGhzLCBwb2ludE9mSGl0LCBzb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSB9ID0gb3B0aW9ucztcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBwYXJhbGxlbFBhdGhzLmZvckVhY2gocGFyYWxsZWxQYXRoID0+IHtcbiAgICAgICAgLy8g5p6E5bu655+p5b2iXG4gICAgICAgIGNvbnN0IHRlbXBSZWN0ID0gUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtwb2ludE9mSGl0LCBwYXJhbGxlbFBhdGhbMF0sIHBhcmFsbGVsUGF0aFsxXV0pO1xuICAgICAgICBpZiAoIVJlY3RhbmdsZUNsaWVudC5pc0hpdCh0ZW1wUmVjdCwgc291cmNlUmVjdGFuZ2xlKSAmJiAhUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHRlbXBSZWN0LCB0YXJnZXRSZWN0YW5nbGUpKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRDb3JuZXJDb3VudCA9IChwYXRoOiBQb2ludFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNvcm5lckNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcGF0aC5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZSA9IHBhdGhbaW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHBhdGhbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gcGF0aFtpbmRleCArIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1hdGguZmxvb3IoY3VycmVudFswXSkgPT09IE1hdGguZmxvb3IocHJlWzBdKSAmJiBNYXRoLmZsb29yKGN1cnJlbnRbMF0pID09PSBNYXRoLmZsb29yKG5leHRbMF0pKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNYXRoLmZsb29yKGN1cnJlbnRbMV0pID09PSBNYXRoLmZsb29yKHByZVsxXSkgJiYgTWF0aC5mbG9vcihjdXJyZW50WzFdKSA9PT0gTWF0aC5mbG9vcihuZXh0WzFdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JuZXJDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3JuZXJDb3VudDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0ZW1wQ29ybmVycyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHModGVtcFJlY3QpO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhSYW5nZUluUGF0aDogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4UmFuZ2VJbkNvcm5lcjogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgICAgIHJvdXRlLmZvckVhY2goKHBvaW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvcm5lclJlc3VsdCA9IHRlbXBDb3JuZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgY29ybmVyID0+IE1hdGguZmxvb3IoY29ybmVyWzBdKSA9PT0gTWF0aC5mbG9vcihwb2ludFswXSkgJiYgTWF0aC5mbG9vcihjb3JuZXJbMV0pID09PSBNYXRoLmZsb29yKHBvaW50WzFdKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGNvcm5lclJlc3VsdCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhSYW5nZUluUGF0aC5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhSYW5nZUluQ29ybmVyLnB1c2goY29ybmVyUmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBbLi4ucm91dGVdO1xuICAgICAgICAgICAgY29uc3QgbWlzc0Nvcm5lciA9IHRlbXBDb3JuZXJzLmZpbmQoKGMsIGluZGV4KSA9PiAhaW5kZXhSYW5nZUluQ29ybmVyLmluY2x1ZGVzKGluZGV4KSkgYXMgUG9pbnQ7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVMZW5ndGggPSBNYXRoLmFicyhpbmRleFJhbmdlSW5QYXRoWzBdIC0gaW5kZXhSYW5nZUluUGF0aFtpbmRleFJhbmdlSW5QYXRoLmxlbmd0aCAtIDFdKSArIDE7XG4gICAgICAgICAgICBuZXdQYXRoLnNwbGljZShpbmRleFJhbmdlSW5QYXRoWzBdICsgMSwgcmVtb3ZlTGVuZ3RoIC0gMiwgbWlzc0Nvcm5lcik7XG4gICAgICAgICAgICBjb25zdCBjb3JuZXJDb3VudCA9IGdldENvcm5lckNvdW50KFsuLi5yb3V0ZV0pO1xuICAgICAgICAgICAgY29uc3QgbmV3Q29ybmVyQ291bnQgPSBnZXRDb3JuZXJDb3VudChbLi4ubmV3UGF0aF0pO1xuICAgICAgICAgICAgaWYgKG5ld0Nvcm5lckNvdW50IDw9IGNvcm5lckNvdW50KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3UGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgZ2V0QWRqdXN0T3B0aW9ucyA9IChwYXRoOiBQb2ludFtdLCBtaWRkbGU6IG51bWJlciwgaXNIb3Jpem9udGFsOiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgcGFyYWxsZWxQYXRoczogW1BvaW50LCBQb2ludF1bXSA9IFtdO1xuICAgIGxldCBzdGFydDogbnVsbCB8IFBvaW50ID0gbnVsbDtcbiAgICBsZXQgcG9pbnRPZkhpdDogbnVsbCB8IFBvaW50ID0gbnVsbDtcbiAgICBjb25zdCBheGlzID0gaXNIb3Jpem9udGFsID8gMCA6IDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGF0aC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBwYXRoW2luZGV4IC0gMV07XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBwYXRoW2luZGV4XTtcbiAgICAgICAgaWYgKHN0YXJ0ID09PSBudWxsICYmIHByZXZpb3VzICYmIHByZXZpb3VzW2F4aXNdID09PSBjdXJyZW50W2F4aXNdKSB7XG4gICAgICAgICAgICBzdGFydCA9IHByZXZpb3VzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzW2F4aXNdICE9PSBjdXJyZW50W2F4aXNdKSB7XG4gICAgICAgICAgICAgICAgcGFyYWxsZWxQYXRocy5wdXNoKFtzdGFydCwgcHJldmlvdXNdKTtcbiAgICAgICAgICAgICAgICBzdGFydCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRbYXhpc10gPT09IG1pZGRsZSkge1xuICAgICAgICAgICAgcG9pbnRPZkhpdCA9IGN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgIHBhcmFsbGVsUGF0aHMucHVzaChbc3RhcnQsIHBhdGhbcGF0aC5sZW5ndGggLSAxXV0pO1xuICAgIH1cbiAgICByZXR1cm4geyBwb2ludE9mSGl0LCBwYXJhbGxlbFBhdGhzIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JhcGhQb2ludHMgPSAob3B0aW9uczogRWxib3dMaW5lUm91dGVPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBuZXh0U291cmNlUG9pbnQsIG5leHRUYXJnZXRQb2ludCwgc291cmNlT3V0ZXJSZWN0YW5nbGUsIHRhcmdldE91dGVyUmVjdGFuZ2xlIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHg6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgeTogbnVtYmVyW10gPSBbXTtcbiAgICBsZXQgcmVzdWx0OiBQb2ludFtdID0gW107XG5cbiAgICBbc291cmNlT3V0ZXJSZWN0YW5nbGUsIHRhcmdldE91dGVyUmVjdGFuZ2xlXS5mb3JFYWNoKHJlY3RhbmdsZSA9PiB7XG4gICAgICAgIHgucHVzaChyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIHkucHVzaChyZWN0YW5nbGUueSwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICB9KTtcbiAgICBjb25zdCByZWN0YW5nbGVzWCA9IFtcbiAgICAgICAgc291cmNlT3V0ZXJSZWN0YW5nbGUueCxcbiAgICAgICAgc291cmNlT3V0ZXJSZWN0YW5nbGUueCArIHNvdXJjZU91dGVyUmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICB0YXJnZXRPdXRlclJlY3RhbmdsZS54LFxuICAgICAgICB0YXJnZXRPdXRlclJlY3RhbmdsZS54ICsgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUud2lkdGhcbiAgICBdLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICB4LnB1c2goKHJlY3RhbmdsZXNYWzFdICsgcmVjdGFuZ2xlc1hbMl0pIC8gMiwgbmV4dFNvdXJjZVBvaW50WzBdLCBuZXh0VGFyZ2V0UG9pbnRbMF0pO1xuICAgIGNvbnN0IHJlY3RhbmdsZXNZID0gW1xuICAgICAgICBzb3VyY2VPdXRlclJlY3RhbmdsZS55LFxuICAgICAgICBzb3VyY2VPdXRlclJlY3RhbmdsZS55ICsgc291cmNlT3V0ZXJSZWN0YW5nbGUuaGVpZ2h0LFxuICAgICAgICB0YXJnZXRPdXRlclJlY3RhbmdsZS55LFxuICAgICAgICB0YXJnZXRPdXRlclJlY3RhbmdsZS55ICsgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUuaGVpZ2h0XG4gICAgXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgeS5wdXNoKChyZWN0YW5nbGVzWVsxXSArIHJlY3RhbmdsZXNZWzJdKSAvIDIsIG5leHRTb3VyY2VQb2ludFsxXSwgbmV4dFRhcmdldFBvaW50WzFdKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludDogUG9pbnQgPSBbeFtpXSwgeVtqXV07XG4gICAgICAgICAgICBjb25zdCBpc0luU291cmNlID0gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZShzb3VyY2VPdXRlclJlY3RhbmdsZSwgcG9pbnQpO1xuICAgICAgICAgICAgY29uc3QgaXNJblRhcmdldCA9IFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGFyZ2V0T3V0ZXJSZWN0YW5nbGUsIHBvaW50KTtcbiAgICAgICAgICAgIGlmICghaXNJblNvdXJjZSAmJiAhaXNJblRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSByZW1vdmVEdXBsaWNhdGVQb2ludHMocmVzdWx0KS5maWx0ZXIocG9pbnQgPT4ge1xuICAgICAgICBjb25zdCBpc0luU291cmNlID0gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZShzb3VyY2VPdXRlclJlY3RhbmdsZSwgcG9pbnQpO1xuICAgICAgICBjb25zdCBpc0luVGFyZ2V0ID0gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0YXJnZXRPdXRlclJlY3RhbmdsZSwgcG9pbnQpO1xuICAgICAgICByZXR1cm4gIWlzSW5Tb3VyY2UgJiYgIWlzSW5UYXJnZXQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHcmFwaCA9IChwb2ludHM6IFBvaW50W10pID0+IHtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBQb2ludEdyYXBoKCk7XG4gICAgY29uc3QgWHM6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgWXM6IG51bWJlcltdID0gW107XG4gICAgcG9pbnRzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGNvbnN0IHggPSBwWzBdLFxuICAgICAgICAgICAgeSA9IHBbMV07XG4gICAgICAgIGlmIChYcy5pbmRleE9mKHgpIDwgMCkgWHMucHVzaCh4KTtcbiAgICAgICAgaWYgKFlzLmluZGV4T2YoeSkgPCAwKSBZcy5wdXNoKHkpO1xuICAgICAgICBncmFwaC5hZGQocCk7XG4gICAgfSk7XG4gICAgWHMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIFlzLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICBjb25zdCBpbkhvdEluZGV4ID0gKHA6IFBvaW50KTogYm9vbGVhbiA9PiBncmFwaC5oYXMocCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBYcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IFlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludDogUG9pbnQgPSBbWHNbaV0sIFlzW2pdXTtcbiAgICAgICAgICAgIGlmICghaW5Ib3RJbmRleChwb2ludCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJQb2ludDogUG9pbnQgPSBbWHNbaSAtIDFdLCBZc1tqXV07XG4gICAgICAgICAgICAgICAgaWYgKGluSG90SW5kZXgob3RoZXJQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGguY29ubmVjdChvdGhlclBvaW50LCBwb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIGdyYXBoLmNvbm5lY3QocG9pbnQsIG90aGVyUG9pbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyUG9pbnQ6IFBvaW50ID0gW1hzW2ldLCBZc1tqIC0gMV1dO1xuICAgICAgICAgICAgICAgIGlmIChpbkhvdEluZGV4KG90aGVyUG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyYXBoLmNvbm5lY3Qob3RoZXJQb2ludCwgcG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICBncmFwaC5jb25uZWN0KHBvaW50LCBvdGhlclBvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdyYXBoO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZHVjZVJvdXRlTWFyZ2luID0gKHNvdXJjZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCB0YXJnZXRSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRPZmZzZXQgPSBERUZBVUxUX1JPVVRFX01BUkdJTjtcbiAgICBsZXQgc291cmNlT2Zmc2V0OiBudW1iZXJbXSA9IG5ldyBBcnJheSg0KS5maWxsKGRlZmF1bHRPZmZzZXQpO1xuICAgIGxldCB0YXJnZXRPZmZzZXQ6IG51bWJlcltdID0gbmV3IEFycmF5KDQpLmZpbGwoZGVmYXVsdE9mZnNldCk7XG4gICAgY29uc3Qgc291cmNlT3V0ZXJSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZShzb3VyY2VSZWN0YW5nbGUsIGRlZmF1bHRPZmZzZXQgKiAyKTtcbiAgICBjb25zdCB0YXJnZXRPdXRlclJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHRhcmdldFJlY3RhbmdsZSwgZGVmYXVsdE9mZnNldCAqIDIpO1xuICAgIGNvbnN0IGlzSGl0ID0gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHNvdXJjZU91dGVyUmVjdGFuZ2xlLCB0YXJnZXRPdXRlclJlY3RhbmdsZSk7XG4gICAgaWYgKGlzSGl0KSB7XG4gICAgICAgIGNvbnN0IGxlZnRUb1JpZ2h0ID0gc291cmNlUmVjdGFuZ2xlLnggLSAodGFyZ2V0UmVjdGFuZ2xlLnggKyB0YXJnZXRSZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICBjb25zdCByaWdodFRvTGVmdCA9IHRhcmdldFJlY3RhbmdsZS54IC0gKHNvdXJjZVJlY3RhbmdsZS54ICsgc291cmNlUmVjdGFuZ2xlLndpZHRoKTtcbiAgICAgICAgaWYgKGxlZnRUb1JpZ2h0ID4gMCAmJiBsZWZ0VG9SaWdodCA8IGRlZmF1bHRPZmZzZXQgKiAyKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBsZWZ0VG9SaWdodCAvIDI7XG4gICAgICAgICAgICBzb3VyY2VPZmZzZXRbM10gPSBvZmZzZXQ7XG4gICAgICAgICAgICB0YXJnZXRPZmZzZXRbMV0gPSBvZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHRUb0xlZnQgPiAwICYmIHJpZ2h0VG9MZWZ0IDwgZGVmYXVsdE9mZnNldCAqIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHJpZ2h0VG9MZWZ0IC8gMjtcbiAgICAgICAgICAgIHRhcmdldE9mZnNldFszXSA9IG9mZnNldDtcbiAgICAgICAgICAgIHNvdXJjZU9mZnNldFsxXSA9IG9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvcFRvQm90dG9tID0gc291cmNlUmVjdGFuZ2xlLnkgLSAodGFyZ2V0UmVjdGFuZ2xlLnkgKyB0YXJnZXRSZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgYm90dG9tVG9Ub3AgPSB0YXJnZXRSZWN0YW5nbGUueSAtIChzb3VyY2VSZWN0YW5nbGUueSArIHNvdXJjZVJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICBpZiAodG9wVG9Cb3R0b20gPiAwICYmIHRvcFRvQm90dG9tIDwgZGVmYXVsdE9mZnNldCAqIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHRvcFRvQm90dG9tIC8gMjtcbiAgICAgICAgICAgIHNvdXJjZU9mZnNldFswXSA9IG9mZnNldDtcbiAgICAgICAgICAgIHRhcmdldE9mZnNldFsyXSA9IG9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm90dG9tVG9Ub3AgPiAwICYmIGJvdHRvbVRvVG9wIDwgZGVmYXVsdE9mZnNldCAqIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGJvdHRvbVRvVG9wIC8gMjtcbiAgICAgICAgICAgIHNvdXJjZU9mZnNldFsyXSA9IG9mZnNldDtcbiAgICAgICAgICAgIHRhcmdldE9mZnNldFswXSA9IG9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBzb3VyY2VPZmZzZXQsIHRhcmdldE9mZnNldCB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5leHRQb2ludCA9IChwb2ludDogUG9pbnQsIG91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGRpcmVjdGlvbjogRGlyZWN0aW9uKTogUG9pbnQgPT4ge1xuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgRGlyZWN0aW9uLnRvcDoge1xuICAgICAgICAgICAgcmV0dXJuIFtwb2ludFswXSwgb3V0ZXJSZWN0YW5nbGUueV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBEaXJlY3Rpb24uYm90dG9tOiB7XG4gICAgICAgICAgICByZXR1cm4gW3BvaW50WzBdLCBvdXRlclJlY3RhbmdsZS55ICsgb3V0ZXJSZWN0YW5nbGUuaGVpZ2h0XTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIERpcmVjdGlvbi5yaWdodDoge1xuICAgICAgICAgICAgcmV0dXJuIFtvdXRlclJlY3RhbmdsZS54ICsgb3V0ZXJSZWN0YW5nbGUud2lkdGgsIHBvaW50WzFdXTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gW291dGVyUmVjdGFuZ2xlLngsIHBvaW50WzFdXTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iXX0=
|
package/esm2022/utils/image.mjs
CHANGED
|
@@ -37,4 +37,14 @@ function getImageSize(file, defaultImageWidth) {
|
|
|
37
37
|
};
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
const BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap();
|
|
41
|
+
export const getElementOfFocusedImage = (board) => {
|
|
42
|
+
return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);
|
|
43
|
+
};
|
|
44
|
+
export const addElementOfFocusedImage = (board, element) => {
|
|
45
|
+
BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);
|
|
46
|
+
};
|
|
47
|
+
export const removeElementOfFocusedImage = (board) => {
|
|
48
|
+
BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3V0aWxzL2ltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsVUFBVSxFQUFFLG1CQUFtQixFQUFnQixNQUFNLGFBQWEsQ0FBQztBQWEzRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FDdkIsS0FBaUIsRUFDakIsaUJBQXlCLEVBQ3pCLE1BQThDLEVBQzlDLG1CQUE2QixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUM1RCxFQUFFO0lBQ0EsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUN6RCxTQUFTLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7UUFDbEMsVUFBVSxDQUFDLEtBQUssRUFBRyxLQUFLLENBQUMsTUFBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRixDQUFDLENBQUM7SUFDRixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFDM0IsS0FBaUIsRUFDakIsU0FBZSxFQUNmLGlCQUF5QixFQUN6QixNQUE4QyxFQUNoRCxFQUFFO0lBQ0EsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUNULE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixNQUFNLFlBQVksQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUF3QyxFQUFFLEVBQUU7UUFDL0YsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDcEIsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFbkQsU0FBUyxHQUFHO1FBQ1IsR0FBRztRQUNILEtBQUs7UUFDTCxNQUFNO0tBQ1QsQ0FBQztJQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFFRixTQUFTLFlBQVksQ0FBQyxJQUFVLEVBQUUsaUJBQXlCO0lBQ3ZELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMxQixLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsS0FBSyxDQUFDLE1BQU0sR0FBRztZQUNYLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDO1lBQ2hDLE1BQU0sTUFBTSxHQUFHLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDOUUsT0FBTyxDQUNILEtBQUssQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQzFILENBQUM7UUFDTixDQUFDLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxNQUFNLGlDQUFpQyxHQUFHLElBQUksT0FBTyxFQUE0QixDQUFDO0FBRWxGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzFELE9BQU8saUNBQWlDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFxQixFQUFFLEVBQUU7SUFDakYsaUNBQWlDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUM3RCxpQ0FBaUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgUGxhaXRCb2FyZCwgUGxhaXRDb250ZXh0U2VydmljZSwgUGxhaXRFbGVtZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgSW1hZ2VCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS9pbWFnZS1iYXNlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uSW1hZ2VJdGVtIHtcbiAgICB1cmw6IHN0cmluZztcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhDb21tb25QbHVnaW5PcHRpb25zIHtcbiAgICBpbWFnZUNvbXBvbmVudFR5cGU/OiBDb21wb25lbnRUeXBlPEltYWdlQmFzZUNvbXBvbmVudD47XG59XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RJbWFnZSA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBkZWZhdWx0SW1hZ2VXaWR0aDogbnVtYmVyLFxuICAgIGhhbmRsZTogKGNvbW1vbkltYWdlOiBDb21tb25JbWFnZUl0ZW0pID0+IHZvaWQsXG4gICAgYWNjZXB0SW1hZ2VUeXBlczogc3RyaW5nW10gPSBbJ3BuZycsICdqcGVnJywgJ2dpZicsICdibXAnXVxuKSA9PiB7XG4gICAgY29uc3QgaW5wdXRGaWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBpbnB1dEZpbGUuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2ZpbGUnKTtcbiAgICBjb25zdCBhY2NlcHRJbWFnZVR5cGVzU3RyaW5nID0gJy4nICsgYWNjZXB0SW1hZ2VUeXBlcy5qb2luKCcsLicpO1xuICAgIGlucHV0RmlsZS5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsIGFjY2VwdEltYWdlVHlwZXNTdHJpbmcpO1xuICAgIGlucHV0RmlsZS5vbmNoYW5nZSA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgYnVpbGRJbWFnZShib2FyZCwgKGV2ZW50LnRhcmdldCBhcyBhbnkpLmZpbGVzWzBdLCBkZWZhdWx0SW1hZ2VXaWR0aCwgaGFuZGxlKTtcbiAgICB9O1xuICAgIGlucHV0RmlsZS5jbGljaygpO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkSW1hZ2UgPSBhc3luYyAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgaW1hZ2VGaWxlOiBGaWxlLFxuICAgIGRlZmF1bHRJbWFnZVdpZHRoOiBudW1iZXIsXG4gICAgaGFuZGxlOiAoY29tbW9uSW1hZ2U6IENvbW1vbkltYWdlSXRlbSkgPT4gdm9pZFxuKSA9PiB7XG4gICAgbGV0IHdpZHRoID0gMCxcbiAgICAgICAgaGVpZ2h0ID0gMDtcbiAgICBhd2FpdCBnZXRJbWFnZVNpemUoaW1hZ2VGaWxlLCBkZWZhdWx0SW1hZ2VXaWR0aCkudGhlbigodmFsdWU6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSkgPT4ge1xuICAgICAgICB3aWR0aCA9IHZhbHVlLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB2YWx1ZS5oZWlnaHQ7XG4gICAgfSk7XG5cbiAgICBsZXQgaW1hZ2VJdGVtID0gbnVsbDtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGltYWdlRmlsZSk7XG4gICAgY29uc3QgY29udGV4dCA9IFBsYWl0Qm9hcmQuZ2V0Q29tcG9uZW50KGJvYXJkKS52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yLmdldChQbGFpdENvbnRleHRTZXJ2aWNlKTtcbiAgICBjb250ZXh0LnNldFVwbG9hZGluZ0ZpbGUoeyB1cmwsIGZpbGU6IGltYWdlRmlsZSB9KTtcblxuICAgIGltYWdlSXRlbSA9IHtcbiAgICAgICAgdXJsLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgfTtcbiAgICBoYW5kbGUoaW1hZ2VJdGVtKTtcbn07XG5cbmZ1bmN0aW9uIGdldEltYWdlU2l6ZShmaWxlOiBGaWxlLCBkZWZhdWx0SW1hZ2VXaWR0aDogbnVtYmVyKTogUHJvbWlzZTx7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBpbWFnZS5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuXG4gICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBkZWZhdWx0SW1hZ2VXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IChkZWZhdWx0SW1hZ2VXaWR0aCAqIGltYWdlLm5hdHVyYWxIZWlnaHQpIC8gaW1hZ2UubmF0dXJhbFdpZHRoO1xuICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICBpbWFnZS5uYXR1cmFsV2lkdGggPiBkZWZhdWx0SW1hZ2VXaWR0aCA/IHsgd2lkdGgsIGhlaWdodCB9IDogeyB3aWR0aDogaW1hZ2UubmF0dXJhbFdpZHRoLCBoZWlnaHQ6IGltYWdlLm5hdHVyYWxIZWlnaHQgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuY29uc3QgQk9BUkRfVE9fRUxFTUVOVF9PRl9GT0NVU0VEX0lNQUdFID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50PigpO1xuXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudE9mRm9jdXNlZEltYWdlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIEJPQVJEX1RPX0VMRU1FTlRfT0ZfRk9DVVNFRF9JTUFHRS5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnRPZkZvY3VzZWRJbWFnZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgQk9BUkRfVE9fRUxFTUVOVF9PRl9GT0NVU0VEX0lNQUdFLnNldChib2FyZCwgZWxlbWVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRWxlbWVudE9mRm9jdXNlZEltYWdlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgQk9BUkRfVE9fRUxFTUVOVF9PRl9GT0NVU0VEX0lNQUdFLmRlbGV0ZShib2FyZCk7XG59OyJdfQ==
|
package/esm2022/utils/index.mjs
CHANGED
|
@@ -6,4 +6,5 @@ export * from './creation-mode';
|
|
|
6
6
|
export * from './direction';
|
|
7
7
|
export * from './text';
|
|
8
8
|
export * from './image';
|
|
9
|
-
|
|
9
|
+
export * from './elbow-line-route';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcmVzaXplJztcbmV4cG9ydCAqIGZyb20gJy4vbGluZS1wYXRoJztcbmV4cG9ydCAqIGZyb20gJy4vaG90LWtleSc7XG5leHBvcnQgKiBmcm9tICcuL3JlY3RhbmdsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NyZWF0aW9uLW1vZGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vaW1hZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9lbGJvdy1saW5lLXJvdXRlJztcbiJdfQ==
|