Skip to content

Instantly share code, notes, and snippets.

@jrladd
Last active Sep 7, 2016
Embed
What would you like to do?
Miscellany network

This bipartite force-directed network graph shows participants in university miscellanies from the 1650s and 1660s. Dark green nodes represent texts published before 1660, while light green nodes represent those published after. The rest of the nodes are for individual contributors (mouseover to see names, scroll or double-click to zoom, click a node to see ego networks). The dark blue nodes show political "shapeshifters" who published in miscellanies both before and after the Restoration. Notice that the graph separates not by political affiliation (Royalist and Republican) but by university affiliation (Oxford and Cambridge).

This visualization is based on a demo from Mike Bostock, on force-directed graphs. Additionally it handles search and a dropdown menu, which allows you to switch between different measures of centrality (degree, betweenness, and closeness) without reloading the graph. (All centrality calculations were made using the bipartite algorithms in Python's NetworkX.)

<!DOCTYPE html>
<meta charset="utf-8">
<style>
.links line {
stroke: #999;
stroke-opacity: 0.6;
}
.nodes circle {
stroke: #fff;
stroke-width: 1.5px;
}
#tools div {
float: right;
display: inline;
}
form { display: inline; }
</style>
<body>
<div id='tools'>
</div>
<svg width="960" height="600"></svg>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://d3js.org/d3-scale-chromatic.v1.min.js"></script>
<script>
var svg = d3.select("svg"),
width = +svg.attr("width"),
height = +svg.attr("height");
// Call zoom for svg container.
svg.call(d3.zoom().on('zoom', zoomed));
var color = d3.scaleOrdinal(d3.schemePaired);
var simulation = d3.forceSimulation()
.force("link", d3.forceLink())//Or to use names rather than indices: .id(function(d) { return d.id; }))
.force("charge", d3.forceManyBody().strength([-120]).distanceMax([500]))
.force("center", d3.forceCenter(width / 2, height / 2));
var container = svg.append('g');
// Create form for search (see function below).
var search = d3.select("div#tools").append('form').attr('onsubmit', 'return false;');
var box = search.append('input')
.attr('type', 'text')
.attr('id', 'searchTerm')
.attr('placeholder', 'Type to search...');
var button = search.append('input')
.attr('type', 'button')
.attr('value', 'Search')
.on('click', function () { searchNodes(); });
// Toggle for ego networks on click (below).
var toggle = 0;
d3.json("miscellany_network.json", function(error, graph) {
if (error) throw error;
// Make object of all neighboring nodes.
var linkedByIndex = {};
graph.links.forEach(function(d) {
linkedByIndex[d.source + ',' + d.target] = 1;
linkedByIndex[d.target + ',' + d.source] = 1;
});
// A function to test if two nodes are neighboring.
function neighboring(a, b) {
return linkedByIndex[a.index + ',' + b.index];
}
// Linear scale for degree centrality.
var degreeSize = d3.scaleLinear()
.domain([d3.min(graph.nodes, function(d) {return d.degreecentrality; }),d3.max(graph.nodes, function(d) {return d.degreecentrality; })])
.range([8,25]);
// Collision detection based on degree centrality.
simulation.force("collide", d3.forceCollide().radius( function (d) { return degreeSize(d.degreecentrality); }));
var link = container.append("g")
.attr("class", "links")
.selectAll("line")
.data(graph.links, function(d) { return d.source + ", " + d.target;})
.enter().append("line")
.attr('class', 'link');
var node = container.append("g")
.attr("class", "nodes")
.selectAll("circle")
.data(graph.nodes)
.enter().append("circle")
// Calculate degree centrality within JavaScript.
//.attr("r", function(d, i) { count = 0; graph.links.forEach(function(l) { if (l.source == i || l.target == i) { count += 1;}; }); return size(count);})
// Use degree centrality from NetworkX in json.
.attr('r', function(d, i) { return degreeSize(d.degreecentrality); })
// Color by bipartite indicator.
//.attr("fill", function(d) { return color(d.bipartite); })
.style("fill", function(d) { if (d.date >= 1660) {return color(0);} else if (d.date < 1660) {return color(1);} else if (d.shapeshifter == 1) {return color(2);} else {return color(3);} })
.attr('class', 'node')
// On click, toggle ego networks for the selected node.
.on('click', function(d, i) {
if (toggle == 0) {
// Ternary operator restyles links and nodes if they are adjacent.
d3.selectAll('.link').style('stroke-opacity', function (l) {
return l.target == d || l.source == d ? 1 : 0.1;
});
d3.selectAll('.node').style('opacity', function (n) {
return neighboring(d, n) ? 1 : 0.1;
});
d3.select(this).style('opacity', 1);
toggle = 1;
}
else {
// Restore nodes and links to normal opacity.
d3.selectAll('.link').style('stroke-opacity', '0.6');
d3.selectAll('.node').style('opacity', '1');
toggle = 0;
}
})
.call(d3.drag()
.on("start", dragstarted)
.on("drag", dragged)
.on("end", dragended));
node.append("title")
.text(function(d) { return d.id; });
simulation
.nodes(graph.nodes)
.on("tick", ticked);
simulation.force("link")
.links(graph.links);
function ticked() {
link
.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
node
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
}
// A dropdown menu with three different centrality measures, calculated in NetworkX.
// Accounts for node collision.
var dropdown = d3.select('div#tools').append('div')
.append('select')
.on('change', function() {
var centrality = this.value;
var centralitySize = d3.scaleLinear()
.domain([d3.min(graph.nodes, function(d) { return d[centrality]; }), d3.max(graph.nodes, function(d) { return d[centrality]; })])
.range([8,25]);
node.attr('r', function(d) { return centralitySize(d[centrality]); } );
// Recalculate collision detection based on selected centrality.
simulation.force("collide", d3.forceCollide().radius( function (d) { return centralitySize(d[centrality]); }));
simulation.alphaTarget(0.1).restart();
});
dropdown.selectAll('option')
.data(['Degree Centrality', 'Betweenness Centrality', 'Closeness Centrality'])
.enter().append('option')
.attr('value', function(d) { return d.split(' ')[0].toLowerCase()+'centrality'; })
.text(function(d) { return d; });
});
function dragstarted(d) {
if (!d3.event.active) simulation.alphaTarget(0.3).restart();
d.fx = d.x;
d.fy = d.y;
}
function dragged(d) {
d.fx = d3.event.x;
d.fy = d3.event.y;
}
function dragended(d) {
if (!d3.event.active) simulation.alphaTarget(0);
d.fx = null;
d.fy = null;
}
// Zooming function translates the size of the svg container.
function zoomed() {
container.attr("transform", "translate(" + d3.event.transform.x + ", " + d3.event.transform.y + ") scale(" + d3.event.transform.k + ")");
}
// Search for nodes by making all unmatched nodes temporarily transparent.
function searchNodes() {
var term = document.getElementById('searchTerm').value;
var selected = container.selectAll('.node').filter(function (d, i) {
return d.id.toLowerCase().search(term.toLowerCase()) == -1;
});
selected.style('opacity', '0');
var link = container.selectAll('.link');
link.style('stroke-opacity', '0');
d3.selectAll('.node').transition()
.duration(5000)
.style('opacity', '1');
d3.selectAll('.link').transition().duration(5000).style('stroke-opacity', '0.6');
}
</script>
</body>
{
"directed": false,
"graph": {},
"links": [
{
"source": 0,
"target": 151
},
{
"source": 1,
"target": 76
},
{
"source": 2,
"target": 60
},
{
"source": 3,
"target": 146
},
{
"source": 3,
"target": 76
},
{
"source": 4,
"target": 60
},
{
"source": 5,
"target": 614
},
{
"source": 6,
"target": 161
},
{
"source": 6,
"target": 364
},
{
"source": 7,
"target": 672
},
{
"source": 8,
"target": 614
},
{
"source": 9,
"target": 60
},
{
"source": 10,
"target": 137
},
{
"source": 11,
"target": 44
},
{
"source": 12,
"target": 672
},
{
"source": 13,
"target": 295
},
{
"source": 14,
"target": 633
},
{
"source": 15,
"target": 614
},
{
"source": 16,
"target": 146
},
{
"source": 17,
"target": 28
},
{
"source": 17,
"target": 44
},
{
"source": 18,
"target": 672
},
{
"source": 18,
"target": 28
},
{
"source": 18,
"target": 151
},
{
"source": 19,
"target": 633
},
{
"source": 20,
"target": 28
},
{
"source": 20,
"target": 60
},
{
"source": 20,
"target": 151
},
{
"source": 21,
"target": 633
},
{
"source": 22,
"target": 60
},
{
"source": 23,
"target": 672
},
{
"source": 24,
"target": 146
},
{
"source": 25,
"target": 146
},
{
"source": 26,
"target": 44
},
{
"source": 27,
"target": 295
},
{
"source": 28,
"target": 673
},
{
"source": 28,
"target": 659
},
{
"source": 28,
"target": 181
},
{
"source": 28,
"target": 329
},
{
"source": 28,
"target": 51
},
{
"source": 28,
"target": 465
},
{
"source": 28,
"target": 205
},
{
"source": 28,
"target": 488
},
{
"source": 28,
"target": 679
},
{
"source": 28,
"target": 231
},
{
"source": 28,
"target": 190
},
{
"source": 28,
"target": 191
},
{
"source": 28,
"target": 96
},
{
"source": 28,
"target": 56
},
{
"source": 28,
"target": 234
},
{
"source": 28,
"target": 98
},
{
"source": 28,
"target": 194
},
{
"source": 28,
"target": 412
},
{
"source": 28,
"target": 144
},
{
"source": 28,
"target": 689
},
{
"source": 28,
"target": 626
},
{
"source": 28,
"target": 239
},
{
"source": 28,
"target": 556
},
{
"source": 28,
"target": 641
},
{
"source": 28,
"target": 276
},
{
"source": 28,
"target": 602
},
{
"source": 28,
"target": 693
},
{
"source": 28,
"target": 149
},
{
"source": 28,
"target": 652
},
{
"source": 28,
"target": 514
},
{
"source": 28,
"target": 68
},
{
"source": 28,
"target": 248
},
{
"source": 28,
"target": 609
},
{
"source": 28,
"target": 118
},
{
"source": 28,
"target": 677
},
{
"source": 28,
"target": 515
},
{
"source": 28,
"target": 563
},
{
"source": 28,
"target": 31
},
{
"source": 28,
"target": 73
},
{
"source": 28,
"target": 30
},
{
"source": 28,
"target": 213
},
{
"source": 28,
"target": 165
},
{
"source": 28,
"target": 155
},
{
"source": 28,
"target": 242
},
{
"source": 28,
"target": 662
},
{
"source": 28,
"target": 380
},
{
"source": 28,
"target": 431
},
{
"source": 28,
"target": 254
},
{
"source": 28,
"target": 38
},
{
"source": 28,
"target": 90
},
{
"source": 28,
"target": 471
},
{
"source": 28,
"target": 584
},
{
"source": 28,
"target": 714
},
{
"source": 28,
"target": 619
},
{
"source": 28,
"target": 526
},
{
"source": 28,
"target": 171
},
{
"source": 28,
"target": 331
},
{
"source": 28,
"target": 657
},
{
"source": 28,
"target": 685
},
{
"source": 28,
"target": 258
},
{
"source": 28,
"target": 498
},
{
"source": 28,
"target": 573
},
{
"source": 28,
"target": 426
},
{
"source": 28,
"target": 336
},
{
"source": 28,
"target": 220
},
{
"source": 28,
"target": 87
},
{
"source": 29,
"target": 44
},
{
"source": 30,
"target": 672
},
{
"source": 30,
"target": 60
},
{
"source": 30,
"target": 151
},
{
"source": 31,
"target": 672
},
{
"source": 32,
"target": 614
},
{
"source": 33,
"target": 554
},
{
"source": 34,
"target": 614
},
{
"source": 35,
"target": 633
},
{
"source": 36,
"target": 151
},
{
"source": 37,
"target": 151
},
{
"source": 39,
"target": 317
},
{
"source": 40,
"target": 317
},
{
"source": 41,
"target": 60
},
{
"source": 42,
"target": 633
},
{
"source": 43,
"target": 295
},
{
"source": 44,
"target": 302
},
{
"source": 44,
"target": 455
},
{
"source": 44,
"target": 674
},
{
"source": 44,
"target": 561
},
{
"source": 44,
"target": 401
},
{
"source": 44,
"target": 133
},
{
"source": 44,
"target": 679
},
{
"source": 44,
"target": 680
},
{
"source": 44,
"target": 492
},
{
"source": 44,
"target": 56
},
{
"source": 44,
"target": 234
},
{
"source": 44,
"target": 408
},
{
"source": 44,
"target": 59
},
{
"source": 44,
"target": 592
},
{
"source": 44,
"target": 689
},
{
"source": 44,
"target": 712
},
{
"source": 44,
"target": 276
},
{
"source": 44,
"target": 694
},
{
"source": 44,
"target": 469
},
{
"source": 44,
"target": 421
},
{
"source": 44,
"target": 109
},
{
"source": 44,
"target": 150
},
{
"source": 44,
"target": 195
},
{
"source": 44,
"target": 727
},
{
"source": 44,
"target": 214
},
{
"source": 44,
"target": 564
},
{
"source": 44,
"target": 623
},
{
"source": 44,
"target": 155
},
{
"source": 44,
"target": 242
},
{
"source": 44,
"target": 215
},
{
"source": 44,
"target": 520
},
{
"source": 44,
"target": 442
},
{
"source": 44,
"target": 164
},
{
"source": 44,
"target": 210
},
{
"source": 44,
"target": 116
},
{
"source": 44,
"target": 258
},
{
"source": 44,
"target": 171
},
{
"source": 44,
"target": 572
},
{
"source": 44,
"target": 620
},
{
"source": 44,
"target": 337
},
{
"source": 44,
"target": 222
},
{
"source": 44,
"target": 587
},
{
"source": 44,
"target": 511
},
{
"source": 44,
"target": 723
},
{
"source": 44,
"target": 342
},
{
"source": 44,
"target": 87
},
{
"source": 44,
"target": 396
},
{
"source": 45,
"target": 633
},
{
"source": 46,
"target": 633
},
{
"source": 47,
"target": 60
},
{
"source": 48,
"target": 60
},
{
"source": 49,
"target": 137
},
{
"source": 50,
"target": 633
},
{
"source": 51,
"target": 60
},
{
"source": 51,
"target": 151
},
{
"source": 52,
"target": 633
},
{
"source": 53,
"target": 60
},
{
"source": 54,
"target": 146
},
{
"source": 55,
"target": 614
},
{
"source": 56,
"target": 672
},
{
"source": 56,
"target": 60
},
{
"source": 56,
"target": 151
},
{
"source": 57,
"target": 60
},
{
"source": 57,
"target": 151
},
{
"source": 58,
"target": 60
},
{
"source": 59,
"target": 672
},
{
"source": 59,
"target": 137
},
{
"source": 60,
"target": 179
},
{
"source": 60,
"target": 180
},
{
"source": 60,
"target": 538
},
{
"source": 60,
"target": 542
},
{
"source": 60,
"target": 355
},
{
"source": 60,
"target": 551
},
{
"source": 60,
"target": 552
},
{
"source": 60,
"target": 202
},
{
"source": 60,
"target": 97
},
{
"source": 60,
"target": 243
},
{
"source": 60,
"target": 372
},
{
"source": 60,
"target": 165
},
{
"source": 60,
"target": 565
},
{
"source": 60,
"target": 230
},
{
"source": 60,
"target": 221
},
{
"source": 60,
"target": 223
},
{
"source": 60,
"target": 578
},
{
"source": 60,
"target": 255
},
{
"source": 60,
"target": 581
},
{
"source": 60,
"target": 583
},
{
"source": 60,
"target": 645
},
{
"source": 60,
"target": 591
},
{
"source": 60,
"target": 234
},
{
"source": 60,
"target": 236
},
{
"source": 60,
"target": 595
},
{
"source": 60,
"target": 368
},
{
"source": 60,
"target": 604
},
{
"source": 60,
"target": 670
},
{
"source": 60,
"target": 328
},
{
"source": 60,
"target": 247
},
{
"source": 60,
"target": 70
},
{
"source": 60,
"target": 610
},
{
"source": 60,
"target": 250
},
{
"source": 60,
"target": 73
},
{
"source": 60,
"target": 75
},
{
"source": 60,
"target": 433
},
{
"source": 60,
"target": 434
},
{
"source": 60,
"target": 619
},
{
"source": 60,
"target": 81
},
{
"source": 60,
"target": 87
},
{
"source": 60,
"target": 264
},
{
"source": 60,
"target": 89
},
{
"source": 60,
"target": 267
},
{
"source": 60,
"target": 269
},
{
"source": 60,
"target": 100
},
{
"source": 60,
"target": 272
},
{
"source": 60,
"target": 456
},
{
"source": 60,
"target": 652
},
{
"source": 60,
"target": 461
},
{
"source": 60,
"target": 282
},
{
"source": 60,
"target": 463
},
{
"source": 60,
"target": 284
},
{
"source": 60,
"target": 307
},
{
"source": 60,
"target": 114
},
{
"source": 60,
"target": 290
},
{
"source": 60,
"target": 651
},
{
"source": 60,
"target": 297
},
{
"source": 60,
"target": 476
},
{
"source": 60,
"target": 300
},
{
"source": 60,
"target": 108
},
{
"source": 60,
"target": 683
},
{
"source": 60,
"target": 676
},
{
"source": 60,
"target": 488
},
{
"source": 60,
"target": 681
},
{
"source": 60,
"target": 138
},
{
"source": 60,
"target": 494
},
{
"source": 60,
"target": 340
},
{
"source": 60,
"target": 314
},
{
"source": 60,
"target": 143
},
{
"source": 60,
"target": 689
},
{
"source": 60,
"target": 316
},
{
"source": 60,
"target": 189
},
{
"source": 60,
"target": 503
},
{
"source": 60,
"target": 695
},
{
"source": 60,
"target": 321
},
{
"source": 60,
"target": 696
},
{
"source": 60,
"target": 322
},
{
"source": 60,
"target": 582
},
{
"source": 60,
"target": 512
},
{
"source": 60,
"target": 519
},
{
"source": 60,
"target": 496
},
{
"source": 60,
"target": 528
},
{
"source": 60,
"target": 686
},
{
"source": 60,
"target": 537
},
{
"source": 61,
"target": 76
},
{
"source": 62,
"target": 317
},
{
"source": 63,
"target": 295
},
{
"source": 63,
"target": 146
},
{
"source": 64,
"target": 295
},
{
"source": 65,
"target": 317
},
{
"source": 66,
"target": 146
},
{
"source": 66,
"target": 317
},
{
"source": 67,
"target": 161
},
{
"source": 68,
"target": 672
},
{
"source": 68,
"target": 151
},
{
"source": 69,
"target": 295
},
{
"source": 71,
"target": 161
},
{
"source": 72,
"target": 161
},
{
"source": 73,
"target": 151
},
{
"source": 74,
"target": 614
},
{
"source": 76,
"target": 536
},
{
"source": 76,
"target": 88
},
{
"source": 76,
"target": 446
},
{
"source": 76,
"target": 546
},
{
"source": 76,
"target": 544
},
{
"source": 76,
"target": 132
},
{
"source": 76,
"target": 414
},
{
"source": 76,
"target": 631
},
{
"source": 76,
"target": 310
},
{
"source": 76,
"target": 311
},
{
"source": 76,
"target": 634
},
{
"source": 76,
"target": 392
},
{
"source": 76,
"target": 547
},
{
"source": 76,
"target": 635
},
{
"source": 76,
"target": 271
},
{
"source": 76,
"target": 533
},
{
"source": 76,
"target": 140
},
{
"source": 76,
"target": 362
},
{
"source": 76,
"target": 579
},
{
"source": 76,
"target": 237
},
{
"source": 76,
"target": 274
},
{
"source": 76,
"target": 104
},
{
"source": 76,
"target": 240
},
{
"source": 76,
"target": 148
},
{
"source": 76,
"target": 367
},
{
"source": 76,
"target": 245
},
{
"source": 76,
"target": 504
},
{
"source": 76,
"target": 560
},
{
"source": 76,
"target": 415
},
{
"source": 76,
"target": 369
},
{
"source": 76,
"target": 235
},
{
"source": 76,
"target": 293
},
{
"source": 76,
"target": 462
},
{
"source": 76,
"target": 424
},
{
"source": 76,
"target": 142
},
{
"source": 76,
"target": 154
},
{
"source": 76,
"target": 106
},
{
"source": 76,
"target": 332
},
{
"source": 76,
"target": 518
},
{
"source": 76,
"target": 566
},
{
"source": 76,
"target": 430
},
{
"source": 76,
"target": 354
},
{
"source": 76,
"target": 710
},
{
"source": 76,
"target": 428
},
{
"source": 76,
"target": 200
},
{
"source": 76,
"target": 163
},
{
"source": 76,
"target": 77
},
{
"source": 76,
"target": 448
},
{
"source": 76,
"target": 256
},
{
"source": 76,
"target": 335
},
{
"source": 76,
"target": 170
},
{
"source": 76,
"target": 219
},
{
"source": 76,
"target": 339
},
{
"source": 76,
"target": 217
},
{
"source": 76,
"target": 174
},
{
"source": 76,
"target": 102
},
{
"source": 76,
"target": 576
},
{
"source": 76,
"target": 299
},
{
"source": 76,
"target": 725
},
{
"source": 76,
"target": 225
},
{
"source": 76,
"target": 263
},
{
"source": 76,
"target": 534
},
{
"source": 76,
"target": 344
},
{
"source": 77,
"target": 146
},
{
"source": 78,
"target": 151
},
{
"source": 79,
"target": 295
},
{
"source": 79,
"target": 146
},
{
"source": 80,
"target": 295
},
{
"source": 82,
"target": 633
},
{
"source": 83,
"target": 295
},
{
"source": 84,
"target": 137
},
{
"source": 85,
"target": 614
},
{
"source": 86,
"target": 614
},
{
"source": 87,
"target": 151
},
{
"source": 88,
"target": 633
},
{
"source": 91,
"target": 295
},
{
"source": 92,
"target": 633
},
{
"source": 92,
"target": 317
},
{
"source": 93,
"target": 633
},
{
"source": 94,
"target": 317
},
{
"source": 95,
"target": 295
},
{
"source": 96,
"target": 151
},
{
"source": 99,
"target": 633
},
{
"source": 99,
"target": 317
},
{
"source": 101,
"target": 295
},
{
"source": 102,
"target": 146
},
{
"source": 102,
"target": 317
},
{
"source": 103,
"target": 146
},
{
"source": 104,
"target": 633
},
{
"source": 104,
"target": 295
},
{
"source": 104,
"target": 317
},
{
"source": 104,
"target": 146
},
{
"source": 105,
"target": 554
},
{
"source": 107,
"target": 633
},
{
"source": 109,
"target": 137
},
{
"source": 110,
"target": 295
},
{
"source": 111,
"target": 146
},
{
"source": 112,
"target": 614
},
{
"source": 113,
"target": 633
},
{
"source": 113,
"target": 317
},
{
"source": 115,
"target": 295
},
{
"source": 115,
"target": 146
},
{
"source": 116,
"target": 137
},
{
"source": 117,
"target": 672
},
{
"source": 118,
"target": 672
},
{
"source": 119,
"target": 146
},
{
"source": 120,
"target": 633
},
{
"source": 121,
"target": 151
},
{
"source": 122,
"target": 672
},
{
"source": 123,
"target": 554
},
{
"source": 124,
"target": 614
},
{
"source": 125,
"target": 295
},
{
"source": 126,
"target": 295
},
{
"source": 126,
"target": 146
},
{
"source": 127,
"target": 295
},
{
"source": 127,
"target": 146
},
{
"source": 128,
"target": 137
},
{
"source": 129,
"target": 633
},
{
"source": 130,
"target": 614
},
{
"source": 131,
"target": 161
},
{
"source": 134,
"target": 146
},
{
"source": 135,
"target": 672
},
{
"source": 136,
"target": 633
},
{
"source": 137,
"target": 478
},
{
"source": 137,
"target": 238
},
{
"source": 137,
"target": 541
},
{
"source": 137,
"target": 679
},
{
"source": 137,
"target": 188
},
{
"source": 137,
"target": 620
},
{
"source": 137,
"target": 492
},
{
"source": 137,
"target": 587
},
{
"source": 137,
"target": 342
},
{
"source": 137,
"target": 363
},
{
"source": 137,
"target": 689
},
{
"source": 137,
"target": 626
},
{
"source": 137,
"target": 598
},
{
"source": 137,
"target": 241
},
{
"source": 137,
"target": 570
},
{
"source": 137,
"target": 563
},
{
"source": 137,
"target": 214
},
{
"source": 137,
"target": 252
},
{
"source": 137,
"target": 378
},
{
"source": 137,
"target": 394
},
{
"source": 137,
"target": 520
},
{
"source": 137,
"target": 386
},
{
"source": 137,
"target": 216
},
{
"source": 137,
"target": 389
},
{
"source": 137,
"target": 171
},
{
"source": 137,
"target": 390
},
{
"source": 137,
"target": 720
},
{
"source": 137,
"target": 727
},
{
"source": 139,
"target": 151
},
{
"source": 140,
"target": 295
},
{
"source": 140,
"target": 633
},
{
"source": 141,
"target": 151
},
{
"source": 142,
"target": 146
},
{
"source": 142,
"target": 317
},
{
"source": 145,
"target": 614
},
{
"source": 146,
"target": 539
},
{
"source": 146,
"target": 540
},
{
"source": 146,
"target": 543
},
{
"source": 146,
"target": 544
},
{
"source": 146,
"target": 184
},
{
"source": 146,
"target": 193
},
{
"source": 146,
"target": 357
},
{
"source": 146,
"target": 415
},
{
"source": 146,
"target": 550
},
{
"source": 146,
"target": 365
},
{
"source": 146,
"target": 203
},
{
"source": 146,
"target": 458
},
{
"source": 146,
"target": 369
},
{
"source": 146,
"target": 293
},
{
"source": 146,
"target": 371
},
{
"source": 146,
"target": 562
},
{
"source": 146,
"target": 379
},
{
"source": 146,
"target": 200
},
{
"source": 146,
"target": 568
},
{
"source": 146,
"target": 388
},
{
"source": 146,
"target": 710
},
{
"source": 146,
"target": 575
},
{
"source": 146,
"target": 577
},
{
"source": 146,
"target": 327
},
{
"source": 146,
"target": 675
},
{
"source": 146,
"target": 406
},
{
"source": 146,
"target": 407
},
{
"source": 146,
"target": 356
},
{
"source": 146,
"target": 413
},
{
"source": 146,
"target": 547
},
{
"source": 146,
"target": 597
},
{
"source": 146,
"target": 359
},
{
"source": 146,
"target": 240
},
{
"source": 146,
"target": 417
},
{
"source": 146,
"target": 603
},
{
"source": 146,
"target": 606
},
{
"source": 146,
"target": 420
},
{
"source": 146,
"target": 611
},
{
"source": 146,
"target": 422
},
{
"source": 146,
"target": 428
},
{
"source": 146,
"target": 447
},
{
"source": 146,
"target": 621
},
{
"source": 146,
"target": 166
},
{
"source": 146,
"target": 201
},
{
"source": 146,
"target": 624
},
{
"source": 146,
"target": 627
},
{
"source": 146,
"target": 266
},
{
"source": 146,
"target": 448
},
{
"source": 146,
"target": 635
},
{
"source": 146,
"target": 636
},
{
"source": 146,
"target": 334
},
{
"source": 146,
"target": 460
},
{
"source": 146,
"target": 462
},
{
"source": 146,
"target": 464
},
{
"source": 146,
"target": 466
},
{
"source": 146,
"target": 649
},
{
"source": 146,
"target": 343
},
{
"source": 146,
"target": 291
},
{
"source": 146,
"target": 654
},
{
"source": 146,
"target": 391
},
{
"source": 146,
"target": 298
},
{
"source": 146,
"target": 474
},
{
"source": 146,
"target": 475
},
{
"source": 146,
"target": 666
},
{
"source": 146,
"target": 667
},
{
"source": 146,
"target": 301
},
{
"source": 146,
"target": 479
},
{
"source": 146,
"target": 711
},
{
"source": 146,
"target": 483
},
{
"source": 146,
"target": 308
},
{
"source": 146,
"target": 341
},
{
"source": 146,
"target": 318
},
{
"source": 146,
"target": 501
},
{
"source": 146,
"target": 147
},
{
"source": 146,
"target": 148
},
{
"source": 146,
"target": 504
},
{
"source": 146,
"target": 506
},
{
"source": 146,
"target": 509
},
{
"source": 146,
"target": 326
},
{
"source": 146,
"target": 441
},
{
"source": 146,
"target": 153
},
{
"source": 146,
"target": 516
},
{
"source": 146,
"target": 517
},
{
"source": 146,
"target": 156
},
{
"source": 146,
"target": 708
},
{
"source": 146,
"target": 709
},
{
"source": 146,
"target": 159
},
{
"source": 146,
"target": 160
},
{
"source": 146,
"target": 162
},
{
"source": 146,
"target": 163
},
{
"source": 146,
"target": 263
},
{
"source": 146,
"target": 717
},
{
"source": 146,
"target": 259
},
{
"source": 146,
"target": 529
},
{
"source": 146,
"target": 175
},
{
"source": 146,
"target": 725
},
{
"source": 146,
"target": 532
},
{
"source": 146,
"target": 726
},
{
"source": 146,
"target": 534
},
{
"source": 148,
"target": 317
},
{
"source": 149,
"target": 151
},
{
"source": 150,
"target": 672
},
{
"source": 150,
"target": 151
},
{
"source": 151,
"target": 345
},
{
"source": 151,
"target": 304
},
{
"source": 151,
"target": 585
},
{
"source": 151,
"target": 465
},
{
"source": 151,
"target": 588
},
{
"source": 151,
"target": 309
},
{
"source": 151,
"target": 403
},
{
"source": 151,
"target": 590
},
{
"source": 151,
"target": 387
},
{
"source": 151,
"target": 234
},
{
"source": 151,
"target": 194
},
{
"source": 151,
"target": 548
},
{
"source": 151,
"target": 360
},
{
"source": 151,
"target": 689
},
{
"source": 151,
"target": 626
},
{
"source": 151,
"target": 239
},
{
"source": 151,
"target": 502
},
{
"source": 151,
"target": 600
},
{
"source": 151,
"target": 669
},
{
"source": 151,
"target": 206
},
{
"source": 151,
"target": 418
},
{
"source": 151,
"target": 558
},
{
"source": 151,
"target": 459
},
{
"source": 151,
"target": 350
},
{
"source": 151,
"target": 248
},
{
"source": 151,
"target": 609
},
{
"source": 151,
"target": 515
},
{
"source": 151,
"target": 411
},
{
"source": 151,
"target": 701
},
{
"source": 151,
"target": 513
},
{
"source": 151,
"target": 713
},
{
"source": 151,
"target": 165
},
{
"source": 151,
"target": 705
},
{
"source": 151,
"target": 682
},
{
"source": 151,
"target": 155
},
{
"source": 151,
"target": 314
},
{
"source": 151,
"target": 497
},
{
"source": 151,
"target": 714
},
{
"source": 151,
"target": 167
},
{
"source": 151,
"target": 453
},
{
"source": 151,
"target": 658
},
{
"source": 151,
"target": 171
},
{
"source": 151,
"target": 296
},
{
"source": 151,
"target": 659
},
{
"source": 151,
"target": 258
},
{
"source": 151,
"target": 498
},
{
"source": 151,
"target": 722
},
{
"source": 151,
"target": 440
},
{
"source": 151,
"target": 176
},
{
"source": 151,
"target": 724
},
{
"source": 151,
"target": 580
},
{
"source": 151,
"target": 396
},
{
"source": 151,
"target": 437
},
{
"source": 152,
"target": 295
},
{
"source": 155,
"target": 672
},
{
"source": 157,
"target": 633
},
{
"source": 158,
"target": 295
},
{
"source": 159,
"target": 633
},
{
"source": 159,
"target": 317
},
{
"source": 160,
"target": 614
},
{
"source": 161,
"target": 472
},
{
"source": 161,
"target": 229
},
{
"source": 161,
"target": 629
},
{
"source": 161,
"target": 182
},
{
"source": 161,
"target": 351
},
{
"source": 161,
"target": 450
},
{
"source": 161,
"target": 487
},
{
"source": 161,
"target": 312
},
{
"source": 161,
"target": 452
},
{
"source": 161,
"target": 251
},
{
"source": 161,
"target": 273
},
{
"source": 161,
"target": 199
},
{
"source": 161,
"target": 638
},
{
"source": 161,
"target": 553
},
{
"source": 161,
"target": 491
},
{
"source": 161,
"target": 557
},
{
"source": 161,
"target": 457
},
{
"source": 161,
"target": 324
},
{
"source": 161,
"target": 704
},
{
"source": 161,
"target": 381
},
{
"source": 161,
"target": 168
},
{
"source": 161,
"target": 436
},
{
"source": 161,
"target": 338
},
{
"source": 161,
"target": 260
},
{
"source": 161,
"target": 531
},
{
"source": 161,
"target": 262
},
{
"source": 161,
"target": 443
},
{
"source": 162,
"target": 295
},
{
"source": 163,
"target": 317
},
{
"source": 163,
"target": 295
},
{
"source": 163,
"target": 633
},
{
"source": 163,
"target": 614
},
{
"source": 165,
"target": 672
},
{
"source": 166,
"target": 295
},
{
"source": 169,
"target": 633
},
{
"source": 171,
"target": 672
},
{
"source": 172,
"target": 633
},
{
"source": 173,
"target": 633
},
{
"source": 174,
"target": 317
},
{
"source": 174,
"target": 614
},
{
"source": 175,
"target": 295
},
{
"source": 177,
"target": 633
},
{
"source": 177,
"target": 317
},
{
"source": 178,
"target": 672
},
{
"source": 183,
"target": 295
},
{
"source": 185,
"target": 295
},
{
"source": 186,
"target": 295
},
{
"source": 187,
"target": 633
},
{
"source": 190,
"target": 672
},
{
"source": 192,
"target": 295
},
{
"source": 193,
"target": 295
},
{
"source": 193,
"target": 633
},
{
"source": 196,
"target": 633
},
{
"source": 197,
"target": 614
},
{
"source": 198,
"target": 633
},
{
"source": 199,
"target": 678
},
{
"source": 200,
"target": 317
},
{
"source": 203,
"target": 295
},
{
"source": 204,
"target": 633
},
{
"source": 204,
"target": 614
},
{
"source": 207,
"target": 554
},
{
"source": 208,
"target": 672
},
{
"source": 209,
"target": 633
},
{
"source": 209,
"target": 614
},
{
"source": 210,
"target": 672
},
{
"source": 211,
"target": 672
},
{
"source": 212,
"target": 295
},
{
"source": 213,
"target": 672
},
{
"source": 214,
"target": 672
},
{
"source": 217,
"target": 633
},
{
"source": 217,
"target": 317
},
{
"source": 218,
"target": 633
},
{
"source": 222,
"target": 672
},
{
"source": 224,
"target": 633
},
{
"source": 225,
"target": 633
},
{
"source": 225,
"target": 317
},
{
"source": 225,
"target": 614
},
{
"source": 226,
"target": 295
},
{
"source": 227,
"target": 317
},
{
"source": 228,
"target": 295
},
{
"source": 232,
"target": 295
},
{
"source": 233,
"target": 633
},
{
"source": 234,
"target": 672
},
{
"source": 235,
"target": 317
},
{
"source": 237,
"target": 317
},
{
"source": 244,
"target": 295
},
{
"source": 246,
"target": 672
},
{
"source": 249,
"target": 295
},
{
"source": 253,
"target": 614
},
{
"source": 257,
"target": 614
},
{
"source": 259,
"target": 295
},
{
"source": 259,
"target": 633
},
{
"source": 261,
"target": 672
},
{
"source": 263,
"target": 633
},
{
"source": 263,
"target": 295
},
{
"source": 265,
"target": 295
},
{
"source": 268,
"target": 554
},
{
"source": 270,
"target": 672
},
{
"source": 271,
"target": 317
},
{
"source": 275,
"target": 672
},
{
"source": 277,
"target": 614
},
{
"source": 278,
"target": 614
},
{
"source": 279,
"target": 295
},
{
"source": 280,
"target": 295
},
{
"source": 281,
"target": 317
},
{
"source": 283,
"target": 633
},
{
"source": 283,
"target": 317
},
{
"source": 285,
"target": 554
},
{
"source": 286,
"target": 672
},
{
"source": 287,
"target": 295
},
{
"source": 288,
"target": 295
},
{
"source": 289,
"target": 672
},
{
"source": 292,
"target": 554
},
{
"source": 294,
"target": 672
},
{
"source": 295,
"target": 352
},
{
"source": 295,
"target": 415
},
{
"source": 295,
"target": 365
},
{
"source": 295,
"target": 366
},
{
"source": 295,
"target": 555
},
{
"source": 295,
"target": 557
},
{
"source": 295,
"target": 369
},
{
"source": 295,
"target": 373
},
{
"source": 295,
"target": 544
},
{
"source": 295,
"target": 375
},
{
"source": 295,
"target": 567
},
{
"source": 295,
"target": 574
},
{
"source": 295,
"target": 323
},
{
"source": 295,
"target": 586
},
{
"source": 295,
"target": 404
},
{
"source": 295,
"target": 597
},
{
"source": 295,
"target": 393
},
{
"source": 295,
"target": 613
},
{
"source": 295,
"target": 430
},
{
"source": 295,
"target": 439
},
{
"source": 295,
"target": 444
},
{
"source": 295,
"target": 536
},
{
"source": 295,
"target": 629
},
{
"source": 295,
"target": 637
},
{
"source": 295,
"target": 639
},
{
"source": 295,
"target": 477
},
{
"source": 295,
"target": 643
},
{
"source": 295,
"target": 644
},
{
"source": 295,
"target": 650