├── css
└── style.css
├── data
├── simple.json
├── cubes1.json
├── cubes2.json
├── cubes3.json
├── cubes4.json
└── noise.json
├── js
├── animationWorker.js
├── scripts.js
├── fibonacci_heap.js
└── ebp.js
├── LICENSE
├── README.md
└── index.html
/css/style.css:
--------------------------------------------------------------------------------
1 | #VizContainer {
2 | width: 100%;
3 | height: 70vh;
4 | padding: 0;
5 | }
--------------------------------------------------------------------------------
/data/simple.json:
--------------------------------------------------------------------------------
1 | {"directed": false, "multigraph": false, "graph": {"node_default": {}, "edge_default": {}}, "nodes": [{"x": "0", "y": "0", "id": "0"}, {"x": "10", "y": "15", "id": "1"}, {"x": "25", "y": "25", "id": "2"}, {"x": "40", "y": "15", "id": "3"}, {"x": "50", "y": "0", "id": "4"}, {"x": "50", "y": "-10", "id": "5"}], "links": [{"source": "0", "target": "1"}, {"source": "0", "target": "5"}, {"source": "0", "target": "3"}, {"source": "1", "target": "2"}, {"source": "2", "target": "3"}, {"source": "3", "target": "4"}, {"source": "4", "target": "5"}]}
--------------------------------------------------------------------------------
/js/animationWorker.js:
--------------------------------------------------------------------------------
1 | var edges = null;
2 | var bundled = null;
3 |
4 | self.onmessage = function(e) {
5 |
6 | // console.log('test')
7 | // console.log(e.data)
8 |
9 | if (e.data[0] !== null && e.data[1] !== null) {
10 | edges = e.data[0];
11 | bundled = e.data[1];
12 | }
13 | var t0 = e.data[2];
14 | var steps = e.data[3];
15 |
16 |
17 |
18 | doFrame(t0, steps);
19 | }
20 |
21 |
22 | function doFrame(t0, steps) {
23 |
24 | edges.forEach(edge => {
25 | if (bundled[edge.id]) {
26 | for(var i = 0; i < edge.controlpoints.length; i++) {
27 | edge.anim[i].x -= edge.delta[i].x;
28 | edge.anim[i].y -= edge.delta[i].y;
29 | }
30 | }
31 |
32 | });
33 |
34 | //console.log('post')
35 | self.postMessage([edges, t0, steps]);
36 |
37 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Begin license text.
2 |
3 | Copyright (c) 2021 Markus Wallinger
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
11 | End license text.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Edge-Path Bundling
2 | Javascript implementation of the edge-path bundling algorithm.
3 |
4 | The algorithm can be seen in action here: https://mwallinger-tu.github.io/edge-path-bundling/
5 |
6 | ## Abstract
7 |
8 | Edge bundling techniques cluster edges with similar attributes (i.e. similarity in direction and proximity) together to reduce the visual clutter. All edge bundling techniques to date implicitly or explicitly cluster groups of individual edges, or parts of them, together based on these attributes. These clusters can result in ambiguous connections that do not exist in the data. Confluent drawings of networks do not have these ambiguities, but require the layout to be computed as part of the bundling process. We devise a new bundling method, Edge-Path bundling, to simplify edge clutter while greatly reducing ambiguities compared to previous bundling techniques. Edge-Path bundling takes a layout as input and clusters each edge along a weighted, shortest path to limit its deviation from a straight line. Edge-Path bundling does not incur independent edge ambiguities typically seen in all edge bundling methods, and the level of bundling can be tuned through shortest path distances, Euclidean distances, and combinations of the two. Also, directed edge bundling naturally emerges from the model. Through metric evaluations, we demonstrate the advantages of Edge-Path bundling over other techniques.
9 |
10 | DOI: 10.1109/TVCG.2021.3114795
11 |
12 | https://arxiv.org/abs/2108.05467
13 |
14 |
15 |
16 | ##
--------------------------------------------------------------------------------
/js/scripts.js:
--------------------------------------------------------------------------------
1 |
2 | var svg;
3 | var EPB;
4 | var Renderer;
5 | var Offscreen;
6 | var width, height;
7 |
8 | window.onload = function () {
9 | resetInput()
10 |
11 | var container = document.getElementById('VizContainer');
12 | var canvas = document.getElementById('Canvas');
13 |
14 | ({ width, height } = container.getBoundingClientRect());
15 |
16 | canvas.width = width;
17 | canvas.height = height;
18 |
19 | Renderer = new Render('#Canvas');
20 |
21 | d3.json('./data/simple.json').then(function(data){
22 | bundled = false;
23 |
24 | nodes = data['nodes'];
25 | links = data['links'];
26 |
27 | EBP = new EdgePathBundling(nodes, links, width, height);
28 | }).then(function(){
29 | EBP.drawGraphStraight(Renderer);
30 | });
31 | }
32 |
33 | function resetInput() {
34 | document.getElementById("customRange1").value = 2;
35 | document.getElementById("customRange2").value = 2;
36 | document.getElementById("customRange3").value = 1;
37 | document.getElementById("isInteractive").checked = false;
38 | document.getElementById("isAnimated").checked = false;
39 |
40 | document.getElementById('label1').innerHTML = 'Distortion: 2.0'
41 | document.getElementById('label2').innerHTML = 'Weight factor: 2.0'
42 | document.getElementById('label3').innerHTML = 'Bundle strength: 1'
43 | }
44 |
45 | function clickDatasetButton(path) {
46 | resetInput()
47 | d3.json(path).then(function(data){
48 | bundled = false;
49 |
50 | nodes = data['nodes'];
51 | links = data['links'];
52 |
53 | EBP = new EdgePathBundling(nodes, links, width, height);
54 | }).then(function(){
55 | EBP.drawGraphStraight(Renderer);
56 | });
57 | }
58 |
59 | function clickBundleButton() {
60 | EBP.bundle();
61 | EBP.subdivision();
62 |
63 | if(document.getElementById("isAnimated").checked)
64 | EBP.animate(Renderer, 50, 20);
65 | else
66 | EBP.drawGraphBundled(Renderer);
67 | }
68 |
69 |
70 | function clickReset() {
71 | EBP.drawGraphStraight(Renderer);
72 | }
73 |
74 | function bundleStrengthChanged(value) {
75 |
76 | document.getElementById('label3').innerHTML = 'Bundle strength: ' + value
77 |
78 | EBP.setBundlingStrength(value);
79 | EBP.subdivision();
80 |
81 | if(document.getElementById("isAnimated").checked)
82 | EBP.animate(Renderer, 50, 20);
83 | else
84 | EBP.drawGraphBundled(Renderer);
85 | }
86 |
87 | function distWeightsChanged(value) {
88 | document.getElementById('label2').innerHTML = 'Weight factor: ' + value;
89 |
90 | EBP.setWeight(value);
91 |
92 | if(document.getElementById("isInteractive").checked){
93 | EBP.bundle();
94 | EBP.subdivision();
95 |
96 | if(document.getElementById("isAnimated").checked)
97 | EBP.animate(Renderer, 50, 20);
98 | else
99 | EBP.drawGraphBundled(Renderer);
100 | }
101 | }
102 |
103 | function maxDistortionChanged(value) {
104 | document.getElementById('label1').innerHTML = 'Distortion: ' + value;
105 | EBP.setDistortion(value);
106 |
107 | if(document.getElementById("isInteractive").checked){
108 | EBP.bundle();
109 | EBP.subdivision();
110 |
111 | if(document.getElementById("isAnimated").checked)
112 | EBP.animate(Renderer, 10, 200);
113 | else
114 | EBP.drawGraphBundled(Renderer);
115 | }
116 | }
117 |
118 |
119 |
120 | // function clickDatasetButton(path) {
121 | // loadDataset(path, svg)
122 | // }
123 |
124 | // function clickReset() {
125 | // resetBundling(svg)
126 | // }
127 |
128 | // function bundleStrengthChanged(value) {
129 | // setBundleStrength(value);
130 | // drawBundled(svg);
131 | // }
132 |
133 | // function distWeightsChanged(value) {
134 | // updateWeights(value);
135 | // drawBundled(svg);
136 | // }
137 |
138 | // function maxDistortionChanged(value) {
139 | // setMaxDistortion(value);
140 | // drawBundled(svg);
141 | // }
142 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | Edge-Path Bundling
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/data/cubes1.json:
--------------------------------------------------------------------------------
1 | {"directed": false, "multigraph": false, "graph": {"node_default": {}, "edge_default": {}}, "nodes": [{"x": 9.450027007590352, "y": 1.1411106396558013, "id": "0"}, {"x": 32.306008446794785, "y": 8.632971118107575, "id": "25"}, {"x": 0.10986861549933002, "y": 10.124373763363648, "id": "50"}, {"x": 30.136879059367278, "y": 16.852393902368437, "id": "75"}, {"x": 6.627514480239313, "y": 8.864054571326484, "id": "1"}, {"x": 35.916390306547754, "y": 2.915985590419216, "id": "26"}, {"x": 2.711933625200248, "y": 14.708758185274585, "id": "51"}, {"x": 31.182989585534177, "y": 13.685168927196731, "id": "76"}, {"x": 4.313427989376728, "y": 8.046988839305737, "id": "2"}, {"x": 35.9241862934516, "y": 9.29331341614345, "id": "27"}, {"x": 3.6898757424354125, "y": 18.71032857959255, "id": "52"}, {"x": 31.39276991580555, "y": 11.97451556067498, "id": "77"}, {"x": 1.539368916237407, "y": 8.941403073841396, "id": "3"}, {"x": 36.96624336186402, "y": 9.151471655429592, "id": "28"}, {"x": 2.4043803626709357, "y": 18.602306945169296, "id": "53"}, {"x": 39.263044010401984, "y": 16.623225465981694, "id": "78"}, {"x": 3.3625623669613667, "y": 6.012047865623519, "id": "4"}, {"x": 34.45116718666786, "y": 2.6886094048642506, "id": "29"}, {"x": 3.1252048787167706, "y": 15.762374750155232, "id": "54"}, {"x": 34.877771428073615, "y": 10.554202940968345, "id": "79"}, {"x": 3.829841057996075, "y": 9.730156356973485, "id": "5"}, {"x": 34.561396360035346, "y": 7.80325681016079, "id": "30"}, {"x": 5.237085583103109, "y": 12.040976144547486, "id": "55"}, {"x": 33.59314297251602, "y": 18.867136182705117, "id": "80"}, {"x": 7.340193161776586, "y": 9.631376094360458, "id": "6"}, {"x": 39.366667028210585, "y": 0.3386383083091271, "id": "31"}, {"x": 4.595144701114338, "y": 11.498667979109788, "id": "56"}, {"x": 30.794893811315855, "y": 17.009401580474268, "id": "81"}, {"x": 3.3275088564510105, "y": 4.9579948638016615, "id": "7"}, {"x": 30.759555623475258, "y": 0.5147341585134879, "id": "32"}, {"x": 5.173807377392925, "y": 12.016014380873042, "id": "57"}, {"x": 36.79623245958279, "y": 19.536307261227474, "id": "82"}, {"x": 7.169006127957857, "y": 7.804382537723711, "id": "8"}, {"x": 35.757486248973144, "y": 6.337492558574888, "id": "33"}, {"x": 1.0957319697775403, "y": 11.416296672837396, "id": "58"}, {"x": 34.41938840009485, "y": 12.418088921536501, "id": "83"}, {"x": 5.721359867290145, "y": 7.564814849745219, "id": "9"}, {"x": 30.577635210488197, "y": 0.9803129677336508, "id": "34"}, {"x": 9.0197218973669, "y": 18.98334493356233, "id": "59"}, {"x": 33.144264794647526, "y": 13.173429090178452, "id": "84"}, {"x": 6.016724096920303, "y": 3.5298719118873425, "id": "10"}, {"x": 37.35742409811152, "y": 0.7431129431279759, "id": "35"}, {"x": 1.4345951891308495, "y": 18.86394602531329, "id": "60"}, {"x": 37.073167257181936, "y": 15.575897205537915, "id": "85"}, {"x": 8.172981106637195, "y": 9.119097459793249, "id": "11"}, {"x": 39.021706987645615, "y": 5.3276242464808785, "id": "36"}, {"x": 2.14064115531013, "y": 18.82293044441294, "id": "61"}, {"x": 37.169163846739785, "y": 18.255024290816554, "id": "86"}, {"x": 4.317248267914095, "y": 9.855466378142715, "id": "12"}, {"x": 33.36657479578266, "y": 6.815185090995487, "id": "37"}, {"x": 8.675430856928848, "y": 12.017117219133565, "id": "62"}, {"x": 36.823395973302766, "y": 17.54623974049248, "id": "87"}, {"x": 5.677265198124344, "y": 6.21638668313583, "id": "13"}, {"x": 37.450583941915426, "y": 0.6633061134998575, "id": "38"}, {"x": 7.743603338293959, "y": 13.536757265937414, "id": "63"}, {"x": 35.57509597190382, "y": 16.610638763571387, "id": "88"}, {"x": 6.203377967946259, "y": 0.32529551395025447, "id": "14"}, {"x": 37.19866404721251, "y": 5.311430202606735, "id": "39"}, {"x": 1.244794721845368, "y": 15.797113860227224, "id": "64"}, {"x": 34.78181261667471, "y": 14.31687419948678, "id": "89"}, {"x": 8.323499854693056, "y": 4.814065995933369, "id": "15"}, {"x": 36.26156253899293, "y": 6.654089768772621, "id": "40"}, {"x": 3.3288631015478245, "y": 12.350068120254987, "id": "65"}, {"x": 36.560523083279, "y": 12.40080134757352, "id": "90"}, {"x": 9.469039883411126, "y": 9.955491783910661, "id": "16"}, {"x": 36.20682996406935, "y": 1.7584104272062118, "id": "41"}, {"x": 0.1932849608322551, "y": 15.150714153423747, "id": "66"}, {"x": 33.58016328545816, "y": 19.339140914583606, "id": "91"}, {"x": 2.073097692041721, "y": 5.109305910858081, "id": "17"}, {"x": 34.171773677862646, "y": 1.703301892674125, "id": "42"}, {"x": 4.154397811674114, "y": 15.003474083327761, "id": "67"}, {"x": 31.34512812404249, "y": 12.819874781610677, "id": "92"}, {"x": 4.151059367463442, "y": 7.51568196689829, "id": "18"}, {"x": 30.12651184600974, "y": 6.792004344229536, "id": "43"}, {"x": 7.2067319749577905, "y": 12.705392752468526, "id": "68"}, {"x": 30.151834081945776, "y": 11.39555672328751, "id": "93"}, {"x": 8.98670874056288, "y": 0.7281419432976988, "id": "19"}, {"x": 37.74077888047327, "y": 2.302815932219354, "id": "44"}, {"x": 5.457962388956928, "y": 18.782992371482102, "id": "69"}, {"x": 38.55428474001478, "y": 15.398184666020427, "id": "94"}, {"x": 0.28496267895432914, "y": 3.8416125546296764, "id": "20"}, {"x": 38.35179019688033, "y": 2.42224812654966, "id": "45"}, {"x": 1.3298880586645934, "y": 15.81063442832057, "id": "70"}, {"x": 34.593226772199095, "y": 10.677335048049736, "id": "95"}, {"x": 2.36432208699401, "y": 4.694553736785681, "id": "21"}, {"x": 35.9276301041603, "y": 5.001398547274448, "id": "46"}, {"x": 7.970168688885819, "y": 12.795491053987398, "id": "71"}, {"x": 30.407529724892385, "y": 13.076003865370229, "id": "96"}, {"x": 7.062601887587034, "y": 2.591672070294333, "id": "22"}, {"x": 36.307162433847665, "y": 4.37580666159236, "id": "47"}, {"x": 5.958715060070325, "y": 14.593372153706433, "id": "72"}, {"x": 36.4712367521877, "y": 13.592314350290424, "id": "97"}, {"x": 7.9083452877529234, "y": 7.724988249728593, "id": "23"}, {"x": 30.64673601535388, "y": 9.97940238290209, "id": "48"}, {"x": 1.3891257763904374, "y": 15.249765504399852, "id": "73"}, {"x": 34.14067890263181, "y": 15.707450135162162, "id": "98"}, {"x": 8.107910589766153, "y": 2.2412111366736798, "id": "24"}, {"x": 31.439148611462635, "y": 5.076797472732394, "id": "49"}, {"x": 1.686220401651084, "y": 18.669386206774185, "id": "74"}, {"x": 35.19655323093735, "y": 11.88899173795424, "id": "99"}], "links": [{"source": "0", "target": "25"}, {"source": "0", "target": "1"}, {"source": "0", "target": "14"}, {"source": "25", "target": "26"}, {"source": "50", "target": "75"}, {"source": "50", "target": "51"}, {"source": "75", "target": "76"}, {"source": "1", "target": "26"}, {"source": "1", "target": "2"}, {"source": "26", "target": "27"}, {"source": "51", "target": "76"}, {"source": "51", "target": "52"}, {"source": "76", "target": "77"}, {"source": "2", "target": "27"}, {"source": "2", "target": "3"}, {"source": "27", "target": "28"}, {"source": "52", "target": "77"}, {"source": "52", "target": "53"}, {"source": "77", "target": "78"}, {"source": "3", "target": "28"}, {"source": "3", "target": "4"}, {"source": "28", "target": "29"}, {"source": "53", "target": "78"}, {"source": "53", "target": "54"}, {"source": "78", "target": "79"}, {"source": "4", "target": "29"}, {"source": "4", "target": "5"}, {"source": "29", "target": "30"}, {"source": "54", "target": "79"}, {"source": "54", "target": "55"}, {"source": "79", "target": "80"}, {"source": "5", "target": "30"}, {"source": "5", "target": "6"}, {"source": "30", "target": "31"}, {"source": "55", "target": "80"}, {"source": "55", "target": "56"}, {"source": "80", "target": "81"}, {"source": "6", "target": "31"}, {"source": "6", "target": "7"}, {"source": "31", "target": "32"}, {"source": "56", "target": "81"}, {"source": "56", "target": "57"}, {"source": "81", "target": "82"}, {"source": "7", "target": "32"}, {"source": "7", "target": "8"}, {"source": "32", "target": "33"}, {"source": "57", "target": "82"}, {"source": "57", "target": "58"}, {"source": "82", "target": "83"}, {"source": "8", "target": "33"}, {"source": "8", "target": "9"}, {"source": "33", "target": "34"}, {"source": "33", "target": "39"}, {"source": "58", "target": "83"}, {"source": "58", "target": "59"}, {"source": "83", "target": "84"}, {"source": "9", "target": "34"}, {"source": "9", "target": "10"}, {"source": "34", "target": "35"}, {"source": "59", "target": "84"}, {"source": "59", "target": "60"}, {"source": "84", "target": "85"}, {"source": "10", "target": "35"}, {"source": "10", "target": "11"}, {"source": "35", "target": "36"}, {"source": "60", "target": "85"}, {"source": "60", "target": "61"}, {"source": "60", "target": "66"}, {"source": "85", "target": "86"}, {"source": "11", "target": "36"}, {"source": "11", "target": "12"}, {"source": "36", "target": "37"}, {"source": "61", "target": "86"}, {"source": "61", "target": "62"}, {"source": "86", "target": "87"}, {"source": "12", "target": "37"}, {"source": "12", "target": "13"}, {"source": "37", "target": "38"}, {"source": "62", "target": "87"}, {"source": "62", "target": "63"}, {"source": "87", "target": "88"}, {"source": "13", "target": "38"}, {"source": "13", "target": "14"}, {"source": "38", "target": "39"}, {"source": "63", "target": "88"}, {"source": "63", "target": "64"}, {"source": "88", "target": "89"}, {"source": "14", "target": "39"}, {"source": "14", "target": "15"}, {"source": "39", "target": "40"}, {"source": "64", "target": "89"}, {"source": "64", "target": "65"}, {"source": "89", "target": "90"}, {"source": "15", "target": "40"}, {"source": "15", "target": "16"}, {"source": "40", "target": "41"}, {"source": "65", "target": "90"}, {"source": "65", "target": "66"}, {"source": "90", "target": "91"}, {"source": "90", "target": "98"}, {"source": "16", "target": "41"}, {"source": "16", "target": "17"}, {"source": "41", "target": "42"}, {"source": "66", "target": "91"}, {"source": "66", "target": "67"}, {"source": "91", "target": "92"}, {"source": "17", "target": "42"}, {"source": "17", "target": "18"}, {"source": "42", "target": "43"}, {"source": "67", "target": "92"}, {"source": "67", "target": "68"}, {"source": "92", "target": "93"}, {"source": "18", "target": "43"}, {"source": "18", "target": "19"}, {"source": "43", "target": "44"}, {"source": "68", "target": "93"}, {"source": "68", "target": "69"}, {"source": "93", "target": "94"}, {"source": "19", "target": "44"}, {"source": "19", "target": "20"}, {"source": "44", "target": "45"}, {"source": "69", "target": "94"}, {"source": "69", "target": "70"}, {"source": "94", "target": "95"}, {"source": "20", "target": "45"}, {"source": "20", "target": "21"}, {"source": "45", "target": "46"}, {"source": "70", "target": "95"}, {"source": "70", "target": "71"}, {"source": "95", "target": "96"}, {"source": "21", "target": "46"}, {"source": "21", "target": "22"}, {"source": "46", "target": "47"}, {"source": "71", "target": "96"}, {"source": "71", "target": "72"}, {"source": "96", "target": "97"}, {"source": "22", "target": "47"}, {"source": "22", "target": "23"}, {"source": "47", "target": "48"}, {"source": "72", "target": "97"}, {"source": "72", "target": "73"}, {"source": "97", "target": "98"}, {"source": "23", "target": "48"}, {"source": "23", "target": "24"}, {"source": "48", "target": "49"}, {"source": "73", "target": "98"}, {"source": "73", "target": "74"}, {"source": "98", "target": "99"}, {"source": "24", "target": "49"}, {"source": "74", "target": "99"}]}
--------------------------------------------------------------------------------
/data/cubes2.json:
--------------------------------------------------------------------------------
1 | {"directed": false, "multigraph": false, "graph": {"node_default": {}, "edge_default": {}}, "nodes": [{"x": 4.846327878880757, "y": 5.931990028368435, "id": "0"}, {"x": 33.42597331719167, "y": 0.3815402934785028, "id": "25"}, {"x": 1.4400213536877338, "y": 9.742571407261561, "id": "50"}, {"x": 39.72405051521559, "y": 11.752271282083003, "id": "75"}, {"x": 7.715550586869805, "y": 6.730499701857163, "id": "1"}, {"x": 37.43051465211523, "y": 2.4761973683328256, "id": "26"}, {"x": 5.83653394334644, "y": 11.845760949498406, "id": "51"}, {"x": 32.858753412583795, "y": 14.344510595958077, "id": "76"}, {"x": 4.372212949345926, "y": 7.733242771687258, "id": "2"}, {"x": 30.684642294476333, "y": 2.0571692279942977, "id": "27"}, {"x": 6.886737786174538, "y": 8.916086112633545, "id": "52"}, {"x": 35.46425064286342, "y": 15.433720546588265, "id": "77"}, {"x": 5.330998517352423, "y": 3.5020130778525527, "id": "3"}, {"x": 30.60772523929138, "y": 3.059001062077169, "id": "28"}, {"x": 8.234733471473799, "y": 11.991720215999491, "id": "53"}, {"x": 35.07957426048541, "y": 11.717646192390042, "id": "78"}, {"x": 0.4529257813104537, "y": 5.1355854816420194, "id": "4"}, {"x": 38.55466195206003, "y": 9.354030377636404, "id": "29"}, {"x": 5.859506737848742, "y": 15.98428394063107, "id": "54"}, {"x": 30.480240829112166, "y": 9.461719013905215, "id": "79"}, {"x": 6.850851014210599, "y": 1.175451183514472, "id": "5"}, {"x": 34.881318853712486, "y": 8.360361285817909, "id": "30"}, {"x": 8.962564121145087, "y": 15.39285269990571, "id": "55"}, {"x": 39.52478942728693, "y": 12.716572577730105, "id": "80"}, {"x": 9.333182362319373, "y": 7.407955654050717, "id": "6"}, {"x": 35.44500051631122, "y": 9.571036282187071, "id": "31"}, {"x": 1.2902779164111022, "y": 16.617722037769802, "id": "56"}, {"x": 36.132916533561556, "y": 13.088844400783739, "id": "81"}, {"x": 2.466268540972645, "y": 9.060621206156052, "id": "7"}, {"x": 32.23939869052253, "y": 1.0250710364057947, "id": "32"}, {"x": 0.40157556012157536, "y": 9.942511559674163, "id": "57"}, {"x": 35.811907633332666, "y": 11.399440231672617, "id": "82"}, {"x": 6.401227054360645, "y": 0.7075905895647372, "id": "8"}, {"x": 38.0452595820816, "y": 1.7817559030715402, "id": "33"}, {"x": 9.349180140301046, "y": 11.36724335931448, "id": "58"}, {"x": 35.45367008817289, "y": 14.057417107210734, "id": "83"}, {"x": 6.194233373478763, "y": 1.6310700560174862, "id": "9"}, {"x": 31.416291170410002, "y": 2.616358139078361, "id": "34"}, {"x": 4.6529224815774315, "y": 9.092250493061083, "id": "59"}, {"x": 38.871799092581284, "y": 8.600160387545523, "id": "84"}, {"x": 3.739881125686524, "y": 5.621713977881983, "id": "10"}, {"x": 32.74385859996699, "y": 2.924158664193497, "id": "35"}, {"x": 2.1465920832555363, "y": 8.506347191543016, "id": "60"}, {"x": 30.928142621206657, "y": 11.374570499463369, "id": "85"}, {"x": 1.4376845571087438, "y": 1.3223906908471295, "id": "11"}, {"x": 39.235262781474496, "y": 7.374155680347805, "id": "36"}, {"x": 9.495373094428784, "y": 9.366981898437384, "id": "61"}, {"x": 38.752305200310786, "y": 11.230011416424844, "id": "86"}, {"x": 8.480776704495964, "y": 8.173750059996229, "id": "12"}, {"x": 36.59168798896201, "y": 3.234309314332795, "id": "37"}, {"x": 9.612603233219607, "y": 11.662745927267133, "id": "62"}, {"x": 39.40626093312935, "y": 8.761127166774639, "id": "87"}, {"x": 8.935249217633977, "y": 5.314983106870468, "id": "13"}, {"x": 38.31657573905434, "y": 1.145957438698093, "id": "38"}, {"x": 8.032883964107585, "y": 12.545588776628287, "id": "63"}, {"x": 39.44528063495696, "y": 14.918807985034878, "id": "88"}, {"x": 1.1244633476285049, "y": 7.093832818264786, "id": "14"}, {"x": 30.10933751686615, "y": 1.5086723915152966, "id": "39"}, {"x": 1.0819308295809338, "y": 10.697973913850246, "id": "64"}, {"x": 35.78488800943264, "y": 11.951612541792343, "id": "89"}, {"x": 6.969302503076498, "y": 3.0607172875166677, "id": "15"}, {"x": 32.70739421547401, "y": 1.9775444918494667, "id": "40"}, {"x": 0.1752337879750776, "y": 8.259123455302852, "id": "65"}, {"x": 36.570925649175784, "y": 14.103750233246169, "id": "90"}, {"x": 2.7008281674341816, "y": 6.688632249064803, "id": "16"}, {"x": 37.43399975281213, "y": 4.07417069135371, "id": "41"}, {"x": 4.350400434287614, "y": 8.863224488585548, "id": "66"}, {"x": 36.089824440702444, "y": 11.416006543150807, "id": "91"}, {"x": 8.387851625516031, "y": 4.594816954646221, "id": "17"}, {"x": 35.14626263670482, "y": 6.782963603166431, "id": "42"}, {"x": 8.390642756626637, "y": 10.909395244656505, "id": "67"}, {"x": 39.746956414278436, "y": 13.513798820828564, "id": "92"}, {"x": 1.9995791530564033, "y": 1.7448827140456091, "id": "18"}, {"x": 33.96735812121115, "y": 3.716881784940992, "id": "43"}, {"x": 7.251063823148717, "y": 14.105432279033462, "id": "68"}, {"x": 32.47322049830323, "y": 10.917202449764451, "id": "93"}, {"x": 1.7072508575701861, "y": 3.9592905017761373, "id": "19"}, {"x": 36.775531053973246, "y": 9.20227421871282, "id": "44"}, {"x": 4.96953498408298, "y": 16.35154308635545, "id": "69"}, {"x": 37.70792305232233, "y": 17.659489192922592, "id": "94"}, {"x": 1.2321395352738473, "y": 9.820705027323912, "id": "20"}, {"x": 36.74756027508928, "y": 9.065462471443718, "id": "45"}, {"x": 2.2954430600471074, "y": 12.83531484710073, "id": "70"}, {"x": 34.03024515803486, "y": 9.96541084475753, "id": "95"}, {"x": 2.169001155727387, "y": 1.1658668308010434, "id": "21"}, {"x": 37.018458388528295, "y": 4.294415793158822, "id": "46"}, {"x": 9.947720148145917, "y": 12.773098952714419, "id": "71"}, {"x": 36.71543166303605, "y": 12.8179829319985, "id": "96"}, {"x": 2.280859577921064, "y": 3.0330168063608944, "id": "22"}, {"x": 37.75872777497091, "y": 7.481000848519921, "id": "47"}, {"x": 4.783562530979472, "y": 14.706212414308412, "id": "72"}, {"x": 37.10792842485325, "y": 14.493889212420598, "id": "97"}, {"x": 0.8828749876125042, "y": 8.07782490309109, "id": "23"}, {"x": 34.77270943035627, "y": 0.2603398727706274, "id": "48"}, {"x": 5.41243631706661, "y": 11.031782837813752, "id": "73"}, {"x": 34.08259557336202, "y": 8.901600145206123, "id": "98"}, {"x": 3.290133133841695, "y": 4.559235314084327, "id": "24"}, {"x": 36.710511478639305, "y": 5.784369731120095, "id": "49"}, {"x": 0.9592023806912531, "y": 10.168052116978473, "id": "74"}, {"x": 35.786505050482056, "y": 15.208291618069822, "id": "99"}], "links": [{"source": "0", "target": "25"}, {"source": "0", "target": "1"}, {"source": "25", "target": "26"}, {"source": "50", "target": "75"}, {"source": "50", "target": "51"}, {"source": "75", "target": "76"}, {"source": "1", "target": "26"}, {"source": "1", "target": "2"}, {"source": "26", "target": "27"}, {"source": "51", "target": "76"}, {"source": "51", "target": "52"}, {"source": "76", "target": "77"}, {"source": "2", "target": "27"}, {"source": "2", "target": "3"}, {"source": "2", "target": "7"}, {"source": "27", "target": "28"}, {"source": "27", "target": "34"}, {"source": "52", "target": "77"}, {"source": "52", "target": "53"}, {"source": "77", "target": "78"}, {"source": "77", "target": "82"}, {"source": "3", "target": "28"}, {"source": "3", "target": "4"}, {"source": "28", "target": "29"}, {"source": "53", "target": "78"}, {"source": "53", "target": "54"}, {"source": "78", "target": "79"}, {"source": "4", "target": "29"}, {"source": "4", "target": "5"}, {"source": "29", "target": "30"}, {"source": "54", "target": "79"}, {"source": "54", "target": "55"}, {"source": "79", "target": "80"}, {"source": "5", "target": "30"}, {"source": "5", "target": "6"}, {"source": "30", "target": "31"}, {"source": "55", "target": "80"}, {"source": "55", "target": "56"}, {"source": "80", "target": "81"}, {"source": "6", "target": "31"}, {"source": "6", "target": "7"}, {"source": "31", "target": "32"}, {"source": "56", "target": "81"}, {"source": "56", "target": "57"}, {"source": "81", "target": "82"}, {"source": "7", "target": "32"}, {"source": "7", "target": "8"}, {"source": "32", "target": "33"}, {"source": "57", "target": "82"}, {"source": "57", "target": "58"}, {"source": "82", "target": "83"}, {"source": "8", "target": "33"}, {"source": "8", "target": "9"}, {"source": "33", "target": "34"}, {"source": "58", "target": "83"}, {"source": "58", "target": "59"}, {"source": "83", "target": "84"}, {"source": "9", "target": "34"}, {"source": "9", "target": "10"}, {"source": "34", "target": "35"}, {"source": "59", "target": "84"}, {"source": "59", "target": "60"}, {"source": "59", "target": "69"}, {"source": "84", "target": "85"}, {"source": "10", "target": "35"}, {"source": "10", "target": "11"}, {"source": "35", "target": "36"}, {"source": "60", "target": "85"}, {"source": "60", "target": "61"}, {"source": "85", "target": "86"}, {"source": "11", "target": "36"}, {"source": "11", "target": "12"}, {"source": "36", "target": "37"}, {"source": "61", "target": "86"}, {"source": "61", "target": "62"}, {"source": "86", "target": "87"}, {"source": "12", "target": "37"}, {"source": "12", "target": "13"}, {"source": "37", "target": "38"}, {"source": "62", "target": "87"}, {"source": "62", "target": "63"}, {"source": "87", "target": "88"}, {"source": "13", "target": "38"}, {"source": "13", "target": "14"}, {"source": "38", "target": "39"}, {"source": "63", "target": "88"}, {"source": "63", "target": "64"}, {"source": "88", "target": "89"}, {"source": "14", "target": "39"}, {"source": "14", "target": "15"}, {"source": "39", "target": "40"}, {"source": "64", "target": "89"}, {"source": "64", "target": "65"}, {"source": "89", "target": "90"}, {"source": "15", "target": "40"}, {"source": "15", "target": "16"}, {"source": "40", "target": "41"}, {"source": "65", "target": "90"}, {"source": "65", "target": "66"}, {"source": "90", "target": "91"}, {"source": "16", "target": "41"}, {"source": "16", "target": "17"}, {"source": "41", "target": "42"}, {"source": "66", "target": "91"}, {"source": "66", "target": "67"}, {"source": "91", "target": "92"}, {"source": "17", "target": "42"}, {"source": "17", "target": "18"}, {"source": "42", "target": "43"}, {"source": "67", "target": "92"}, {"source": "67", "target": "68"}, {"source": "92", "target": "93"}, {"source": "18", "target": "43"}, {"source": "18", "target": "19"}, {"source": "43", "target": "44"}, {"source": "68", "target": "93"}, {"source": "68", "target": "69"}, {"source": "93", "target": "94"}, {"source": "19", "target": "44"}, {"source": "19", "target": "20"}, {"source": "44", "target": "45"}, {"source": "69", "target": "94"}, {"source": "69", "target": "70"}, {"source": "94", "target": "95"}, {"source": "20", "target": "45"}, {"source": "20", "target": "21"}, {"source": "45", "target": "46"}, {"source": "70", "target": "95"}, {"source": "70", "target": "71"}, {"source": "95", "target": "96"}, {"source": "21", "target": "46"}, {"source": "21", "target": "22"}, {"source": "46", "target": "47"}, {"source": "71", "target": "96"}, {"source": "71", "target": "72"}, {"source": "96", "target": "97"}, {"source": "22", "target": "47"}, {"source": "22", "target": "23"}, {"source": "47", "target": "48"}, {"source": "72", "target": "97"}, {"source": "72", "target": "73"}, {"source": "97", "target": "98"}, {"source": "23", "target": "48"}, {"source": "23", "target": "24"}, {"source": "48", "target": "49"}, {"source": "73", "target": "98"}, {"source": "73", "target": "74"}, {"source": "98", "target": "99"}, {"source": "24", "target": "49"}, {"source": "74", "target": "99"}]}
--------------------------------------------------------------------------------
/data/cubes3.json:
--------------------------------------------------------------------------------
1 | {"directed": false, "multigraph": false, "graph": {"node_default": {}, "edge_default": {}}, "nodes": [{"x": 7.075814434733888, "y": 0.3615708045639199, "id": "0"}, {"x": 31.948430763982287, "y": 1.9157507017552822, "id": "25"}, {"x": 9.059208257646764, "y": 17.560320338032625, "id": "50"}, {"x": 35.47337149872503, "y": 13.785405491705285, "id": "75"}, {"x": 9.885439520181883, "y": 3.3430860323891998, "id": "1"}, {"x": 34.99341786647161, "y": 7.174132163348518, "id": "26"}, {"x": 9.464183547532937, "y": 15.225384838693591, "id": "51"}, {"x": 37.515078876209444, "y": 14.377737566927639, "id": "76"}, {"x": 3.28518370343583, "y": 5.028646886480282, "id": "2"}, {"x": 38.39131001544028, "y": 3.9318095014405277, "id": "27"}, {"x": 9.845036831653095, "y": 17.2066486818558, "id": "52"}, {"x": 35.44107858140609, "y": 12.46955499973586, "id": "77"}, {"x": 4.663634127277664, "y": 6.897711233320429, "id": "3"}, {"x": 31.791077375844427, "y": 7.5834024582144615, "id": "28"}, {"x": 2.0357549315289503, "y": 20.298651254733635, "id": "53"}, {"x": 33.36225041929235, "y": 19.782423715160853, "id": "78"}, {"x": 2.6537133926920653, "y": 9.949187973787165, "id": "4"}, {"x": 32.170404085673184, "y": 7.61186282897615, "id": "29"}, {"x": 9.092715934143527, "y": 14.64183498614258, "id": "54"}, {"x": 38.31787744889725, "y": 19.937892510956328, "id": "79"}, {"x": 9.269821227205437, "y": 2.9638810751313684, "id": "5"}, {"x": 32.28466465754125, "y": 9.103510170682917, "id": "30"}, {"x": 1.3579949938301528, "y": 17.890835410168528, "id": "55"}, {"x": 38.68931715351704, "y": 13.026422161015024, "id": "80"}, {"x": 8.34458288283223, "y": 0.5097168896557125, "id": "6"}, {"x": 34.50106519664788, "y": 7.8946498487859165, "id": "31"}, {"x": 8.625036236801911, "y": 19.57172985772086, "id": "56"}, {"x": 30.79336444513005, "y": 14.126276697428548, "id": "81"}, {"x": 6.838340780553649, "y": 2.161900728919445, "id": "7"}, {"x": 34.30956623634442, "y": 2.1303486643807377, "id": "32"}, {"x": 9.801981029535566, "y": 12.717636215801715, "id": "57"}, {"x": 37.645093671967615, "y": 12.394676521405843, "id": "82"}, {"x": 0.18087280361040903, "y": 4.046971338398596, "id": "8"}, {"x": 34.97009767521977, "y": 2.0542287265365298, "id": "33"}, {"x": 7.894721228348672, "y": 16.805499709275757, "id": "58"}, {"x": 36.956991407730115, "y": 17.652582634390537, "id": "83"}, {"x": 1.8651461274138414, "y": 1.0718999194543455, "id": "9"}, {"x": 31.456668244394884, "y": 1.234450836395331, "id": "34"}, {"x": 4.700233397825167, "y": 16.81135503815677, "id": "59"}, {"x": 39.564240402596795, "y": 18.055376763746327, "id": "84"}, {"x": 4.365743153063546, "y": 6.806592598454856, "id": "10"}, {"x": 37.90089593251397, "y": 5.540066540056996, "id": "35"}, {"x": 8.111238287583847, "y": 15.756523521643782, "id": "60"}, {"x": 32.6075065698605, "y": 19.05092386782654, "id": "85"}, {"x": 4.727663104431967, "y": 9.817290370838824, "id": "11"}, {"x": 34.2731308446876, "y": 4.372473770081873, "id": "36"}, {"x": 7.27236826882054, "y": 13.579257777514155, "id": "61"}, {"x": 31.156532503872086, "y": 13.585526265876581, "id": "86"}, {"x": 2.0694894031433764, "y": 5.456591520941949, "id": "12"}, {"x": 31.265783638732493, "y": 3.4387013554108092, "id": "37"}, {"x": 4.2163360001348416, "y": 15.622975625783845, "id": "62"}, {"x": 31.846864092083432, "y": 13.669455484346708, "id": "87"}, {"x": 4.54539015003104, "y": 5.251672005028309, "id": "13"}, {"x": 33.22621491603446, "y": 7.41658075228814, "id": "38"}, {"x": 0.9430526968973463, "y": 16.97851740572117, "id": "63"}, {"x": 36.146604156415655, "y": 11.264777046051067, "id": "88"}, {"x": 9.800406172228854, "y": 7.495868755657458, "id": "14"}, {"x": 31.179280576690125, "y": 0.8722760735502433, "id": "39"}, {"x": 0.9096427231270787, "y": 11.186650800844212, "id": "64"}, {"x": 38.786180826008774, "y": 20.356531743903084, "id": "89"}, {"x": 4.838619199421602, "y": 3.8160416729152957, "id": "15"}, {"x": 35.10343919453421, "y": 7.297810265072884, "id": "40"}, {"x": 5.74080827889747, "y": 20.32751663062998, "id": "65"}, {"x": 30.245742749772752, "y": 19.53481589206309, "id": "90"}, {"x": 5.028823161498312, "y": 5.320746898489494, "id": "16"}, {"x": 32.82351104170801, "y": 3.788634105556711, "id": "41"}, {"x": 8.047592904176732, "y": 20.679187057754213, "id": "66"}, {"x": 37.78073273590162, "y": 17.37316194590883, "id": "91"}, {"x": 0.25424462181147245, "y": 6.419501930508533, "id": "17"}, {"x": 34.006267549654275, "y": 4.592562079906706, "id": "42"}, {"x": 8.39990274373147, "y": 12.087808671988853, "id": "67"}, {"x": 31.244774992832745, "y": 15.792470769917422, "id": "92"}, {"x": 6.327655139679599, "y": 6.012249397850348, "id": "18"}, {"x": 30.98571562368318, "y": 9.371077446719072, "id": "43"}, {"x": 8.385973600117877, "y": 18.809087162748128, "id": "68"}, {"x": 32.78175858865941, "y": 18.6245480394898, "id": "93"}, {"x": 2.0816796988005235, "y": 2.863107062330016, "id": "19"}, {"x": 33.172458653689596, "y": 9.223139283047768, "id": "44"}, {"x": 6.841107784413939, "y": 16.513723181180964, "id": "69"}, {"x": 32.48054501965472, "y": 11.363549029965357, "id": "94"}, {"x": 1.7364072064711744, "y": 7.387626815840518, "id": "20"}, {"x": 32.71643907371003, "y": 2.509953829335503, "id": "45"}, {"x": 5.421001459283746, "y": 19.967104335489147, "id": "70"}, {"x": 31.1807814721488, "y": 20.617761148772132, "id": "95"}, {"x": 4.341008546251803, "y": 2.709653128388274, "id": "21"}, {"x": 37.250882064135006, "y": 3.899206698251525, "id": "46"}, {"x": 7.721994557124438, "y": 14.621484974909185, "id": "71"}, {"x": 36.35924717318332, "y": 20.562053853326674, "id": "96"}, {"x": 6.406940324305492, "y": 9.315091382258172, "id": "22"}, {"x": 36.85859742971444, "y": 5.327088137556083, "id": "47"}, {"x": 4.765861347748993, "y": 11.657453988347418, "id": "72"}, {"x": 36.80390377648511, "y": 16.203791130208785, "id": "97"}, {"x": 8.12197311908143, "y": 1.3114609836162516, "id": "23"}, {"x": 39.96909730294284, "y": 9.244942062373822, "id": "48"}, {"x": 0.1758891722801159, "y": 13.549187951093412, "id": "73"}, {"x": 39.536509002624214, "y": 18.210754318542627, "id": "98"}, {"x": 3.053733209029348, "y": 7.170454217133168, "id": "24"}, {"x": 32.72782244682669, "y": 9.527862306251956, "id": "49"}, {"x": 3.0592415331123393, "y": 18.19211425879421, "id": "74"}, {"x": 34.36415161951747, "y": 16.883470447423715, "id": "99"}], "links": [{"source": "0", "target": "25"}, {"source": "0", "target": "1"}, {"source": "25", "target": "26"}, {"source": "50", "target": "75"}, {"source": "50", "target": "51"}, {"source": "75", "target": "76"}, {"source": "75", "target": "86"}, {"source": "1", "target": "26"}, {"source": "1", "target": "2"}, {"source": "26", "target": "27"}, {"source": "51", "target": "76"}, {"source": "51", "target": "52"}, {"source": "76", "target": "77"}, {"source": "2", "target": "27"}, {"source": "2", "target": "3"}, {"source": "27", "target": "28"}, {"source": "52", "target": "77"}, {"source": "52", "target": "53"}, {"source": "77", "target": "78"}, {"source": "3", "target": "28"}, {"source": "3", "target": "4"}, {"source": "28", "target": "29"}, {"source": "53", "target": "78"}, {"source": "53", "target": "54"}, {"source": "78", "target": "79"}, {"source": "4", "target": "29"}, {"source": "4", "target": "5"}, {"source": "29", "target": "30"}, {"source": "54", "target": "79"}, {"source": "54", "target": "55"}, {"source": "79", "target": "80"}, {"source": "5", "target": "30"}, {"source": "5", "target": "6"}, {"source": "30", "target": "31"}, {"source": "55", "target": "80"}, {"source": "55", "target": "56"}, {"source": "80", "target": "81"}, {"source": "6", "target": "31"}, {"source": "6", "target": "7"}, {"source": "31", "target": "32"}, {"source": "56", "target": "81"}, {"source": "56", "target": "57"}, {"source": "81", "target": "82"}, {"source": "7", "target": "32"}, {"source": "7", "target": "8"}, {"source": "32", "target": "33"}, {"source": "57", "target": "82"}, {"source": "57", "target": "58"}, {"source": "82", "target": "83"}, {"source": "8", "target": "33"}, {"source": "8", "target": "9"}, {"source": "33", "target": "34"}, {"source": "58", "target": "83"}, {"source": "58", "target": "59"}, {"source": "83", "target": "84"}, {"source": "9", "target": "34"}, {"source": "9", "target": "10"}, {"source": "34", "target": "35"}, {"source": "34", "target": "39"}, {"source": "59", "target": "84"}, {"source": "59", "target": "60"}, {"source": "84", "target": "85"}, {"source": "10", "target": "35"}, {"source": "10", "target": "11"}, {"source": "35", "target": "36"}, {"source": "60", "target": "85"}, {"source": "60", "target": "61"}, {"source": "85", "target": "86"}, {"source": "11", "target": "36"}, {"source": "11", "target": "12"}, {"source": "36", "target": "37"}, {"source": "61", "target": "86"}, {"source": "61", "target": "62"}, {"source": "86", "target": "87"}, {"source": "12", "target": "37"}, {"source": "12", "target": "13"}, {"source": "37", "target": "38"}, {"source": "62", "target": "87"}, {"source": "62", "target": "63"}, {"source": "87", "target": "88"}, {"source": "13", "target": "38"}, {"source": "13", "target": "14"}, {"source": "13", "target": "21"}, {"source": "38", "target": "39"}, {"source": "63", "target": "88"}, {"source": "63", "target": "64"}, {"source": "88", "target": "89"}, {"source": "14", "target": "39"}, {"source": "14", "target": "15"}, {"source": "39", "target": "40"}, {"source": "64", "target": "89"}, {"source": "64", "target": "65"}, {"source": "89", "target": "90"}, {"source": "15", "target": "40"}, {"source": "15", "target": "16"}, {"source": "40", "target": "41"}, {"source": "65", "target": "90"}, {"source": "65", "target": "66"}, {"source": "90", "target": "91"}, {"source": "16", "target": "41"}, {"source": "16", "target": "17"}, {"source": "41", "target": "42"}, {"source": "66", "target": "91"}, {"source": "66", "target": "67"}, {"source": "91", "target": "92"}, {"source": "17", "target": "42"}, {"source": "17", "target": "18"}, {"source": "42", "target": "43"}, {"source": "67", "target": "92"}, {"source": "67", "target": "68"}, {"source": "67", "target": "72"}, {"source": "92", "target": "93"}, {"source": "18", "target": "43"}, {"source": "18", "target": "19"}, {"source": "43", "target": "44"}, {"source": "68", "target": "93"}, {"source": "68", "target": "69"}, {"source": "93", "target": "94"}, {"source": "19", "target": "44"}, {"source": "19", "target": "20"}, {"source": "44", "target": "45"}, {"source": "69", "target": "94"}, {"source": "69", "target": "70"}, {"source": "94", "target": "95"}, {"source": "20", "target": "45"}, {"source": "20", "target": "21"}, {"source": "45", "target": "46"}, {"source": "70", "target": "95"}, {"source": "70", "target": "71"}, {"source": "95", "target": "96"}, {"source": "21", "target": "46"}, {"source": "21", "target": "22"}, {"source": "46", "target": "47"}, {"source": "71", "target": "96"}, {"source": "71", "target": "72"}, {"source": "96", "target": "97"}, {"source": "22", "target": "47"}, {"source": "22", "target": "23"}, {"source": "47", "target": "48"}, {"source": "72", "target": "97"}, {"source": "72", "target": "73"}, {"source": "97", "target": "98"}, {"source": "23", "target": "48"}, {"source": "23", "target": "24"}, {"source": "48", "target": "49"}, {"source": "73", "target": "98"}, {"source": "73", "target": "74"}, {"source": "98", "target": "99"}, {"source": "24", "target": "49"}, {"source": "74", "target": "99"}]}
--------------------------------------------------------------------------------
/data/cubes4.json:
--------------------------------------------------------------------------------
1 | {"directed": false, "multigraph": false, "graph": {"node_default": {}, "edge_default": {}}, "nodes": [{"x": 8.75552889978818, "y": 5.730212784793665, "id": "0"}, {"x": 33.38709823310424, "y": 6.522315981920589, "id": "25"}, {"x": 1.4820158712002929, "y": 14.696721598262844, "id": "50"}, {"x": 33.334169245792545, "y": 13.576947091256063, "id": "75"}, {"x": 8.539480726982301, "y": 7.5684920195156735, "id": "1"}, {"x": 36.190963876603675, "y": 0.9895441537595595, "id": "26"}, {"x": 4.643050747115537, "y": 11.774730044114069, "id": "51"}, {"x": 38.02482016669935, "y": 19.737054373963986, "id": "76"}, {"x": 3.5904823157755605, "y": 9.80073012399653, "id": "2"}, {"x": 30.954774121791427, "y": 4.544603076619042, "id": "27"}, {"x": 9.773107567766868, "y": 18.587930948474625, "id": "52"}, {"x": 36.285230510648475, "y": 17.740391282949982, "id": "77"}, {"x": 0.030215245147914294, "y": 6.756950083399196, "id": "3"}, {"x": 30.20185570474177, "y": 4.501155486334735, "id": "28"}, {"x": 6.7456682297783255, "y": 19.979223418196963, "id": "53"}, {"x": 39.925366643856464, "y": 17.519576246455557, "id": "78"}, {"x": 4.825521054198986, "y": 0.9336788826820241, "id": "4"}, {"x": 38.360638456702034, "y": 9.02452519159546, "id": "29"}, {"x": 6.38383249055561, "y": 13.561263350471958, "id": "54"}, {"x": 31.511134898231546, "y": 13.587783693682201, "id": "79"}, {"x": 3.8447092445797892, "y": 2.327769912872607, "id": "5"}, {"x": 34.48001155356142, "y": 3.481602799678152, "id": "30"}, {"x": 8.787441197789017, "y": 14.548232854120428, "id": "55"}, {"x": 39.06233710691516, "y": 15.727672555758932, "id": "80"}, {"x": 4.026824419733545, "y": 3.0844406819728762, "id": "6"}, {"x": 30.594901217026056, "y": 4.835774563696984, "id": "31"}, {"x": 8.543560906503053, "y": 19.178940275890653, "id": "56"}, {"x": 39.281600220846485, "y": 18.233938184782126, "id": "81"}, {"x": 6.647523641400246, "y": 3.54833515634134, "id": "7"}, {"x": 35.80501923571495, "y": 1.7272818624695252, "id": "32"}, {"x": 5.5060621218977115, "y": 15.829512709818836, "id": "57"}, {"x": 38.56174606689513, "y": 16.841154316298045, "id": "82"}, {"x": 1.959798097646126, "y": 6.6293456051547475, "id": "8"}, {"x": 35.38194895113462, "y": 2.0689240561970976, "id": "33"}, {"x": 9.615816438222133, "y": 12.336349717929265, "id": "58"}, {"x": 35.58787307618213, "y": 12.920413718807078, "id": "83"}, {"x": 5.732375700553778, "y": 5.595793567134528, "id": "9"}, {"x": 31.520154069164906, "y": 1.4636196873507445, "id": "34"}, {"x": 5.3335253359560255, "y": 15.856185264026093, "id": "59"}, {"x": 30.995786446574535, "y": 17.219079031758632, "id": "84"}, {"x": 5.271881551670453, "y": 4.751617846634738, "id": "10"}, {"x": 38.98971002440485, "y": 7.180726409997983, "id": "35"}, {"x": 1.7721416201535656, "y": 15.309655792785865, "id": "60"}, {"x": 34.02146396555179, "y": 18.264380664409977, "id": "85"}, {"x": 4.719084008903803, "y": 1.8678879213134125, "id": "11"}, {"x": 39.81441505276044, "y": 7.416382951131463, "id": "36"}, {"x": 6.572092281196006, "y": 17.134612343490147, "id": "61"}, {"x": 31.608079299316998, "y": 17.43033275756309, "id": "86"}, {"x": 5.842073557777633, "y": 7.434699519426742, "id": "12"}, {"x": 36.55751561121001, "y": 6.493557966804074, "id": "37"}, {"x": 8.642927405029413, "y": 12.355964182335821, "id": "62"}, {"x": 33.21433284487051, "y": 16.835755641323374, "id": "87"}, {"x": 1.5132401823937869, "y": 2.145229872369817, "id": "13"}, {"x": 37.33542101053258, "y": 8.38969827727293, "id": "38"}, {"x": 6.783028491832774, "y": 18.623127923104605, "id": "63"}, {"x": 34.06722955360464, "y": 17.731206281725818, "id": "88"}, {"x": 9.551092970555748, "y": 5.932735219381888, "id": "14"}, {"x": 36.41004756105636, "y": 9.263998859273219, "id": "39"}, {"x": 0.33085108975442257, "y": 11.147087366220845, "id": "64"}, {"x": 39.948303506185326, "y": 13.493708984029118, "id": "89"}, {"x": 4.397871551532745, "y": 8.322080826294815, "id": "15"}, {"x": 35.424356996117886, "y": 6.0298929030793875, "id": "40"}, {"x": 0.09984691796165901, "y": 17.64641058596318, "id": "65"}, {"x": 35.80896496639769, "y": 13.157435190652238, "id": "90"}, {"x": 9.02234738739104, "y": 8.731648509034919, "id": "16"}, {"x": 37.33128389430536, "y": 3.5442778456970037, "id": "41"}, {"x": 4.039845094691409, "y": 13.908034512233098, "id": "66"}, {"x": 33.19922325538235, "y": 18.177264597470607, "id": "91"}, {"x": 0.9987838182591391, "y": 3.3128938952810927, "id": "17"}, {"x": 39.026590417690436, "y": 0.05632614636508326, "id": "42"}, {"x": 3.188796445571054, "y": 18.598948958007746, "id": "67"}, {"x": 39.62078205972571, "y": 16.504976463016416, "id": "92"}, {"x": 4.4588504441764085, "y": 6.589402699024537, "id": "18"}, {"x": 38.71624166180014, "y": 1.858767468674184, "id": "43"}, {"x": 4.843755747490298, "y": 16.696362948275826, "id": "68"}, {"x": 37.54950303289034, "y": 15.956338202749192, "id": "93"}, {"x": 6.9026130647920505, "y": 2.182155351520768, "id": "19"}, {"x": 38.65306263476616, "y": 9.589306388907474, "id": "44"}, {"x": 3.3954275129615286, "y": 11.566414186685314, "id": "69"}, {"x": 38.83990857313865, "y": 19.653881876312305, "id": "94"}, {"x": 3.5285469002395766, "y": 6.665920334106193, "id": "20"}, {"x": 37.4746363771639, "y": 4.92513372739801, "id": "45"}, {"x": 8.405845863428837, "y": 20.53353854185108, "id": "70"}, {"x": 38.30409405006833, "y": 15.044837316519288, "id": "95"}, {"x": 0.6372521336889758, "y": 3.818274596383672, "id": "21"}, {"x": 34.62956080643719, "y": 3.1465196013539054, "id": "46"}, {"x": 5.340413421580951, "y": 20.83964812655406, "id": "71"}, {"x": 32.00815817610156, "y": 17.213055201755893, "id": "96"}, {"x": 5.464028878411269, "y": 8.658971372374268, "id": "22"}, {"x": 37.65375043608174, "y": 8.940671554390029, "id": "47"}, {"x": 5.285996649778503, "y": 20.472221415830052, "id": "72"}, {"x": 39.258233868885156, "y": 12.651305566381332, "id": "97"}, {"x": 0.04295724405129153, "y": 3.2043636951441745, "id": "23"}, {"x": 32.42022854276952, "y": 9.183349872071702, "id": "48"}, {"x": 9.519997627808356, "y": 14.37591447532028, "id": "73"}, {"x": 32.214650217251155, "y": 11.456700006463326, "id": "98"}, {"x": 0.8340484833500594, "y": 0.41612673516077336, "id": "24"}, {"x": 32.58043352326938, "y": 5.8091741765926965, "id": "49"}, {"x": 4.30737826893962, "y": 14.587860339510101, "id": "74"}, {"x": 35.72676060889013, "y": 20.99240936025072, "id": "99"}], "links": [{"source": "0", "target": "75"}, {"source": "0", "target": "1"}, {"source": "25", "target": "50"}, {"source": "25", "target": "26"}, {"source": "50", "target": "51"}, {"source": "75", "target": "76"}, {"source": "1", "target": "76"}, {"source": "1", "target": "2"}, {"source": "26", "target": "51"}, {"source": "26", "target": "27"}, {"source": "51", "target": "52"}, {"source": "76", "target": "77"}, {"source": "2", "target": "77"}, {"source": "2", "target": "3"}, {"source": "27", "target": "52"}, {"source": "27", "target": "28"}, {"source": "52", "target": "53"}, {"source": "77", "target": "78"}, {"source": "3", "target": "78"}, {"source": "3", "target": "4"}, {"source": "3", "target": "14"}, {"source": "28", "target": "53"}, {"source": "28", "target": "29"}, {"source": "53", "target": "54"}, {"source": "78", "target": "79"}, {"source": "4", "target": "79"}, {"source": "4", "target": "5"}, {"source": "29", "target": "54"}, {"source": "29", "target": "30"}, {"source": "54", "target": "55"}, {"source": "79", "target": "80"}, {"source": "5", "target": "80"}, {"source": "5", "target": "6"}, {"source": "30", "target": "55"}, {"source": "30", "target": "31"}, {"source": "30", "target": "49"}, {"source": "55", "target": "56"}, {"source": "80", "target": "81"}, {"source": "6", "target": "81"}, {"source": "6", "target": "7"}, {"source": "31", "target": "56"}, {"source": "31", "target": "32"}, {"source": "56", "target": "57"}, {"source": "81", "target": "82"}, {"source": "7", "target": "82"}, {"source": "7", "target": "8"}, {"source": "32", "target": "57"}, {"source": "32", "target": "33"}, {"source": "57", "target": "58"}, {"source": "82", "target": "83"}, {"source": "8", "target": "83"}, {"source": "8", "target": "9"}, {"source": "33", "target": "58"}, {"source": "33", "target": "34"}, {"source": "58", "target": "59"}, {"source": "58", "target": "69"}, {"source": "83", "target": "84"}, {"source": "9", "target": "84"}, {"source": "9", "target": "10"}, {"source": "34", "target": "59"}, {"source": "34", "target": "35"}, {"source": "59", "target": "60"}, {"source": "84", "target": "85"}, {"source": "10", "target": "85"}, {"source": "10", "target": "11"}, {"source": "35", "target": "60"}, {"source": "35", "target": "36"}, {"source": "60", "target": "61"}, {"source": "85", "target": "86"}, {"source": "11", "target": "86"}, {"source": "11", "target": "12"}, {"source": "36", "target": "61"}, {"source": "36", "target": "37"}, {"source": "61", "target": "62"}, {"source": "86", "target": "87"}, {"source": "12", "target": "87"}, {"source": "12", "target": "13"}, {"source": "37", "target": "62"}, {"source": "37", "target": "38"}, {"source": "62", "target": "63"}, {"source": "87", "target": "88"}, {"source": "13", "target": "88"}, {"source": "13", "target": "14"}, {"source": "38", "target": "63"}, {"source": "38", "target": "39"}, {"source": "63", "target": "64"}, {"source": "88", "target": "89"}, {"source": "14", "target": "89"}, {"source": "14", "target": "15"}, {"source": "39", "target": "64"}, {"source": "39", "target": "40"}, {"source": "64", "target": "65"}, {"source": "89", "target": "90"}, {"source": "89", "target": "97"}, {"source": "15", "target": "90"}, {"source": "15", "target": "16"}, {"source": "40", "target": "65"}, {"source": "40", "target": "41"}, {"source": "65", "target": "66"}, {"source": "90", "target": "91"}, {"source": "16", "target": "91"}, {"source": "16", "target": "17"}, {"source": "41", "target": "66"}, {"source": "41", "target": "42"}, {"source": "66", "target": "67"}, {"source": "91", "target": "92"}, {"source": "17", "target": "92"}, {"source": "17", "target": "18"}, {"source": "42", "target": "67"}, {"source": "42", "target": "43"}, {"source": "67", "target": "68"}, {"source": "92", "target": "93"}, {"source": "18", "target": "93"}, {"source": "18", "target": "19"}, {"source": "43", "target": "68"}, {"source": "43", "target": "44"}, {"source": "68", "target": "69"}, {"source": "93", "target": "94"}, {"source": "19", "target": "94"}, {"source": "19", "target": "20"}, {"source": "44", "target": "69"}, {"source": "44", "target": "45"}, {"source": "69", "target": "70"}, {"source": "94", "target": "95"}, {"source": "20", "target": "95"}, {"source": "20", "target": "21"}, {"source": "45", "target": "70"}, {"source": "45", "target": "46"}, {"source": "70", "target": "71"}, {"source": "95", "target": "96"}, {"source": "21", "target": "96"}, {"source": "21", "target": "22"}, {"source": "46", "target": "71"}, {"source": "46", "target": "47"}, {"source": "71", "target": "72"}, {"source": "96", "target": "97"}, {"source": "22", "target": "97"}, {"source": "22", "target": "23"}, {"source": "47", "target": "72"}, {"source": "47", "target": "48"}, {"source": "72", "target": "73"}, {"source": "97", "target": "98"}, {"source": "23", "target": "98"}, {"source": "23", "target": "24"}, {"source": "48", "target": "73"}, {"source": "48", "target": "49"}, {"source": "73", "target": "74"}, {"source": "98", "target": "99"}, {"source": "24", "target": "99"}, {"source": "49", "target": "74"}]}
--------------------------------------------------------------------------------
/js/fibonacci_heap.js:
--------------------------------------------------------------------------------
1 | // The MIT License (MIT)
2 |
3 | // Copyright (c) 2014 Daniel Imms, http://www.growingwiththeweb.com
4 |
5 | // Permission is hereby granted, free of charge, to any person obtaining a copy
6 | // of this software and associated documentation files (the "Software"), to deal
7 | // in the Software without restriction, including without limitation the rights
8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | // copies of the Software, and to permit persons to whom the Software is
10 | // furnished to do so, subject to the following conditions:
11 |
12 | // The above copyright notice and this permission notice shall be included in
13 | // all copies or substantial portions of the Software.
14 |
15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | // THE SOFTWARE.
22 |
23 | 'use strict';
24 |
25 | /**
26 | * Creates a Fibonacci heap.
27 | *
28 | * @constructor
29 | * @param {function} customCompare An optional custom node comparison
30 | * function.
31 | */
32 | var FibonacciHeap = function (customCompare) {
33 | this.minNode = undefined;
34 | this.nodeCount = 0;
35 |
36 | if (customCompare) {
37 | this.compare = customCompare;
38 | }
39 | };
40 |
41 | /**
42 | * Clears the heap's data, making it an empty heap.
43 | */
44 | FibonacciHeap.prototype.clear = function () {
45 | this.minNode = undefined;
46 | this.nodeCount = 0;
47 | };
48 |
49 | /**
50 | * Decreases a key of a node.
51 | *
52 | * @param {Node} node The node to decrease the key of.
53 | * @param {Object} newKey The new key to assign to the node.
54 | */
55 | FibonacciHeap.prototype.decreaseKey = function (node, newKey) {
56 | if (typeof node === 'undefined') {
57 | throw new Error('Cannot decrease key of non-existent node');
58 | }
59 | if (this.compare({key: newKey}, {key: node.key}) > 0) {
60 | throw new Error('New key is larger than old key');
61 | }
62 |
63 | node.key = newKey;
64 | var parent = node.parent;
65 | if (parent && this.compare(node, parent) < 0) {
66 | cut(node, parent, this.minNode, this.compare);
67 | cascadingCut(parent, this.minNode, this.compare);
68 | }
69 | if (this.compare(node, this.minNode) < 0) {
70 | this.minNode = node;
71 | }
72 | };
73 |
74 | /**
75 | * Deletes a node.
76 | *
77 | * @param {Node} node The node to delete.
78 | */
79 | FibonacciHeap.prototype.delete = function (node) {
80 | // This is a special implementation of decreaseKey that sets the argument to
81 | // the minimum value. This is necessary to make generic keys work, since there
82 | // is no MIN_VALUE constant for generic types.
83 | var parent = node.parent;
84 | if (parent) {
85 | cut(node, parent, this.minNode, this.compare);
86 | cascadingCut(parent, this.minNode, this.compare);
87 | }
88 | this.minNode = node;
89 |
90 | this.extractMinimum();
91 | };
92 |
93 | /**
94 | * Extracts and returns the minimum node from the heap.
95 | *
96 | * @return {Node} node The heap's minimum node or undefined if the heap is
97 | * empty.
98 | */
99 | FibonacciHeap.prototype.extractMinimum = function () {
100 | var extractedMin = this.minNode;
101 | if (extractedMin) {
102 | // Set parent to undefined for the minimum's children
103 | if (extractedMin.child) {
104 | var child = extractedMin.child;
105 | do {
106 | child.parent = undefined;
107 | child = child.next;
108 | } while (child !== extractedMin.child);
109 | }
110 |
111 | var nextInRootList;
112 | if (extractedMin.next !== extractedMin) {
113 | nextInRootList = extractedMin.next;
114 | }
115 | // Remove min from root list
116 | removeNodeFromList(extractedMin);
117 | this.nodeCount--;
118 |
119 | // Merge the children of the minimum node with the root list
120 | this.minNode = mergeLists(nextInRootList, extractedMin.child, this.compare);
121 | if (this.minNode) {
122 | this.minNode = consolidate(this.minNode, this.compare);
123 | }
124 | }
125 | return extractedMin;
126 | };
127 |
128 | /**
129 | * Returns the minimum node from the heap.
130 | *
131 | * @return {Node} node The heap's minimum node or undefined if the heap is
132 | * empty.
133 | */
134 | FibonacciHeap.prototype.findMinimum = function () {
135 | return this.minNode;
136 | };
137 |
138 | /**
139 | * Inserts a new key-value pair into the heap.
140 | *
141 | * @param {Object} key The key to insert.
142 | * @param {Object} value The value to insert.
143 | * @return {Node} node The inserted node.
144 | */
145 | FibonacciHeap.prototype.insert = function (key, value) {
146 | var node = new Node(key, value);
147 | this.minNode = mergeLists(this.minNode, node, this.compare);
148 | this.nodeCount++;
149 | return node;
150 | };
151 |
152 | /**
153 | * @return {boolean} Whether the heap is empty.
154 | */
155 | FibonacciHeap.prototype.isEmpty = function () {
156 | return this.minNode === undefined;
157 | };
158 |
159 | /**
160 | * @return {number} The size of the heap.
161 | */
162 | FibonacciHeap.prototype.size = function () {
163 | if (this.isEmpty()) {
164 | return 0;
165 | }
166 | return getNodeListSize(this.minNode);
167 | };
168 |
169 | /**
170 | * Joins another heap to this heap.
171 | *
172 | * @param {FibonacciHeap} other The other heap.
173 | */
174 | FibonacciHeap.prototype.union = function (other) {
175 | this.minNode = mergeLists(this.minNode, other.minNode, this.compare);
176 | this.nodeCount += other.nodeCount;
177 | };
178 |
179 | /**
180 | * Compares two nodes with each other.
181 | *
182 | * @private
183 | * @param {Object} a The first key to compare.
184 | * @param {Object} b The second key to compare.
185 | * @return {number} -1, 0 or 1 if a < b, a == b or a > b respectively.
186 | */
187 | FibonacciHeap.prototype.compare = function (a, b) {
188 | if (a.key > b.key) {
189 | return 1;
190 | }
191 | if (a.key < b.key) {
192 | return -1;
193 | }
194 | return 0;
195 | };
196 |
197 | /**
198 | * Creates an Iterator used to simplify the consolidate() method. It works by
199 | * making a shallow copy of the nodes in the root list and iterating over the
200 | * shallow copy instead of the source as the source will be modified.
201 | *
202 | * @private
203 | * @param {Node} start A node from the root list.
204 | */
205 | var NodeListIterator = function (start) {
206 | this.index = -1;
207 | this.items = [];
208 | var current = start;
209 | do {
210 | this.items.push(current);
211 | current = current.next;
212 | } while (start !== current);
213 | };
214 |
215 | /**
216 | * @return {boolean} Whether there is a next node in the iterator.
217 | */
218 | NodeListIterator.prototype.hasNext = function () {
219 | return this.index < this.items.length - 1;
220 | };
221 |
222 | /**
223 | * @return {Node} The next node.
224 | */
225 | NodeListIterator.prototype.next = function () {
226 | return this.items[++this.index];
227 | };
228 |
229 | /**
230 | * Cut the link between a node and its parent, moving the node to the root list.
231 | *
232 | * @private
233 | * @param {Node} node The node being cut.
234 | * @param {Node} parent The parent of the node being cut.
235 | * @param {Node} minNode The minimum node in the root list.
236 | * @param {function} compare The node comparison function to use.
237 | * @return {Node} The heap's new minimum node.
238 | */
239 | function cut(node, parent, minNode, compare) {
240 | node.parent = undefined;
241 | parent.degree--;
242 | if (node.next === node) {
243 | parent.child = undefined;
244 | } else {
245 | parent.child = node.next;
246 | }
247 | removeNodeFromList(node);
248 | minNode = mergeLists(minNode, node, compare);
249 | node.isMarked = false;
250 | return minNode;
251 | }
252 |
253 | /**
254 | * Perform a cascading cut on a node; mark the node if it is not marked,
255 | * otherwise cut the node and perform a cascading cut on its parent.
256 | *
257 | * @private
258 | * @param {Node} node The node being considered to be cut.
259 | * @param {Node} minNode The minimum node in the root list.
260 | * @param {function} compare The node comparison function to use.
261 | * @return {Node} The heap's new minimum node.
262 | */
263 | function cascadingCut(node, minNode, compare) {
264 | var parent = node.parent;
265 | if (parent) {
266 | if (node.isMarked) {
267 | minNode = cut(node, parent, minNode, compare);
268 | minNode = cascadingCut(parent, minNode, compare);
269 | } else {
270 | node.isMarked = true;
271 | }
272 | }
273 | return minNode;
274 | }
275 |
276 | /**
277 | * Merge all trees of the same order together until there are no two trees of
278 | * the same order.
279 | *
280 | * @private
281 | * @param {Node} minNode The current minimum node.
282 | * @param {function} compare The node comparison function to use.
283 | * @return {Node} The new minimum node.
284 | */
285 | function consolidate(minNode, compare) {
286 | var aux = [];
287 | var it = new NodeListIterator(minNode);
288 | while (it.hasNext()) {
289 | var current = it.next();
290 |
291 | // If there exists another node with the same degree, merge them
292 | while (aux[current.degree]) {
293 | if (compare(current, aux[current.degree]) > 0) {
294 | var temp = current;
295 | current = aux[current.degree];
296 | aux[current.degree] = temp;
297 | }
298 | linkHeaps(aux[current.degree], current, compare);
299 | aux[current.degree] = undefined;
300 | current.degree++;
301 | }
302 |
303 | aux[current.degree] = current;
304 | }
305 |
306 | minNode = undefined;
307 | for (var i = 0; i < aux.length; i++) {
308 | if (aux[i]) {
309 | // Remove siblings before merging
310 | aux[i].next = aux[i];
311 | aux[i].prev = aux[i];
312 | minNode = mergeLists(minNode, aux[i], compare);
313 | }
314 | }
315 | return minNode;
316 | }
317 |
318 | /**
319 | * Removes a node from a node list.
320 | *
321 | * @private
322 | * @param {Node} node The node to remove.
323 | */
324 | function removeNodeFromList(node) {
325 | var prev = node.prev;
326 | var next = node.next;
327 | prev.next = next;
328 | next.prev = prev;
329 | node.next = node;
330 | node.prev = node;
331 | }
332 |
333 | /**
334 | * Links two heaps of the same order together.
335 | *
336 | * @private
337 | * @param {Node} max The heap with the larger root.
338 | * @param {Node} min The heap with the smaller root.
339 | * @param {function} compare The node comparison function to use.
340 | */
341 | function linkHeaps(max, min, compare) {
342 | removeNodeFromList(max);
343 | min.child = mergeLists(max, min.child, compare);
344 | max.parent = min;
345 | max.isMarked = false;
346 | }
347 |
348 | /**
349 | * Merge two lists of nodes together.
350 | *
351 | * @private
352 | * @param {Node} a The first list to merge.
353 | * @param {Node} b The second list to merge.
354 | * @param {function} compare The node comparison function to use.
355 | * @return {Node} The new minimum node from the two lists.
356 | */
357 | function mergeLists(a, b, compare) {
358 | if (!a && !b) {
359 | return undefined;
360 | }
361 | if (!a) {
362 | return b;
363 | }
364 | if (!b) {
365 | return a;
366 | }
367 |
368 | var temp = a.next;
369 | a.next = b.next;
370 | a.next.prev = a;
371 | b.next = temp;
372 | b.next.prev = b;
373 |
374 | return compare(a, b) < 0 ? a : b;
375 | }
376 |
377 | /**
378 | * Gets the size of a node list.
379 | *
380 | * @private
381 | * @param {Node} node A node within the node list.
382 | * @return {number} The size of the node list.
383 | */
384 | function getNodeListSize(node) {
385 | var count = 0;
386 | var current = node;
387 |
388 | do {
389 | count++;
390 | if (current.child) {
391 | count += getNodeListSize(current.child);
392 | }
393 | current = current.next;
394 | } while (current !== node);
395 |
396 | return count;
397 | }
398 |
399 | /**
400 | * Creates a FibonacciHeap node.
401 | *
402 | * @constructor
403 | * @private
404 | */
405 | function Node(key, value) {
406 | this.key = key;
407 | this.value = value;
408 | this.prev = this;
409 | this.next = this;
410 | this.degree = 0;
411 |
412 | this.parent = undefined;
413 | this.child = undefined;
414 | this.isMarked = undefined;
415 | }
416 |
--------------------------------------------------------------------------------
/js/ebp.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Author: Markus Wallinger
3 | * email: mwallinger@tuwien.ac.at
4 | *
5 | * Implementation of the Edge-Path-Bundling algorithm from our publication: Edge-Path Bundling: A Less Ambiguous Edge Bundling Approach (https://arxiv.org/abs/2108.05467)
6 | *
7 | * The following class encapsulates all necessary code to bundle edges and draw on a web canvas.
8 | */
9 | class EdgePathBundling {
10 | numApproximationPoints = 50;
11 | weightFactor = 2;
12 | maxDistortion = 2;
13 | bundleStrength = 1;
14 |
15 | /**
16 | * The constructor of the class performs the necessary pre-processing to create a bundling.
17 | *
18 | * @param {[Objects]} nodes Nodes of the graph as a list of objects
19 | * @param {[Objects]} edges Edges of the graph as a list of objects
20 | * @param {int} width Width of the canvas (necessary for scaling)
21 | * @param {int} height Height of the canvas (necessary for scaling)
22 | */
23 | constructor(nodes, edges, width, height) {
24 | var t0 = performance.now()
25 | this.nodes = nodes;
26 | this.edges = edges;
27 |
28 | var n = nodes.length;
29 |
30 | this.n = n;
31 | this.nodeDict = {}
32 | this.adjList = new Map();
33 |
34 | var minX = 100000, maxX = -100000, minY = 100000, maxY = -100000;
35 | this.nodes.forEach(node => {
36 | node.y = -node.y; //invert y-coordinate
37 | node.x = +node.x;
38 |
39 | minX = minX < node.x ? minX : node.x;
40 | minY = minY < node.y ? minY : node.y;
41 | maxX = maxX > node.x ? maxX : node.x;
42 | maxY = maxY > node.y ? maxY : node.y;
43 |
44 | node.id = parseInt(node.id)
45 |
46 | this.adjList.set(node.id, []);
47 | this.nodeDict[node.id] = node;
48 | });
49 |
50 | this.minX = minX;
51 | this.minY = minY;
52 | this.maxX = maxX;
53 | this.maxY = maxY;
54 |
55 | //scale the graph to fit the canvas.
56 | this.scale(width, height)
57 |
58 | var t1 = performance.now()
59 | console.log("Preprocessing Nodes took " + (t1 - t0) + " milliseconds.")
60 | t0 = performance.now()
61 |
62 | //create helper matrices to efficiently access edge and weight and adjacency information
63 | this.adj = math.matrix(math.ones([n,n]))
64 | this.adj = math.multiply(this.adj, -1)
65 | this.adj = this.adj._data
66 |
67 | this.weight = math.matrix(math.ones([n,n]))
68 | this.weight = math.multiply(this.weight, -1)
69 | this.weight = this.weight._data
70 |
71 |
72 | var t1 = performance.now()
73 | console.log("Preprocessing Misc took " + (t1 - t0) + " milliseconds.")
74 | t0 = performance.now()
75 |
76 | this.edges.forEach((d, index) => {
77 | d.target = parseInt(d.target);
78 | d.source = parseInt(d.source);
79 |
80 | d.id = index;
81 |
82 | var src = this.nodeDict[d.source];
83 | var tgt = this.nodeDict[d.target];
84 |
85 | this.adjList.get(d.source).push(d.target);
86 | this.adjList.get(d.target).push(d.source);
87 |
88 | d['controlpointsStraight'] = this.approximateStraight([src, tgt], this.numApproximationPoints);
89 | d['controlpoints'] = this.approximateStraight([src, tgt], this.numApproximationPoints);
90 |
91 | this.adj[d.target][d.source] = index
92 | this.adj[d.source][d.target] = index
93 |
94 | var l = dist(src, tgt)
95 |
96 | d['color'] = assignColor(src, tgt);
97 |
98 | d['dist'] = l;
99 | d['weight'] = Math.pow(l, this.weightFactor);
100 |
101 | this.weight[d.target][d.source] = d['weight']
102 | this.weight[d.source][d.target] = d['weight']
103 | })
104 |
105 | this.locked = new Array(this.edges.length).fill(false);
106 | this.bundled = new Array(this.edges.length).fill(false);
107 |
108 | var t1 = performance.now()
109 | console.log("Preprocessing Edges took " + (t1 - t0) + " milliseconds.")
110 |
111 | var t0 = performance.now();
112 |
113 | this.edges.sort(function(a, b) {
114 | return b['dist'] - a['dist'];
115 | });
116 |
117 | var t1 = performance.now()
118 | console.log("Sorting Edges took " + (t1 - t0) + " milliseconds.")
119 | }
120 |
121 |
122 | bundle() {
123 | var t0 = performance.now()
124 |
125 | /// TODO change back
126 | this.locked = new Array(this.edges.length).fill(false);
127 | this.bundled = new Array(this.edges.length).fill(false);
128 |
129 | this.neighbours = new Array(this.nodes.length)
130 | this.nodes.forEach(element => {
131 | this.neighbours[element.id] = new Set(this.adjList.get(element.id));
132 | });
133 |
134 | this.edges.forEach(element => {
135 | //console.log(element);
136 | if (this.locked[element.id]){
137 | element.controlpoints = element.controlpointsStraight;
138 | return;
139 | }
140 |
141 | var src = element.source;
142 | var tgt = element.target;
143 |
144 | this.neighbours[tgt].delete(src);
145 | this.neighbours[src].delete(tgt);
146 |
147 | var path = this.dijkstra(src, tgt)
148 | //console.log(element, path)
149 | if (path.length > 2) {
150 | var pLen = 0;
151 | var last = this.nodeDict[path[0]];
152 |
153 | for(var i = 1; i < path.length; i++) {
154 | var next = this.nodeDict[path[i]];
155 |
156 | pLen += dist(last, next)
157 | last = next
158 | }
159 |
160 | //console.log(element.dist, pLen);
161 |
162 | if (pLen >= this.maxDistortion * element.dist) {
163 | element['controlpoints'] = [this.nodeDict[src], this.nodeDict[tgt]]
164 |
165 | this.neighbours[tgt].add(src);
166 | this.neighbours[src].add(tgt);
167 | }
168 | else
169 | {
170 | var last = this.nodeDict[path.pop()];
171 | var cp = [last]
172 | while(path.length > 0){
173 | var next = this.nodeDict[path.pop()];
174 |
175 | var id = this.adj[last.id][next.id]
176 | this.locked[id] = true;
177 |
178 | cp.push(next)
179 | last = next
180 | }
181 |
182 | this.bundled[element.id] = true;
183 | element.cp = cp;
184 | element['controlpoints'] = this.approximateBezier(cp, this.numApproximationPoints);
185 | }
186 | } else {
187 | element['controlpoints'] = [this.nodeDict[src], this.nodeDict[tgt]]
188 |
189 | this.neighbours[tgt].add(src);
190 | this.neighbours[src].add(tgt);
191 | }
192 | });
193 |
194 |
195 | var t1 = performance.now()
196 | console.log("Bundling took " + (t1 - t0) + " milliseconds.")
197 | }
198 |
199 | /**
200 | * Dijkstras single-source shortest path with priority heap as datastructure to store the distances.
201 | *
202 | * @param {Object} src
203 | * @param {Object} tgt
204 | * @returns [objects] Returns a list of IDs representing the nodes in the shortest path.
205 | */
206 | dijkstra(src, tgt) {
207 | var cost, pred;
208 | (cost = []).length = this.n;
209 | cost.fill(+Infinity);
210 | cost[src] = 0;
211 |
212 | (pred = []).length = this.n;
213 | pred.fill(-1);
214 |
215 | var idNodeDict = {}
216 | var queue = new FibonacciHeap();
217 | var node = queue.insert(0, src);
218 | idNodeDict[src] = node;
219 |
220 | while (!queue.isEmpty()) {
221 | var best = queue.extractMinimum();
222 |
223 | best = best.value;
224 | //console.log(best)
225 | if(best == tgt)
226 | break;
227 |
228 | this.neighbours[best].forEach(next => {
229 | var c = cost[best] + this.weight[best][next];
230 |
231 | if (cost[next] > c) {
232 | if(pred[next] < 0) {
233 | var node = queue.insert(c, next);
234 | idNodeDict[next] = node;
235 | } else {
236 | var node = idNodeDict[next];
237 | queue.decreaseKey(node, c);
238 | }
239 |
240 | pred[next] = best;
241 | cost[next] = c;
242 | }
243 | });
244 | }
245 |
246 | //return a list of nodes representing the shortest path
247 | var cp = [tgt]
248 | var p = tgt
249 | while(true) {
250 | p = pred[p];
251 | cp.push(p);
252 |
253 | if (p === src)
254 | return cp
255 | if (p <= 0)
256 | return []
257 | }
258 | }
259 |
260 | /**
261 | * Scale the vertices of the graph to be in the range ([0,maxX],[0,maxY])
262 | *
263 | * @param {Int} maxX
264 | * @param {Int} maxY
265 | */
266 | scale(maxX, maxY) {
267 | var width = this.maxX - this.minX;
268 | var height = this.maxY - this.minY;
269 |
270 | var marginX = maxX * 0.05;
271 | var marginY = maxY * 0.05;
272 |
273 | maxX -= 2 * marginX;
274 | maxY -= 2 * marginY;
275 |
276 | this.nodes.forEach(node => {
277 | node.x = marginX + ((node.x - this.minX) / width) * maxX
278 | node.y = marginY + ((node.y - this.minY) / height) * maxY;
279 | });
280 |
281 | }
282 |
283 | /**
284 | * Calculate more control points for the Bezier curve by subdividing each edge of the path into two sub edges.
285 | */
286 | subdivision() {
287 | this.edges.forEach(edge => {
288 | if(this.bundled[edge.id]) {
289 | edge.controlpoints = this.subdivide(edge.cp, this.bundleStrength);
290 | edge.controlpoints = this.approximateBezier(edge.controlpoints, this.numApproximationPoints)
291 | }
292 | });
293 | }
294 |
295 |
296 | /**
297 | * Given a list of points this function returns a list of points where a new point is inserted between every consecutive pair of points. The parameter s states how often an edge is subdivided.
298 | *
299 | * @param {[object]} points
300 | * @param {int} s
301 | * @returns [objects]
302 | */
303 | subdivide(points, s) {
304 | for(var i = 1; i < s; i++) {
305 | var newCP = []
306 | newCP.push(points[0]);
307 |
308 | for(var j = 0; j < points.length - 1; j++) {
309 | var p1 = points[j]
310 | var p2 = points[j + 1]
311 |
312 | var p3 = {};
313 | p3.x = (p1.x + p2.x) / 2;
314 | p3.y = (p1.y + p2.y) / 2;
315 |
316 | newCP.push(p3);
317 | newCP.push(p2);
318 | }
319 |
320 | points = newCP;
321 | }
322 |
323 | return points;
324 | }
325 |
326 | /**
327 | * Animate the bundling by adding
328 | *
329 | * @param {Renderer} renderer
330 | * @param {int} steps
331 | * @param {float} frameT
332 | */
333 | animate(renderer, steps, frameT) {
334 | renderer.clear()
335 |
336 | this.edges.forEach(edge => {
337 | if (!this.bundled[edge.id])
338 | return;
339 |
340 | var delta = []
341 | var anim = []
342 |
343 | for(var i = 0; i < edge.controlpoints.length; i++) {
344 | var p = {}
345 |
346 | p.x = (edge.controlpointsStraight[i].x - edge.controlpoints[i].x) / steps;
347 | p.y = (edge.controlpointsStraight[i].y - edge.controlpoints[i].y) / steps;
348 |
349 | delta.push(p)
350 |
351 | var pp = {}
352 | pp.x = edge.controlpointsStraight[i].x
353 | pp.y = edge.controlpointsStraight[i].y
354 | anim.push(pp)
355 | }
356 |
357 | edge.delta = delta;
358 | edge.anim = anim;
359 | });
360 |
361 | var worker = new Worker('js/animationWorker.js')
362 |
363 | this.doFrame(renderer, this, steps, frameT, worker);
364 | }
365 |
366 | doFrame(renderer, tthis, remaining, frameT, worker) {
367 | var t0 = performance.now()
368 | worker.postMessage([tthis.edges, tthis.bundled, t0, remaining]);
369 |
370 |
371 |
372 | worker.addEventListener('message', function(e) {
373 | var edges = e.data[0];
374 | var t0 = e.data[1];
375 | var steps = e.data[2];
376 |
377 | renderer.clear();
378 |
379 | edges.forEach(edge => {
380 | if (tthis.bundled[edge.id]) {
381 | renderer.drawLine(edge.anim, edge.color);
382 | //renderer.drawLine(edge.anim, '#fe8a71');
383 | }
384 | else {
385 | renderer.drawLine(edge.controlpoints, edge.color);
386 | }
387 | });
388 |
389 | tthis.nodes.forEach(node => {
390 | renderer.drawPoint(node);
391 | });
392 |
393 | var t1 = performance.now();
394 | var tPassed = frameT - (t1 - t0);
395 |
396 | renderer.draw();
397 | //console.log(tPassed, steps)
398 |
399 | if (steps > 0) {
400 | if (tPassed > 0)
401 | setTimeout(function() {
402 | worker.postMessage([null, null, t1, steps-1]);
403 | }, tPassed);
404 | else
405 | //tthis.doFrame(renderer, tthis, steps - 1, frameT, worker);
406 | worker.postMessage([null, null, t1, steps-1]);
407 | }
408 | });
409 |
410 | // tthis.edges.forEach(edge => {
411 | // if (tthis.bundled[edge.id]) {
412 | // for(var i = 0; i < edge.controlpoints.length; i++) {
413 | // edge.anim[i].x -= edge.delta[i].x;
414 | // edge.anim[i].y -= edge.delta[i].y;
415 | // }
416 | // //renderer.drawLine(edge.anim, edge.color);
417 | // renderer.drawLine(edge.anim, '#fe8a71');
418 | // }
419 | // else {
420 | // //renderer.drawLine(edge.controlpoints, edge.color);
421 | // if(tthis.locked[edge.id])
422 | // renderer.drawLine(edge.controlpoints, '#3da4ab');
423 | // else
424 | // renderer.drawLine(edge.controlpoints, '#000000');
425 | // }
426 | // });
427 |
428 | }
429 |
430 |
431 |
432 | drawGraphBundled(renderer) {
433 | var t0 = performance.now()
434 |
435 | renderer.clear();
436 |
437 | this.edges.forEach(edge => {
438 | renderer.drawLine(edge.controlpoints, edge.color);
439 | });
440 |
441 | this.nodes.forEach(node => {
442 | renderer.drawPoint(node);
443 | });
444 |
445 | renderer.draw();
446 | var t1 = performance.now()
447 | console.log("Rendering took " + (t1 - t0) + " milliseconds.")
448 | }
449 |
450 | drawGraphStraight(renderer) {
451 | var t0 = performance.now()
452 |
453 | renderer.clear();
454 |
455 | this.edges.forEach(edge => {
456 | //renderer.drawLine(edge.controlpointsStraight, '#000000')
457 | renderer.drawLine(edge.controlpointsStraight, edge.color)
458 | });
459 |
460 | this.nodes.forEach(node => {
461 | renderer.drawPoint(node);
462 | });
463 |
464 | var t1 = performance.now()
465 |
466 | renderer.draw();
467 | console.log("Rendering took " + (t1 - t0) + " milliseconds.")
468 |
469 | }
470 |
471 |
472 | approximateStraight(points, n) {
473 | var p1 = points[0];
474 | var p2 = points[1];
475 |
476 | var x = (p2.x - p1.x) / (n);
477 | var y = (p2.y - p1.y) / (n);
478 |
479 | points = [];
480 |
481 | for(var i = 0; i <= n; i++) {
482 | var p = {}
483 | p.x = (p1.x + i * x);
484 | p.y = (p1.y + i * y);
485 | points.push(p);
486 | }
487 |
488 | return points;
489 | }
490 |
491 | approximateBezier(points, n) {
492 |
493 | var bezier = []
494 | var i = 0;
495 | points.forEach(point => {
496 | point.binom = binomial(points.length - 1, i);
497 |
498 | i += 1;
499 | });
500 |
501 | for (var t = 0; t <= 1; t += 1/(n)) {
502 | var p = {x:0, y:0}
503 |
504 | var i = 0;
505 |
506 |
507 | points.forEach(point => {
508 | var tpi = Math.pow((1 - t), points.length - 1 - i);
509 | var coeff = tpi * Math.pow(t, i);
510 |
511 | p.x += point.binom * coeff * point.x;
512 | p.y += point.binom * coeff * point.y;
513 |
514 | i += 1;
515 | });
516 |
517 | bezier.push(p);
518 | }
519 |
520 | bezier.push({x: points[points.length - 1].x, y: points[points.length - 1].y})
521 | return bezier;
522 | }
523 |
524 |
525 |
526 | /**
527 | *
528 | * Setter for the bundling parameters
529 | *
530 | *
531 | */
532 |
533 |
534 | /*
535 | Set the weight factor for each edge.
536 | */
537 | setWeight(factor) {
538 | this.weightFactor = factor;
539 |
540 | this.edges.forEach(edge => {
541 | edge.weight = Math.pow(edge.dist, factor);
542 |
543 | this.weight[edge.target][edge.source] = edge['weight']
544 | this.weight[edge.source][edge.target] = edge['weight']
545 | });
546 | }
547 |
548 | /*
549 | Set the weight factor for each edge.
550 | */
551 | setDistortion(value) {
552 | this.maxDistortion = value;
553 | }
554 |
555 | /*
556 | Set the bundling strength for each edge
557 | */
558 |
559 | setBundlingStrength(strength) {
560 | this.bundleStrength = strength;
561 | }
562 | }
563 |
564 | /**
565 | * Class to interface the HTML canvas element
566 | *
567 | */
568 | class Render {
569 | constructor(selector) {
570 | this.canvas = document.querySelector(selector);
571 | this.drawcontext = this.canvas.getContext('2d');
572 |
573 | this.offscreen = document.createElement('canvas');
574 | this.offscreen.width = this.canvas.width;
575 | this.offscreen.height = this.canvas.height;
576 | this.context = this.offscreen.getContext("2d");
577 |
578 | }
579 |
580 | clear() {
581 | this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
582 | }
583 |
584 | draw() {
585 | this.drawcontext.putImageData(this.context.getImageData(0,0, this.canvas.width, this.canvas.height), 0, 0);
586 | }
587 |
588 | drawPoint(node) {
589 | this.context.beginPath();
590 | this.context.fillStyle = '#283347';
591 | this.context.arc(node.x, node.y, 1, 0, Math.PI * 2, true);
592 | this.context.strokeStyle = '#283347';
593 | this.context.stroke();
594 | this.context.fill();
595 | }
596 |
597 |
598 | drawLine(points, color) {
599 | this.context.beginPath();
600 | this.context.moveTo(points[0].x, points[0].y)
601 |
602 | for(var i = 0; i < points.length; i++) {
603 | this.context.lineTo(points[i].x, points[i].y);
604 | }
605 | this.context.strokeStyle = color + '55';
606 | this.context.lineWidth = 2;
607 | this.context.stroke();
608 | }
609 |
610 | drawBezier(points) {
611 | var p000 = points[0]
612 | var p112 = {};
613 | var p122 = {};
614 | p112.x = 2/3 * points[0].x + 1/3 * points[1].x
615 | p112.y = 2/3 * points[0].y + 1/3 * points[1].y
616 | p122.x = 1/3 * points[0].x + 1/3 * points[1].x
617 | p122.y = 1/3 * points[0].y + 1/3 * points[1].y
618 |
619 | this.context.beginPath();
620 | this.context.moveTo(p000.x, p000.y);
621 | this.context.bezierCurveTo(p112.x, p112.y, p122.x, p122.y, points[1].x, points[1].y);
622 | this.context.stroke();
623 |
624 | var p223 = {};
625 | var p233 = {};
626 | var p222 = {}
627 |
628 | for(var i = 1; i < points.length - 1; i++) {
629 | var p123 = points[i]
630 | var p234 = points[i+1]
631 | p223.x = 2/3*p123.x + 1/3*p234.x
632 | p223.y = 2/3*p123.y + 1/3*p234.y
633 | p233.x = 1/3*p123.x + 2/3*p234.x
634 | p233.y = 1/3*p123.y + 2/3*p234.y
635 | p222.x = .5*p122.x + .5*p223.x
636 | p222.y = .5*p122.y + .5*p223.y
637 |
638 | this.context.beginPath();
639 | this.context.moveTo(p123.x, p123.y);
640 | this.context.bezierCurveTo(p223.x, p223.y, p233.x, p233.y, p234.x, p234.y);
641 | this.context.stroke();
642 |
643 | p122 = p233
644 | }
645 | }
646 | }
647 |
648 | /**
649 | * Helper to return the distance between two vertices.
650 | *
651 | * @param {Vertex} src
652 | * @param {Vertex} tgt
653 | * @returns distance
654 | */
655 | function dist(src, tgt) {
656 | return math.sqrt(math.pow(src.x-tgt.x, 2) + math.pow(src.y-tgt.y, 2))
657 | }
658 |
659 | /**
660 | * Helper function to assign a color depending on the angle of the edge
661 | *
662 | * @param {Point} p1
663 | * @param {Point} p2
664 | * @returns hex color
665 | */
666 | function assignColor(p1, p2) {
667 | var dX = p2.x - p1.x;
668 | var dY = p2.y - p1.y;
669 |
670 | var angle = Math.atan2(-dY, dX);
671 | var degrees = 180 * angle / Math.PI;
672 |
673 | if(degrees < 0)
674 | degrees = (360 + Math.round(degrees)) - 180;
675 |
676 | if (degrees < 11.5)
677 | return "#733957"
678 | else if (degrees < 33)
679 | return "#8e4830"
680 | else if (degrees < 55.5)
681 | return "#b58837"
682 | else if (degrees < 78)
683 | return "#d6d389"
684 | else if (degrees < 100.5)
685 | return "#abdbca"
686 | else if (degrees < 123)
687 | return "#5ea6c8"
688 | else if (degrees < 155.5)
689 | return "#55609a"
690 | else if (degrees < 178)
691 | return "#723959"
692 | else
693 | return "#733957"
694 | }
695 |
696 |
697 | function binomial(n, k) {
698 | var coeff = 1;
699 | for (var x = n-k+1; x <= n; x++) coeff *= x;
700 | for (x = 1; x <= k; x++) coeff /= x;
701 | return coeff;
702 | }
703 |
704 |
--------------------------------------------------------------------------------
/data/noise.json:
--------------------------------------------------------------------------------
1 | {"directed": false, "multigraph": false, "graph": {"node_default": {}, "edge_default": {}}, "nodes": [{"x": 611.235659907994, "y": 557.6246293685188, "id": "0"}, {"x": 91.02601522859244, "y": 511.68207249691466, "id": "1"}, {"x": 24.588170989107148, "y": 264.1077940120494, "id": "2"}, {"x": 497.5569089120646, "y": 717.2790891890513, "id": "3"}, {"x": 274.472474220382, "y": 788.1150295988289, "id": "4"}, {"x": 415.9687519762224, "y": 430.1672771030356, "id": "5"}, {"x": 141.37704264450778, "y": 431.23547596013856, "id": "6"}, {"x": 514.2123919966915, "y": 427.5791202455864, "id": "7"}, {"x": 346.70688034685116, "y": 502.13520291838563, "id": "8"}, {"x": 223.03407007098176, "y": 649.7493084792221, "id": "9"}, {"x": 671.3288002510116, "y": 910.4850588281951, "id": "10"}, {"x": 123.69940302507598, "y": 798.5883363733907, "id": "11"}, {"x": 814.5379851945856, "y": 502.998346681896, "id": "12"}, {"x": 872.9699419272675, "y": 767.6958846317267, "id": "13"}, {"x": 540.0077216264475, "y": 642.9155123705243, "id": "14"}, {"x": 387.47554551792575, "y": 813.1998869478036, "id": "15"}, {"x": 660.6486793129123, "y": 813.0270342278876, "id": "16"}, {"x": 593.4623767252319, "y": 941.923118051799, "id": "17"}, {"x": 524.1477866191876, "y": 170.75478382174202, "id": "18"}, {"x": 978.1908094549389, "y": 516.1893600993695, "id": "19"}, {"x": 538.5448958412092, "y": 161.11286439775319, "id": "20"}, {"x": 97.24622900173196, "y": 855.7109843636116, "id": "21"}, {"x": 156.59420199549666, "y": 597.0538288993948, "id": "22"}, {"x": 964.2319721062571, "y": 126.01088266096849, "id": "23"}, {"x": 448.5759508167457, "y": 895.6698532895131, "id": "24"}, {"x": 599.9278621045472, "y": 8.393739883329921, "id": "25"}, {"x": 740.3640711008238, "y": 636.3068468178743, "id": "26"}, {"x": 890.9035503948949, "y": 24.03582248732439, "id": "27"}, {"x": 591.0929306774166, "y": 395.125244078764, "id": "28"}, {"x": 691.6626723915463, "y": 324.36353812348216, "id": "29"}, {"x": 385.62835429079877, "y": 518.134136157574, "id": "30"}, {"x": 429.9163738350379, "y": 113.54981203580338, "id": "31"}, {"x": 154.3402719984155, "y": 511.5074235327922, "id": "32"}, {"x": 315.06602490379754, "y": 754.4312805595505, "id": "33"}, {"x": 348.5080034804615, "y": 356.2744714712345, "id": "34"}, {"x": 674.5716890394482, "y": 764.7310313284399, "id": "35"}, {"x": 593.8953978941872, "y": 937.4384503351971, "id": "36"}, {"x": 290.41745606329397, "y": 585.3014861155465, "id": "37"}, {"x": 589.9058455295905, "y": 543.3382720165697, "id": "38"}, {"x": 277.1635522029059, "y": 607.6539917655762, "id": "39"}, {"x": 500.594210694339, "y": 243.40628752728188, "id": "40"}, {"x": 134.179027971984, "y": 19.72189999469487, "id": "41"}, {"x": 685.0350161224843, "y": 755.5306577890346, "id": "42"}, {"x": 966.3530318211994, "y": 668.7277019486746, "id": "43"}, {"x": 472.734497462625, "y": 264.283541139741, "id": "44"}, {"x": 893.0738271301769, "y": 648.2383689877179, "id": "45"}, {"x": 104.36750700561726, "y": 300.4383543686102, "id": "46"}, {"x": 88.36198163258646, "y": 150.30029703291936, "id": "47"}, {"x": 728.4711455159255, "y": 426.27012041009584, "id": "48"}, {"x": 340.47336808697713, "y": 391.14879325622155, "id": "49"}, {"x": 456.75639555209904, "y": 538.8647376566304, "id": "50"}, {"x": 354.86382028407314, "y": 671.3960649844447, "id": "51"}, {"x": 950.9242501915701, "y": 250.3289473360578, "id": "52"}, {"x": 804.606856300779, "y": 203.0850553651987, "id": "53"}, {"x": 983.3456814042898, "y": 603.5135007629176, "id": "54"}, {"x": 992.0997779284193, "y": 128.78882547302538, "id": "55"}, {"x": 595.3240535347082, "y": 895.8731067323016, "id": "56"}, {"x": 441.1084162241613, "y": 63.526184809314934, "id": "57"}, {"x": 233.0557678016839, "y": 227.4596021658529, "id": "58"}, {"x": 697.8240502617098, "y": 412.62675999717555, "id": "59"}, {"x": 12.192020858976637, "y": 474.4476609497963, "id": "60"}, {"x": 839.9608253294065, "y": 461.7834776901829, "id": "61"}, {"x": 838.1560665712528, "y": 22.936339074489, "id": "62"}, {"x": 744.0527306994378, "y": 911.0881462507997, "id": "63"}, {"x": 591.5357808034131, "y": 295.6081184101176, "id": "64"}, {"x": 455.96526238402447, "y": 530.5001740601973, "id": "65"}, {"x": 286.8175615185625, "y": 909.0915343676143, "id": "66"}, {"x": 614.5239510989932, "y": 589.9606375945941, "id": "67"}, {"x": 975.8367264472662, "y": 869.3461120654264, "id": "68"}, {"x": 124.1048419678099, "y": 857.5696814107591, "id": "69"}, {"x": 789.928793922234, "y": 424.1139557296094, "id": "70"}, {"x": 772.8500553428668, "y": 874.7719271422791, "id": "71"}, {"x": 476.24300878142714, "y": 669.1734112962586, "id": "72"}, {"x": 24.961699927125824, "y": 217.0260994135097, "id": "73"}, {"x": 594.4860078820658, "y": 176.56983861409037, "id": "74"}, {"x": 66.29252349461534, "y": 389.4897448439921, "id": "75"}, {"x": 632.6579361324675, "y": 31.01660273582585, "id": "76"}, {"x": 824.0035160173856, "y": 116.92145185040903, "id": "77"}, {"x": 677.865656764053, "y": 164.08438357316646, "id": "78"}, {"x": 450.08762912975044, "y": 791.3169030167288, "id": "79"}, {"x": 632.4002833753202, "y": 819.39306302804, "id": "80"}, {"x": 547.9458153228406, "y": 829.2739098044665, "id": "81"}, {"x": 681.9435956163312, "y": 967.675603173817, "id": "82"}, {"x": 562.0056331298084, "y": 857.3160826784729, "id": "83"}, {"x": 881.1407619660621, "y": 258.47714072747993, "id": "84"}, {"x": 596.8928177683626, "y": 70.030272708135, "id": "85"}, {"x": 628.9615154983644, "y": 557.7887053007119, "id": "86"}, {"x": 594.967619458016, "y": 842.5998581135681, "id": "87"}, {"x": 339.4266129265089, "y": 781.9412659476484, "id": "88"}, {"x": 96.19706121097715, "y": 460.9085441800873, "id": "89"}, {"x": 830.0702495818939, "y": 653.633571939861, "id": "90"}, {"x": 997.2563641524935, "y": 698.7338812945936, "id": "91"}, {"x": 266.7296581185612, "y": 570.4233831001011, "id": "92"}, {"x": 719.3613827848995, "y": 144.9817305271599, "id": "93"}, {"x": 381.71964468061867, "y": 138.4098556170118, "id": "94"}, {"x": 520.6936959603142, "y": 713.3039235292307, "id": "95"}, {"x": 490.0893361144691, "y": 451.1362447703173, "id": "96"}, {"x": 221.71707383321083, "y": 616.1392543092791, "id": "97"}, {"x": 278.11340291866014, "y": 257.4857963464866, "id": "98"}, {"x": 575.5240231944836, "y": 777.8410531007129, "id": "99"}, {"x": 251.31807245177663, "y": 767.1206870550451, "id": "100"}, {"x": 563.2424114720388, "y": 56.94165225078807, "id": "101"}, {"x": 745.3063029046521, "y": 828.6145591288371, "id": "102"}, {"x": 516.8082972219046, "y": 46.30516484981095, "id": "103"}, {"x": 800.6691101265933, "y": 654.7553467791689, "id": "104"}, {"x": 29.203694351653596, "y": 412.1528481876573, "id": "105"}, {"x": 791.2908311578942, "y": 306.62004569647473, "id": "106"}, {"x": 799.4240515018519, "y": 151.86253179585907, "id": "107"}, {"x": 695.1545564607286, "y": 564.5594476688676, "id": "108"}, {"x": 382.9662363064218, "y": 535.6208458664421, "id": "109"}, {"x": 85.31826028681499, "y": 586.9376804839346, "id": "110"}, {"x": 966.8869556882307, "y": 166.7606147669499, "id": "111"}, {"x": 792.599988196088, "y": 14.598159144146305, "id": "112"}, {"x": 679.0985972821478, "y": 370.97368064732564, "id": "113"}, {"x": 775.9533147697887, "y": 706.7094559859352, "id": "114"}, {"x": 431.37396381243167, "y": 445.42321290492634, "id": "115"}, {"x": 713.6807211849061, "y": 264.84545449048056, "id": "116"}, {"x": 202.44070576387008, "y": 842.8212772692114, "id": "117"}, {"x": 493.4056387738969, "y": 265.4371749690929, "id": "118"}, {"x": 328.10016825574206, "y": 686.3546240382777, "id": "119"}, {"x": 154.79025335969365, "y": 940.5805951179957, "id": "120"}, {"x": 690.4849178147786, "y": 899.3482320057308, "id": "121"}, {"x": 388.3293795041067, "y": 189.74046271541468, "id": "122"}, {"x": 78.4234232943276, "y": 642.9752432399143, "id": "123"}, {"x": 578.4880163731509, "y": 600.4698023953765, "id": "124"}, {"x": 803.7263160953847, "y": 551.9058031265134, "id": "125"}, {"x": 211.36573980051566, "y": 614.3452641871901, "id": "126"}, {"x": 214.4383081364366, "y": 246.99744014659709, "id": "127"}, {"x": 935.9323559403372, "y": 488.44615325854426, "id": "128"}, {"x": 846.4851391680484, "y": 37.233740137141424, "id": "129"}, {"x": 736.0452381946909, "y": 862.0583240211566, "id": "130"}, {"x": 159.45182360715083, "y": 42.853469903507914, "id": "131"}, {"x": 568.1622859186766, "y": 33.22237448170839, "id": "132"}, {"x": 923.0519338290032, "y": 253.10120905557966, "id": "133"}, {"x": 27.7665511143087, "y": 588.4949992600284, "id": "134"}, {"x": 725.98107206997, "y": 7.27014270657278, "id": "135"}, {"x": 905.5223731979121, "y": 467.67022590647935, "id": "136"}, {"x": 706.9990675836972, "y": 211.96879099518463, "id": "137"}, {"x": 823.425462682419, "y": 264.3363754139799, "id": "138"}, {"x": 605.8982554870588, "y": 986.800743292363, "id": "139"}, {"x": 240.16860090946324, "y": 381.92126095073553, "id": "140"}, {"x": 560.715753170384, "y": 602.3522009121618, "id": "141"}, {"x": 965.558685228382, "y": 644.6173353454706, "id": "142"}, {"x": 597.1406652588829, "y": 569.7578501881823, "id": "143"}, {"x": 496.0571935579231, "y": 10.775303880728337, "id": "144"}, {"x": 433.9374437832393, "y": 976.6342512749102, "id": "145"}, {"x": 63.386500636901324, "y": 413.84324954617813, "id": "146"}, {"x": 810.8109494893004, "y": 738.1292537210801, "id": "147"}, {"x": 446.06585126654574, "y": 947.7224639437168, "id": "148"}, {"x": 761.7962269306284, "y": 291.63878167485336, "id": "149"}, {"x": 584.6806433172098, "y": 232.96943204246588, "id": "150"}, {"x": 652.0803028718854, "y": 325.94682866086424, "id": "151"}, {"x": 874.3839258738377, "y": 136.09496210381644, "id": "152"}, {"x": 483.16119254677506, "y": 685.2188994902084, "id": "153"}, {"x": 752.4936850326299, "y": 36.29083641302322, "id": "154"}, {"x": 276.87251643557573, "y": 588.8869923125114, "id": "155"}, {"x": 334.66541714994145, "y": 308.753914185662, "id": "156"}, {"x": 928.5338174448716, "y": 517.7031739639258, "id": "157"}, {"x": 438.45861402217366, "y": 381.06699652681453, "id": "158"}, {"x": 459.34937172357326, "y": 772.7941467035898, "id": "159"}, {"x": 925.4260129898086, "y": 759.2893192390445, "id": "160"}, {"x": 140.19702617164253, "y": 765.6565791039218, "id": "161"}, {"x": 701.8468841173668, "y": 472.10595714232915, "id": "162"}, {"x": 839.4395225183758, "y": 448.76081395910614, "id": "163"}, {"x": 570.4828495561972, "y": 884.6421695112941, "id": "164"}, {"x": 710.3644291830062, "y": 907.7485541435947, "id": "165"}, {"x": 90.44893109858599, "y": 501.80309832582503, "id": "166"}, {"x": 429.11204493108545, "y": 468.00160120161416, "id": "167"}, {"x": 244.27311801019025, "y": 300.5402651052077, "id": "168"}, {"x": 42.242355301629345, "y": 138.63751978699278, "id": "169"}, {"x": 330.56673172476815, "y": 113.51449079289944, "id": "170"}, {"x": 555.0939719924781, "y": 149.6014231413324, "id": "171"}, {"x": 509.89110344093615, "y": 993.5706136590294, "id": "172"}, {"x": 743.6277203747034, "y": 654.5269478576929, "id": "173"}, {"x": 399.83795326851134, "y": 611.4788486940645, "id": "174"}, {"x": 842.6604233756508, "y": 778.664916950837, "id": "175"}, {"x": 967.6087988069464, "y": 405.24253757426186, "id": "176"}, {"x": 413.61357764594663, "y": 806.3661531063038, "id": "177"}, {"x": 427.13227546159493, "y": 26.829554233794074, "id": "178"}, {"x": 815.5443092768603, "y": 860.5948719367599, "id": "179"}, {"x": 654.7347665593626, "y": 864.4546073464988, "id": "180"}, {"x": 143.8247691369413, "y": 59.39329552244177, "id": "181"}, {"x": 985.1876853170513, "y": 665.1416445849923, "id": "182"}, {"x": 506.83790355054134, "y": 264.86180677552983, "id": "183"}, {"x": 974.5105575697798, "y": 277.47152484985116, "id": "184"}, {"x": 620.796175438168, "y": 385.17926059048557, "id": "185"}, {"x": 212.42114501481936, "y": 183.59323146669703, "id": "186"}, {"x": 434.7095101102441, "y": 508.77319041446844, "id": "187"}, {"x": 754.731043258694, "y": 528.4281572781123, "id": "188"}, {"x": 316.8922000970342, "y": 374.23387240141136, "id": "189"}, {"x": 932.9942530518933, "y": 66.08158839736822, "id": "190"}, {"x": 196.59228177189146, "y": 518.570231855434, "id": "191"}, {"x": 698.4444826518121, "y": 25.851969641368488, "id": "192"}, {"x": 626.347767598514, "y": 760.2978866052507, "id": "193"}, {"x": 867.0964212072805, "y": 398.9387825315991, "id": "194"}, {"x": 822.4691496440332, "y": 19.492683319871638, "id": "195"}, {"x": 448.7516910912771, "y": 142.90864398578097, "id": "196"}, {"x": 986.6524264340082, "y": 523.3282173899953, "id": "197"}, {"x": 262.1847292039564, "y": 678.7673680442421, "id": "198"}, {"x": 63.323456396458646, "y": 202.91962121490158, "id": "199"}, {"x": 792.7477595843113, "y": 63.19296221263171, "id": "200"}, {"x": 207.6479542319638, "y": 331.29789600437766, "id": "201"}, {"x": 904.6929288823051, "y": 88.93264434086856, "id": "202"}, {"x": 139.65957752964752, "y": 723.5083981033398, "id": "203"}, {"x": 724.5602504706316, "y": 348.05099611119715, "id": "204"}, {"x": 357.5738554254927, "y": 70.04093018526724, "id": "205"}, {"x": 879.6145831533404, "y": 634.9498290677144, "id": "206"}, {"x": 306.08853175879966, "y": 311.42194569529227, "id": "207"}, {"x": 999.3180005894236, "y": 895.6039165882505, "id": "208"}, {"x": 199.8664407718459, "y": 250.67620691811464, "id": "209"}, {"x": 209.35627114666966, "y": 927.3214687217363, "id": "210"}, {"x": 804.32575662623, "y": 760.7772283973335, "id": "211"}, {"x": 888.9854353829824, "y": 626.5419050496527, "id": "212"}, {"x": 698.3991575340341, "y": 8.556086970917253, "id": "213"}, {"x": 620.1250052001225, "y": 190.64954971106397, "id": "214"}, {"x": 660.6453057296144, "y": 101.16775843064995, "id": "215"}, {"x": 185.3940178879817, "y": 756.5693015273056, "id": "216"}, {"x": 168.9451855655024, "y": 839.391879959102, "id": "217"}, {"x": 280.85354197725354, "y": 606.3942228765751, "id": "218"}, {"x": 883.7821139233852, "y": 293.1591874142756, "id": "219"}, {"x": 201.50642647625315, "y": 274.5694998785858, "id": "220"}, {"x": 356.99870502264184, "y": 551.8739731424121, "id": "221"}, {"x": 672.5939380047841, "y": 638.6458544733487, "id": "222"}, {"x": 286.4463783098444, "y": 549.282213188141, "id": "223"}, {"x": 951.445229695907, "y": 929.8060813505426, "id": "224"}, {"x": 164.49300009257527, "y": 52.15880018172447, "id": "225"}, {"x": 127.10132327228618, "y": 382.98225997977767, "id": "226"}, {"x": 590.759732622045, "y": 646.7252360996927, "id": "227"}, {"x": 21.116345868008146, "y": 413.62631510319113, "id": "228"}, {"x": 726.0504712838862, "y": 556.1896745731972, "id": "229"}, {"x": 10.79989122702285, "y": 81.38030412759711, "id": "230"}, {"x": 751.0133219832862, "y": 331.70294298231676, "id": "231"}, {"x": 389.8523554370954, "y": 892.4395492688354, "id": "232"}, {"x": 612.7092100499343, "y": 251.23300190640953, "id": "233"}, {"x": 568.5359440498002, "y": 129.75985565713776, "id": "234"}, {"x": 947.3595329598458, "y": 588.68361790726, "id": "235"}, {"x": 348.77827313313225, "y": 683.8344670669114, "id": "236"}, {"x": 547.6111682975965, "y": 572.7701113358681, "id": "237"}, {"x": 908.0919106949982, "y": 298.3379149870502, "id": "238"}, {"x": 645.4479407556715, "y": 785.2892107523716, "id": "239"}, {"x": 826.8624438097448, "y": 946.7887172753632, "id": "240"}, {"x": 209.6935419831647, "y": 545.9737902208351, "id": "241"}, {"x": 648.8934945953522, "y": 957.1079816288343, "id": "242"}, {"x": 372.75709625369393, "y": 475.8069282573396, "id": "243"}, {"x": 493.09172079084493, "y": 850.6699779771869, "id": "244"}, {"x": 730.5222545225363, "y": 800.2864281245877, "id": "245"}, {"x": 584.6658974705234, "y": 981.6501786365687, "id": "246"}, {"x": 119.87952800381674, "y": 853.9287754741504, "id": "247"}, {"x": 232.32815384657002, "y": 763.9469490316274, "id": "248"}, {"x": 289.7809909992638, "y": 905.1572783539017, "id": "249"}, {"x": 843.5736395049094, "y": 355.0651617970859, "id": "250"}, {"x": 692.5032921121161, "y": 535.5463725243494, "id": "251"}, {"x": 921.2468285574565, "y": 392.60725689678446, "id": "252"}, {"x": 956.0942868936332, "y": 92.16995114104954, "id": "253"}, {"x": 651.5214079729993, "y": 839.1294399731937, "id": "254"}, {"x": 186.57130127669376, "y": 779.5551516973915, "id": "255"}, {"x": 262.5238634010765, "y": 69.16684515948135, "id": "256"}, {"x": 102.20845129381495, "y": 565.1706754455083, "id": "257"}, {"x": 811.5051555164318, "y": 127.67762248764292, "id": "258"}, {"x": 399.20412240719315, "y": 336.42689243215494, "id": "259"}, {"x": 744.5265455088498, "y": 244.6329489071396, "id": "260"}, {"x": 811.5481317194096, "y": 8.686497661680392, "id": "261"}, {"x": 789.3357534093095, "y": 60.59335120621656, "id": "262"}, {"x": 84.43437724955282, "y": 138.15968624179897, "id": "263"}, {"x": 451.69883356396025, "y": 994.2954905391371, "id": "264"}, {"x": 327.06858713759533, "y": 3.9495082809876125, "id": "265"}, {"x": 713.1330008282724, "y": 902.1362515738432, "id": "266"}, {"x": 86.14020502424158, "y": 70.5807016012162, "id": "267"}, {"x": 626.8129151159422, "y": 302.8576327066018, "id": "268"}, {"x": 803.5256783414123, "y": 426.48862856884716, "id": "269"}, {"x": 334.56110478913547, "y": 193.77290685835, "id": "270"}, {"x": 402.8710452226196, "y": 658.1273091963958, "id": "271"}, {"x": 866.7663803306665, "y": 454.7717840599751, "id": "272"}, {"x": 192.1046604642549, "y": 762.3445428587636, "id": "273"}, {"x": 69.20383995459645, "y": 823.4398877881107, "id": "274"}, {"x": 265.83021586961854, "y": 714.6624612040997, "id": "275"}, {"x": 918.9852442203768, "y": 783.1568054875657, "id": "276"}, {"x": 559.7355028061118, "y": 165.3770327586519, "id": "277"}, {"x": 75.4613981714668, "y": 479.8951645856583, "id": "278"}, {"x": 487.30668566109694, "y": 578.19884432514, "id": "279"}, {"x": 483.9974405393097, "y": 377.08963903877367, "id": "280"}, {"x": 115.86166399436782, "y": 982.7395535249219, "id": "281"}, {"x": 348.8304792369373, "y": 927.1548407189387, "id": "282"}, {"x": 399.137538893516, "y": 377.7724807473847, "id": "283"}, {"x": 554.6332825424729, "y": 875.0867392208684, "id": "284"}, {"x": 694.8898286719394, "y": 809.8829427940755, "id": "285"}, {"x": 296.6559468823382, "y": 341.99430127757535, "id": "286"}, {"x": 768.6153739014221, "y": 893.6184126547877, "id": "287"}, {"x": 539.9536722860448, "y": 242.85529132011675, "id": "288"}, {"x": 386.07318079267094, "y": 144.12781050752977, "id": "289"}, {"x": 533.6614308454346, "y": 788.2489538270878, "id": "290"}, {"x": 220.94154534589515, "y": 914.7159700976949, "id": "291"}, {"x": 263.0832479347005, "y": 150.7358487876026, "id": "292"}, {"x": 395.04027052047184, "y": 365.1006869711262, "id": "293"}, {"x": 433.8642499028503, "y": 68.14251100772395, "id": "294"}, {"x": 18.77228066989689, "y": 290.8752076659256, "id": "295"}, {"x": 674.07595580972, "y": 634.1649445391669, "id": "296"}, {"x": 752.410969951634, "y": 864.6583856328393, "id": "297"}, {"x": 529.6735448345888, "y": 487.8638086462925, "id": "298"}, {"x": 722.547324030621, "y": 926.827273591297, "id": "299"}, {"x": 459.4415406071341, "y": 144.47466998198465, "id": "300"}, {"x": 696.5077347185077, "y": 575.9220352572094, "id": "301"}, {"x": 262.86933828353085, "y": 798.6228570095732, "id": "302"}, {"x": 132.2683683395436, "y": 49.00496244435537, "id": "303"}, {"x": 559.1090111082592, "y": 529.2387683422205, "id": "304"}, {"x": 484.93003289987234, "y": 944.4929680267746, "id": "305"}, {"x": 391.17283211593224, "y": 858.8257793918083, "id": "306"}, {"x": 566.4885184442228, "y": 46.94483447464259, "id": "307"}, {"x": 687.9481713603144, "y": 390.8155306856407, "id": "308"}, {"x": 113.95035308654566, "y": 603.0274396352553, "id": "309"}, {"x": 662.5936479582545, "y": 376.78956338981374, "id": "310"}, {"x": 387.6380833185308, "y": 904.656770866793, "id": "311"}, {"x": 473.6636940565533, "y": 84.42936296086533, "id": "312"}, {"x": 739.9716317625056, "y": 420.4020010291882, "id": "313"}, {"x": 196.48897088408336, "y": 936.1293741359574, "id": "314"}, {"x": 262.97006814025934, "y": 938.8702168714734, "id": "315"}, {"x": 927.1012100113669, "y": 299.38957630975426, "id": "316"}, {"x": 781.4426008201998, "y": 661.8364074343389, "id": "317"}, {"x": 854.6659981465405, "y": 351.2179214358806, "id": "318"}, {"x": 915.667755222933, "y": 251.11744140481528, "id": "319"}, {"x": 304.9981546807501, "y": 856.1189653866728, "id": "320"}, {"x": 859.086957494076, "y": 763.1471472906067, "id": "321"}, {"x": 215.11607015011057, "y": 830.1235808227208, "id": "322"}, {"x": 277.98245916883116, "y": 264.11256431704544, "id": "323"}, {"x": 77.47009271608407, "y": 798.0177335984683, "id": "324"}, {"x": 983.7515478811277, "y": 732.1042151578392, "id": "325"}, {"x": 585.8398509344757, "y": 93.75542065909315, "id": "326"}, {"x": 637.6182065944104, "y": 173.58717011130153, "id": "327"}, {"x": 314.999033354403, "y": 907.2588286098859, "id": "328"}, {"x": 965.5451452185142, "y": 443.44436730736527, "id": "329"}, {"x": 238.0312165682178, "y": 22.31720044110763, "id": "330"}, {"x": 702.729525752746, "y": 370.602451468839, "id": "331"}, {"x": 321.75782204648385, "y": 313.33436665884796, "id": "332"}, {"x": 632.1629219801263, "y": 12.235233839849036, "id": "333"}, {"x": 395.6085293188157, "y": 680.5725565585404, "id": "334"}, {"x": 686.3182060077507, "y": 710.6383313140577, "id": "335"}, {"x": 272.9657728087197, "y": 401.94653674924797, "id": "336"}, {"x": 649.1104045673378, "y": 142.5982791657544, "id": "337"}, {"x": 637.8788131818005, "y": 791.1763106774237, "id": "338"}, {"x": 311.8865681832752, "y": 894.2135612303528, "id": "339"}, {"x": 599.1658128982294, "y": 950.8468175442108, "id": "340"}, {"x": 338.0084704199854, "y": 174.91684984017886, "id": "341"}, {"x": 947.0452048552077, "y": 662.7846994864232, "id": "342"}, {"x": 674.8396223307531, "y": 467.69677778961585, "id": "343"}, {"x": 189.82045417400994, "y": 297.6343641415186, "id": "344"}, {"x": 924.0928890491823, "y": 866.1894727694438, "id": "345"}, {"x": 317.3204890106909, "y": 838.2665077586624, "id": "346"}, {"x": 240.4306377237937, "y": 677.2289516586299, "id": "347"}, {"x": 740.4860747504637, "y": 713.5635472879912, "id": "348"}, {"x": 535.8463655937309, "y": 760.077940340288, "id": "349"}, {"x": 893.3682103726052, "y": 532.0873789912779, "id": "350"}, {"x": 548.6152387225156, "y": 48.24802169721454, "id": "351"}, {"x": 755.6322566110581, "y": 533.1950134562056, "id": "352"}, {"x": 444.19887524074045, "y": 541.6694059719972, "id": "353"}, {"x": 232.36502059374843, "y": 831.5036574993035, "id": "354"}, {"x": 687.3667322295378, "y": 804.9580093092909, "id": "355"}, {"x": 469.5839045586238, "y": 192.436637691186, "id": "356"}, {"x": 630.0691168200017, "y": 284.1634303232259, "id": "357"}, {"x": 974.1269615975871, "y": 745.1313005100203, "id": "358"}, {"x": 102.73333763946523, "y": 352.05468343243507, "id": "359"}, {"x": 712.9964628702145, "y": 469.57678086147627, "id": "360"}, {"x": 66.3831373301067, "y": 428.8235312202283, "id": "361"}, {"x": 357.45113671763164, "y": 761.0001219810323, "id": "362"}, {"x": 618.9670244465976, "y": 132.84551258881316, "id": "363"}, {"x": 919.6477910558984, "y": 913.4526615936958, "id": "364"}, {"x": 416.6136108736138, "y": 925.0292381689382, "id": "365"}, {"x": 455.21227146675227, "y": 122.66456682311421, "id": "366"}, {"x": 884.8043263067403, "y": 909.0048901219262, "id": "367"}, {"x": 679.0430150818028, "y": 857.1948468651775, "id": "368"}, {"x": 399.83073905956536, "y": 925.2444916597018, "id": "369"}, {"x": 337.411739567249, "y": 838.12400509409, "id": "370"}, {"x": 545.0692165906468, "y": 876.9534002178774, "id": "371"}, {"x": 486.0598372551634, "y": 369.82486036778585, "id": "372"}, {"x": 129.25847589568852, "y": 181.10923776580336, "id": "373"}, {"x": 423.46369200428836, "y": 512.3454395889986, "id": "374"}, {"x": 827.764731803327, "y": 177.99308840344509, "id": "375"}, {"x": 229.53291640225882, "y": 51.66072370848895, "id": "376"}, {"x": 659.3346032980387, "y": 986.3102871489193, "id": "377"}, {"x": 846.988391793289, "y": 505.3283027226906, "id": "378"}, {"x": 633.3281629844788, "y": 82.44000041246291, "id": "379"}, {"x": 104.21934751852524, "y": 337.0911558014515, "id": "380"}, {"x": 557.805983761672, "y": 196.1938987486873, "id": "381"}, {"x": 956.551889557167, "y": 900.5354334993302, "id": "382"}, {"x": 853.5950903119278, "y": 561.5840603182027, "id": "383"}, {"x": 100.84060848119614, "y": 619.4882564737186, "id": "384"}, {"x": 335.9063441055733, "y": 721.4352630128482, "id": "385"}, {"x": 101.16763414581908, "y": 385.40180625438103, "id": "386"}, {"x": 802.9575923411146, "y": 243.61010626726275, "id": "387"}, {"x": 880.0977089573123, "y": 107.24709937192623, "id": "388"}, {"x": 325.9596621700379, "y": 974.5206207510649, "id": "389"}, {"x": 997.7055424205545, "y": 263.78385526536397, "id": "390"}, {"x": 369.0224157516436, "y": 321.42344439427694, "id": "391"}, {"x": 26.547747249634934, "y": 657.253291328559, "id": "392"}, {"x": 106.74901157963568, "y": 742.4901202755879, "id": "393"}, {"x": 934.283930226044, "y": 310.26746782013316, "id": "394"}, {"x": 994.46263883963, "y": 756.4442801771019, "id": "395"}, {"x": 826.1890766341735, "y": 84.09948313213256, "id": "396"}, {"x": 781.0128752828388, "y": 624.6652291245, "id": "397"}, {"x": 497.975805070504, "y": 203.17080237762985, "id": "398"}, {"x": 985.3378785597614, "y": 963.4435420370384, "id": "399"}, {"x": 846.5361393977834, "y": 243.4622313271091, "id": "400"}, {"x": 174.0079232735625, "y": 905.4447911324279, "id": "401"}, {"x": 700.1957826205962, "y": 485.16361676391637, "id": "402"}, {"x": 823.0382676226039, "y": 456.25169430030587, "id": "403"}, {"x": 129.31949279560985, "y": 27.00998999730009, "id": "404"}, {"x": 600.5432887863097, "y": 979.7527027401193, "id": "405"}, {"x": 267.60704787757663, "y": 568.0770213480913, "id": "406"}, {"x": 28.1662145673236, "y": 346.3436890818928, "id": "407"}, {"x": 104.38139067279828, "y": 398.81541720887736, "id": "408"}, {"x": 370.9154559623253, "y": 308.3704829880276, "id": "409"}, {"x": 800.7826600083254, "y": 603.7543124972664, "id": "410"}, {"x": 433.3539252871678, "y": 772.3371707492895, "id": "411"}, {"x": 732.5223159833431, "y": 823.9287780979904, "id": "412"}, {"x": 955.4937239613703, "y": 553.5902755829378, "id": "413"}, {"x": 183.26702050251032, "y": 23.03496593054044, "id": "414"}, {"x": 705.1896680304133, "y": 596.166692865466, "id": "415"}, {"x": 49.39622337354843, "y": 318.6324091702402, "id": "416"}, {"x": 527.0670213607062, "y": 72.5206694025603, "id": "417"}, {"x": 398.25317190456656, "y": 424.9779556319808, "id": "418"}, {"x": 111.3423730998726, "y": 848.6846304736891, "id": "419"}, {"x": 139.72540445680104, "y": 681.2666822563936, "id": "420"}, {"x": 251.4012303526917, "y": 408.754686683513, "id": "421"}, {"x": 377.9576977010377, "y": 715.4971882414196, "id": "422"}, {"x": 324.86911086053874, "y": 309.9120460600998, "id": "423"}, {"x": 59.809818073798596, "y": 249.3611052793999, "id": "424"}, {"x": 566.8531400390119, "y": 68.81585370226107, "id": "425"}, {"x": 444.84731926045083, "y": 221.047730872037, "id": "426"}, {"x": 170.50412935895875, "y": 989.4305220474397, "id": "427"}, {"x": 430.37322555237654, "y": 711.5269539672238, "id": "428"}, {"x": 175.46824954754726, "y": 269.8334937362098, "id": "429"}, {"x": 911.7143454894258, "y": 898.4075474092134, "id": "430"}, {"x": 867.4758596874192, "y": 763.7203717310324, "id": "431"}, {"x": 63.49636851970075, "y": 848.966379676636, "id": "432"}, {"x": 792.5948301546746, "y": 117.43041898551898, "id": "433"}, {"x": 28.86298296108958, "y": 936.6301944704906, "id": "434"}, {"x": 228.4872967227285, "y": 45.940117569911564, "id": "435"}, {"x": 137.3229471057269, "y": 740.1115244690573, "id": "436"}, {"x": 390.8889901478484, "y": 448.74370587809034, "id": "437"}, {"x": 923.0157968372882, "y": 187.8410950979269, "id": "438"}, {"x": 983.7599524488926, "y": 933.995643796228, "id": "439"}, {"x": 543.3437667132449, "y": 14.458105791922637, "id": "440"}, {"x": 952.7521886863248, "y": 492.89710324910385, "id": "441"}, {"x": 235.54400924185603, "y": 917.5012774857643, "id": "442"}, {"x": 975.8938567848061, "y": 723.7395468440302, "id": "443"}, {"x": 516.5893600478677, "y": 798.4822242405615, "id": "444"}, {"x": 706.6979935102039, "y": 93.54497696456488, "id": "445"}, {"x": 812.178752605584, "y": 414.88233700059817, "id": "446"}, {"x": 187.68374947406207, "y": 979.1258433588234, "id": "447"}, {"x": 775.7609470836221, "y": 133.13345565782907, "id": "448"}, {"x": 348.32735230081124, "y": 842.981920703617, "id": "449"}, {"x": 733.2747425669539, "y": 696.4777529555494, "id": "450"}, {"x": 277.61791646516843, "y": 969.8703217572754, "id": "451"}, {"x": 183.38948940903398, "y": 441.5214911719821, "id": "452"}, {"x": 306.0861469130281, "y": 268.0927024023048, "id": "453"}, {"x": 727.697049601488, "y": 951.7335574503478, "id": "454"}, {"x": 315.8751864645258, "y": 88.50565226746754, "id": "455"}, {"x": 20.007740101581128, "y": 990.0355938896811, "id": "456"}, {"x": 949.7751011933134, "y": 471.2460017670048, "id": "457"}, {"x": 492.4155510776763, "y": 808.9027464188528, "id": "458"}, {"x": 356.54691985098543, "y": 966.8814401401498, "id": "459"}, {"x": 993.6036486334555, "y": 973.2892881073576, "id": "460"}, {"x": 869.4509429227733, "y": 882.8142567881564, "id": "461"}, {"x": 186.6537434580865, "y": 41.396271912893525, "id": "462"}, {"x": 944.1211913779221, "y": 864.805405033417, "id": "463"}, {"x": 871.7148026297033, "y": 58.69635278616381, "id": "464"}, {"x": 718.1434041768478, "y": 432.27288596157956, "id": "465"}, {"x": 697.9594098650376, "y": 632.2622740140946, "id": "466"}, {"x": 580.0444435615456, "y": 154.05225040266058, "id": "467"}, {"x": 84.86244567901124, "y": 536.8049851076496, "id": "468"}, {"x": 576.3693973211476, "y": 478.09348309749157, "id": "469"}, {"x": 237.44573942220626, "y": 952.5851958781863, "id": "470"}, {"x": 24.084072353306453, "y": 855.4236583370255, "id": "471"}, {"x": 785.6674585062877, "y": 669.3489071282355, "id": "472"}, {"x": 512.1521290330079, "y": 937.8008579994228, "id": "473"}, {"x": 789.7140039083201, "y": 684.1308876323806, "id": "474"}, {"x": 895.7120545533908, "y": 187.746358294686, "id": "475"}, {"x": 625.6568377689016, "y": 948.6200836215862, "id": "476"}, {"x": 823.5527676773154, "y": 47.44862640298686, "id": "477"}, {"x": 181.5396072243951, "y": 290.8396006888443, "id": "478"}, {"x": 474.37153468843417, "y": 583.840797813968, "id": "479"}, {"x": 954.9612120884109, "y": 383.9750624117869, "id": "480"}, {"x": 438.40914580408895, "y": 51.516317970862644, "id": "481"}, {"x": 362.12477710703325, "y": 995.255148917421, "id": "482"}, {"x": 230.12126407838585, "y": 499.8104420861997, "id": "483"}, {"x": 901.7026126309943, "y": 875.7206263526401, "id": "484"}, {"x": 96.91567339748353, "y": 607.2461836051193, "id": "485"}, {"x": 252.81870623191494, "y": 798.5012407078171, "id": "486"}, {"x": 124.9697222010826, "y": 399.5632916325553, "id": "487"}, {"x": 639.4722698362876, "y": 397.8832808361061, "id": "488"}, {"x": 727.4744806202619, "y": 183.5675348284187, "id": "489"}, {"x": 266.6162909089601, "y": 354.08605054175337, "id": "490"}, {"x": 363.7008741430221, "y": 511.0707445557409, "id": "491"}, {"x": 469.43601593528837, "y": 626.8334063372233, "id": "492"}, {"x": 281.255687754193, "y": 251.6059884287254, "id": "493"}, {"x": 513.570655421867, "y": 729.9891913783583, "id": "494"}, {"x": 369.865137783979, "y": 442.659005757618, "id": "495"}, {"x": 804.0762734935938, "y": 142.4845756355042, "id": "496"}, {"x": 453.7242169958735, "y": 420.4973449866342, "id": "497"}, {"x": 924.459774082297, "y": 562.3793694660653, "id": "498"}, {"x": 483.99570558965877, "y": 76.04660450695344, "id": "499"}, {"x": 136.2604903527419, "y": 347.26529526746486, "id": "500"}, {"x": 810.943480666752, "y": 712.7790077387428, "id": "501"}, {"x": 758.4391107360007, "y": 903.9551673916138, "id": "502"}, {"x": 613.6892187539976, "y": 734.1872942630821, "id": "503"}, {"x": 201.18442276598182, "y": 983.8978048603663, "id": "504"}, {"x": 548.2077652421059, "y": 885.4009192024286, "id": "505"}, {"x": 234.6810947946042, "y": 254.11966103373175, "id": "506"}, {"x": 30.955329844959856, "y": 721.0235146419466, "id": "507"}, {"x": 506.0950053037591, "y": 170.09598148260375, "id": "508"}, {"x": 717.5135302599074, "y": 492.4489275245485, "id": "509"}, {"x": 930.2569981399008, "y": 126.77690680010033, "id": "510"}, {"x": 457.7072703977425, "y": 830.0952543094874, "id": "511"}, {"x": 304.14619817428803, "y": 671.9907316681204, "id": "512"}, {"x": 122.87376356911817, "y": 218.21391929603416, "id": "513"}, {"x": 896.0020483760246, "y": 551.1336034158968, "id": "514"}, {"x": 656.3087778769193, "y": 354.69991664854984, "id": "515"}, {"x": 581.7221411512144, "y": 930.1887004618224, "id": "516"}, {"x": 62.43452652017145, "y": 500.98337668855663, "id": "517"}, {"x": 34.20591732389433, "y": 28.948598410262427, "id": "518"}, {"x": 423.2819044798809, "y": 744.7935066030985, "id": "519"}, {"x": 936.5718042522365, "y": 655.4341883215707, "id": "520"}, {"x": 750.7904685847805, "y": 772.3431394415666, "id": "521"}, {"x": 991.9672763564704, "y": 36.9964878380572, "id": "522"}, {"x": 695.8427302927473, "y": 948.8100599825416, "id": "523"}, {"x": 923.7349791710817, "y": 581.0429377486927, "id": "524"}, {"x": 430.7006336412024, "y": 775.6528792918502, "id": "525"}, {"x": 666.6737762509317, "y": 677.0126957977161, "id": "526"}, {"x": 635.4651217665895, "y": 803.5334351217334, "id": "527"}, {"x": 490.58038286958515, "y": 399.8538423611222, "id": "528"}, {"x": 873.0187997621823, "y": 328.53624394379966, "id": "529"}, {"x": 619.2608094040943, "y": 295.58692086949236, "id": "530"}, {"x": 972.4058548317947, "y": 944.8797190548773, "id": "531"}, {"x": 194.27268991217994, "y": 930.7484068427019, "id": "532"}, {"x": 391.1124209614727, "y": 268.5031334677954, "id": "533"}, {"x": 556.5358543845952, "y": 121.72194661943159, "id": "534"}, {"x": 261.4913531359863, "y": 587.6963142422533, "id": "535"}, {"x": 164.5664421617169, "y": 371.758584832443, "id": "536"}, {"x": 759.0155092134736, "y": 595.5233442881711, "id": "537"}, {"x": 667.54205866215, "y": 445.64776515048555, "id": "538"}, {"x": 772.1579793131835, "y": 199.3940078056592, "id": "539"}, {"x": 245.33893035490073, "y": 224.89108332252306, "id": "540"}, {"x": 458.8766530151369, "y": 820.2511789566089, "id": "541"}, {"x": 191.43034783188307, "y": 96.23573299044075, "id": "542"}, {"x": 492.7682776673041, "y": 814.563844951686, "id": "543"}, {"x": 758.4985018726205, "y": 415.8970356688951, "id": "544"}, {"x": 304.6398452743628, "y": 440.9580918812527, "id": "545"}, {"x": 297.382886074147, "y": 197.0104259450578, "id": "546"}, {"x": 743.2514693780156, "y": 961.4870660873727, "id": "547"}, {"x": 228.01049374637262, "y": 469.19471401000425, "id": "548"}, {"x": 831.9445331062702, "y": 133.67807560190514, "id": "549"}, {"x": 401.01215841512163, "y": 25.01302608511824, "id": "550"}, {"x": 595.4745193935371, "y": 971.817182541725, "id": "551"}, {"x": 544.4185495403194, "y": 665.7291270507731, "id": "552"}, {"x": 717.3328651159474, "y": 574.9994368307957, "id": "553"}, {"x": 734.1917574958028, "y": 681.4093065107361, "id": "554"}, {"x": 629.9698517910394, "y": 110.26150480666008, "id": "555"}, {"x": 423.5807369640827, "y": 663.2121050127573, "id": "556"}, {"x": 708.768355720334, "y": 703.5793892270459, "id": "557"}, {"x": 260.3819352051242, "y": 689.5891286356464, "id": "558"}, {"x": 488.4123789136977, "y": 540.7765070931881, "id": "559"}, {"x": 71.35750992151668, "y": 444.5087986119517, "id": "560"}, {"x": 600.0892324670968, "y": 382.0822745010757, "id": "561"}, {"x": 280.5653216458718, "y": 758.0509283573901, "id": "562"}, {"x": 536.8784765842984, "y": 77.02949302988249, "id": "563"}, {"x": 216.73588008341727, "y": 987.2472785786834, "id": "564"}, {"x": 155.1056819882367, "y": 163.7743113534621, "id": "565"}, {"x": 105.9199798096444, "y": 833.7572506125131, "id": "566"}, {"x": 522.1854928231991, "y": 340.15819717610583, "id": "567"}, {"x": 873.9116083197732, "y": 667.1791484621638, "id": "568"}, {"x": 97.4894259485738, "y": 258.7586090391394, "id": "569"}, {"x": 685.2911032004307, "y": 961.7297097338661, "id": "570"}, {"x": 259.66757548482065, "y": 535.6308268473421, "id": "571"}, {"x": 189.4329765655488, "y": 261.10124791175946, "id": "572"}, {"x": 839.8937835023288, "y": 826.7698776727156, "id": "573"}, {"x": 790.7325907954952, "y": 483.1607721839506, "id": "574"}, {"x": 980.5310849491243, "y": 201.71982908655372, "id": "575"}, {"x": 491.88526466501656, "y": 192.77174856368285, "id": "576"}, {"x": 917.5542132044379, "y": 703.3243175408767, "id": "577"}, {"x": 485.7551705287686, "y": 764.6167098269274, "id": "578"}, {"x": 538.7983622995807, "y": 515.4732442133432, "id": "579"}, {"x": 164.25386502485784, "y": 786.7150065599347, "id": "580"}, {"x": 558.7159620585891, "y": 466.59015289900464, "id": "581"}, {"x": 315.0892587523394, "y": 167.04764977338837, "id": "582"}, {"x": 770.5519553139637, "y": 330.82196178646717, "id": "583"}, {"x": 388.2120322663073, "y": 167.10651985494295, "id": "584"}, {"x": 532.0400791563785, "y": 134.6238547254218, "id": "585"}, {"x": 159.11040838535163, "y": 195.1921048376446, "id": "586"}, {"x": 630.0045494564766, "y": 115.6985999728104, "id": "587"}, {"x": 68.24071841362856, "y": 89.9067638704687, "id": "588"}, {"x": 969.1675418038963, "y": 235.2331448999333, "id": "589"}, {"x": 713.921573568884, "y": 508.4852200528568, "id": "590"}, {"x": 20.27419237183581, "y": 348.67717036922585, "id": "591"}, {"x": 215.14613540328608, "y": 233.24806639692497, "id": "592"}, {"x": 152.57721168380732, "y": 104.09668502169511, "id": "593"}, {"x": 179.23548467787097, "y": 799.188522432885, "id": "594"}, {"x": 101.7508976457614, "y": 60.843986329446324, "id": "595"}, {"x": 475.4677486624255, "y": 863.6443993660722, "id": "596"}, {"x": 181.01963726268667, "y": 121.66902280432367, "id": "597"}, {"x": 450.2207644948245, "y": 685.6750051360607, "id": "598"}, {"x": 352.1090008362888, "y": 109.51211830179585, "id": "599"}, {"x": 782.6303656505108, "y": 60.7528160887294, "id": "600"}, {"x": 611.5388853674197, "y": 154.54138907921177, "id": "601"}, {"x": 782.4048601717877, "y": 60.23531244994651, "id": "602"}, {"x": 737.0384972326895, "y": 951.2614116566615, "id": "603"}, {"x": 806.0067174060732, "y": 826.9140988321298, "id": "604"}, {"x": 231.0932672005387, "y": 212.99368641637483, "id": "605"}, {"x": 403.6559002805493, "y": 406.36096073508276, "id": "606"}, {"x": 379.9155373465634, "y": 923.7908141033968, "id": "607"}, {"x": 250.5959525272653, "y": 797.8751336046105, "id": "608"}, {"x": 167.1961697005472, "y": 475.92076566924845, "id": "609"}, {"x": 973.9538731434088, "y": 653.6423567901452, "id": "610"}, {"x": 929.4581956931714, "y": 128.66176664462037, "id": "611"}, {"x": 500.47039671069274, "y": 244.13162574867863, "id": "612"}, {"x": 845.9176917463024, "y": 456.6752027518415, "id": "613"}, {"x": 995.2345363687273, "y": 789.1982552659957, "id": "614"}, {"x": 413.14297626155627, "y": 375.68298077180526, "id": "615"}, {"x": 751.2062901908018, "y": 294.5405754856137, "id": "616"}, {"x": 672.9239128447017, "y": 7.323159738079399, "id": "617"}, {"x": 594.9041484206311, "y": 288.8790646898459, "id": "618"}, {"x": 224.57037024520943, "y": 638.1219880647341, "id": "619"}, {"x": 876.8013402778329, "y": 264.82776815599385, "id": "620"}, {"x": 860.267384616295, "y": 130.81957764031816, "id": "621"}, {"x": 255.47770710181373, "y": 366.8954903678466, "id": "622"}, {"x": 488.9302386507011, "y": 263.3501018402994, "id": "623"}, {"x": 977.5480023205305, "y": 561.1540143595987, "id": "624"}, {"x": 382.1480035298638, "y": 638.991224005519, "id": "625"}, {"x": 285.0975304281794, "y": 208.99828697930835, "id": "626"}, {"x": 313.99111628457734, "y": 246.19987563033675, "id": "627"}, {"x": 962.6464516198442, "y": 483.0745839988678, "id": "628"}, {"x": 115.09868908025544, "y": 302.68923060304263, "id": "629"}, {"x": 586.3010962104584, "y": 340.71288836156964, "id": "630"}, {"x": 265.7400143559442, "y": 899.7692958128904, "id": "631"}, {"x": 978.8622042929755, "y": 483.7784516598468, "id": "632"}, {"x": 56.87879529563167, "y": 269.24015098992294, "id": "633"}, {"x": 694.903436494859, "y": 0.9664106404667638, "id": "634"}, {"x": 139.14267445868566, "y": 958.0170422742448, "id": "635"}, {"x": 808.4696984179571, "y": 266.5987922887919, "id": "636"}, {"x": 585.4023519170005, "y": 433.85239304042847, "id": "637"}, {"x": 502.70060781696213, "y": 987.261673520171, "id": "638"}, {"x": 512.9041694996666, "y": 800.0031361274156, "id": "639"}, {"x": 789.5873794671105, "y": 30.59085847169396, "id": "640"}, {"x": 323.62061214424745, "y": 256.7029698503258, "id": "641"}, {"x": 794.522393265221, "y": 965.6895246080005, "id": "642"}, {"x": 645.3839281366347, "y": 223.77590321369124, "id": "643"}, {"x": 701.0889251731307, "y": 824.4294837169301, "id": "644"}, {"x": 595.6428742817383, "y": 975.559878478845, "id": "645"}, {"x": 909.5156051428783, "y": 472.04383997109954, "id": "646"}, {"x": 213.93002570459652, "y": 63.553519299995976, "id": "647"}, {"x": 710.0747746436122, "y": 280.99183237172696, "id": "648"}, {"x": 996.8996914410008, "y": 686.8166678798847, "id": "649"}, {"x": 223.82343192583042, "y": 889.3227931063424, "id": "650"}, {"x": 949.5313551830353, "y": 67.73086843218911, "id": "651"}, {"x": 630.0845606796192, "y": 153.41908730406374, "id": "652"}, {"x": 553.7989353240118, "y": 87.53036710695916, "id": "653"}, {"x": 900.7683096192271, "y": 411.4093986601238, "id": "654"}, {"x": 686.4132523166553, "y": 240.8603179610872, "id": "655"}, {"x": 797.4837023028653, "y": 975.585635720745, "id": "656"}, {"x": 946.375827294117, "y": 270.15975285364505, "id": "657"}, {"x": 603.4501171000321, "y": 519.8998487631719, "id": "658"}, {"x": 540.7087691050662, "y": 162.91074457047083, "id": "659"}, {"x": 580.3902519776308, "y": 738.4285488848608, "id": "660"}, {"x": 376.62800609411386, "y": 979.5607036398951, "id": "661"}, {"x": 502.98945578570874, "y": 656.3190682923257, "id": "662"}, {"x": 372.73033901753985, "y": 358.8476189575842, "id": "663"}, {"x": 70.8704303483092, "y": 48.89936641841119, "id": "664"}, {"x": 1.290309817328139, "y": 775.1555449893277, "id": "665"}, {"x": 311.06728009361984, "y": 742.7959500850205, "id": "666"}, {"x": 314.4444304710492, "y": 507.1268437510711, "id": "667"}, {"x": 292.54614809006983, "y": 845.2977732478896, "id": "668"}, {"x": 508.4928080130575, "y": 476.84495528787704, "id": "669"}, {"x": 108.2383439357878, "y": 407.25854440025364, "id": "670"}, {"x": 624.7459799683786, "y": 541.5379790538109, "id": "671"}, {"x": 344.75752283628634, "y": 508.7120632532333, "id": "672"}, {"x": 572.0230640812417, "y": 893.2403924934179, "id": "673"}, {"x": 218.26795318872348, "y": 93.3562307043886, "id": "674"}, {"x": 133.80360386785128, "y": 517.6892222337054, "id": "675"}, {"x": 546.4323700440528, "y": 277.82057485209685, "id": "676"}, {"x": 2.1412178006015026, "y": 200.8127271448844, "id": "677"}, {"x": 225.93287573975306, "y": 153.53323179035084, "id": "678"}, {"x": 629.082344188516, "y": 641.9231891016624, "id": "679"}, {"x": 941.2629756559437, "y": 509.08273642396784, "id": "680"}, {"x": 872.9262381962491, "y": 92.4792746829326, "id": "681"}, {"x": 847.7492123656889, "y": 440.5593414939383, "id": "682"}, {"x": 889.723141549265, "y": 371.52552298359996, "id": "683"}, {"x": 619.2946132649657, "y": 473.0492500477016, "id": "684"}, {"x": 843.8266897848442, "y": 458.59011261570816, "id": "685"}, {"x": 439.416673217767, "y": 317.8825104772017, "id": "686"}, {"x": 289.6981449492054, "y": 953.7175043955503, "id": "687"}, {"x": 433.56849154856616, "y": 723.9002009190797, "id": "688"}, {"x": 539.7132233689139, "y": 102.06965412413693, "id": "689"}, {"x": 124.05267419743015, "y": 184.450064220831, "id": "690"}, {"x": 414.52844780390143, "y": 311.0143239788674, "id": "691"}, {"x": 97.8456037719404, "y": 978.0718530413693, "id": "692"}, {"x": 479.8974290600222, "y": 338.0568854723083, "id": "693"}, {"x": 589.3967840721596, "y": 330.9205943342194, "id": "694"}, {"x": 208.75303937742873, "y": 56.09320666524831, "id": "695"}, {"x": 824.4842909278087, "y": 751.1221002004781, "id": "696"}, {"x": 690.5464900806566, "y": 93.30100595777768, "id": "697"}, {"x": 941.1310861022887, "y": 724.0048813109701, "id": "698"}, {"x": 456.6556479047038, "y": 548.0360284485872, "id": "699"}, {"x": 774.8425588653668, "y": 684.5240610093334, "id": "700"}, {"x": 752.7239837827632, "y": 872.874709428735, "id": "701"}, {"x": 48.28841976950138, "y": 794.6787634256834, "id": "702"}, {"x": 809.0358711486556, "y": 424.20223640463826, "id": "703"}, {"x": 458.9468688752687, "y": 519.3583132493676, "id": "704"}, {"x": 282.5743013480828, "y": 481.8275382715852, "id": "705"}, {"x": 50.65923938329575, "y": 946.0936692934243, "id": "706"}, {"x": 919.039453340704, "y": 336.22288704403115, "id": "707"}, {"x": 446.93547360963817, "y": 330.0071586608009, "id": "708"}, {"x": 775.9259720056183, "y": 48.89770029165608, "id": "709"}, {"x": 742.2182161692206, "y": 398.81257970714836, "id": "710"}, {"x": 808.8968947882958, "y": 369.4922443617119, "id": "711"}, {"x": 275.4440029380927, "y": 300.66296128655404, "id": "712"}, {"x": 928.1631245714599, "y": 115.28509020135746, "id": "713"}, {"x": 645.2479030994916, "y": 61.74209007236298, "id": "714"}, {"x": 575.848897447355, "y": 785.4994654042915, "id": "715"}, {"x": 80.86860657271045, "y": 798.0774895736453, "id": "716"}, {"x": 74.08474024290778, "y": 370.0518160099775, "id": "717"}, {"x": 446.06020087819064, "y": 531.2374288858412, "id": "718"}, {"x": 33.022718633484935, "y": 872.709635677535, "id": "719"}, {"x": 501.6078791282948, "y": 638.40931439051, "id": "720"}, {"x": 14.743025189441038, "y": 619.4864521404168, "id": "721"}, {"x": 805.3810426438412, "y": 783.6631187722426, "id": "722"}, {"x": 739.1544792507782, "y": 540.6285782975157, "id": "723"}, {"x": 523.7218505695633, "y": 622.7988504341054, "id": "724"}, {"x": 846.581636369835, "y": 619.0210517760677, "id": "725"}, {"x": 916.9331325632894, "y": 881.5765895233093, "id": "726"}, {"x": 61.93792886465055, "y": 321.5638704649169, "id": "727"}, {"x": 933.7848767028199, "y": 672.0763762056399, "id": "728"}, {"x": 740.6968599657873, "y": 218.51871510853528, "id": "729"}, {"x": 686.8436804851833, "y": 320.07490357408994, "id": "730"}, {"x": 686.2454736306574, "y": 706.1186658090597, "id": "731"}, {"x": 218.13454250281816, "y": 768.7478381850595, "id": "732"}, {"x": 567.0345310849473, "y": 535.9191724708508, "id": "733"}, {"x": 665.1361522624396, "y": 994.8900028101685, "id": "734"}, {"x": 556.6539492412768, "y": 971.9802863365653, "id": "735"}, {"x": 125.49697283527217, "y": 530.2303380479904, "id": "736"}, {"x": 858.2630906019936, "y": 89.54287262642946, "id": "737"}, {"x": 978.335530720143, "y": 496.56900573266705, "id": "738"}, {"x": 615.6178714529827, "y": 798.5068919368297, "id": "739"}, {"x": 498.7653685047785, "y": 244.84850604160258, "id": "740"}, {"x": 749.1524782941491, "y": 298.49388173110816, "id": "741"}, {"x": 844.6385081408425, "y": 613.6869050385156, "id": "742"}, {"x": 277.3720108941726, "y": 876.8396359029257, "id": "743"}, {"x": 977.1499471105648, "y": 558.0964168953291, "id": "744"}, {"x": 692.8130341994729, "y": 3.978281798957539, "id": "745"}, {"x": 770.8303224960761, "y": 958.6773036228565, "id": "746"}, {"x": 842.8685908774471, "y": 156.40553656925326, "id": "747"}, {"x": 446.8941827794962, "y": 512.2900529917958, "id": "748"}, {"x": 175.36723649279074, "y": 450.60749148879574, "id": "749"}, {"x": 638.3705002651434, "y": 360.2103013296805, "id": "750"}, {"x": 761.0756465640083, "y": 0.9523093504292257, "id": "751"}, {"x": 481.4097991291492, "y": 433.82218661147, "id": "752"}, {"x": 415.79178846865983, "y": 518.6587734263164, "id": "753"}, {"x": 241.07522031779095, "y": 799.6098400035677, "id": "754"}, {"x": 5.462199418674207, "y": 298.8503966085494, "id": "755"}, {"x": 64.44630167644672, "y": 179.53883511163215, "id": "756"}, {"x": 671.0798402570293, "y": 814.3192519838864, "id": "757"}, {"x": 504.2609913142517, "y": 763.6649719468807, "id": "758"}, {"x": 467.5331874949269, "y": 253.96923326450914, "id": "759"}, {"x": 47.88290646707938, "y": 256.39934743475715, "id": "760"}, {"x": 783.5898503461947, "y": 259.5742403570256, "id": "761"}, {"x": 200.5017945555484, "y": 985.2514848701608, "id": "762"}, {"x": 879.1608994431115, "y": 916.4144319949427, "id": "763"}, {"x": 22.241656706830536, "y": 326.06465764309024, "id": "764"}, {"x": 107.58499790713405, "y": 901.6641432300081, "id": "765"}, {"x": 260.11839804753004, "y": 616.3958143067729, "id": "766"}, {"x": 105.242736696328, "y": 579.8612174627091, "id": "767"}, {"x": 656.7759801110609, "y": 355.53271981152193, "id": "768"}, {"x": 256.99125137530723, "y": 622.3799525207253, "id": "769"}, {"x": 956.7564525563527, "y": 595.4591326178494, "id": "770"}, {"x": 343.5148225422534, "y": 588.1967662514514, "id": "771"}, {"x": 800.1044076139721, "y": 199.20108681260862, "id": "772"}, {"x": 661.2919348142569, "y": 311.3400291745643, "id": "773"}, {"x": 562.2484514006458, "y": 919.6546218435321, "id": "774"}, {"x": 561.5859329490296, "y": 778.4592102937512, "id": "775"}, {"x": 827.5255322131209, "y": 371.0217575155146, "id": "776"}, {"x": 932.7519609800466, "y": 230.01227374068168, "id": "777"}, {"x": 973.8840462377622, "y": 974.6646388261669, "id": "778"}, {"x": 910.4800822915672, "y": 519.3946105128806, "id": "779"}, {"x": 733.4974972093119, "y": 500.2627206425667, "id": "780"}, {"x": 400.5566462180411, "y": 589.366497383202, "id": "781"}, {"x": 516.1708581955845, "y": 655.9340638791483, "id": "782"}, {"x": 67.92831541427202, "y": 330.3145976573425, "id": "783"}, {"x": 956.267369594614, "y": 736.4708078343883, "id": "784"}, {"x": 134.28343182986092, "y": 158.69467047796627, "id": "785"}, {"x": 798.2312754492463, "y": 268.0958889042385, "id": "786"}, {"x": 880.8156577943931, "y": 281.07049076269806, "id": "787"}, {"x": 76.50923404684285, "y": 553.1325561514005, "id": "788"}, {"x": 622.0267430560818, "y": 349.5996169898762, "id": "789"}, {"x": 107.05048727313715, "y": 946.2151368497642, "id": "790"}, {"x": 199.3687903686664, "y": 199.12556958439154, "id": "791"}, {"x": 966.5920111460409, "y": 470.81092599855435, "id": "792"}, {"x": 81.81328868459426, "y": 404.7225329755327, "id": "793"}, {"x": 835.6537539284984, "y": 141.4132691142943, "id": "794"}, {"x": 15.420781097352343, "y": 110.17768446483889, "id": "795"}, {"x": 54.39966451618727, "y": 197.96533430037465, "id": "796"}, {"x": 772.0712598007042, "y": 411.6289126712697, "id": "797"}, {"x": 733.349033926253, "y": 515.6038516851122, "id": "798"}, {"x": 554.9043012303198, "y": 402.0246999132987, "id": "799"}, {"x": 334.85822397265207, "y": 732.2304505466898, "id": "800"}, {"x": 969.8237031402937, "y": 262.9309975709114, "id": "801"}, {"x": 702.3750345627176, "y": 0.960603720339237, "id": "802"}, {"x": 609.9008456310654, "y": 603.9122761174605, "id": "803"}, {"x": 109.42575919478293, "y": 661.5477279033183, "id": "804"}, {"x": 711.9342632080148, "y": 100.21174927672149, "id": "805"}, {"x": 66.53192110779294, "y": 457.73409499068373, "id": "806"}, {"x": 385.9885088581533, "y": 816.5031032341019, "id": "807"}, {"x": 119.03107715564832, "y": 465.942750239517, "id": "808"}, {"x": 563.2788941219313, "y": 405.506778645483, "id": "809"}, {"x": 504.05634448259696, "y": 992.2176998497465, "id": "810"}, {"x": 618.6344981567258, "y": 744.2902691847805, "id": "811"}, {"x": 769.0539231989968, "y": 376.6264291235806, "id": "812"}, {"x": 215.02075711197978, "y": 327.94925934458075, "id": "813"}, {"x": 224.29631455103572, "y": 586.3438150411915, "id": "814"}, {"x": 355.60472673992507, "y": 751.4112804727872, "id": "815"}, {"x": 422.597550582716, "y": 71.99155309625316, "id": "816"}, {"x": 399.40148697573653, "y": 476.0410291240301, "id": "817"}, {"x": 625.8163675053974, "y": 847.4632244917443, "id": "818"}, {"x": 98.83047262521605, "y": 47.30346679207598, "id": "819"}, {"x": 165.78409350558522, "y": 434.4673032558517, "id": "820"}, {"x": 448.9656453741635, "y": 115.33383580618273, "id": "821"}, {"x": 932.0817060507809, "y": 179.42710107132487, "id": "822"}, {"x": 534.4147076485408, "y": 77.12683129935849, "id": "823"}, {"x": 306.102691780455, "y": 949.3290053391926, "id": "824"}, {"x": 625.8370684734319, "y": 103.10965338772316, "id": "825"}, {"x": 745.0486117309613, "y": 713.2325265747736, "id": "826"}, {"x": 373.7545926761254, "y": 633.470410605344, "id": "827"}, {"x": 78.7493170305128, "y": 773.1434748249833, "id": "828"}, {"x": 242.50418087145275, "y": 143.86946639396902, "id": "829"}, {"x": 564.2095157479412, "y": 436.3996330645863, "id": "830"}, {"x": 183.33221362546726, "y": 486.7799314246264, "id": "831"}, {"x": 531.6130579989664, "y": 217.8997430801203, "id": "832"}, {"x": 936.5940642956583, "y": 421.5295057352153, "id": "833"}, {"x": 127.17071813944358, "y": 918.9523375954016, "id": "834"}, {"x": 135.16038788727246, "y": 830.7769354682213, "id": "835"}, {"x": 475.8607960090855, "y": 79.54806421469551, "id": "836"}, {"x": 410.6500176917759, "y": 962.0161597675101, "id": "837"}, {"x": 748.9249689039056, "y": 23.25442986569881, "id": "838"}, {"x": 453.1635988361955, "y": 35.74334224779297, "id": "839"}, {"x": 246.14380201476837, "y": 632.8334453624666, "id": "840"}, {"x": 360.08664143179436, "y": 810.2860467307011, "id": "841"}, {"x": 670.5866240837174, "y": 132.63452986175938, "id": "842"}, {"x": 697.4727653648808, "y": 465.26206363769904, "id": "843"}, {"x": 104.9051902799626, "y": 413.4674747912158, "id": "844"}, {"x": 154.01406561059883, "y": 723.3203652472607, "id": "845"}, {"x": 63.003587432598486, "y": 757.5444423545688, "id": "846"}, {"x": 257.3511426581008, "y": 120.10423312701279, "id": "847"}, {"x": 876.6055475828581, "y": 101.58697082535917, "id": "848"}, {"x": 176.19472046844743, "y": 703.4368952470127, "id": "849"}, {"x": 90.43862349141108, "y": 523.1740677858548, "id": "850"}, {"x": 32.383441782997124, "y": 495.29634425009385, "id": "851"}, {"x": 655.2055167943807, "y": 773.7059273645748, "id": "852"}, {"x": 348.28445457351876, "y": 24.52737508597247, "id": "853"}, {"x": 641.4677931489309, "y": 102.93280046833142, "id": "854"}, {"x": 789.6943733620695, "y": 479.4568337304904, "id": "855"}, {"x": 391.0160501305884, "y": 308.9355724929695, "id": "856"}, {"x": 371.452384096433, "y": 831.8577937861746, "id": "857"}, {"x": 885.5419564948753, "y": 506.00141065314017, "id": "858"}, {"x": 355.0217562707243, "y": 285.56274609027344, "id": "859"}, {"x": 862.9898838663387, "y": 473.4429118868786, "id": "860"}, {"x": 975.4180335130201, "y": 812.190418200939, "id": "861"}, {"x": 500.57537253172404, "y": 465.69149360785235, "id": "862"}, {"x": 970.1908167238639, "y": 756.5609985078033, "id": "863"}, {"x": 775.8143856955111, "y": 263.18702702513997, "id": "864"}, {"x": 449.1495380337602, "y": 932.7087226929316, "id": "865"}, {"x": 923.6247428765072, "y": 979.0391529717257, "id": "866"}, {"x": 879.0596426111317, "y": 711.354038600198, "id": "867"}, {"x": 198.00989662201607, "y": 607.6337885715833, "id": "868"}, {"x": 964.9081971025049, "y": 731.0626957833099, "id": "869"}, {"x": 366.3667058424273, "y": 198.8627056729557, "id": "870"}, {"x": 805.7088448801197, "y": 352.6611395053929, "id": "871"}, {"x": 470.1080003591991, "y": 180.81813939369863, "id": "872"}, {"x": 313.3123954303422, "y": 932.2568496665581, "id": "873"}, {"x": 925.719659528262, "y": 795.7177399233686, "id": "874"}, {"x": 758.6186841518904, "y": 127.93800712167436, "id": "875"}, {"x": 425.0420848480303, "y": 245.95048123639495, "id": "876"}, {"x": 562.7894910471958, "y": 601.1922283549997, "id": "877"}, {"x": 822.6970446052217, "y": 639.9527570474798, "id": "878"}, {"x": 146.88327800267388, "y": 663.7548294715192, "id": "879"}, {"x": 918.3771231880809, "y": 821.396287095177, "id": "880"}, {"x": 103.52224409735112, "y": 643.297725177991, "id": "881"}, {"x": 472.51202584516307, "y": 410.05763526341286, "id": "882"}, {"x": 603.8074161445237, "y": 754.6666969375005, "id": "883"}, {"x": 439.6107049359271, "y": 421.56024170935666, "id": "884"}, {"x": 966.0803868650694, "y": 431.6180623242262, "id": "885"}, {"x": 131.0019936972683, "y": 758.9363656547532, "id": "886"}, {"x": 396.2595793299203, "y": 698.3310661917625, "id": "887"}, {"x": 762.283211726103, "y": 748.9492414735435, "id": "888"}, {"x": 634.0381084179618, "y": 653.4263937549708, "id": "889"}, {"x": 610.7110075788274, "y": 91.28578553340971, "id": "890"}, {"x": 793.6204067900636, "y": 484.4113025561697, "id": "891"}, {"x": 994.2360076719192, "y": 300.7171406899003, "id": "892"}, {"x": 534.6582892124057, "y": 23.71171675163186, "id": "893"}, {"x": 778.8938670119887, "y": 672.2092638291911, "id": "894"}, {"x": 215.82308653933814, "y": 612.5476045977749, "id": "895"}, {"x": 350.306080213982, "y": 944.927243377151, "id": "896"}, {"x": 499.6467718881316, "y": 453.9994588863754, "id": "897"}, {"x": 314.59304207778194, "y": 424.3553680398424, "id": "898"}, {"x": 803.9291337803144, "y": 574.4572785192862, "id": "899"}, {"x": 802.1028116133222, "y": 284.63810387819575, "id": "900"}, {"x": 686.4400403692654, "y": 192.1068627183028, "id": "901"}, {"x": 247.3972519128348, "y": 555.4390299848377, "id": "902"}, {"x": 573.9375468682427, "y": 804.5072783649904, "id": "903"}, {"x": 284.63068268293523, "y": 556.7347655154533, "id": "904"}, {"x": 23.31108810259863, "y": 811.9321200787866, "id": "905"}, {"x": 151.8461681244222, "y": 906.4875950633797, "id": "906"}, {"x": 97.7313222521411, "y": 447.7323415295198, "id": "907"}, {"x": 114.37235009199398, "y": 975.5666541697391, "id": "908"}, {"x": 723.6109980176836, "y": 433.3801637618989, "id": "909"}, {"x": 573.5392430296104, "y": 222.03349080425605, "id": "910"}, {"x": 687.1427741463401, "y": 706.2510430656375, "id": "911"}, {"x": 776.6666263773238, "y": 877.2482723704928, "id": "912"}, {"x": 522.8569958571437, "y": 556.3291600309774, "id": "913"}, {"x": 566.59327491839, "y": 151.42830003051134, "id": "914"}, {"x": 674.0517062041504, "y": 376.9636215416219, "id": "915"}, {"x": 855.1139340143764, "y": 554.0597894916685, "id": "916"}, {"x": 5.27804613030336, "y": 975.0713897903601, "id": "917"}, {"x": 291.66822960830183, "y": 963.8526808875893, "id": "918"}, {"x": 547.7783191652532, "y": 876.0812432780559, "id": "919"}, {"x": 2.9970399556500382, "y": 223.4800218633989, "id": "920"}, {"x": 944.689981615856, "y": 721.8725538445773, "id": "921"}, {"x": 596.91862475428, "y": 511.33207842177865, "id": "922"}, {"x": 531.16367205903, "y": 46.7382229123765, "id": "923"}, {"x": 591.483609168352, "y": 229.4311090949519, "id": "924"}, {"x": 912.8605818180372, "y": 8.120044359208546, "id": "925"}, {"x": 715.9093590381902, "y": 90.72432433923106, "id": "926"}, {"x": 48.302905737150795, "y": 496.6340163044223, "id": "927"}, {"x": 802.7826425977606, "y": 370.553542433825, "id": "928"}, {"x": 832.3796891255223, "y": 725.6165091369951, "id": "929"}, {"x": 831.7274579376998, "y": 603.0170971562609, "id": "930"}, {"x": 734.5291599623357, "y": 740.4955032232481, "id": "931"}, {"x": 229.92096644285076, "y": 981.9498115819206, "id": "932"}, {"x": 705.8937581181481, "y": 82.12523170069275, "id": "933"}, {"x": 428.65840548780056, "y": 926.2725968025402, "id": "934"}, {"x": 733.9481196405238, "y": 469.77607443745126, "id": "935"}, {"x": 218.6780601052575, "y": 588.0925495177461, "id": "936"}, {"x": 577.7331359203957, "y": 318.0447974315829, "id": "937"}, {"x": 492.91822554248955, "y": 755.3316912348412, "id": "938"}, {"x": 508.49834507155765, "y": 158.92569890427032, "id": "939"}, {"x": 429.5070032753443, "y": 4.779796859613272, "id": "940"}, {"x": 237.09746325126113, "y": 256.57791920762776, "id": "941"}, {"x": 847.0426117909001, "y": 533.0637031904422, "id": "942"}, {"x": 38.9576279222702, "y": 965.4730282542392, "id": "943"}, {"x": 937.8159504072377, "y": 324.1149398922312, "id": "944"}, {"x": 680.4214405887705, "y": 321.67383064849685, "id": "945"}, {"x": 288.5025608061601, "y": 376.1470476339555, "id": "946"}, {"x": 285.89941747026637, "y": 213.52643365942924, "id": "947"}, {"x": 882.2039211295445, "y": 869.1957915149703, "id": "948"}, {"x": 955.9210057039828, "y": 160.92235241458542, "id": "949"}, {"x": 700.3881361178597, "y": 720.7611963443309, "id": "950"}, {"x": 261.38495930557946, "y": 730.2671065199202, "id": "951"}, {"x": 404.09380117596015, "y": 958.1126735829656, "id": "952"}, {"x": 130.72062492427105, "y": 126.42643023607936, "id": "953"}, {"x": 137.68759233112314, "y": 454.25875458441976, "id": "954"}, {"x": 981.9018162001914, "y": 209.70303936763446, "id": "955"}, {"x": 687.776052416196, "y": 187.0025045598016, "id": "956"}, {"x": 822.9959773836548, "y": 8.648022441139492, "id": "957"}, {"x": 298.5760969545974, "y": 567.7118787662215, "id": "958"}, {"x": 103.26738776544953, "y": 451.0475590741686, "id": "959"}, {"x": 722.4260187239132, "y": 22.287966986095697, "id": "960"}, {"x": 664.624128005972, "y": 974.6349026147038, "id": "961"}, {"x": 529.8020776438076, "y": 661.1936467808708, "id": "962"}, {"x": 520.2994622200566, "y": 498.5691635866941, "id": "963"}, {"x": 574.5760361930734, "y": 837.8226483876682, "id": "964"}, {"x": 424.9605959222898, "y": 502.134504320649, "id": "965"}, {"x": 157.17982788313068, "y": 492.00834852222044, "id": "966"}, {"x": 543.038885200126, "y": 320.5895552895411, "id": "967"}, {"x": 695.1842695621431, "y": 731.3129088354902, "id": "968"}, {"x": 571.9127481128415, "y": 651.1402694239638, "id": "969"}, {"x": 9.332876035698657, "y": 184.85604535880873, "id": "970"}, {"x": 807.3774179197601, "y": 48.34057654211055, "id": "971"}, {"x": 251.8583474154663, "y": 789.8923218268485, "id": "972"}, {"x": 245.84132881994148, "y": 736.9583356194114, "id": "973"}, {"x": 330.5379866978145, "y": 439.59985483926414, "id": "974"}, {"x": 557.756732093532, "y": 414.4462459079148, "id": "975"}, {"x": 835.8778105637535, "y": 125.00695201728529, "id": "976"}, {"x": 662.4314974027095, "y": 55.34328991143755, "id": "977"}, {"x": 495.22069713851135, "y": 797.5558748239525, "id": "978"}, {"x": 238.50658056818287, "y": 660.0681196136301, "id": "979"}, {"x": 328.9978341691694, "y": 16.6399036869066, "id": "980"}, {"x": 890.8068328383316, "y": 20.799974947180445, "id": "981"}, {"x": 873.4611699164157, "y": 703.7958898375543, "id": "982"}, {"x": 722.853836549192, "y": 50.456237475063894, "id": "983"}, {"x": 49.30548915501065, "y": 229.66442580317502, "id": "984"}, {"x": 301.59186809314195, "y": 389.59392428762254, "id": "985"}, {"x": 588.6760915806683, "y": 805.171116868913, "id": "986"}, {"x": 406.81159291797775, "y": 52.62656865366955, "id": "987"}, {"x": 640.1972360121224, "y": 956.8267858076046, "id": "988"}, {"x": 93.18253691457356, "y": 769.7116649748536, "id": "989"}, {"x": 288.8171394497897, "y": 788.9941437070012, "id": "990"}, {"x": 966.8186212466834, "y": 881.425915518964, "id": "991"}, {"x": 333.38235349610056, "y": 768.3805813489076, "id": "992"}, {"x": 259.70220257353736, "y": 18.59916178697929, "id": "993"}, {"x": 737.4048793625267, "y": 575.7771718486586, "id": "994"}, {"x": 542.3084949619541, "y": 594.7070104706975, "id": "995"}, {"x": 932.1944556232315, "y": 516.8426056706535, "id": "996"}, {"x": 305.1293667908883, "y": 967.060681900689, "id": "997"}, {"x": 358.00743963099535, "y": 889.9944593145669, "id": "998"}, {"x": 979.1451071142517, "y": 637.6175571033416, "id": "999"}], "links": [{"source": "0", "target": "1"}, {"source": "2", "target": "3"}, {"source": "4", "target": "5"}, {"source": "6", "target": "7"}, {"source": "8", "target": "9"}, {"source": "10", "target": "11"}, {"source": "12", "target": "13"}, {"source": "14", "target": "15"}, {"source": "16", "target": "17"}, {"source": "18", "target": "19"}, {"source": "20", "target": "21"}, {"source": "22", "target": "23"}, {"source": "24", "target": "25"}, {"source": "26", "target": "27"}, {"source": "28", "target": "29"}, {"source": "30", "target": "31"}, {"source": "32", "target": "33"}, {"source": "34", "target": "35"}, {"source": "36", "target": "37"}, {"source": "38", "target": "39"}, {"source": "40", "target": "41"}, {"source": "42", "target": "43"}, {"source": "44", "target": "45"}, {"source": "46", "target": "47"}, {"source": "48", "target": "49"}, {"source": "50", "target": "51"}, {"source": "52", "target": "53"}, {"source": "54", "target": "55"}, {"source": "56", "target": "57"}, {"source": "58", "target": "59"}, {"source": "60", "target": "61"}, {"source": "62", "target": "63"}, {"source": "64", "target": "65"}, {"source": "66", "target": "67"}, {"source": "68", "target": "69"}, {"source": "70", "target": "71"}, {"source": "72", "target": "73"}, {"source": "74", "target": "75"}, {"source": "76", "target": "77"}, {"source": "78", "target": "79"}, {"source": "80", "target": "81"}, {"source": "82", "target": "83"}, {"source": "84", "target": "85"}, {"source": "86", "target": "87"}, {"source": "88", "target": "89"}, {"source": "90", "target": "91"}, {"source": "92", "target": "93"}, {"source": "94", "target": "95"}, {"source": "96", "target": "97"}, {"source": "98", "target": "99"}, {"source": "100", "target": "101"}, {"source": "102", "target": "103"}, {"source": "104", "target": "105"}, {"source": "106", "target": "107"}, {"source": "108", "target": "109"}, {"source": "110", "target": "111"}, {"source": "112", "target": "113"}, {"source": "114", "target": "115"}, {"source": "116", "target": "117"}, {"source": "118", "target": "119"}, {"source": "120", "target": "121"}, {"source": "122", "target": "123"}, {"source": "124", "target": "125"}, {"source": "126", "target": "127"}, {"source": "128", "target": "129"}, {"source": "130", "target": "131"}, {"source": "132", "target": "133"}, {"source": "134", "target": "135"}, {"source": "136", "target": "137"}, {"source": "138", "target": "139"}, {"source": "140", "target": "141"}, {"source": "142", "target": "143"}, {"source": "144", "target": "145"}, {"source": "146", "target": "147"}, {"source": "148", "target": "149"}, {"source": "150", "target": "151"}, {"source": "152", "target": "153"}, {"source": "154", "target": "155"}, {"source": "156", "target": "157"}, {"source": "158", "target": "159"}, {"source": "160", "target": "161"}, {"source": "162", "target": "163"}, {"source": "164", "target": "165"}, {"source": "166", "target": "167"}, {"source": "168", "target": "169"}, {"source": "170", "target": "171"}, {"source": "172", "target": "173"}, {"source": "174", "target": "175"}, {"source": "176", "target": "177"}, {"source": "178", "target": "179"}, {"source": "180", "target": "181"}, {"source": "182", "target": "183"}, {"source": "184", "target": "185"}, {"source": "186", "target": "187"}, {"source": "188", "target": "189"}, {"source": "190", "target": "191"}, {"source": "192", "target": "193"}, {"source": "194", "target": "195"}, {"source": "196", "target": "197"}, {"source": "198", "target": "199"}, {"source": "200", "target": "201"}, {"source": "202", "target": "203"}, {"source": "204", "target": "205"}, {"source": "206", "target": "207"}, {"source": "208", "target": "209"}, {"source": "210", "target": "211"}, {"source": "212", "target": "213"}, {"source": "214", "target": "215"}, {"source": "216", "target": "217"}, {"source": "218", "target": "219"}, {"source": "220", "target": "221"}, {"source": "222", "target": "223"}, {"source": "224", "target": "225"}, {"source": "226", "target": "227"}, {"source": "228", "target": "229"}, {"source": "230", "target": "231"}, {"source": "232", "target": "233"}, {"source": "234", "target": "235"}, {"source": "236", "target": "237"}, {"source": "238", "target": "239"}, {"source": "240", "target": "241"}, {"source": "242", "target": "243"}, {"source": "244", "target": "245"}, {"source": "246", "target": "247"}, {"source": "248", "target": "249"}, {"source": "250", "target": "251"}, {"source": "252", "target": "253"}, {"source": "254", "target": "255"}, {"source": "256", "target": "257"}, {"source": "258", "target": "259"}, {"source": "260", "target": "261"}, {"source": "262", "target": "263"}, {"source": "264", "target": "265"}, {"source": "266", "target": "267"}, {"source": "268", "target": "269"}, {"source": "270", "target": "271"}, {"source": "272", "target": "273"}, {"source": "274", "target": "275"}, {"source": "276", "target": "277"}, {"source": "278", "target": "279"}, {"source": "280", "target": "281"}, {"source": "282", "target": "283"}, {"source": "284", "target": "285"}, {"source": "286", "target": "287"}, {"source": "288", "target": "289"}, {"source": "290", "target": "291"}, {"source": "292", "target": "293"}, {"source": "294", "target": "295"}, {"source": "296", "target": "297"}, {"source": "298", "target": "299"}, {"source": "300", "target": "301"}, {"source": "302", "target": "303"}, {"source": "304", "target": "305"}, {"source": "306", "target": "307"}, {"source": "308", "target": "309"}, {"source": "310", "target": "311"}, {"source": "312", "target": "313"}, {"source": "314", "target": "315"}, {"source": "316", "target": "317"}, {"source": "318", "target": "319"}, {"source": "320", "target": "321"}, {"source": "322", "target": "323"}, {"source": "324", "target": "325"}, {"source": "326", "target": "327"}, {"source": "328", "target": "329"}, {"source": "330", "target": "331"}, {"source": "332", "target": "333"}, {"source": "334", "target": "335"}, {"source": "336", "target": "337"}, {"source": "338", "target": "339"}, {"source": "340", "target": "341"}, {"source": "342", "target": "343"}, {"source": "344", "target": "345"}, {"source": "346", "target": "347"}, {"source": "348", "target": "349"}, {"source": "350", "target": "351"}, {"source": "352", "target": "353"}, {"source": "354", "target": "355"}, {"source": "356", "target": "357"}, {"source": "358", "target": "359"}, {"source": "360", "target": "361"}, {"source": "362", "target": "363"}, {"source": "364", "target": "365"}, {"source": "366", "target": "367"}, {"source": "368", "target": "369"}, {"source": "370", "target": "371"}, {"source": "372", "target": "373"}, {"source": "374", "target": "375"}, {"source": "376", "target": "377"}, {"source": "378", "target": "379"}, {"source": "380", "target": "381"}, {"source": "382", "target": "383"}, {"source": "384", "target": "385"}, {"source": "386", "target": "387"}, {"source": "388", "target": "389"}, {"source": "390", "target": "391"}, {"source": "392", "target": "393"}, {"source": "394", "target": "395"}, {"source": "396", "target": "397"}, {"source": "398", "target": "399"}, {"source": "400", "target": "401"}, {"source": "402", "target": "403"}, {"source": "404", "target": "405"}, {"source": "406", "target": "407"}, {"source": "408", "target": "409"}, {"source": "410", "target": "411"}, {"source": "412", "target": "413"}, {"source": "414", "target": "415"}, {"source": "416", "target": "417"}, {"source": "418", "target": "419"}, {"source": "420", "target": "421"}, {"source": "422", "target": "423"}, {"source": "424", "target": "425"}, {"source": "426", "target": "427"}, {"source": "428", "target": "429"}, {"source": "430", "target": "431"}, {"source": "432", "target": "433"}, {"source": "434", "target": "435"}, {"source": "436", "target": "437"}, {"source": "438", "target": "439"}, {"source": "440", "target": "441"}, {"source": "442", "target": "443"}, {"source": "444", "target": "445"}, {"source": "446", "target": "447"}, {"source": "448", "target": "449"}, {"source": "450", "target": "451"}, {"source": "452", "target": "453"}, {"source": "454", "target": "455"}, {"source": "456", "target": "457"}, {"source": "458", "target": "459"}, {"source": "460", "target": "461"}, {"source": "462", "target": "463"}, {"source": "464", "target": "465"}, {"source": "466", "target": "467"}, {"source": "468", "target": "469"}, {"source": "470", "target": "471"}, {"source": "472", "target": "473"}, {"source": "474", "target": "475"}, {"source": "476", "target": "477"}, {"source": "478", "target": "479"}, {"source": "480", "target": "481"}, {"source": "482", "target": "483"}, {"source": "484", "target": "485"}, {"source": "486", "target": "487"}, {"source": "488", "target": "489"}, {"source": "490", "target": "491"}, {"source": "492", "target": "493"}, {"source": "494", "target": "495"}, {"source": "496", "target": "497"}, {"source": "498", "target": "499"}, {"source": "500", "target": "501"}, {"source": "502", "target": "503"}, {"source": "504", "target": "505"}, {"source": "506", "target": "507"}, {"source": "508", "target": "509"}, {"source": "510", "target": "511"}, {"source": "512", "target": "513"}, {"source": "514", "target": "515"}, {"source": "516", "target": "517"}, {"source": "518", "target": "519"}, {"source": "520", "target": "521"}, {"source": "522", "target": "523"}, {"source": "524", "target": "525"}, {"source": "526", "target": "527"}, {"source": "528", "target": "529"}, {"source": "530", "target": "531"}, {"source": "532", "target": "533"}, {"source": "534", "target": "535"}, {"source": "536", "target": "537"}, {"source": "538", "target": "539"}, {"source": "540", "target": "541"}, {"source": "542", "target": "543"}, {"source": "544", "target": "545"}, {"source": "546", "target": "547"}, {"source": "548", "target": "549"}, {"source": "550", "target": "551"}, {"source": "552", "target": "553"}, {"source": "554", "target": "555"}, {"source": "556", "target": "557"}, {"source": "558", "target": "559"}, {"source": "560", "target": "561"}, {"source": "562", "target": "563"}, {"source": "564", "target": "565"}, {"source": "566", "target": "567"}, {"source": "568", "target": "569"}, {"source": "570", "target": "571"}, {"source": "572", "target": "573"}, {"source": "574", "target": "575"}, {"source": "576", "target": "577"}, {"source": "578", "target": "579"}, {"source": "580", "target": "581"}, {"source": "582", "target": "583"}, {"source": "584", "target": "585"}, {"source": "586", "target": "587"}, {"source": "588", "target": "589"}, {"source": "590", "target": "591"}, {"source": "592", "target": "593"}, {"source": "594", "target": "595"}, {"source": "596", "target": "597"}, {"source": "598", "target": "599"}, {"source": "600", "target": "601"}, {"source": "602", "target": "603"}, {"source": "604", "target": "605"}, {"source": "606", "target": "607"}, {"source": "608", "target": "609"}, {"source": "610", "target": "611"}, {"source": "612", "target": "613"}, {"source": "614", "target": "615"}, {"source": "616", "target": "617"}, {"source": "618", "target": "619"}, {"source": "620", "target": "621"}, {"source": "622", "target": "623"}, {"source": "624", "target": "625"}, {"source": "626", "target": "627"}, {"source": "628", "target": "629"}, {"source": "630", "target": "631"}, {"source": "632", "target": "633"}, {"source": "634", "target": "635"}, {"source": "636", "target": "637"}, {"source": "638", "target": "639"}, {"source": "640", "target": "641"}, {"source": "642", "target": "643"}, {"source": "644", "target": "645"}, {"source": "646", "target": "647"}, {"source": "648", "target": "649"}, {"source": "650", "target": "651"}, {"source": "652", "target": "653"}, {"source": "654", "target": "655"}, {"source": "656", "target": "657"}, {"source": "658", "target": "659"}, {"source": "660", "target": "661"}, {"source": "662", "target": "663"}, {"source": "664", "target": "665"}, {"source": "666", "target": "667"}, {"source": "668", "target": "669"}, {"source": "670", "target": "671"}, {"source": "672", "target": "673"}, {"source": "674", "target": "675"}, {"source": "676", "target": "677"}, {"source": "678", "target": "679"}, {"source": "680", "target": "681"}, {"source": "682", "target": "683"}, {"source": "684", "target": "685"}, {"source": "686", "target": "687"}, {"source": "688", "target": "689"}, {"source": "690", "target": "691"}, {"source": "692", "target": "693"}, {"source": "694", "target": "695"}, {"source": "696", "target": "697"}, {"source": "698", "target": "699"}, {"source": "700", "target": "701"}, {"source": "702", "target": "703"}, {"source": "704", "target": "705"}, {"source": "706", "target": "707"}, {"source": "708", "target": "709"}, {"source": "710", "target": "711"}, {"source": "712", "target": "713"}, {"source": "714", "target": "715"}, {"source": "716", "target": "717"}, {"source": "718", "target": "719"}, {"source": "720", "target": "721"}, {"source": "722", "target": "723"}, {"source": "724", "target": "725"}, {"source": "726", "target": "727"}, {"source": "728", "target": "729"}, {"source": "730", "target": "731"}, {"source": "732", "target": "733"}, {"source": "734", "target": "735"}, {"source": "736", "target": "737"}, {"source": "738", "target": "739"}, {"source": "740", "target": "741"}, {"source": "742", "target": "743"}, {"source": "744", "target": "745"}, {"source": "746", "target": "747"}, {"source": "748", "target": "749"}, {"source": "750", "target": "751"}, {"source": "752", "target": "753"}, {"source": "754", "target": "755"}, {"source": "756", "target": "757"}, {"source": "758", "target": "759"}, {"source": "760", "target": "761"}, {"source": "762", "target": "763"}, {"source": "764", "target": "765"}, {"source": "766", "target": "767"}, {"source": "768", "target": "769"}, {"source": "770", "target": "771"}, {"source": "772", "target": "773"}, {"source": "774", "target": "775"}, {"source": "776", "target": "777"}, {"source": "778", "target": "779"}, {"source": "780", "target": "781"}, {"source": "782", "target": "783"}, {"source": "784", "target": "785"}, {"source": "786", "target": "787"}, {"source": "788", "target": "789"}, {"source": "790", "target": "791"}, {"source": "792", "target": "793"}, {"source": "794", "target": "795"}, {"source": "796", "target": "797"}, {"source": "798", "target": "799"}, {"source": "800", "target": "801"}, {"source": "802", "target": "803"}, {"source": "804", "target": "805"}, {"source": "806", "target": "807"}, {"source": "808", "target": "809"}, {"source": "810", "target": "811"}, {"source": "812", "target": "813"}, {"source": "814", "target": "815"}, {"source": "816", "target": "817"}, {"source": "818", "target": "819"}, {"source": "820", "target": "821"}, {"source": "822", "target": "823"}, {"source": "824", "target": "825"}, {"source": "826", "target": "827"}, {"source": "828", "target": "829"}, {"source": "830", "target": "831"}, {"source": "832", "target": "833"}, {"source": "834", "target": "835"}, {"source": "836", "target": "837"}, {"source": "838", "target": "839"}, {"source": "840", "target": "841"}, {"source": "842", "target": "843"}, {"source": "844", "target": "845"}, {"source": "846", "target": "847"}, {"source": "848", "target": "849"}, {"source": "850", "target": "851"}, {"source": "852", "target": "853"}, {"source": "854", "target": "855"}, {"source": "856", "target": "857"}, {"source": "858", "target": "859"}, {"source": "860", "target": "861"}, {"source": "862", "target": "863"}, {"source": "864", "target": "865"}, {"source": "866", "target": "867"}, {"source": "868", "target": "869"}, {"source": "870", "target": "871"}, {"source": "872", "target": "873"}, {"source": "874", "target": "875"}, {"source": "876", "target": "877"}, {"source": "878", "target": "879"}, {"source": "880", "target": "881"}, {"source": "882", "target": "883"}, {"source": "884", "target": "885"}, {"source": "886", "target": "887"}, {"source": "888", "target": "889"}, {"source": "890", "target": "891"}, {"source": "892", "target": "893"}, {"source": "894", "target": "895"}, {"source": "896", "target": "897"}, {"source": "898", "target": "899"}, {"source": "900", "target": "901"}, {"source": "902", "target": "903"}, {"source": "904", "target": "905"}, {"source": "906", "target": "907"}, {"source": "908", "target": "909"}, {"source": "910", "target": "911"}, {"source": "912", "target": "913"}, {"source": "914", "target": "915"}, {"source": "916", "target": "917"}, {"source": "918", "target": "919"}, {"source": "920", "target": "921"}, {"source": "922", "target": "923"}, {"source": "924", "target": "925"}, {"source": "926", "target": "927"}, {"source": "928", "target": "929"}, {"source": "930", "target": "931"}, {"source": "932", "target": "933"}, {"source": "934", "target": "935"}, {"source": "936", "target": "937"}, {"source": "938", "target": "939"}, {"source": "940", "target": "941"}, {"source": "942", "target": "943"}, {"source": "944", "target": "945"}, {"source": "946", "target": "947"}, {"source": "948", "target": "949"}, {"source": "950", "target": "951"}, {"source": "952", "target": "953"}, {"source": "954", "target": "955"}, {"source": "956", "target": "957"}, {"source": "958", "target": "959"}, {"source": "960", "target": "961"}, {"source": "962", "target": "963"}, {"source": "964", "target": "965"}, {"source": "966", "target": "967"}, {"source": "968", "target": "969"}, {"source": "970", "target": "971"}, {"source": "972", "target": "973"}, {"source": "974", "target": "975"}, {"source": "976", "target": "977"}, {"source": "978", "target": "979"}, {"source": "980", "target": "981"}, {"source": "982", "target": "983"}, {"source": "984", "target": "985"}, {"source": "986", "target": "987"}, {"source": "988", "target": "989"}, {"source": "990", "target": "991"}, {"source": "992", "target": "993"}, {"source": "994", "target": "995"}, {"source": "996", "target": "997"}, {"source": "998", "target": "999"}]}
--------------------------------------------------------------------------------