diff --git a/css/style.css b/css/style.css deleted file mode 100644 index 81f2465b..00000000 --- a/css/style.css +++ /dev/null @@ -1,105 +0,0 @@ -body { - font-family: 'dejavu sans', verdana, arial, serif; - font-size: 11pt; -} - -h1 { - font-size: 48px; - line-height: 0.9em; -} - -#menu { - position: absolute; - left: -200px; - top: 35px; - padding: 0 20px; - border-radius: 2px; - background-color: #f5f5f5; - box-shadow: 5px 5px 15px rgba(128,128,128,0.5); -} - -#forkme { - position: fixed; - top: 0; - right: 0; - border: 0; -} - -div.nav { - text-align: left; - padding-left: 24px; -} - -div.nav ul { - text-decoration: none; - text-transform: uppercase; - - margin-bottom: 30px; - padding-left: 0; -} -li.nav { - -} - -div.nav ul li { - text-decoration: none; - text-transform: uppercase; - font-weight: normal; - font-size: 11pt; - - list-style: none; - margin-top: 5px; -} - -div.nav ul li ul li { - text-decoration: none; - text-transform: none; - font-weight: normal; - font-size: 11pt; - color: #4D4D4D; - - list-style: none; -} - -div.nav a { - color: #2B7CE9; -} - -.subtitle { - text-transform: uppercase; - font-size: 11pt; - font-weight: normal; - font-style: italic; - margin-left: 40px; -} - -.download td { - border: none; - padding: 5px 20px 5px 0; -} - -.gallery .thumb { - display: inline-block; - text-align: center; - margin-right: 10px; - margin-bottom: 20px; -} - -.gallery .thumb img { - border: 1px solid white; - border-radius: 5px; - height: 90px; - margin: 0; -} - -.gallery .thumb a:hover img { - border-color: lightgray; -} - -.gallery .thumb div { - margin: 0; -} - -img { - border: 0; -} \ No newline at end of file diff --git a/dist/img/graph/acceptDeleteIcon.png b/dist/img/graph/acceptDeleteIcon.png deleted file mode 100644 index 02a06285..00000000 Binary files a/dist/img/graph/acceptDeleteIcon.png and /dev/null differ diff --git a/dist/img/graph/addNodeIcon.png b/dist/img/graph/addNodeIcon.png deleted file mode 100644 index 6fa30613..00000000 Binary files a/dist/img/graph/addNodeIcon.png and /dev/null differ diff --git a/dist/img/graph/backIcon.png b/dist/img/graph/backIcon.png deleted file mode 100644 index e2f99126..00000000 Binary files a/dist/img/graph/backIcon.png and /dev/null differ diff --git a/dist/img/graph/connectIcon.png b/dist/img/graph/connectIcon.png deleted file mode 100644 index 4164da1f..00000000 Binary files a/dist/img/graph/connectIcon.png and /dev/null differ diff --git a/dist/img/graph/cross.png b/dist/img/graph/cross.png deleted file mode 100644 index 9cbd189a..00000000 Binary files a/dist/img/graph/cross.png and /dev/null differ diff --git a/dist/img/graph/cross2.png b/dist/img/graph/cross2.png deleted file mode 100644 index 9fc4b95c..00000000 Binary files a/dist/img/graph/cross2.png and /dev/null differ diff --git a/dist/img/graph/deleteIcon.png b/dist/img/graph/deleteIcon.png deleted file mode 100644 index 54025647..00000000 Binary files a/dist/img/graph/deleteIcon.png and /dev/null differ diff --git a/dist/img/graph/downArrow.png b/dist/img/graph/downArrow.png deleted file mode 100644 index e77d5e6d..00000000 Binary files a/dist/img/graph/downArrow.png and /dev/null differ diff --git a/dist/img/graph/editIcon.png b/dist/img/graph/editIcon.png deleted file mode 100644 index 494d0f00..00000000 Binary files a/dist/img/graph/editIcon.png and /dev/null differ diff --git a/dist/img/graph/leftArrow.png b/dist/img/graph/leftArrow.png deleted file mode 100644 index 3823536e..00000000 Binary files a/dist/img/graph/leftArrow.png and /dev/null differ diff --git a/dist/img/graph/minus.png b/dist/img/graph/minus.png deleted file mode 100644 index 30698076..00000000 Binary files a/dist/img/graph/minus.png and /dev/null differ diff --git a/dist/img/graph/plus.png b/dist/img/graph/plus.png deleted file mode 100644 index f7ab2a33..00000000 Binary files a/dist/img/graph/plus.png and /dev/null differ diff --git a/dist/img/graph/rightArrow.png b/dist/img/graph/rightArrow.png deleted file mode 100644 index c3a209d8..00000000 Binary files a/dist/img/graph/rightArrow.png and /dev/null differ diff --git a/dist/img/graph/upArrow.png b/dist/img/graph/upArrow.png deleted file mode 100644 index 8aedced7..00000000 Binary files a/dist/img/graph/upArrow.png and /dev/null differ diff --git a/dist/img/graph/zoomExtends.png b/dist/img/graph/zoomExtends.png deleted file mode 100644 index 74595c63..00000000 Binary files a/dist/img/graph/zoomExtends.png and /dev/null differ diff --git a/dist/img/network/acceptDeleteIcon.png b/dist/img/network/acceptDeleteIcon.png deleted file mode 100644 index 02a06285..00000000 Binary files a/dist/img/network/acceptDeleteIcon.png and /dev/null differ diff --git a/dist/img/network/addNodeIcon.png b/dist/img/network/addNodeIcon.png deleted file mode 100644 index 6fa30613..00000000 Binary files a/dist/img/network/addNodeIcon.png and /dev/null differ diff --git a/dist/img/network/backIcon.png b/dist/img/network/backIcon.png deleted file mode 100644 index e2f99126..00000000 Binary files a/dist/img/network/backIcon.png and /dev/null differ diff --git a/dist/img/network/connectIcon.png b/dist/img/network/connectIcon.png deleted file mode 100644 index 4164da1f..00000000 Binary files a/dist/img/network/connectIcon.png and /dev/null differ diff --git a/dist/img/network/cross.png b/dist/img/network/cross.png deleted file mode 100644 index 9cbd189a..00000000 Binary files a/dist/img/network/cross.png and /dev/null differ diff --git a/dist/img/network/cross2.png b/dist/img/network/cross2.png deleted file mode 100644 index 9fc4b95c..00000000 Binary files a/dist/img/network/cross2.png and /dev/null differ diff --git a/dist/img/network/deleteIcon.png b/dist/img/network/deleteIcon.png deleted file mode 100644 index 54025647..00000000 Binary files a/dist/img/network/deleteIcon.png and /dev/null differ diff --git a/dist/img/network/downArrow.png b/dist/img/network/downArrow.png deleted file mode 100644 index e77d5e6d..00000000 Binary files a/dist/img/network/downArrow.png and /dev/null differ diff --git a/dist/img/network/editIcon.png b/dist/img/network/editIcon.png deleted file mode 100644 index 494d0f00..00000000 Binary files a/dist/img/network/editIcon.png and /dev/null differ diff --git a/dist/img/network/leftArrow.png b/dist/img/network/leftArrow.png deleted file mode 100644 index 3823536e..00000000 Binary files a/dist/img/network/leftArrow.png and /dev/null differ diff --git a/dist/img/network/minus.png b/dist/img/network/minus.png deleted file mode 100644 index 30698076..00000000 Binary files a/dist/img/network/minus.png and /dev/null differ diff --git a/dist/img/network/plus.png b/dist/img/network/plus.png deleted file mode 100644 index f7ab2a33..00000000 Binary files a/dist/img/network/plus.png and /dev/null differ diff --git a/dist/img/network/rightArrow.png b/dist/img/network/rightArrow.png deleted file mode 100644 index c3a209d8..00000000 Binary files a/dist/img/network/rightArrow.png and /dev/null differ diff --git a/dist/img/network/upArrow.png b/dist/img/network/upArrow.png deleted file mode 100644 index 8aedced7..00000000 Binary files a/dist/img/network/upArrow.png and /dev/null differ diff --git a/dist/img/network/zoomExtends.png b/dist/img/network/zoomExtends.png deleted file mode 100644 index 74595c63..00000000 Binary files a/dist/img/network/zoomExtends.png and /dev/null differ diff --git a/dist/img/timeline/delete.png b/dist/img/timeline/delete.png deleted file mode 100644 index d54d0e06..00000000 Binary files a/dist/img/timeline/delete.png and /dev/null differ diff --git a/dist/vis.css b/dist/vis.css deleted file mode 100644 index 529a17fb..00000000 --- a/dist/vis.css +++ /dev/null @@ -1,795 +0,0 @@ -.vis .overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - - /* Must be displayed above for example selected Timeline items */ - z-index: 10; -} - -.vis-active { - box-shadow: 0 0 10px #86d5f8; -} - -/* override some bootstrap styles screwing up the timelines css */ - -.vis [class*="span"] { - min-height: 0; - width: auto; -} - -.vis.timeline { -} - - -.vis.timeline.root { - position: relative; - border: 1px solid #bfbfbf; - - overflow: hidden; - padding: 0; - margin: 0; - - box-sizing: border-box; -} - -.vis.timeline .vispanel { - position: absolute; - - padding: 0; - margin: 0; - - box-sizing: border-box; -} - -.vis.timeline .vispanel.center, -.vis.timeline .vispanel.left, -.vis.timeline .vispanel.right, -.vis.timeline .vispanel.top, -.vis.timeline .vispanel.bottom { - border: 1px #bfbfbf; -} - -.vis.timeline .vispanel.center, -.vis.timeline .vispanel.left, -.vis.timeline .vispanel.right { - border-top-style: solid; - border-bottom-style: solid; - overflow: hidden; -} - -.vis.timeline .vispanel.center, -.vis.timeline .vispanel.top, -.vis.timeline .vispanel.bottom { - border-left-style: solid; - border-right-style: solid; -} - -.vis.timeline .background { - overflow: hidden; -} - -.vis.timeline .vispanel > .content { - position: relative; -} - -.vis.timeline .vispanel .shadow { - position: absolute; - width: 100%; - height: 1px; - box-shadow: 0 0 10px rgba(0,0,0,0.8); - /* TODO: find a nice way to ensure shadows are drawn on top of items - z-index: 1; - */ -} - -.vis.timeline .vispanel .shadow.top { - top: -1px; - left: 0; -} - -.vis.timeline .vispanel .shadow.bottom { - bottom: -1px; - left: 0; -} - -.vis.timeline .labelset { - position: relative; - - overflow: hidden; - - box-sizing: border-box; -} - -.vis.timeline .labelset .vlabel { - position: relative; - left: 0; - top: 0; - width: 100%; - color: #4d4d4d; - - box-sizing: border-box; -} - -.vis.timeline .labelset .vlabel { - border-bottom: 1px solid #bfbfbf; -} - -.vis.timeline .labelset .vlabel:last-child { - border-bottom: none; -} - -.vis.timeline .labelset .vlabel .inner { - display: inline-block; - padding: 5px; -} - -.vis.timeline .labelset .vlabel .inner.hidden { - padding: 0; -} - - -.vis.timeline .itemset { - position: relative; - padding: 0; - margin: 0; - - box-sizing: border-box; -} - -.vis.timeline .itemset .background, -.vis.timeline .itemset .foreground { - position: absolute; - width: 100%; - height: 100%; - overflow: visible; -} - -.vis.timeline .axis { - position: absolute; - width: 100%; - height: 0; - left: 0; - z-index: 1; -} - -.vis.timeline .foreground .group { - position: relative; - box-sizing: border-box; - border-bottom: 1px solid #bfbfbf; -} - -.vis.timeline .foreground .group:last-child { - border-bottom: none; -} - - -.vis.timeline .item { - position: absolute; - color: #1A1A1A; - border-color: #97B0F8; - border-width: 1px; - background-color: #D5DDF6; - display: inline-block; - padding: 5px; -} - -.vis.timeline .item.selected { - border-color: #FFC200; - background-color: #FFF785; - - /* z-index must be higher than the z-index of custom time bar and current time bar */ - z-index: 2; -} - -.vis.timeline .editable .item.selected { - cursor: move; -} - -.vis.timeline .item.point.selected { - background-color: #FFF785; -} - -.vis.timeline .item.box { - text-align: center; - border-style: solid; - border-radius: 2px; -} - -.vis.timeline .item.point { - background: none; -} - -.vis.timeline .item.dot { - position: absolute; - padding: 0; - border-width: 4px; - border-style: solid; - border-radius: 4px; -} - -.vis.timeline .item.range { - border-style: solid; - border-radius: 2px; - box-sizing: border-box; -} - -.vis.timeline .item.background { - overflow: hidden; - border: none; - background-color: rgba(213, 221, 246, 0.4); - box-sizing: border-box; - padding: 0; - margin: 0; -} - -.vis.timeline .item.range .content { - position: relative; - display: inline-block; - max-width: 100%; - overflow: hidden; -} - -.vis.timeline .item.background .content { - position: absolute; - display: inline-block; - overflow: hidden; - max-width: 100%; - margin: 5px; -} - -.vis.timeline .item.line { - padding: 0; - position: absolute; - width: 0; - border-left-width: 1px; - border-left-style: solid; -} - -.vis.timeline .item .content { - white-space: nowrap; - overflow: hidden; -} - -.vis.timeline .item .delete { - background: url('img/timeline/delete.png') no-repeat top center; - position: absolute; - width: 24px; - height: 24px; - top: 0; - right: -24px; - cursor: pointer; -} - -.vis.timeline .item.range .drag-left { - position: absolute; - width: 24px; - height: 100%; - top: 0; - left: -4px; - - cursor: w-resize; -} - -.vis.timeline .item.range .drag-right { - position: absolute; - width: 24px; - height: 100%; - top: 0; - right: -4px; - - cursor: e-resize; -} - -.vis.timeline .timeaxis { - position: relative; - overflow: hidden; -} - -.vis.timeline .timeaxis.foreground { - top: 0; - left: 0; - width: 100%; -} - -.vis.timeline .timeaxis.background { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.vis.timeline .timeaxis .text { - position: absolute; - color: #4d4d4d; - padding: 3px; - white-space: nowrap; -} - -.vis.timeline .timeaxis .text.measure { - position: absolute; - padding-left: 0; - padding-right: 0; - margin-left: 0; - margin-right: 0; - visibility: hidden; -} - -.vis.timeline .timeaxis .grid.vertical { - position: absolute; - width: 0; - border-right: 1px solid; -} - -.vis.timeline .timeaxis .grid.minor { - border-color: #e5e5e5; -} - -.vis.timeline .timeaxis .grid.major { - border-color: #bfbfbf; -} - -.vis.timeline .currenttime { - background-color: #FF7F6E; - width: 2px; - z-index: 1; -} -.vis.timeline .customtime { - background-color: #6E94FF; - width: 2px; - cursor: move; - z-index: 1; -} -.vis.timeline.root { - /* - -webkit-transition: height .4s ease-in-out; - transition: height .4s ease-in-out; - */ -} - -.vis.timeline .vispanel { - /* - -webkit-transition: height .4s ease-in-out, top .4s ease-in-out; - transition: height .4s ease-in-out, top .4s ease-in-out; - */ -} - -.vis.timeline .axis { - /* - -webkit-transition: top .4s ease-in-out; - transition: top .4s ease-in-out; - */ -} - -/* TODO: get animation working nicely - -.vis.timeline .item { - -webkit-transition: top .4s ease-in-out; - transition: top .4s ease-in-out; -} - -.vis.timeline .item.line { - -webkit-transition: height .4s ease-in-out, top .4s ease-in-out; - transition: height .4s ease-in-out, top .4s ease-in-out; -} -/**/ - -.vis.timeline .vispanel.background.horizontal .grid.horizontal { - position: absolute; - width: 100%; - height: 0; - border-bottom: 1px solid; -} - -.vis.timeline .vispanel.background.horizontal .grid.minor { - border-color: #e5e5e5; -} - -.vis.timeline .vispanel.background.horizontal .grid.major { - border-color: #bfbfbf; -} - - -.vis.timeline .dataaxis .yAxis.major { - width: 100%; - position: absolute; - color: #4d4d4d; - white-space: nowrap; -} - -.vis.timeline .dataaxis .yAxis.major.measure{ - padding: 0px 0px 0px 0px; - margin: 0px 0px 0px 0px; - border: 0px; - visibility: hidden; - width: auto; -} - - -.vis.timeline .dataaxis .yAxis.minor{ - position: absolute; - width: 100%; - color: #bebebe; - white-space: nowrap; -} - -.vis.timeline .dataaxis .yAxis.minor.measure{ - padding: 0px 0px 0px 0px; - margin: 0px 0px 0px 0px; - border: 0px; - visibility: hidden; - width: auto; -} - -.vis.timeline .dataaxis .yAxis.title{ - position: absolute; - color: #4d4d4d; - white-space: nowrap; - bottom: 20px; - text-align: center; -} - -.vis.timeline .dataaxis .yAxis.title.measure{ - padding: 0px 0px 0px 0px; - margin: 0px 0px 0px 0px; - visibility: hidden; - width: auto; -} - -.vis.timeline .dataaxis .yAxis.title.left { - bottom: 0px; - -webkit-transform-origin: left top; - -moz-transform-origin: left top; - -ms-transform-origin: left top; - -o-transform-origin: left top; - transform-origin: left bottom; - -webkit-transform: rotate(-90deg); - -moz-transform: rotate(-90deg); - -ms-transform: rotate(-90deg); - -o-transform: rotate(-90deg); - transform: rotate(-90deg); -} - -.vis.timeline .dataaxis .yAxis.title.right { - bottom: 0px; - -webkit-transform-origin: right bottom; - -moz-transform-origin: right bottom; - -ms-transform-origin: right bottom; - -o-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); -} - -.vis.timeline .legend { - background-color: rgba(247, 252, 255, 0.65); - padding: 5px; - border-color: #b3b3b3; - border-style:solid; - border-width: 1px; - box-shadow: 2px 2px 10px rgba(154, 154, 154, 0.55); -} - -.vis.timeline .legendText { - /*font-size: 10px;*/ - white-space: nowrap; - display: inline-block -} -.vis.timeline .graphGroup0 { - fill:#4f81bd; - fill-opacity:0; - stroke-width:2px; - stroke: #4f81bd; -} - -.vis.timeline .graphGroup1 { - fill:#f79646; - fill-opacity:0; - stroke-width:2px; - stroke: #f79646; -} - -.vis.timeline .graphGroup2 { - fill: #8c51cf; - fill-opacity:0; - stroke-width:2px; - stroke: #8c51cf; -} - -.vis.timeline .graphGroup3 { - fill: #75c841; - fill-opacity:0; - stroke-width:2px; - stroke: #75c841; -} - -.vis.timeline .graphGroup4 { - fill: #ff0100; - fill-opacity:0; - stroke-width:2px; - stroke: #ff0100; -} - -.vis.timeline .graphGroup5 { - fill: #37d8e6; - fill-opacity:0; - stroke-width:2px; - stroke: #37d8e6; -} - -.vis.timeline .graphGroup6 { - fill: #042662; - fill-opacity:0; - stroke-width:2px; - stroke: #042662; -} - -.vis.timeline .graphGroup7 { - fill:#00ff26; - fill-opacity:0; - stroke-width:2px; - stroke: #00ff26; -} - -.vis.timeline .graphGroup8 { - fill:#ff00ff; - fill-opacity:0; - stroke-width:2px; - stroke: #ff00ff; -} - -.vis.timeline .graphGroup9 { - fill: #8f3938; - fill-opacity:0; - stroke-width:2px; - stroke: #8f3938; -} - -.vis.timeline .fill { - fill-opacity:0.1; - stroke: none; -} - - -.vis.timeline .bar { - fill-opacity:0.5; - stroke-width:1px; -} - -.vis.timeline .point { - stroke-width:2px; - fill-opacity:1.0; -} - - -.vis.timeline .legendBackground { - stroke-width:1px; - fill-opacity:0.9; - fill: #ffffff; - stroke: #c2c2c2; -} - - -.vis.timeline .outline { - stroke-width:1px; - fill-opacity:1; - fill: #ffffff; - stroke: #e5e5e5; -} - -.vis.timeline .iconFill { - fill-opacity:0.3; - stroke: none; -} - - - -div.network-manipulationDiv { - border-width: 0; - border-bottom: 1px; - border-style:solid; - border-color: #d6d9d8; - background: #ffffff; /* Old browsers */ - background: -moz-linear-gradient(top, #ffffff 0%, #fcfcfc 48%, #fafafa 50%, #fcfcfc 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(48%,#fcfcfc), color-stop(50%,#fafafa), color-stop(100%,#fcfcfc)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* Opera 11.10+ */ - background: -ms-linear-gradient(top, #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* IE10+ */ - background: linear-gradient(to bottom, #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#fcfcfc',GradientType=0 ); /* IE6-9 */ - - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 30px; -} - -div.network-manipulation-editMode { - position:absolute; - left: 0; - top: 0; - height: 30px; - margin-top:20px; -} - -div.network-manipulation-closeDiv { - position:absolute; - right: 0; - top: 0; - width: 30px; - height: 30px; - - background-position: 20px 3px; - background-repeat: no-repeat; - background-image: url("img/network/cross.png"); - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -div.network-manipulation-closeDiv:hover { - opacity: 0.6; -} - -span.network-manipulationUI { - font-family: verdana; - font-size: 12px; - -moz-border-radius: 15px; - border-radius: 15px; - display:inline-block; - background-position: 0px 0px; - background-repeat:no-repeat; - height:24px; - margin: -14px 0px 0px 10px; - vertical-align:middle; - cursor: pointer; - padding: 0px 8px 0px 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -span.network-manipulationUI:hover { - box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.20); -} - -span.network-manipulationUI:active { - box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.50); -} - -span.network-manipulationUI.back { - background-image: url("img/network/backIcon.png"); -} - -span.network-manipulationUI.none:hover { - box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.0); - cursor: default; -} -span.network-manipulationUI.none:active { - box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.0); -} -span.network-manipulationUI.none { - padding: 0; -} -span.network-manipulationUI.notification{ - margin: 2px; - font-weight: bold; -} - -span.network-manipulationUI.add { - background-image: url("img/network/addNodeIcon.png"); -} - -span.network-manipulationUI.edit { - background-image: url("img/network/editIcon.png"); -} - -span.network-manipulationUI.edit.editmode { - background-color: #fcfcfc; - border-style:solid; - border-width:1px; - border-color: #cccccc; -} - -span.network-manipulationUI.connect { - background-image: url("img/network/connectIcon.png"); -} - -span.network-manipulationUI.delete { - background-image: url("img/network/deleteIcon.png"); -} -/* top right bottom left */ -span.network-manipulationLabel { - margin: 0px 0px 0px 23px; - line-height: 25px; -} -div.network-seperatorLine { - display:inline-block; - width:1px; - height:20px; - background-color: #bdbdbd; - margin: 5px 7px 0px 15px; -} - -div.network-navigation_wrapper { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; -} -div.network-navigation { - width:34px; - height:34px; - -moz-border-radius: 17px; - border-radius: 17px; - position:absolute; - display:inline-block; - background-position: 2px 2px; - background-repeat:no-repeat; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -div.network-navigation:hover { - box-shadow: 0px 0px 3px 3px rgba(56, 207, 21, 0.30); -} - -div.network-navigation:active { - box-shadow: 0px 0px 1px 3px rgba(56, 207, 21, 0.95); -} - -div.network-navigation.up { - background-image: url("img/network/upArrow.png"); - bottom:50px; - left:55px; -} -div.network-navigation.down { - background-image: url("img/network/downArrow.png"); - bottom:10px; - left:55px; -} -div.network-navigation.left { - background-image: url("img/network/leftArrow.png"); - bottom:10px; - left:15px; -} -div.network-navigation.right { - background-image: url("img/network/rightArrow.png"); - bottom:10px; - left:95px; -} -div.network-navigation.zoomIn { - background-image: url("img/network/plus.png"); - bottom:10px; - right:15px; -} -div.network-navigation.zoomOut { - background-image: url("img/network/minus.png"); - bottom:10px; - right:55px; -} -div.network-navigation.zoomExtends { - background-image: url("img/network/zoomExtends.png"); - bottom:50px; - right:15px; -} \ No newline at end of file diff --git a/dist/vis.js b/dist/vis.js deleted file mode 100644 index e09c1afe..00000000 --- a/dist/vis.js +++ /dev/null @@ -1,33982 +0,0 @@ -/** - * vis.js - * https://github.com/almende/vis - * - * A dynamic, browser-based visualization library. - * - * @version 3.7.2 - * @date 2014-12-09 - * - * @license - * Copyright (C) 2011-2014 Almende B.V, http://almende.com - * - * Vis.js is dual licensed under both - * - * * The Apache 2.0 License - * http://www.apache.org/licenses/LICENSE-2.0 - * - * and - * - * * The MIT License - * http://opensource.org/licenses/MIT - * - * Vis.js may be distributed under either license. - */ - -"use strict"; - -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define(factory); - else if(typeof exports === 'object') - exports["vis"] = factory(); - else - root["vis"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; -/******/ -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { - - // utils - exports.util = __webpack_require__(1); - exports.DOMutil = __webpack_require__(2); - - // data - exports.DataSet = __webpack_require__(3); - exports.DataView = __webpack_require__(4); - exports.Queue = __webpack_require__(5); - - // Graph3d - exports.Graph3d = __webpack_require__(6); - exports.graph3d = { - Camera: __webpack_require__(7), - Filter: __webpack_require__(8), - Point2d: __webpack_require__(9), - Point3d: __webpack_require__(10), - Slider: __webpack_require__(11), - StepNumber: __webpack_require__(12) - }; - - // Timeline - exports.Timeline = __webpack_require__(13); - exports.Graph2d = __webpack_require__(14); - exports.timeline = { - DateUtil: __webpack_require__(15), - DataStep: __webpack_require__(16), - Range: __webpack_require__(17), - stack: __webpack_require__(18), - TimeStep: __webpack_require__(19), - - components: { - items: { - Item: __webpack_require__(31), - BackgroundItem: __webpack_require__(32), - BoxItem: __webpack_require__(33), - PointItem: __webpack_require__(34), - RangeItem: __webpack_require__(35) - }, - - Component: __webpack_require__(20), - CurrentTime: __webpack_require__(21), - CustomTime: __webpack_require__(22), - DataAxis: __webpack_require__(23), - GraphGroup: __webpack_require__(24), - Group: __webpack_require__(25), - BackgroundGroup: __webpack_require__(26), - ItemSet: __webpack_require__(27), - Legend: __webpack_require__(28), - LineGraph: __webpack_require__(29), - TimeAxis: __webpack_require__(30) - } - }; - - // Network - exports.Network = __webpack_require__(36); - exports.network = { - Edge: __webpack_require__(37), - Groups: __webpack_require__(38), - Images: __webpack_require__(39), - Node: __webpack_require__(40), - Popup: __webpack_require__(41), - dotparser: __webpack_require__(42), - gephiParser: __webpack_require__(43) - }; - - // Deprecated since v3.0.0 - exports.Graph = function () { - throw new Error('Graph is renamed to Network. Please create a graph as new vis.Network(...)'); - }; - - // bundled external libraries - exports.moment = __webpack_require__(44); - exports.hammer = __webpack_require__(45); - - -/***/ }, -/* 1 */ -/***/ function(module, exports, __webpack_require__) { - - // utility functions - - // first check if moment.js is already loaded in the browser window, if so, - // use this instance. Else, load via commonjs. - var moment = __webpack_require__(44); - - /** - * Test whether given object is a number - * @param {*} object - * @return {Boolean} isNumber - */ - exports.isNumber = function(object) { - return (object instanceof Number || typeof object == 'number'); - }; - - /** - * Test whether given object is a string - * @param {*} object - * @return {Boolean} isString - */ - exports.isString = function(object) { - return (object instanceof String || typeof object == 'string'); - }; - - /** - * Test whether given object is a Date, or a String containing a Date - * @param {Date | String} object - * @return {Boolean} isDate - */ - exports.isDate = function(object) { - if (object instanceof Date) { - return true; - } - else if (exports.isString(object)) { - // test whether this string contains a date - var match = ASPDateRegex.exec(object); - if (match) { - return true; - } - else if (!isNaN(Date.parse(object))) { - return true; - } - } - - return false; - }; - - /** - * Test whether given object is an instance of google.visualization.DataTable - * @param {*} object - * @return {Boolean} isDataTable - */ - exports.isDataTable = function(object) { - return (typeof (google) !== 'undefined') && - (google.visualization) && - (google.visualization.DataTable) && - (object instanceof google.visualization.DataTable); - }; - - /** - * Create a semi UUID - * source: http://stackoverflow.com/a/105074/1262753 - * @return {String} uuid - */ - exports.randomUUID = function() { - var S4 = function () { - return Math.floor( - Math.random() * 0x10000 /* 65536 */ - ).toString(16); - }; - - return ( - S4() + S4() + '-' + - S4() + '-' + - S4() + '-' + - S4() + '-' + - S4() + S4() + S4() - ); - }; - - /** - * Extend object a with the properties of object b or a series of objects - * Only properties with defined values are copied - * @param {Object} a - * @param {... Object} b - * @return {Object} a - */ - exports.extend = function (a, b) { - for (var i = 1, len = arguments.length; i < len; i++) { - var other = arguments[i]; - for (var prop in other) { - if (other.hasOwnProperty(prop)) { - a[prop] = other[prop]; - } - } - } - - return a; - }; - - /** - * Extend object a with selected properties of object b or a series of objects - * Only properties with defined values are copied - * @param {Array.} props - * @param {Object} a - * @param {... Object} b - * @return {Object} a - */ - exports.selectiveExtend = function (props, a, b) { - if (!Array.isArray(props)) { - throw new Error('Array with property names expected as first argument'); - } - - for (var i = 2; i < arguments.length; i++) { - var other = arguments[i]; - - for (var p = 0; p < props.length; p++) { - var prop = props[p]; - if (other.hasOwnProperty(prop)) { - a[prop] = other[prop]; - } - } - } - return a; - }; - - /** - * Extend object a with selected properties of object b or a series of objects - * Only properties with defined values are copied - * @param {Array.} props - * @param {Object} a - * @param {... Object} b - * @return {Object} a - */ - exports.selectiveDeepExtend = function (props, a, b) { - // TODO: add support for Arrays to deepExtend - if (Array.isArray(b)) { - throw new TypeError('Arrays are not supported by deepExtend'); - } - for (var i = 2; i < arguments.length; i++) { - var other = arguments[i]; - for (var p = 0; p < props.length; p++) { - var prop = props[p]; - if (other.hasOwnProperty(prop)) { - if (b[prop] && b[prop].constructor === Object) { - if (a[prop] === undefined) { - a[prop] = {}; - } - if (a[prop].constructor === Object) { - exports.deepExtend(a[prop], b[prop]); - } - else { - a[prop] = b[prop]; - } - } else if (Array.isArray(b[prop])) { - throw new TypeError('Arrays are not supported by deepExtend'); - } else { - a[prop] = b[prop]; - } - - } - } - } - return a; - }; - - /** - * Extend object a with selected properties of object b or a series of objects - * Only properties with defined values are copied - * @param {Array.} props - * @param {Object} a - * @param {... Object} b - * @return {Object} a - */ - exports.selectiveNotDeepExtend = function (props, a, b) { - // TODO: add support for Arrays to deepExtend - if (Array.isArray(b)) { - throw new TypeError('Arrays are not supported by deepExtend'); - } - for (var prop in b) { - if (b.hasOwnProperty(prop)) { - if (props.indexOf(prop) == -1) { - if (b[prop] && b[prop].constructor === Object) { - if (a[prop] === undefined) { - a[prop] = {}; - } - if (a[prop].constructor === Object) { - exports.deepExtend(a[prop], b[prop]); - } - else { - a[prop] = b[prop]; - } - } else if (Array.isArray(b[prop])) { - throw new TypeError('Arrays are not supported by deepExtend'); - } else { - a[prop] = b[prop]; - } - } - } - } - return a; - }; - - /** - * Deep extend an object a with the properties of object b - * @param {Object} a - * @param {Object} b - * @returns {Object} - */ - exports.deepExtend = function(a, b) { - // TODO: add support for Arrays to deepExtend - if (Array.isArray(b)) { - throw new TypeError('Arrays are not supported by deepExtend'); - } - - for (var prop in b) { - if (b.hasOwnProperty(prop)) { - if (b[prop] && b[prop].constructor === Object) { - if (a[prop] === undefined) { - a[prop] = {}; - } - if (a[prop].constructor === Object) { - exports.deepExtend(a[prop], b[prop]); - } - else { - a[prop] = b[prop]; - } - } else if (Array.isArray(b[prop])) { - throw new TypeError('Arrays are not supported by deepExtend'); - } else { - a[prop] = b[prop]; - } - } - } - return a; - }; - - /** - * Test whether all elements in two arrays are equal. - * @param {Array} a - * @param {Array} b - * @return {boolean} Returns true if both arrays have the same length and same - * elements. - */ - exports.equalArray = function (a, b) { - if (a.length != b.length) return false; - - for (var i = 0, len = a.length; i < len; i++) { - if (a[i] != b[i]) return false; - } - - return true; - }; - - /** - * Convert an object to another type - * @param {Boolean | Number | String | Date | Moment | Null | undefined} object - * @param {String | undefined} type Name of the type. Available types: - * 'Boolean', 'Number', 'String', - * 'Date', 'Moment', ISODate', 'ASPDate'. - * @return {*} object - * @throws Error - */ - exports.convert = function(object, type) { - var match; - - if (object === undefined) { - return undefined; - } - if (object === null) { - return null; - } - - if (!type) { - return object; - } - if (!(typeof type === 'string') && !(type instanceof String)) { - throw new Error('Type must be a string'); - } - - //noinspection FallthroughInSwitchStatementJS - switch (type) { - case 'boolean': - case 'Boolean': - return Boolean(object); - - case 'number': - case 'Number': - return Number(object.valueOf()); - - case 'string': - case 'String': - return String(object); - - case 'Date': - if (exports.isNumber(object)) { - return new Date(object); - } - if (object instanceof Date) { - return new Date(object.valueOf()); - } - else if (moment.isMoment(object)) { - return new Date(object.valueOf()); - } - if (exports.isString(object)) { - match = ASPDateRegex.exec(object); - if (match) { - // object is an ASP date - return new Date(Number(match[1])); // parse number - } - else { - return moment(object).toDate(); // parse string - } - } - else { - throw new Error( - 'Cannot convert object of type ' + exports.getType(object) + - ' to type Date'); - } - - case 'Moment': - if (exports.isNumber(object)) { - return moment(object); - } - if (object instanceof Date) { - return moment(object.valueOf()); - } - else if (moment.isMoment(object)) { - return moment(object); - } - if (exports.isString(object)) { - match = ASPDateRegex.exec(object); - if (match) { - // object is an ASP date - return moment(Number(match[1])); // parse number - } - else { - return moment(object); // parse string - } - } - else { - throw new Error( - 'Cannot convert object of type ' + exports.getType(object) + - ' to type Date'); - } - - case 'ISODate': - if (exports.isNumber(object)) { - return new Date(object); - } - else if (object instanceof Date) { - return object.toISOString(); - } - else if (moment.isMoment(object)) { - return object.toDate().toISOString(); - } - else if (exports.isString(object)) { - match = ASPDateRegex.exec(object); - if (match) { - // object is an ASP date - return new Date(Number(match[1])).toISOString(); // parse number - } - else { - return new Date(object).toISOString(); // parse string - } - } - else { - throw new Error( - 'Cannot convert object of type ' + exports.getType(object) + - ' to type ISODate'); - } - - case 'ASPDate': - if (exports.isNumber(object)) { - return '/Date(' + object + ')/'; - } - else if (object instanceof Date) { - return '/Date(' + object.valueOf() + ')/'; - } - else if (exports.isString(object)) { - match = ASPDateRegex.exec(object); - var value; - if (match) { - // object is an ASP date - value = new Date(Number(match[1])).valueOf(); // parse number - } - else { - value = new Date(object).valueOf(); // parse string - } - return '/Date(' + value + ')/'; - } - else { - throw new Error( - 'Cannot convert object of type ' + exports.getType(object) + - ' to type ASPDate'); - } - - default: - throw new Error('Unknown type "' + type + '"'); - } - }; - - // parse ASP.Net Date pattern, - // for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/' - // code from http://momentjs.com/ - var ASPDateRegex = /^\/?Date\((\-?\d+)/i; - - /** - * Get the type of an object, for example exports.getType([]) returns 'Array' - * @param {*} object - * @return {String} type - */ - exports.getType = function(object) { - var type = typeof object; - - if (type == 'object') { - if (object == null) { - return 'null'; - } - if (object instanceof Boolean) { - return 'Boolean'; - } - if (object instanceof Number) { - return 'Number'; - } - if (object instanceof String) { - return 'String'; - } - if (Array.isArray(object)) { - return 'Array'; - } - if (object instanceof Date) { - return 'Date'; - } - return 'Object'; - } - else if (type == 'number') { - return 'Number'; - } - else if (type == 'boolean') { - return 'Boolean'; - } - else if (type == 'string') { - return 'String'; - } - - return type; - }; - - /** - * Retrieve the absolute left value of a DOM element - * @param {Element} elem A dom element, for example a div - * @return {number} left The absolute left position of this element - * in the browser page. - */ - exports.getAbsoluteLeft = function(elem) { - return elem.getBoundingClientRect().left + window.pageXOffset; - }; - - /** - * Retrieve the absolute top value of a DOM element - * @param {Element} elem A dom element, for example a div - * @return {number} top The absolute top position of this element - * in the browser page. - */ - exports.getAbsoluteTop = function(elem) { - return elem.getBoundingClientRect().top + window.pageYOffset; - }; - - /** - * add a className to the given elements style - * @param {Element} elem - * @param {String} className - */ - exports.addClassName = function(elem, className) { - var classes = elem.className.split(' '); - if (classes.indexOf(className) == -1) { - classes.push(className); // add the class to the array - elem.className = classes.join(' '); - } - }; - - /** - * add a className to the given elements style - * @param {Element} elem - * @param {String} className - */ - exports.removeClassName = function(elem, className) { - var classes = elem.className.split(' '); - var index = classes.indexOf(className); - if (index != -1) { - classes.splice(index, 1); // remove the class from the array - elem.className = classes.join(' '); - } - }; - - /** - * For each method for both arrays and objects. - * In case of an array, the built-in Array.forEach() is applied. - * In case of an Object, the method loops over all properties of the object. - * @param {Object | Array} object An Object or Array - * @param {function} callback Callback method, called for each item in - * the object or array with three parameters: - * callback(value, index, object) - */ - exports.forEach = function(object, callback) { - var i, - len; - if (Array.isArray(object)) { - // array - for (i = 0, len = object.length; i < len; i++) { - callback(object[i], i, object); - } - } - else { - // object - for (i in object) { - if (object.hasOwnProperty(i)) { - callback(object[i], i, object); - } - } - } - }; - - /** - * Convert an object into an array: all objects properties are put into the - * array. The resulting array is unordered. - * @param {Object} object - * @param {Array} array - */ - exports.toArray = function(object) { - var array = []; - - for (var prop in object) { - if (object.hasOwnProperty(prop)) array.push(object[prop]); - } - - return array; - } - - /** - * Update a property in an object - * @param {Object} object - * @param {String} key - * @param {*} value - * @return {Boolean} changed - */ - exports.updateProperty = function(object, key, value) { - if (object[key] !== value) { - object[key] = value; - return true; - } - else { - return false; - } - }; - - /** - * Add and event listener. Works for all browsers - * @param {Element} element An html element - * @param {string} action The action, for example "click", - * without the prefix "on" - * @param {function} listener The callback function to be executed - * @param {boolean} [useCapture] - */ - exports.addEventListener = function(element, action, listener, useCapture) { - if (element.addEventListener) { - if (useCapture === undefined) - useCapture = false; - - if (action === "mousewheel" && navigator.userAgent.indexOf("Firefox") >= 0) { - action = "DOMMouseScroll"; // For Firefox - } - - element.addEventListener(action, listener, useCapture); - } else { - element.attachEvent("on" + action, listener); // IE browsers - } - }; - - /** - * Remove an event listener from an element - * @param {Element} element An html dom element - * @param {string} action The name of the event, for example "mousedown" - * @param {function} listener The listener function - * @param {boolean} [useCapture] - */ - exports.removeEventListener = function(element, action, listener, useCapture) { - if (element.removeEventListener) { - // non-IE browsers - if (useCapture === undefined) - useCapture = false; - - if (action === "mousewheel" && navigator.userAgent.indexOf("Firefox") >= 0) { - action = "DOMMouseScroll"; // For Firefox - } - - element.removeEventListener(action, listener, useCapture); - } else { - // IE browsers - element.detachEvent("on" + action, listener); - } - }; - - /** - * Cancels the event if it is cancelable, without stopping further propagation of the event. - */ - exports.preventDefault = function (event) { - if (!event) - event = window.event; - - if (event.preventDefault) { - event.preventDefault(); // non-IE browsers - } - else { - event.returnValue = false; // IE browsers - } - }; - - /** - * Get HTML element which is the target of the event - * @param {Event} event - * @return {Element} target element - */ - exports.getTarget = function(event) { - // code from http://www.quirksmode.org/js/events_properties.html - if (!event) { - event = window.event; - } - - var target; - - if (event.target) { - target = event.target; - } - else if (event.srcElement) { - target = event.srcElement; - } - - if (target.nodeType != undefined && target.nodeType == 3) { - // defeat Safari bug - target = target.parentNode; - } - - return target; - }; - - exports.option = {}; - - /** - * Convert a value into a boolean - * @param {Boolean | function | undefined} value - * @param {Boolean} [defaultValue] - * @returns {Boolean} bool - */ - exports.option.asBoolean = function (value, defaultValue) { - if (typeof value == 'function') { - value = value(); - } - - if (value != null) { - return (value != false); - } - - return defaultValue || null; - }; - - /** - * Convert a value into a number - * @param {Boolean | function | undefined} value - * @param {Number} [defaultValue] - * @returns {Number} number - */ - exports.option.asNumber = function (value, defaultValue) { - if (typeof value == 'function') { - value = value(); - } - - if (value != null) { - return Number(value) || defaultValue || null; - } - - return defaultValue || null; - }; - - /** - * Convert a value into a string - * @param {String | function | undefined} value - * @param {String} [defaultValue] - * @returns {String} str - */ - exports.option.asString = function (value, defaultValue) { - if (typeof value == 'function') { - value = value(); - } - - if (value != null) { - return String(value); - } - - return defaultValue || null; - }; - - /** - * Convert a size or location into a string with pixels or a percentage - * @param {String | Number | function | undefined} value - * @param {String} [defaultValue] - * @returns {String} size - */ - exports.option.asSize = function (value, defaultValue) { - if (typeof value == 'function') { - value = value(); - } - - if (exports.isString(value)) { - return value; - } - else if (exports.isNumber(value)) { - return value + 'px'; - } - else { - return defaultValue || null; - } - }; - - /** - * Convert a value into a DOM element - * @param {HTMLElement | function | undefined} value - * @param {HTMLElement} [defaultValue] - * @returns {HTMLElement | null} dom - */ - exports.option.asElement = function (value, defaultValue) { - if (typeof value == 'function') { - value = value(); - } - - return value || defaultValue || null; - }; - - - - exports.GiveDec = function(Hex) { - var Value; - - if (Hex == "A") - Value = 10; - else if (Hex == "B") - Value = 11; - else if (Hex == "C") - Value = 12; - else if (Hex == "D") - Value = 13; - else if (Hex == "E") - Value = 14; - else if (Hex == "F") - Value = 15; - else - Value = eval(Hex); - - return Value; - }; - - exports.GiveHex = function(Dec) { - var Value; - - if(Dec == 10) - Value = "A"; - else if (Dec == 11) - Value = "B"; - else if (Dec == 12) - Value = "C"; - else if (Dec == 13) - Value = "D"; - else if (Dec == 14) - Value = "E"; - else if (Dec == 15) - Value = "F"; - else - Value = "" + Dec; - - return Value; - }; - - /** - * Parse a color property into an object with border, background, and - * highlight colors - * @param {Object | String} color - * @return {Object} colorObject - */ - exports.parseColor = function(color) { - var c; - if (exports.isString(color)) { - if (exports.isValidRGB(color)) { - var rgb = color.substr(4).substr(0,color.length-5).split(','); - color = exports.RGBToHex(rgb[0],rgb[1],rgb[2]); - } - if (exports.isValidHex(color)) { - var hsv = exports.hexToHSV(color); - var lighterColorHSV = {h:hsv.h,s:hsv.s * 0.45,v:Math.min(1,hsv.v * 1.05)}; - var darkerColorHSV = {h:hsv.h,s:Math.min(1,hsv.v * 1.25),v:hsv.v*0.6}; - var darkerColorHex = exports.HSVToHex(darkerColorHSV.h ,darkerColorHSV.h ,darkerColorHSV.v); - var lighterColorHex = exports.HSVToHex(lighterColorHSV.h,lighterColorHSV.s,lighterColorHSV.v); - - c = { - background: color, - border:darkerColorHex, - highlight: { - background:lighterColorHex, - border:darkerColorHex - }, - hover: { - background:lighterColorHex, - border:darkerColorHex - } - }; - } - else { - c = { - background:color, - border:color, - highlight: { - background:color, - border:color - }, - hover: { - background:color, - border:color - } - }; - } - } - else { - c = {}; - c.background = color.background || 'white'; - c.border = color.border || c.background; - - if (exports.isString(color.highlight)) { - c.highlight = { - border: color.highlight, - background: color.highlight - } - } - else { - c.highlight = {}; - c.highlight.background = color.highlight && color.highlight.background || c.background; - c.highlight.border = color.highlight && color.highlight.border || c.border; - } - - if (exports.isString(color.hover)) { - c.hover = { - border: color.hover, - background: color.hover - } - } - else { - c.hover = {}; - c.hover.background = color.hover && color.hover.background || c.background; - c.hover.border = color.hover && color.hover.border || c.border; - } - } - - return c; - }; - - /** - * http://www.yellowpipe.com/yis/tools/hex-to-rgb/color-converter.php - * - * @param {String} hex - * @returns {{r: *, g: *, b: *}} - */ - exports.hexToRGB = function(hex) { - hex = hex.replace("#","").toUpperCase(); - - var a = exports.GiveDec(hex.substring(0, 1)); - var b = exports.GiveDec(hex.substring(1, 2)); - var c = exports.GiveDec(hex.substring(2, 3)); - var d = exports.GiveDec(hex.substring(3, 4)); - var e = exports.GiveDec(hex.substring(4, 5)); - var f = exports.GiveDec(hex.substring(5, 6)); - - var r = (a * 16) + b; - var g = (c * 16) + d; - var b = (e * 16) + f; - - return {r:r,g:g,b:b}; - }; - - exports.RGBToHex = function(red,green,blue) { - var a = exports.GiveHex(Math.floor(red / 16)); - var b = exports.GiveHex(red % 16); - var c = exports.GiveHex(Math.floor(green / 16)); - var d = exports.GiveHex(green % 16); - var e = exports.GiveHex(Math.floor(blue / 16)); - var f = exports.GiveHex(blue % 16); - - var hex = a + b + c + d + e + f; - return "#" + hex; - }; - - - /** - * http://www.javascripter.net/faq/rgb2hsv.htm - * - * @param red - * @param green - * @param blue - * @returns {*} - * @constructor - */ - exports.RGBToHSV = function(red,green,blue) { - red=red/255; green=green/255; blue=blue/255; - var minRGB = Math.min(red,Math.min(green,blue)); - var maxRGB = Math.max(red,Math.max(green,blue)); - - // Black-gray-white - if (minRGB == maxRGB) { - return {h:0,s:0,v:minRGB}; - } - - // Colors other than black-gray-white: - var d = (red==minRGB) ? green-blue : ((blue==minRGB) ? red-green : blue-red); - var h = (red==minRGB) ? 3 : ((blue==minRGB) ? 1 : 5); - var hue = 60*(h - d/(maxRGB - minRGB))/360; - var saturation = (maxRGB - minRGB)/maxRGB; - var value = maxRGB; - return {h:hue,s:saturation,v:value}; - }; - - var cssUtil = { - // split a string with css styles into an object with key/values - split: function (cssText) { - var styles = {}; - - cssText.split(';').forEach(function (style) { - if (style.trim() != '') { - var parts = style.split(':'); - var key = parts[0].trim(); - var value = parts[1].trim(); - styles[key] = value; - } - }); - - return styles; - }, - - // build a css text string from an object with key/values - join: function (styles) { - return Object.keys(styles) - .map(function (key) { - return key + ': ' + styles[key]; - }) - .join('; '); - } - }; - - /** - * Append a string with css styles to an element - * @param {Element} element - * @param {String} cssText - */ - exports.addCssText = function (element, cssText) { - var currentStyles = cssUtil.split(element.style.cssText); - var newStyles = cssUtil.split(cssText); - var styles = exports.extend(currentStyles, newStyles); - - element.style.cssText = cssUtil.join(styles); - }; - - /** - * Remove a string with css styles from an element - * @param {Element} element - * @param {String} cssText - */ - exports.removeCssText = function (element, cssText) { - var styles = cssUtil.split(element.style.cssText); - var removeStyles = cssUtil.split(cssText); - - for (var key in removeStyles) { - if (removeStyles.hasOwnProperty(key)) { - delete styles[key]; - } - } - - element.style.cssText = cssUtil.join(styles); - }; - - /** - * https://gist.github.com/mjijackson/5311256 - * @param h - * @param s - * @param v - * @returns {{r: number, g: number, b: number}} - * @constructor - */ - exports.HSVToRGB = function(h, s, v) { - var r, g, b; - - var i = Math.floor(h * 6); - var f = h * 6 - i; - var p = v * (1 - s); - var q = v * (1 - f * s); - var t = v * (1 - (1 - f) * s); - - switch (i % 6) { - case 0: r = v, g = t, b = p; break; - case 1: r = q, g = v, b = p; break; - case 2: r = p, g = v, b = t; break; - case 3: r = p, g = q, b = v; break; - case 4: r = t, g = p, b = v; break; - case 5: r = v, g = p, b = q; break; - } - - return {r:Math.floor(r * 255), g:Math.floor(g * 255), b:Math.floor(b * 255) }; - }; - - exports.HSVToHex = function(h, s, v) { - var rgb = exports.HSVToRGB(h, s, v); - return exports.RGBToHex(rgb.r, rgb.g, rgb.b); - }; - - exports.hexToHSV = function(hex) { - var rgb = exports.hexToRGB(hex); - return exports.RGBToHSV(rgb.r, rgb.g, rgb.b); - }; - - exports.isValidHex = function(hex) { - var isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex); - return isOk; - }; - - exports.isValidRGB = function(rgb) { - rgb = rgb.replace(" ",""); - var isOk = /rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(rgb); - return isOk; - } - - /** - * This recursively redirects the prototype of JSON objects to the referenceObject - * This is used for default options. - * - * @param referenceObject - * @returns {*} - */ - exports.selectiveBridgeObject = function(fields, referenceObject) { - if (typeof referenceObject == "object") { - var objectTo = Object.create(referenceObject); - for (var i = 0; i < fields.length; i++) { - if (referenceObject.hasOwnProperty(fields[i])) { - if (typeof referenceObject[fields[i]] == "object") { - objectTo[fields[i]] = exports.bridgeObject(referenceObject[fields[i]]); - } - } - } - return objectTo; - } - else { - return null; - } - }; - - /** - * This recursively redirects the prototype of JSON objects to the referenceObject - * This is used for default options. - * - * @param referenceObject - * @returns {*} - */ - exports.bridgeObject = function(referenceObject) { - if (typeof referenceObject == "object") { - var objectTo = Object.create(referenceObject); - for (var i in referenceObject) { - if (referenceObject.hasOwnProperty(i)) { - if (typeof referenceObject[i] == "object") { - objectTo[i] = exports.bridgeObject(referenceObject[i]); - } - } - } - return objectTo; - } - else { - return null; - } - }; - - - /** - * this is used to set the options of subobjects in the options object. A requirement of these subobjects - * is that they have an 'enabled' element which is optional for the user but mandatory for the program. - * - * @param [object] mergeTarget | this is either this.options or the options used for the groups. - * @param [object] options | options - * @param [String] option | this is the option key in the options argument - * @private - */ - exports.mergeOptions = function (mergeTarget, options, option) { - if (options[option] !== undefined) { - if (typeof options[option] == 'boolean') { - mergeTarget[option].enabled = options[option]; - } - else { - mergeTarget[option].enabled = true; - for (var prop in options[option]) { - if (options[option].hasOwnProperty(prop)) { - mergeTarget[option][prop] = options[option][prop]; - } - } - } - } - } - - - /** - * This function does a binary search for a visible item in a sorted list. If we find a visible item, the code that uses - * this function will then iterate in both directions over this sorted list to find all visible items. - * - * @param {Item[]} orderedItems | Items ordered by start - * @param {function} searchFunction | -1 is lower, 0 is found, 1 is higher - * @param {String} field - * @param {String} field2 - * @returns {number} - * @private - */ - exports.binarySearchCustom = function(orderedItems, searchFunction, field, field2) { - var maxIterations = 10000; - var iteration = 0; - var low = 0; - var high = orderedItems.length - 1; - - while (low <= high && iteration < maxIterations) { - var middle = Math.floor((low + high) / 2); - - var item = orderedItems[middle]; - var value = (field2 === undefined) ? item[field] : item[field][field2]; - - var searchResult = searchFunction(value); - if (searchResult == 0) { // jihaa, found a visible item! - return middle; - } - else if (searchResult == -1) { // it is too small --> increase low - low = middle + 1; - } - else { // it is too big --> decrease high - high = middle - 1; - } - - iteration++; - } - - return -1; - }; - - /** - * This function does a binary search for a specific value in a sorted array. If it does not exist but is in between of - * two values, we return either the one before or the one after, depending on user input - * If it is found, we return the index, else -1. - * - * @param {Array} orderedItems - * @param {{start: number, end: number}} target - * @param {String} field - * @param {String} sidePreference 'before' or 'after' - * @returns {number} - * @private - */ - exports.binarySearchValue = function(orderedItems, target, field, sidePreference) { - var maxIterations = 10000; - var iteration = 0; - var low = 0; - var high = orderedItems.length - 1; - var prevValue, value, nextValue, middle; - - while (low <= high && iteration < maxIterations) { - // get a new guess - middle = Math.floor(0.5*(high+low)); - prevValue = orderedItems[Math.max(0,middle - 1)][field]; - value = orderedItems[middle][field]; - nextValue = orderedItems[Math.min(orderedItems.length-1,middle + 1)][field]; - - if (value == target) { // we found the target - return middle; - } - else if (prevValue < target && value > target) { // target is in between of the previous and the current - return sidePreference == 'before' ? Math.max(0,middle - 1) : middle; - } - else if (value < target && nextValue > target) { // target is in between of the current and the next - return sidePreference == 'before' ? middle : Math.min(orderedItems.length-1,middle + 1); - } - else { // didnt find the target, we need to change our boundaries. - if (value < target) { // it is too small --> increase low - low = middle + 1; - } - else { // it is too big --> decrease high - high = middle - 1; - } - } - iteration++; - } - - // didnt find anything. Return -1. - return -1; - }; - - /** - * Quadratic ease-in-out - * http://gizma.com/easing/ - * @param {number} t Current time - * @param {number} start Start value - * @param {number} end End value - * @param {number} duration Duration - * @returns {number} Value corresponding with current time - */ - exports.easeInOutQuad = function (t, start, end, duration) { - var change = end - start; - t /= duration/2; - if (t < 1) return change/2*t*t + start; - t--; - return -change/2 * (t*(t-2) - 1) + start; - }; - - - - /* - * Easing Functions - inspired from http://gizma.com/easing/ - * only considering the t value for the range [0, 1] => [0, 1] - * https://gist.github.com/gre/1650294 - */ - exports.easingFunctions = { - // no easing, no acceleration - linear: function (t) { - return t - }, - // accelerating from zero velocity - easeInQuad: function (t) { - return t * t - }, - // decelerating to zero velocity - easeOutQuad: function (t) { - return t * (2 - t) - }, - // acceleration until halfway, then deceleration - easeInOutQuad: function (t) { - return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t - }, - // accelerating from zero velocity - easeInCubic: function (t) { - return t * t * t - }, - // decelerating to zero velocity - easeOutCubic: function (t) { - return (--t) * t * t + 1 - }, - // acceleration until halfway, then deceleration - easeInOutCubic: function (t) { - return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1 - }, - // accelerating from zero velocity - easeInQuart: function (t) { - return t * t * t * t - }, - // decelerating to zero velocity - easeOutQuart: function (t) { - return 1 - (--t) * t * t * t - }, - // acceleration until halfway, then deceleration - easeInOutQuart: function (t) { - return t < .5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t - }, - // accelerating from zero velocity - easeInQuint: function (t) { - return t * t * t * t * t - }, - // decelerating to zero velocity - easeOutQuint: function (t) { - return 1 + (--t) * t * t * t * t - }, - // acceleration until halfway, then deceleration - easeInOutQuint: function (t) { - return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t - } - }; - -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - - // DOM utility methods - - /** - * this prepares the JSON container for allocating SVG elements - * @param JSONcontainer - * @private - */ - exports.prepareElements = function(JSONcontainer) { - // cleanup the redundant svgElements; - for (var elementType in JSONcontainer) { - if (JSONcontainer.hasOwnProperty(elementType)) { - JSONcontainer[elementType].redundant = JSONcontainer[elementType].used; - JSONcontainer[elementType].used = []; - } - } - }; - - /** - * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from - * which to remove the redundant elements. - * - * @param JSONcontainer - * @private - */ - exports.cleanupElements = function(JSONcontainer) { - // cleanup the redundant svgElements; - for (var elementType in JSONcontainer) { - if (JSONcontainer.hasOwnProperty(elementType)) { - if (JSONcontainer[elementType].redundant) { - for (var i = 0; i < JSONcontainer[elementType].redundant.length; i++) { - JSONcontainer[elementType].redundant[i].parentNode.removeChild(JSONcontainer[elementType].redundant[i]); - } - JSONcontainer[elementType].redundant = []; - } - } - } - }; - - /** - * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer - * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this. - * - * @param elementType - * @param JSONcontainer - * @param svgContainer - * @returns {*} - * @private - */ - exports.getSVGElement = function (elementType, JSONcontainer, svgContainer) { - var element; - // allocate SVG element, if it doesnt yet exist, create one. - if (JSONcontainer.hasOwnProperty(elementType)) { // this element has been created before - // check if there is an redundant element - if (JSONcontainer[elementType].redundant.length > 0) { - element = JSONcontainer[elementType].redundant[0]; - JSONcontainer[elementType].redundant.shift(); - } - else { - // create a new element and add it to the SVG - element = document.createElementNS('http://www.w3.org/2000/svg', elementType); - svgContainer.appendChild(element); - } - } - else { - // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it. - element = document.createElementNS('http://www.w3.org/2000/svg', elementType); - JSONcontainer[elementType] = {used: [], redundant: []}; - svgContainer.appendChild(element); - } - JSONcontainer[elementType].used.push(element); - return element; - }; - - - /** - * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer - * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this. - * - * @param elementType - * @param JSONcontainer - * @param DOMContainer - * @returns {*} - * @private - */ - exports.getDOMElement = function (elementType, JSONcontainer, DOMContainer, insertBefore) { - var element; - // allocate DOM element, if it doesnt yet exist, create one. - if (JSONcontainer.hasOwnProperty(elementType)) { // this element has been created before - // check if there is an redundant element - if (JSONcontainer[elementType].redundant.length > 0) { - element = JSONcontainer[elementType].redundant[0]; - JSONcontainer[elementType].redundant.shift(); - } - else { - // create a new element and add it to the SVG - element = document.createElement(elementType); - if (insertBefore !== undefined) { - DOMContainer.insertBefore(element, insertBefore); - } - else { - DOMContainer.appendChild(element); - } - } - } - else { - // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it. - element = document.createElement(elementType); - JSONcontainer[elementType] = {used: [], redundant: []}; - if (insertBefore !== undefined) { - DOMContainer.insertBefore(element, insertBefore); - } - else { - DOMContainer.appendChild(element); - } - } - JSONcontainer[elementType].used.push(element); - return element; - }; - - - - - /** - * draw a point object. this is a seperate function because it can also be called by the legend. - * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions - * as well. - * - * @param x - * @param y - * @param group - * @param JSONcontainer - * @param svgContainer - * @returns {*} - */ - exports.drawPoint = function(x, y, group, JSONcontainer, svgContainer) { - var point; - if (group.options.drawPoints.style == 'circle') { - point = exports.getSVGElement('circle',JSONcontainer,svgContainer); - point.setAttributeNS(null, "cx", x); - point.setAttributeNS(null, "cy", y); - point.setAttributeNS(null, "r", 0.5 * group.options.drawPoints.size); - } - else { - point = exports.getSVGElement('rect',JSONcontainer,svgContainer); - point.setAttributeNS(null, "x", x - 0.5*group.options.drawPoints.size); - point.setAttributeNS(null, "y", y - 0.5*group.options.drawPoints.size); - point.setAttributeNS(null, "width", group.options.drawPoints.size); - point.setAttributeNS(null, "height", group.options.drawPoints.size); - } - - if(group.options.drawPoints.styles !== undefined) { - point.setAttributeNS(null, "style", group.group.options.drawPoints.styles); - } - point.setAttributeNS(null, "class", group.className + " point"); - return point; - }; - - /** - * draw a bar SVG element centered on the X coordinate - * - * @param x - * @param y - * @param className - */ - exports.drawBar = function (x, y, width, height, className, JSONcontainer, svgContainer) { - if (height != 0) { - if (height < 0) { - height *= -1; - y -= height; - } - var rect = exports.getSVGElement('rect',JSONcontainer, svgContainer); - rect.setAttributeNS(null, "x", x - 0.5 * width); - rect.setAttributeNS(null, "y", y); - rect.setAttributeNS(null, "width", width); - rect.setAttributeNS(null, "height", height); - rect.setAttributeNS(null, "class", className); - } - }; - -/***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var Queue = __webpack_require__(5); - - /** - * DataSet - * - * Usage: - * var dataSet = new DataSet({ - * fieldId: '_id', - * type: { - * // ... - * } - * }); - * - * dataSet.add(item); - * dataSet.add(data); - * dataSet.update(item); - * dataSet.update(data); - * dataSet.remove(id); - * dataSet.remove(ids); - * var data = dataSet.get(); - * var data = dataSet.get(id); - * var data = dataSet.get(ids); - * var data = dataSet.get(ids, options, data); - * dataSet.clear(); - * - * A data set can: - * - add/remove/update data - * - gives triggers upon changes in the data - * - can import/export data in various data formats - * - * @param {Array | DataTable} [data] Optional array with initial data - * @param {Object} [options] Available options: - * {String} fieldId Field name of the id in the - * items, 'id' by default. - * {Object.} [type] - * {String[]} [fields] field names to be returned - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * {Array | DataTable} [data] If provided, items will be appended to this - * array or table. Required in case of Google - * DataTable. - * - * @throws Error - */ - DataSet.prototype.get = function (args) { - var me = this; - - // parse the arguments - var id, ids, options, data; - var firstType = util.getType(arguments[0]); - if (firstType == 'String' || firstType == 'Number') { - // get(id [, options] [, data]) - id = arguments[0]; - options = arguments[1]; - data = arguments[2]; - } - else if (firstType == 'Array') { - // get(ids [, options] [, data]) - ids = arguments[0]; - options = arguments[1]; - data = arguments[2]; - } - else { - // get([, options] [, data]) - options = arguments[0]; - data = arguments[1]; - } - - // determine the return type - var returnType; - if (options && options.returnType) { - var allowedValues = ["DataTable", "Array", "Object"]; - returnType = allowedValues.indexOf(options.returnType) == -1 ? "Array" : options.returnType; - - if (data && (returnType != util.getType(data))) { - throw new Error('Type of parameter "data" (' + util.getType(data) + ') ' + - 'does not correspond with specified options.type (' + options.type + ')'); - } - if (returnType == 'DataTable' && !util.isDataTable(data)) { - throw new Error('Parameter "data" must be a DataTable ' + - 'when options.type is "DataTable"'); - } - } - else if (data) { - returnType = (util.getType(data) == 'DataTable') ? 'DataTable' : 'Array'; - } - else { - returnType = 'Array'; - } - - // build options - var type = options && options.type || this._options.type; - var filter = options && options.filter; - var items = [], item, itemId, i, len; - - // convert items - if (id != undefined) { - // return a single item - item = me._getItem(id, type); - if (filter && !filter(item)) { - item = null; - } - } - else if (ids != undefined) { - // return a subset of items - for (i = 0, len = ids.length; i < len; i++) { - item = me._getItem(ids[i], type); - if (!filter || filter(item)) { - items.push(item); - } - } - } - else { - // return all items - for (itemId in this._data) { - if (this._data.hasOwnProperty(itemId)) { - item = me._getItem(itemId, type); - if (!filter || filter(item)) { - items.push(item); - } - } - } - } - - // order the results - if (options && options.order && id == undefined) { - this._sort(items, options.order); - } - - // filter fields of the items - if (options && options.fields) { - var fields = options.fields; - if (id != undefined) { - item = this._filterFields(item, fields); - } - else { - for (i = 0, len = items.length; i < len; i++) { - items[i] = this._filterFields(items[i], fields); - } - } - } - - // return the results - if (returnType == 'DataTable') { - var columns = this._getColumnNames(data); - if (id != undefined) { - // append a single item to the data table - me._appendRow(data, columns, item); - } - else { - // copy the items to the provided data table - for (i = 0; i < items.length; i++) { - me._appendRow(data, columns, items[i]); - } - } - return data; - } - else if (returnType == "Object") { - var result = {}; - for (i = 0; i < items.length; i++) { - result[items[i].id] = items[i]; - } - return result; - } - else { - // return an array - if (id != undefined) { - // a single item - return item; - } - else { - // multiple items - if (data) { - // copy the items to the provided array - for (i = 0, len = items.length; i < len; i++) { - data.push(items[i]); - } - return data; - } - else { - // just return our array - return items; - } - } - } - }; - - /** - * Get ids of all items or from a filtered set of items. - * @param {Object} [options] An Object with options. Available options: - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * @return {Array} ids - */ - DataSet.prototype.getIds = function (options) { - var data = this._data, - filter = options && options.filter, - order = options && options.order, - type = options && options.type || this._options.type, - i, - len, - id, - item, - items, - ids = []; - - if (filter) { - // get filtered items - if (order) { - // create ordered list - items = []; - for (id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (filter(item)) { - items.push(item); - } - } - } - - this._sort(items, order); - - for (i = 0, len = items.length; i < len; i++) { - ids[i] = items[i][this._fieldId]; - } - } - else { - // create unordered list - for (id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (filter(item)) { - ids.push(item[this._fieldId]); - } - } - } - } - } - else { - // get all items - if (order) { - // create an ordered list - items = []; - for (id in data) { - if (data.hasOwnProperty(id)) { - items.push(data[id]); - } - } - - this._sort(items, order); - - for (i = 0, len = items.length; i < len; i++) { - ids[i] = items[i][this._fieldId]; - } - } - else { - // create unordered list - for (id in data) { - if (data.hasOwnProperty(id)) { - item = data[id]; - ids.push(item[this._fieldId]); - } - } - } - } - - return ids; - }; - - /** - * Returns the DataSet itself. Is overwritten for example by the DataView, - * which returns the DataSet it is connected to instead. - */ - DataSet.prototype.getDataSet = function () { - return this; - }; - - /** - * Execute a callback function for every item in the dataset. - * @param {function} callback - * @param {Object} [options] Available options: - * {Object.} [type] - * {String[]} [fields] filter fields - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - */ - DataSet.prototype.forEach = function (callback, options) { - var filter = options && options.filter, - type = options && options.type || this._options.type, - data = this._data, - item, - id; - - if (options && options.order) { - // execute forEach on ordered list - var items = this.get(options); - - for (var i = 0, len = items.length; i < len; i++) { - item = items[i]; - id = item[this._fieldId]; - callback(item, id); - } - } - else { - // unordered - for (id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (!filter || filter(item)) { - callback(item, id); - } - } - } - } - }; - - /** - * Map every item in the dataset. - * @param {function} callback - * @param {Object} [options] Available options: - * {Object.} [type] - * {String[]} [fields] filter fields - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * @return {Object[]} mappedItems - */ - DataSet.prototype.map = function (callback, options) { - var filter = options && options.filter, - type = options && options.type || this._options.type, - mappedItems = [], - data = this._data, - item; - - // convert and filter items - for (var id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (!filter || filter(item)) { - mappedItems.push(callback(item, id)); - } - } - } - - // order items - if (options && options.order) { - this._sort(mappedItems, options.order); - } - - return mappedItems; - }; - - /** - * Filter the fields of an item - * @param {Object} item - * @param {String[]} fields Field names - * @return {Object} filteredItem - * @private - */ - DataSet.prototype._filterFields = function (item, fields) { - var filteredItem = {}; - - for (var field in item) { - if (item.hasOwnProperty(field) && (fields.indexOf(field) != -1)) { - filteredItem[field] = item[field]; - } - } - - return filteredItem; - }; - - /** - * Sort the provided array with items - * @param {Object[]} items - * @param {String | function} order A field name or custom sort function. - * @private - */ - DataSet.prototype._sort = function (items, order) { - if (util.isString(order)) { - // order by provided field name - var name = order; // field name - items.sort(function (a, b) { - var av = a[name]; - var bv = b[name]; - return (av > bv) ? 1 : ((av < bv) ? -1 : 0); - }); - } - else if (typeof order === 'function') { - // order by sort function - items.sort(order); - } - // TODO: extend order by an Object {field:String, direction:String} - // where direction can be 'asc' or 'desc' - else { - throw new TypeError('Order must be a function or a string'); - } - }; - - /** - * Remove an object by pointer or by id - * @param {String | Number | Object | Array} id Object or id, or an array with - * objects or ids to be removed - * @param {String} [senderId] Optional sender id - * @return {Array} removedIds - */ - DataSet.prototype.remove = function (id, senderId) { - var removedIds = [], - i, len, removedId; - - if (Array.isArray(id)) { - for (i = 0, len = id.length; i < len; i++) { - removedId = this._remove(id[i]); - if (removedId != null) { - removedIds.push(removedId); - } - } - } - else { - removedId = this._remove(id); - if (removedId != null) { - removedIds.push(removedId); - } - } - - if (removedIds.length) { - this._trigger('remove', {items: removedIds}, senderId); - } - - return removedIds; - }; - - /** - * Remove an item by its id - * @param {Number | String | Object} id id or item - * @returns {Number | String | null} id - * @private - */ - DataSet.prototype._remove = function (id) { - if (util.isNumber(id) || util.isString(id)) { - if (this._data[id]) { - delete this._data[id]; - return id; - } - } - else if (id instanceof Object) { - var itemId = id[this._fieldId]; - if (itemId && this._data[itemId]) { - delete this._data[itemId]; - return itemId; - } - } - return null; - }; - - /** - * Clear the data - * @param {String} [senderId] Optional sender id - * @return {Array} removedIds The ids of all removed items - */ - DataSet.prototype.clear = function (senderId) { - var ids = Object.keys(this._data); - - this._data = {}; - - this._trigger('remove', {items: ids}, senderId); - - return ids; - }; - - /** - * Find the item with maximum value of a specified field - * @param {String} field - * @return {Object | null} item Item containing max value, or null if no items - */ - DataSet.prototype.max = function (field) { - var data = this._data, - max = null, - maxField = null; - - for (var id in data) { - if (data.hasOwnProperty(id)) { - var item = data[id]; - var itemField = item[field]; - if (itemField != null && (!max || itemField > maxField)) { - max = item; - maxField = itemField; - } - } - } - - return max; - }; - - /** - * Find the item with minimum value of a specified field - * @param {String} field - * @return {Object | null} item Item containing max value, or null if no items - */ - DataSet.prototype.min = function (field) { - var data = this._data, - min = null, - minField = null; - - for (var id in data) { - if (data.hasOwnProperty(id)) { - var item = data[id]; - var itemField = item[field]; - if (itemField != null && (!min || itemField < minField)) { - min = item; - minField = itemField; - } - } - } - - return min; - }; - - /** - * Find all distinct values of a specified field - * @param {String} field - * @return {Array} values Array containing all distinct values. If data items - * do not contain the specified field are ignored. - * The returned array is unordered. - */ - DataSet.prototype.distinct = function (field) { - var data = this._data; - var values = []; - var fieldType = this._options.type && this._options.type[field] || null; - var count = 0; - var i; - - for (var prop in data) { - if (data.hasOwnProperty(prop)) { - var item = data[prop]; - var value = item[field]; - var exists = false; - for (i = 0; i < count; i++) { - if (values[i] == value) { - exists = true; - break; - } - } - if (!exists && (value !== undefined)) { - values[count] = value; - count++; - } - } - } - - if (fieldType) { - for (i = 0; i < values.length; i++) { - values[i] = util.convert(values[i], fieldType); - } - } - - return values; - }; - - /** - * Add a single item. Will fail when an item with the same id already exists. - * @param {Object} item - * @return {String} id - * @private - */ - DataSet.prototype._addItem = function (item) { - var id = item[this._fieldId]; - - if (id != undefined) { - // check whether this id is already taken - if (this._data[id]) { - // item already exists - throw new Error('Cannot add item: item with id ' + id + ' already exists'); - } - } - else { - // generate an id - id = util.randomUUID(); - item[this._fieldId] = id; - } - - var d = {}; - for (var field in item) { - if (item.hasOwnProperty(field)) { - var fieldType = this._type[field]; // type may be undefined - d[field] = util.convert(item[field], fieldType); - } - } - this._data[id] = d; - - return id; - }; - - /** - * Get an item. Fields can be converted to a specific type - * @param {String} id - * @param {Object.} [types] field types to convert - * @return {Object | null} item - * @private - */ - DataSet.prototype._getItem = function (id, types) { - var field, value; - - // get the item from the dataset - var raw = this._data[id]; - if (!raw) { - return null; - } - - // convert the items field types - var converted = {}; - if (types) { - for (field in raw) { - if (raw.hasOwnProperty(field)) { - value = raw[field]; - converted[field] = util.convert(value, types[field]); - } - } - } - else { - // no field types specified, no converting needed - for (field in raw) { - if (raw.hasOwnProperty(field)) { - value = raw[field]; - converted[field] = value; - } - } - } - return converted; - }; - - /** - * Update a single item: merge with existing item. - * Will fail when the item has no id, or when there does not exist an item - * with the same id. - * @param {Object} item - * @return {String} id - * @private - */ - DataSet.prototype._updateItem = function (item) { - var id = item[this._fieldId]; - if (id == undefined) { - throw new Error('Cannot update item: item has no id (item: ' + JSON.stringify(item) + ')'); - } - var d = this._data[id]; - if (!d) { - // item doesn't exist - throw new Error('Cannot update item: no item with id ' + id + ' found'); - } - - // merge with current item - for (var field in item) { - if (item.hasOwnProperty(field)) { - var fieldType = this._type[field]; // type may be undefined - d[field] = util.convert(item[field], fieldType); - } - } - - return id; - }; - - /** - * Get an array with the column names of a Google DataTable - * @param {DataTable} dataTable - * @return {String[]} columnNames - * @private - */ - DataSet.prototype._getColumnNames = function (dataTable) { - var columns = []; - for (var col = 0, cols = dataTable.getNumberOfColumns(); col < cols; col++) { - columns[col] = dataTable.getColumnId(col) || dataTable.getColumnLabel(col); - } - return columns; - }; - - /** - * Append an item as a row to the dataTable - * @param dataTable - * @param columns - * @param item - * @private - */ - DataSet.prototype._appendRow = function (dataTable, columns, item) { - var row = dataTable.addRow(); - - for (var col = 0, cols = columns.length; col < cols; col++) { - var field = columns[col]; - dataTable.setValue(row, col, item[field]); - } - }; - - module.exports = DataSet; - - -/***/ }, -/* 4 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - - /** - * DataView - * - * a dataview offers a filtered view on a dataset or an other dataview. - * - * @param {DataSet | DataView} data - * @param {Object} [options] Available options: see method get - * - * @constructor DataView - */ - function DataView (data, options) { - this._data = null; - this._ids = {}; // ids of the items currently in memory (just contains a boolean true) - this._options = options || {}; - this._fieldId = 'id'; // name of the field containing id - this._subscribers = {}; // event subscribers - - var me = this; - this.listener = function () { - me._onEvent.apply(me, arguments); - }; - - this.setData(data); - } - - // TODO: implement a function .config() to dynamically update things like configured filter - // and trigger changes accordingly - - /** - * Set a data source for the view - * @param {DataSet | DataView} data - */ - DataView.prototype.setData = function (data) { - var ids, i, len; - - if (this._data) { - // unsubscribe from current dataset - if (this._data.unsubscribe) { - this._data.unsubscribe('*', this.listener); - } - - // trigger a remove of all items in memory - ids = []; - for (var id in this._ids) { - if (this._ids.hasOwnProperty(id)) { - ids.push(id); - } - } - this._ids = {}; - this._trigger('remove', {items: ids}); - } - - this._data = data; - - if (this._data) { - // update fieldId - this._fieldId = this._options.fieldId || - (this._data && this._data.options && this._data.options.fieldId) || - 'id'; - - // trigger an add of all added items - ids = this._data.getIds({filter: this._options && this._options.filter}); - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - this._ids[id] = true; - } - this._trigger('add', {items: ids}); - - // subscribe to new dataset - if (this._data.on) { - this._data.on('*', this.listener); - } - } - }; - - /** - * Get data from the data view - * - * Usage: - * - * get() - * get(options: Object) - * get(options: Object, data: Array | DataTable) - * - * get(id: Number) - * get(id: Number, options: Object) - * get(id: Number, options: Object, data: Array | DataTable) - * - * get(ids: Number[]) - * get(ids: Number[], options: Object) - * get(ids: Number[], options: Object, data: Array | DataTable) - * - * Where: - * - * {Number | String} id The id of an item - * {Number[] | String{}} ids An array with ids of items - * {Object} options An Object with options. Available options: - * {String} [type] Type of data to be returned. Can - * be 'DataTable' or 'Array' (default) - * {Object.} [convert] - * {String[]} [fields] field names to be returned - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * {Array | DataTable} [data] If provided, items will be appended to this - * array or table. Required in case of Google - * DataTable. - * @param args - */ - DataView.prototype.get = function (args) { - var me = this; - - // parse the arguments - var ids, options, data; - var firstType = util.getType(arguments[0]); - if (firstType == 'String' || firstType == 'Number' || firstType == 'Array') { - // get(id(s) [, options] [, data]) - ids = arguments[0]; // can be a single id or an array with ids - options = arguments[1]; - data = arguments[2]; - } - else { - // get([, options] [, data]) - options = arguments[0]; - data = arguments[1]; - } - - // extend the options with the default options and provided options - var viewOptions = util.extend({}, this._options, options); - - // create a combined filter method when needed - if (this._options.filter && options && options.filter) { - viewOptions.filter = function (item) { - return me._options.filter(item) && options.filter(item); - } - } - - // build up the call to the linked data set - var getArguments = []; - if (ids != undefined) { - getArguments.push(ids); - } - getArguments.push(viewOptions); - getArguments.push(data); - - return this._data && this._data.get.apply(this._data, getArguments); - }; - - /** - * Get ids of all items or from a filtered set of items. - * @param {Object} [options] An Object with options. Available options: - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * @return {Array} ids - */ - DataView.prototype.getIds = function (options) { - var ids; - - if (this._data) { - var defaultFilter = this._options.filter; - var filter; - - if (options && options.filter) { - if (defaultFilter) { - filter = function (item) { - return defaultFilter(item) && options.filter(item); - } - } - else { - filter = options.filter; - } - } - else { - filter = defaultFilter; - } - - ids = this._data.getIds({ - filter: filter, - order: options && options.order - }); - } - else { - ids = []; - } - - return ids; - }; - - /** - * Get the DataSet to which this DataView is connected. In case there is a chain - * of multiple DataViews, the root DataSet of this chain is returned. - * @return {DataSet} dataSet - */ - DataView.prototype.getDataSet = function () { - var dataSet = this; - while (dataSet instanceof DataView) { - dataSet = dataSet._data; - } - return dataSet || null; - }; - - /** - * Event listener. Will propagate all events from the connected data set to - * the subscribers of the DataView, but will filter the items and only trigger - * when there are changes in the filtered data set. - * @param {String} event - * @param {Object | null} params - * @param {String} senderId - * @private - */ - DataView.prototype._onEvent = function (event, params, senderId) { - var i, len, id, item, - ids = params && params.items, - data = this._data, - added = [], - updated = [], - removed = []; - - if (ids && data) { - switch (event) { - case 'add': - // filter the ids of the added items - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - item = this.get(id); - if (item) { - this._ids[id] = true; - added.push(id); - } - } - - break; - - case 'update': - // determine the event from the views viewpoint: an updated - // item can be added, updated, or removed from this view. - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - item = this.get(id); - - if (item) { - if (this._ids[id]) { - updated.push(id); - } - else { - this._ids[id] = true; - added.push(id); - } - } - else { - if (this._ids[id]) { - delete this._ids[id]; - removed.push(id); - } - else { - // nothing interesting for me :-( - } - } - } - - break; - - case 'remove': - // filter the ids of the removed items - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - if (this._ids[id]) { - delete this._ids[id]; - removed.push(id); - } - } - - break; - } - - if (added.length) { - this._trigger('add', {items: added}, senderId); - } - if (updated.length) { - this._trigger('update', {items: updated}, senderId); - } - if (removed.length) { - this._trigger('remove', {items: removed}, senderId); - } - } - }; - - // copy subscription functionality from DataSet - DataView.prototype.on = DataSet.prototype.on; - DataView.prototype.off = DataSet.prototype.off; - DataView.prototype._trigger = DataSet.prototype._trigger; - - // TODO: make these functions deprecated (replaced with `on` and `off` since version 0.5) - DataView.prototype.subscribe = DataView.prototype.on; - DataView.prototype.unsubscribe = DataView.prototype.off; - - module.exports = DataView; - -/***/ }, -/* 5 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * A queue - * @param {Object} options - * Available options: - * - delay: number When provided, the queue will be flushed - * automatically after an inactivity of this delay - * in milliseconds. - * Default value is null. - * - max: number When the queue exceeds the given maximum number - * of entries, the queue is flushed automatically. - * Default value of max is Infinity. - * @constructor - */ - function Queue(options) { - // options - this.delay = null; - this.max = Infinity; - - // properties - this._queue = []; - this._timeout = null; - this._extended = null; - - this.setOptions(options); - } - - /** - * Update the configuration of the queue - * @param {Object} options - * Available options: - * - delay: number When provided, the queue will be flushed - * automatically after an inactivity of this delay - * in milliseconds. - * Default value is null. - * - max: number When the queue exceeds the given maximum number - * of entries, the queue is flushed automatically. - * Default value of max is Infinity. - * @param options - */ - Queue.prototype.setOptions = function (options) { - if (options && typeof options.delay !== 'undefined') { - this.delay = options.delay; - } - if (options && typeof options.max !== 'undefined') { - this.max = options.max; - } - - this._flushIfNeeded(); - }; - - /** - * Extend an object with queuing functionality. - * The object will be extended with a function flush, and the methods provided - * in options.replace will be replaced with queued ones. - * @param {Object} object - * @param {Object} options - * Available options: - * - replace: Array. - * A list with method names of the methods - * on the object to be replaced with queued ones. - * - delay: number When provided, the queue will be flushed - * automatically after an inactivity of this delay - * in milliseconds. - * Default value is null. - * - max: number When the queue exceeds the given maximum number - * of entries, the queue is flushed automatically. - * Default value of max is Infinity. - * @return {Queue} Returns the created queue - */ - Queue.extend = function (object, options) { - var queue = new Queue(options); - - if (object.flush !== undefined) { - throw new Error('Target object already has a property flush'); - } - object.flush = function () { - queue.flush(); - }; - - var methods = [{ - name: 'flush', - original: undefined - }]; - - if (options && options.replace) { - for (var i = 0; i < options.replace.length; i++) { - var name = options.replace[i]; - methods.push({ - name: name, - original: object[name] - }); - queue.replace(object, name); - } - } - - queue._extended = { - object: object, - methods: methods - }; - - return queue; - }; - - /** - * Destroy the queue. The queue will first flush all queued actions, and in - * case it has extended an object, will restore the original object. - */ - Queue.prototype.destroy = function () { - this.flush(); - - if (this._extended) { - var object = this._extended.object; - var methods = this._extended.methods; - for (var i = 0; i < methods.length; i++) { - var method = methods[i]; - if (method.original) { - object[method.name] = method.original; - } - else { - delete object[method.name]; - } - } - this._extended = null; - } - }; - - /** - * Replace a method on an object with a queued version - * @param {Object} object Object having the method - * @param {string} method The method name - */ - Queue.prototype.replace = function(object, method) { - var me = this; - var original = object[method]; - if (!original) { - throw new Error('Method ' + method + ' undefined'); - } - - object[method] = function () { - // create an Array with the arguments - var args = []; - for (var i = 0; i < arguments.length; i++) { - args[i] = arguments[i]; - } - - // add this call to the queue - me.queue({ - args: args, - fn: original, - context: this - }); - }; - }; - - /** - * Queue a call - * @param {function | {fn: function, args: Array} | {fn: function, args: Array, context: Object}} entry - */ - Queue.prototype.queue = function(entry) { - if (typeof entry === 'function') { - this._queue.push({fn: entry}); - } - else { - this._queue.push(entry); - } - - this._flushIfNeeded(); - }; - - /** - * Check whether the queue needs to be flushed - * @private - */ - Queue.prototype._flushIfNeeded = function () { - // flush when the maximum is exceeded. - if (this._queue.length > this.max) { - this.flush(); - } - - // flush after a period of inactivity when a delay is configured - clearTimeout(this._timeout); - if (this.queue.length > 0 && typeof this.delay === 'number') { - var me = this; - this._timeout = setTimeout(function () { - me.flush(); - }, this.delay); - } - }; - - /** - * Flush all queued calls - */ - Queue.prototype.flush = function () { - while (this._queue.length > 0) { - var entry = this._queue.shift(); - entry.fn.apply(entry.context || entry.fn, entry.args || []); - } - }; - - module.exports = Queue; - - -/***/ }, -/* 6 */ -/***/ function(module, exports, __webpack_require__) { - - var Emitter = __webpack_require__(56); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var util = __webpack_require__(1); - var Point3d = __webpack_require__(10); - var Point2d = __webpack_require__(9); - var Camera = __webpack_require__(7); - var Filter = __webpack_require__(8); - var Slider = __webpack_require__(11); - var StepNumber = __webpack_require__(12); - - /** - * @constructor Graph3d - * Graph3d displays data in 3d. - * - * Graph3d is developed in javascript as a Google Visualization Chart. - * - * @param {Element} container The DOM element in which the Graph3d will - * be created. Normally a div element. - * @param {DataSet | DataView | Array} [data] - * @param {Object} [options] - */ - function Graph3d(container, data, options) { - if (!(this instanceof Graph3d)) { - throw new SyntaxError('Constructor must be called with the new operator'); - } - - // create variables and set default values - this.containerElement = container; - this.width = '400px'; - this.height = '400px'; - this.margin = 10; // px - this.defaultXCenter = '55%'; - this.defaultYCenter = '50%'; - - this.xLabel = 'x'; - this.yLabel = 'y'; - this.zLabel = 'z'; - - var passValueFn = function(v) { return v; }; - this.xValueLabel = passValueFn; - this.yValueLabel = passValueFn; - this.zValueLabel = passValueFn; - - this.filterLabel = 'time'; - this.legendLabel = 'value'; - - this.style = Graph3d.STYLE.DOT; - this.showPerspective = true; - this.showGrid = true; - this.keepAspectRatio = true; - this.showShadow = false; - this.showGrayBottom = false; // TODO: this does not work correctly - this.showTooltip = false; - this.verticalRatio = 0.5; // 0.1 to 1.0, where 1.0 results in a 'cube' - - this.animationInterval = 1000; // milliseconds - this.animationPreload = false; - - this.camera = new Camera(); - this.eye = new Point3d(0, 0, -1); // TODO: set eye.z about 3/4 of the width of the window? - - this.dataTable = null; // The original data table - this.dataPoints = null; // The table with point objects - - // the column indexes - this.colX = undefined; - this.colY = undefined; - this.colZ = undefined; - this.colValue = undefined; - this.colFilter = undefined; - - this.xMin = 0; - this.xStep = undefined; // auto by default - this.xMax = 1; - this.yMin = 0; - this.yStep = undefined; // auto by default - this.yMax = 1; - this.zMin = 0; - this.zStep = undefined; // auto by default - this.zMax = 1; - this.valueMin = 0; - this.valueMax = 1; - this.xBarWidth = 1; - this.yBarWidth = 1; - // TODO: customize axis range - - // constants - this.colorAxis = '#4D4D4D'; - this.colorGrid = '#D3D3D3'; - this.colorDot = '#7DC1FF'; - this.colorDotBorder = '#3267D2'; - - // create a frame and canvas - this.create(); - - // apply options (also when undefined) - this.setOptions(options); - - // apply data - if (data) { - this.setData(data); - } - } - - // Extend Graph3d with an Emitter mixin - Emitter(Graph3d.prototype); - - /** - * Calculate the scaling values, dependent on the range in x, y, and z direction - */ - Graph3d.prototype._setScale = function() { - this.scale = new Point3d(1 / (this.xMax - this.xMin), - 1 / (this.yMax - this.yMin), - 1 / (this.zMax - this.zMin)); - - // keep aspect ration between x and y scale if desired - if (this.keepAspectRatio) { - if (this.scale.x < this.scale.y) { - //noinspection JSSuspiciousNameCombination - this.scale.y = this.scale.x; - } - else { - //noinspection JSSuspiciousNameCombination - this.scale.x = this.scale.y; - } - } - - // scale the vertical axis - this.scale.z *= this.verticalRatio; - // TODO: can this be automated? verticalRatio? - - // determine scale for (optional) value - this.scale.value = 1 / (this.valueMax - this.valueMin); - - // position the camera arm - var xCenter = (this.xMax + this.xMin) / 2 * this.scale.x; - var yCenter = (this.yMax + this.yMin) / 2 * this.scale.y; - var zCenter = (this.zMax + this.zMin) / 2 * this.scale.z; - this.camera.setArmLocation(xCenter, yCenter, zCenter); - }; - - - /** - * Convert a 3D location to a 2D location on screen - * http://en.wikipedia.org/wiki/3D_projection - * @param {Point3d} point3d A 3D point with parameters x, y, z - * @return {Point2d} point2d A 2D point with parameters x, y - */ - Graph3d.prototype._convert3Dto2D = function(point3d) { - var translation = this._convertPointToTranslation(point3d); - return this._convertTranslationToScreen(translation); - }; - - /** - * Convert a 3D location its translation seen from the camera - * http://en.wikipedia.org/wiki/3D_projection - * @param {Point3d} point3d A 3D point with parameters x, y, z - * @return {Point3d} translation A 3D point with parameters x, y, z This is - * the translation of the point, seen from the - * camera - */ - Graph3d.prototype._convertPointToTranslation = function(point3d) { - var ax = point3d.x * this.scale.x, - ay = point3d.y * this.scale.y, - az = point3d.z * this.scale.z, - - cx = this.camera.getCameraLocation().x, - cy = this.camera.getCameraLocation().y, - cz = this.camera.getCameraLocation().z, - - // calculate angles - sinTx = Math.sin(this.camera.getCameraRotation().x), - cosTx = Math.cos(this.camera.getCameraRotation().x), - sinTy = Math.sin(this.camera.getCameraRotation().y), - cosTy = Math.cos(this.camera.getCameraRotation().y), - sinTz = Math.sin(this.camera.getCameraRotation().z), - cosTz = Math.cos(this.camera.getCameraRotation().z), - - // calculate translation - dx = cosTy * (sinTz * (ay - cy) + cosTz * (ax - cx)) - sinTy * (az - cz), - dy = sinTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) + cosTx * (cosTz * (ay - cy) - sinTz * (ax-cx)), - dz = cosTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) - sinTx * (cosTz * (ay - cy) - sinTz * (ax-cx)); - - return new Point3d(dx, dy, dz); - }; - - /** - * Convert a translation point to a point on the screen - * @param {Point3d} translation A 3D point with parameters x, y, z This is - * the translation of the point, seen from the - * camera - * @return {Point2d} point2d A 2D point with parameters x, y - */ - Graph3d.prototype._convertTranslationToScreen = function(translation) { - var ex = this.eye.x, - ey = this.eye.y, - ez = this.eye.z, - dx = translation.x, - dy = translation.y, - dz = translation.z; - - // calculate position on screen from translation - var bx; - var by; - if (this.showPerspective) { - bx = (dx - ex) * (ez / dz); - by = (dy - ey) * (ez / dz); - } - else { - bx = dx * -(ez / this.camera.getArmLength()); - by = dy * -(ez / this.camera.getArmLength()); - } - - // shift and scale the point to the center of the screen - // use the width of the graph to scale both horizontally and vertically. - return new Point2d( - this.xcenter + bx * this.frame.canvas.clientWidth, - this.ycenter - by * this.frame.canvas.clientWidth); - }; - - /** - * Set the background styling for the graph - * @param {string | {fill: string, stroke: string, strokeWidth: string}} backgroundColor - */ - Graph3d.prototype._setBackgroundColor = function(backgroundColor) { - var fill = 'white'; - var stroke = 'gray'; - var strokeWidth = 1; - - if (typeof(backgroundColor) === 'string') { - fill = backgroundColor; - stroke = 'none'; - strokeWidth = 0; - } - else if (typeof(backgroundColor) === 'object') { - if (backgroundColor.fill !== undefined) fill = backgroundColor.fill; - if (backgroundColor.stroke !== undefined) stroke = backgroundColor.stroke; - if (backgroundColor.strokeWidth !== undefined) strokeWidth = backgroundColor.strokeWidth; - } - else if (backgroundColor === undefined) { - // use use defaults - } - else { - throw 'Unsupported type of backgroundColor'; - } - - this.frame.style.backgroundColor = fill; - this.frame.style.borderColor = stroke; - this.frame.style.borderWidth = strokeWidth + 'px'; - this.frame.style.borderStyle = 'solid'; - }; - - - /// enumerate the available styles - Graph3d.STYLE = { - BAR: 0, - BARCOLOR: 1, - BARSIZE: 2, - DOT : 3, - DOTLINE : 4, - DOTCOLOR: 5, - DOTSIZE: 6, - GRID : 7, - LINE: 8, - SURFACE : 9 - }; - - /** - * Retrieve the style index from given styleName - * @param {string} styleName Style name such as 'dot', 'grid', 'dot-line' - * @return {Number} styleNumber Enumeration value representing the style, or -1 - * when not found - */ - Graph3d.prototype._getStyleNumber = function(styleName) { - switch (styleName) { - case 'dot': return Graph3d.STYLE.DOT; - case 'dot-line': return Graph3d.STYLE.DOTLINE; - case 'dot-color': return Graph3d.STYLE.DOTCOLOR; - case 'dot-size': return Graph3d.STYLE.DOTSIZE; - case 'line': return Graph3d.STYLE.LINE; - case 'grid': return Graph3d.STYLE.GRID; - case 'surface': return Graph3d.STYLE.SURFACE; - case 'bar': return Graph3d.STYLE.BAR; - case 'bar-color': return Graph3d.STYLE.BARCOLOR; - case 'bar-size': return Graph3d.STYLE.BARSIZE; - } - - return -1; - }; - - /** - * Determine the indexes of the data columns, based on the given style and data - * @param {DataSet} data - * @param {Number} style - */ - Graph3d.prototype._determineColumnIndexes = function(data, style) { - if (this.style === Graph3d.STYLE.DOT || - this.style === Graph3d.STYLE.DOTLINE || - this.style === Graph3d.STYLE.LINE || - this.style === Graph3d.STYLE.GRID || - this.style === Graph3d.STYLE.SURFACE || - this.style === Graph3d.STYLE.BAR) { - // 3 columns expected, and optionally a 4th with filter values - this.colX = 0; - this.colY = 1; - this.colZ = 2; - this.colValue = undefined; - - if (data.getNumberOfColumns() > 3) { - this.colFilter = 3; - } - } - else if (this.style === Graph3d.STYLE.DOTCOLOR || - this.style === Graph3d.STYLE.DOTSIZE || - this.style === Graph3d.STYLE.BARCOLOR || - this.style === Graph3d.STYLE.BARSIZE) { - // 4 columns expected, and optionally a 5th with filter values - this.colX = 0; - this.colY = 1; - this.colZ = 2; - this.colValue = 3; - - if (data.getNumberOfColumns() > 4) { - this.colFilter = 4; - } - } - else { - throw 'Unknown style "' + this.style + '"'; - } - }; - - Graph3d.prototype.getNumberOfRows = function(data) { - return data.length; - } - - - Graph3d.prototype.getNumberOfColumns = function(data) { - var counter = 0; - for (var column in data[0]) { - if (data[0].hasOwnProperty(column)) { - counter++; - } - } - return counter; - } - - - Graph3d.prototype.getDistinctValues = function(data, column) { - var distinctValues = []; - for (var i = 0; i < data.length; i++) { - if (distinctValues.indexOf(data[i][column]) == -1) { - distinctValues.push(data[i][column]); - } - } - return distinctValues; - } - - - Graph3d.prototype.getColumnRange = function(data,column) { - var minMax = {min:data[0][column],max:data[0][column]}; - for (var i = 0; i < data.length; i++) { - if (minMax.min > data[i][column]) { minMax.min = data[i][column]; } - if (minMax.max < data[i][column]) { minMax.max = data[i][column]; } - } - return minMax; - }; - - /** - * Initialize the data from the data table. Calculate minimum and maximum values - * and column index values - * @param {Array | DataSet | DataView} rawData The data containing the items for the Graph. - * @param {Number} style Style Number - */ - Graph3d.prototype._dataInitialize = function (rawData, style) { - var me = this; - - // unsubscribe from the dataTable - if (this.dataSet) { - this.dataSet.off('*', this._onChange); - } - - if (rawData === undefined) - return; - - if (Array.isArray(rawData)) { - rawData = new DataSet(rawData); - } - - var data; - if (rawData instanceof DataSet || rawData instanceof DataView) { - data = rawData.get(); - } - else { - throw new Error('Array, DataSet, or DataView expected'); - } - - if (data.length == 0) - return; - - this.dataSet = rawData; - this.dataTable = data; - - // subscribe to changes in the dataset - this._onChange = function () { - me.setData(me.dataSet); - }; - this.dataSet.on('*', this._onChange); - - // _determineColumnIndexes - // getNumberOfRows (points) - // getNumberOfColumns (x,y,z,v,t,t1,t2...) - // getDistinctValues (unique values?) - // getColumnRange - - // determine the location of x,y,z,value,filter columns - this.colX = 'x'; - this.colY = 'y'; - this.colZ = 'z'; - this.colValue = 'style'; - this.colFilter = 'filter'; - - - - // check if a filter column is provided - if (data[0].hasOwnProperty('filter')) { - if (this.dataFilter === undefined) { - this.dataFilter = new Filter(rawData, this.colFilter, this); - this.dataFilter.setOnLoadCallback(function() {me.redraw();}); - } - } - - - var withBars = this.style == Graph3d.STYLE.BAR || - this.style == Graph3d.STYLE.BARCOLOR || - this.style == Graph3d.STYLE.BARSIZE; - - // determine barWidth from data - if (withBars) { - if (this.defaultXBarWidth !== undefined) { - this.xBarWidth = this.defaultXBarWidth; - } - else { - var dataX = this.getDistinctValues(data,this.colX); - this.xBarWidth = (dataX[1] - dataX[0]) || 1; - } - - if (this.defaultYBarWidth !== undefined) { - this.yBarWidth = this.defaultYBarWidth; - } - else { - var dataY = this.getDistinctValues(data,this.colY); - this.yBarWidth = (dataY[1] - dataY[0]) || 1; - } - } - - // calculate minimums and maximums - var xRange = this.getColumnRange(data,this.colX); - if (withBars) { - xRange.min -= this.xBarWidth / 2; - xRange.max += this.xBarWidth / 2; - } - this.xMin = (this.defaultXMin !== undefined) ? this.defaultXMin : xRange.min; - this.xMax = (this.defaultXMax !== undefined) ? this.defaultXMax : xRange.max; - if (this.xMax <= this.xMin) this.xMax = this.xMin + 1; - this.xStep = (this.defaultXStep !== undefined) ? this.defaultXStep : (this.xMax-this.xMin)/5; - - var yRange = this.getColumnRange(data,this.colY); - if (withBars) { - yRange.min -= this.yBarWidth / 2; - yRange.max += this.yBarWidth / 2; - } - this.yMin = (this.defaultYMin !== undefined) ? this.defaultYMin : yRange.min; - this.yMax = (this.defaultYMax !== undefined) ? this.defaultYMax : yRange.max; - if (this.yMax <= this.yMin) this.yMax = this.yMin + 1; - this.yStep = (this.defaultYStep !== undefined) ? this.defaultYStep : (this.yMax-this.yMin)/5; - - var zRange = this.getColumnRange(data,this.colZ); - this.zMin = (this.defaultZMin !== undefined) ? this.defaultZMin : zRange.min; - this.zMax = (this.defaultZMax !== undefined) ? this.defaultZMax : zRange.max; - if (this.zMax <= this.zMin) this.zMax = this.zMin + 1; - this.zStep = (this.defaultZStep !== undefined) ? this.defaultZStep : (this.zMax-this.zMin)/5; - - if (this.colValue !== undefined) { - var valueRange = this.getColumnRange(data,this.colValue); - this.valueMin = (this.defaultValueMin !== undefined) ? this.defaultValueMin : valueRange.min; - this.valueMax = (this.defaultValueMax !== undefined) ? this.defaultValueMax : valueRange.max; - if (this.valueMax <= this.valueMin) this.valueMax = this.valueMin + 1; - } - - // set the scale dependent on the ranges. - this._setScale(); - }; - - - - /** - * Filter the data based on the current filter - * @param {Array} data - * @return {Array} dataPoints Array with point objects which can be drawn on screen - */ - Graph3d.prototype._getDataPoints = function (data) { - // TODO: store the created matrix dataPoints in the filters instead of reloading each time - var x, y, i, z, obj, point; - - var dataPoints = []; - - if (this.style === Graph3d.STYLE.GRID || - this.style === Graph3d.STYLE.SURFACE) { - // copy all values from the google data table to a matrix - // the provided values are supposed to form a grid of (x,y) positions - - // create two lists with all present x and y values - var dataX = []; - var dataY = []; - for (i = 0; i < this.getNumberOfRows(data); i++) { - x = data[i][this.colX] || 0; - y = data[i][this.colY] || 0; - - if (dataX.indexOf(x) === -1) { - dataX.push(x); - } - if (dataY.indexOf(y) === -1) { - dataY.push(y); - } - } - - var sortNumber = function (a, b) { - return a - b; - }; - dataX.sort(sortNumber); - dataY.sort(sortNumber); - - // create a grid, a 2d matrix, with all values. - var dataMatrix = []; // temporary data matrix - for (i = 0; i < data.length; i++) { - x = data[i][this.colX] || 0; - y = data[i][this.colY] || 0; - z = data[i][this.colZ] || 0; - - var xIndex = dataX.indexOf(x); // TODO: implement Array().indexOf() for Internet Explorer - var yIndex = dataY.indexOf(y); - - if (dataMatrix[xIndex] === undefined) { - dataMatrix[xIndex] = []; - } - - var point3d = new Point3d(); - point3d.x = x; - point3d.y = y; - point3d.z = z; - - obj = {}; - obj.point = point3d; - obj.trans = undefined; - obj.screen = undefined; - obj.bottom = new Point3d(x, y, this.zMin); - - dataMatrix[xIndex][yIndex] = obj; - - dataPoints.push(obj); - } - - // fill in the pointers to the neighbors. - for (x = 0; x < dataMatrix.length; x++) { - for (y = 0; y < dataMatrix[x].length; y++) { - if (dataMatrix[x][y]) { - dataMatrix[x][y].pointRight = (x < dataMatrix.length-1) ? dataMatrix[x+1][y] : undefined; - dataMatrix[x][y].pointTop = (y < dataMatrix[x].length-1) ? dataMatrix[x][y+1] : undefined; - dataMatrix[x][y].pointCross = - (x < dataMatrix.length-1 && y < dataMatrix[x].length-1) ? - dataMatrix[x+1][y+1] : - undefined; - } - } - } - } - else { // 'dot', 'dot-line', etc. - // copy all values from the google data table to a list with Point3d objects - for (i = 0; i < data.length; i++) { - point = new Point3d(); - point.x = data[i][this.colX] || 0; - point.y = data[i][this.colY] || 0; - point.z = data[i][this.colZ] || 0; - - if (this.colValue !== undefined) { - point.value = data[i][this.colValue] || 0; - } - - obj = {}; - obj.point = point; - obj.bottom = new Point3d(point.x, point.y, this.zMin); - obj.trans = undefined; - obj.screen = undefined; - - dataPoints.push(obj); - } - } - - return dataPoints; - }; - - /** - * Create the main frame for the Graph3d. - * This function is executed once when a Graph3d object is created. The frame - * contains a canvas, and this canvas contains all objects like the axis and - * nodes. - */ - Graph3d.prototype.create = function () { - // remove all elements from the container element. - while (this.containerElement.hasChildNodes()) { - this.containerElement.removeChild(this.containerElement.firstChild); - } - - this.frame = document.createElement('div'); - this.frame.style.position = 'relative'; - this.frame.style.overflow = 'hidden'; - - // create the graph canvas (HTML canvas element) - this.frame.canvas = document.createElement( 'canvas' ); - this.frame.canvas.style.position = 'relative'; - this.frame.appendChild(this.frame.canvas); - //if (!this.frame.canvas.getContext) { - { - var noCanvas = document.createElement( 'DIV' ); - noCanvas.style.color = 'red'; - noCanvas.style.fontWeight = 'bold' ; - noCanvas.style.padding = '10px'; - noCanvas.innerHTML = 'Error: your browser does not support HTML canvas'; - this.frame.canvas.appendChild(noCanvas); - } - - this.frame.filter = document.createElement( 'div' ); - this.frame.filter.style.position = 'absolute'; - this.frame.filter.style.bottom = '0px'; - this.frame.filter.style.left = '0px'; - this.frame.filter.style.width = '100%'; - this.frame.appendChild(this.frame.filter); - - // add event listeners to handle moving and zooming the contents - var me = this; - var onmousedown = function (event) {me._onMouseDown(event);}; - var ontouchstart = function (event) {me._onTouchStart(event);}; - var onmousewheel = function (event) {me._onWheel(event);}; - var ontooltip = function (event) {me._onTooltip(event);}; - // TODO: these events are never cleaned up... can give a 'memory leakage' - - util.addEventListener(this.frame.canvas, 'keydown', onkeydown); - util.addEventListener(this.frame.canvas, 'mousedown', onmousedown); - util.addEventListener(this.frame.canvas, 'touchstart', ontouchstart); - util.addEventListener(this.frame.canvas, 'mousewheel', onmousewheel); - util.addEventListener(this.frame.canvas, 'mousemove', ontooltip); - - // add the new graph to the container element - this.containerElement.appendChild(this.frame); - }; - - - /** - * Set a new size for the graph - * @param {string} width Width in pixels or percentage (for example '800px' - * or '50%') - * @param {string} height Height in pixels or percentage (for example '400px' - * or '30%') - */ - Graph3d.prototype.setSize = function(width, height) { - this.frame.style.width = width; - this.frame.style.height = height; - - this._resizeCanvas(); - }; - - /** - * Resize the canvas to the current size of the frame - */ - Graph3d.prototype._resizeCanvas = function() { - this.frame.canvas.style.width = '100%'; - this.frame.canvas.style.height = '100%'; - - this.frame.canvas.width = this.frame.canvas.clientWidth; - this.frame.canvas.height = this.frame.canvas.clientHeight; - - // adjust with for margin - this.frame.filter.style.width = (this.frame.canvas.clientWidth - 2 * 10) + 'px'; - }; - - /** - * Start animation - */ - Graph3d.prototype.animationStart = function() { - if (!this.frame.filter || !this.frame.filter.slider) - throw 'No animation available'; - - this.frame.filter.slider.play(); - }; - - - /** - * Stop animation - */ - Graph3d.prototype.animationStop = function() { - if (!this.frame.filter || !this.frame.filter.slider) return; - - this.frame.filter.slider.stop(); - }; - - - /** - * Resize the center position based on the current values in this.defaultXCenter - * and this.defaultYCenter (which are strings with a percentage or a value - * in pixels). The center positions are the variables this.xCenter - * and this.yCenter - */ - Graph3d.prototype._resizeCenter = function() { - // calculate the horizontal center position - if (this.defaultXCenter.charAt(this.defaultXCenter.length-1) === '%') { - this.xcenter = - parseFloat(this.defaultXCenter) / 100 * - this.frame.canvas.clientWidth; - } - else { - this.xcenter = parseFloat(this.defaultXCenter); // supposed to be in px - } - - // calculate the vertical center position - if (this.defaultYCenter.charAt(this.defaultYCenter.length-1) === '%') { - this.ycenter = - parseFloat(this.defaultYCenter) / 100 * - (this.frame.canvas.clientHeight - this.frame.filter.clientHeight); - } - else { - this.ycenter = parseFloat(this.defaultYCenter); // supposed to be in px - } - }; - - /** - * Set the rotation and distance of the camera - * @param {Object} pos An object with the camera position. The object - * contains three parameters: - * - horizontal {Number} - * The horizontal rotation, between 0 and 2*PI. - * Optional, can be left undefined. - * - vertical {Number} - * The vertical rotation, between 0 and 0.5*PI - * if vertical=0.5*PI, the graph is shown from the - * top. Optional, can be left undefined. - * - distance {Number} - * The (normalized) distance of the camera to the - * center of the graph, a value between 0.71 and 5.0. - * Optional, can be left undefined. - */ - Graph3d.prototype.setCameraPosition = function(pos) { - if (pos === undefined) { - return; - } - - if (pos.horizontal !== undefined && pos.vertical !== undefined) { - this.camera.setArmRotation(pos.horizontal, pos.vertical); - } - - if (pos.distance !== undefined) { - this.camera.setArmLength(pos.distance); - } - - this.redraw(); - }; - - - /** - * Retrieve the current camera rotation - * @return {object} An object with parameters horizontal, vertical, and - * distance - */ - Graph3d.prototype.getCameraPosition = function() { - var pos = this.camera.getArmRotation(); - pos.distance = this.camera.getArmLength(); - return pos; - }; - - /** - * Load data into the 3D Graph - */ - Graph3d.prototype._readData = function(data) { - // read the data - this._dataInitialize(data, this.style); - - - if (this.dataFilter) { - // apply filtering - this.dataPoints = this.dataFilter._getDataPoints(); - } - else { - // no filtering. load all data - this.dataPoints = this._getDataPoints(this.dataTable); - } - - // draw the filter - this._redrawFilter(); - }; - - /** - * Replace the dataset of the Graph3d - * @param {Array | DataSet | DataView} data - */ - Graph3d.prototype.setData = function (data) { - this._readData(data); - this.redraw(); - - // start animation when option is true - if (this.animationAutoStart && this.dataFilter) { - this.animationStart(); - } - }; - - /** - * Update the options. Options will be merged with current options - * @param {Object} options - */ - Graph3d.prototype.setOptions = function (options) { - var cameraPosition = undefined; - - this.animationStop(); - - if (options !== undefined) { - // retrieve parameter values - if (options.width !== undefined) this.width = options.width; - if (options.height !== undefined) this.height = options.height; - - if (options.xCenter !== undefined) this.defaultXCenter = options.xCenter; - if (options.yCenter !== undefined) this.defaultYCenter = options.yCenter; - - if (options.filterLabel !== undefined) this.filterLabel = options.filterLabel; - if (options.legendLabel !== undefined) this.legendLabel = options.legendLabel; - if (options.xLabel !== undefined) this.xLabel = options.xLabel; - if (options.yLabel !== undefined) this.yLabel = options.yLabel; - if (options.zLabel !== undefined) this.zLabel = options.zLabel; - - if (options.xValueLabel !== undefined) this.xValueLabel = options.xValueLabel; - if (options.yValueLabel !== undefined) this.yValueLabel = options.yValueLabel; - if (options.zValueLabel !== undefined) this.zValueLabel = options.zValueLabel; - - if (options.style !== undefined) { - var styleNumber = this._getStyleNumber(options.style); - if (styleNumber !== -1) { - this.style = styleNumber; - } - } - if (options.showGrid !== undefined) this.showGrid = options.showGrid; - if (options.showPerspective !== undefined) this.showPerspective = options.showPerspective; - if (options.showShadow !== undefined) this.showShadow = options.showShadow; - if (options.tooltip !== undefined) this.showTooltip = options.tooltip; - if (options.showAnimationControls !== undefined) this.showAnimationControls = options.showAnimationControls; - if (options.keepAspectRatio !== undefined) this.keepAspectRatio = options.keepAspectRatio; - if (options.verticalRatio !== undefined) this.verticalRatio = options.verticalRatio; - - if (options.animationInterval !== undefined) this.animationInterval = options.animationInterval; - if (options.animationPreload !== undefined) this.animationPreload = options.animationPreload; - if (options.animationAutoStart !== undefined)this.animationAutoStart = options.animationAutoStart; - - if (options.xBarWidth !== undefined) this.defaultXBarWidth = options.xBarWidth; - if (options.yBarWidth !== undefined) this.defaultYBarWidth = options.yBarWidth; - - if (options.xMin !== undefined) this.defaultXMin = options.xMin; - if (options.xStep !== undefined) this.defaultXStep = options.xStep; - if (options.xMax !== undefined) this.defaultXMax = options.xMax; - if (options.yMin !== undefined) this.defaultYMin = options.yMin; - if (options.yStep !== undefined) this.defaultYStep = options.yStep; - if (options.yMax !== undefined) this.defaultYMax = options.yMax; - if (options.zMin !== undefined) this.defaultZMin = options.zMin; - if (options.zStep !== undefined) this.defaultZStep = options.zStep; - if (options.zMax !== undefined) this.defaultZMax = options.zMax; - if (options.valueMin !== undefined) this.defaultValueMin = options.valueMin; - if (options.valueMax !== undefined) this.defaultValueMax = options.valueMax; - - if (options.cameraPosition !== undefined) cameraPosition = options.cameraPosition; - - if (cameraPosition !== undefined) { - this.camera.setArmRotation(cameraPosition.horizontal, cameraPosition.vertical); - this.camera.setArmLength(cameraPosition.distance); - } - else { - this.camera.setArmRotation(1.0, 0.5); - this.camera.setArmLength(1.7); - } - } - - this._setBackgroundColor(options && options.backgroundColor); - - this.setSize(this.width, this.height); - - // re-load the data - if (this.dataTable) { - this.setData(this.dataTable); - } - - // start animation when option is true - if (this.animationAutoStart && this.dataFilter) { - this.animationStart(); - } - }; - - /** - * Redraw the Graph. - */ - Graph3d.prototype.redraw = function() { - if (this.dataPoints === undefined) { - throw 'Error: graph data not initialized'; - } - - this._resizeCanvas(); - this._resizeCenter(); - this._redrawSlider(); - this._redrawClear(); - this._redrawAxis(); - - if (this.style === Graph3d.STYLE.GRID || - this.style === Graph3d.STYLE.SURFACE) { - this._redrawDataGrid(); - } - else if (this.style === Graph3d.STYLE.LINE) { - this._redrawDataLine(); - } - else if (this.style === Graph3d.STYLE.BAR || - this.style === Graph3d.STYLE.BARCOLOR || - this.style === Graph3d.STYLE.BARSIZE) { - this._redrawDataBar(); - } - else { - // style is DOT, DOTLINE, DOTCOLOR, DOTSIZE - this._redrawDataDot(); - } - - this._redrawInfo(); - this._redrawLegend(); - }; - - /** - * Clear the canvas before redrawing - */ - Graph3d.prototype._redrawClear = function() { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - - ctx.clearRect(0, 0, canvas.width, canvas.height); - }; - - - /** - * Redraw the legend showing the colors - */ - Graph3d.prototype._redrawLegend = function() { - var y; - - if (this.style === Graph3d.STYLE.DOTCOLOR || - this.style === Graph3d.STYLE.DOTSIZE) { - - var dotSize = this.frame.clientWidth * 0.02; - - var widthMin, widthMax; - if (this.style === Graph3d.STYLE.DOTSIZE) { - widthMin = dotSize / 2; // px - widthMax = dotSize / 2 + dotSize * 2; // Todo: put this in one function - } - else { - widthMin = 20; // px - widthMax = 20; // px - } - - var height = Math.max(this.frame.clientHeight * 0.25, 100); - var top = this.margin; - var right = this.frame.clientWidth - this.margin; - var left = right - widthMax; - var bottom = top + height; - } - - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - ctx.lineWidth = 1; - ctx.font = '14px arial'; // TODO: put in options - - if (this.style === Graph3d.STYLE.DOTCOLOR) { - // draw the color bar - var ymin = 0; - var ymax = height; // Todo: make height customizable - for (y = ymin; y < ymax; y++) { - var f = (y - ymin) / (ymax - ymin); - - //var width = (dotSize / 2 + (1-f) * dotSize * 2); // Todo: put this in one function - var hue = f * 240; - var color = this._hsv2rgb(hue, 1, 1); - - ctx.strokeStyle = color; - ctx.beginPath(); - ctx.moveTo(left, top + y); - ctx.lineTo(right, top + y); - ctx.stroke(); - } - - ctx.strokeStyle = this.colorAxis; - ctx.strokeRect(left, top, widthMax, height); - } - - if (this.style === Graph3d.STYLE.DOTSIZE) { - // draw border around color bar - ctx.strokeStyle = this.colorAxis; - ctx.fillStyle = this.colorDot; - ctx.beginPath(); - ctx.moveTo(left, top); - ctx.lineTo(right, top); - ctx.lineTo(right - widthMax + widthMin, bottom); - ctx.lineTo(left, bottom); - ctx.closePath(); - ctx.fill(); - ctx.stroke(); - } - - if (this.style === Graph3d.STYLE.DOTCOLOR || - this.style === Graph3d.STYLE.DOTSIZE) { - // print values along the color bar - var gridLineLen = 5; // px - var step = new StepNumber(this.valueMin, this.valueMax, (this.valueMax-this.valueMin)/5, true); - step.start(); - if (step.getCurrent() < this.valueMin) { - step.next(); - } - while (!step.end()) { - y = bottom - (step.getCurrent() - this.valueMin) / (this.valueMax - this.valueMin) * height; - - ctx.beginPath(); - ctx.moveTo(left - gridLineLen, y); - ctx.lineTo(left, y); - ctx.stroke(); - - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = this.colorAxis; - ctx.fillText(step.getCurrent(), left - 2 * gridLineLen, y); - - step.next(); - } - - ctx.textAlign = 'right'; - ctx.textBaseline = 'top'; - var label = this.legendLabel; - ctx.fillText(label, right, bottom + this.margin); - } - }; - - /** - * Redraw the filter - */ - Graph3d.prototype._redrawFilter = function() { - this.frame.filter.innerHTML = ''; - - if (this.dataFilter) { - var options = { - 'visible': this.showAnimationControls - }; - var slider = new Slider(this.frame.filter, options); - this.frame.filter.slider = slider; - - // TODO: css here is not nice here... - this.frame.filter.style.padding = '10px'; - //this.frame.filter.style.backgroundColor = '#EFEFEF'; - - slider.setValues(this.dataFilter.values); - slider.setPlayInterval(this.animationInterval); - - // create an event handler - var me = this; - var onchange = function () { - var index = slider.getIndex(); - - me.dataFilter.selectValue(index); - me.dataPoints = me.dataFilter._getDataPoints(); - - me.redraw(); - }; - slider.setOnChangeCallback(onchange); - } - else { - this.frame.filter.slider = undefined; - } - }; - - /** - * Redraw the slider - */ - Graph3d.prototype._redrawSlider = function() { - if ( this.frame.filter.slider !== undefined) { - this.frame.filter.slider.redraw(); - } - }; - - - /** - * Redraw common information - */ - Graph3d.prototype._redrawInfo = function() { - if (this.dataFilter) { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - - ctx.font = '14px arial'; // TODO: put in options - ctx.lineStyle = 'gray'; - ctx.fillStyle = 'gray'; - ctx.textAlign = 'left'; - ctx.textBaseline = 'top'; - - var x = this.margin; - var y = this.margin; - ctx.fillText(this.dataFilter.getLabel() + ': ' + this.dataFilter.getSelectedValue(), x, y); - } - }; - - - /** - * Redraw the axis - */ - Graph3d.prototype._redrawAxis = function() { - var canvas = this.frame.canvas, - ctx = canvas.getContext('2d'), - from, to, step, prettyStep, - text, xText, yText, zText, - offset, xOffset, yOffset, - xMin2d, xMax2d; - - // TODO: get the actual rendered style of the containerElement - //ctx.font = this.containerElement.style.font; - ctx.font = 24 / this.camera.getArmLength() + 'px arial'; - - // calculate the length for the short grid lines - var gridLenX = 0.025 / this.scale.x; - var gridLenY = 0.025 / this.scale.y; - var textMargin = 5 / this.camera.getArmLength(); // px - var armAngle = this.camera.getArmRotation().horizontal; - - // draw x-grid lines - ctx.lineWidth = 1; - prettyStep = (this.defaultXStep === undefined); - step = new StepNumber(this.xMin, this.xMax, this.xStep, prettyStep); - step.start(); - if (step.getCurrent() < this.xMin) { - step.next(); - } - while (!step.end()) { - var x = step.getCurrent(); - - if (this.showGrid) { - from = this._convert3Dto2D(new Point3d(x, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(x, this.yMax, this.zMin)); - ctx.strokeStyle = this.colorGrid; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - } - else { - from = this._convert3Dto2D(new Point3d(x, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(x, this.yMin+gridLenX, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - - from = this._convert3Dto2D(new Point3d(x, this.yMax, this.zMin)); - to = this._convert3Dto2D(new Point3d(x, this.yMax-gridLenX, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - } - - yText = (Math.cos(armAngle) > 0) ? this.yMin : this.yMax; - text = this._convert3Dto2D(new Point3d(x, yText, this.zMin)); - if (Math.cos(armAngle * 2) > 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; - text.y += textMargin; - } - else if (Math.sin(armAngle * 2) < 0){ - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - } - else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; - } - ctx.fillStyle = this.colorAxis; - ctx.fillText(' ' + this.xValueLabel(step.getCurrent()) + ' ', text.x, text.y); - - step.next(); - } - - // draw y-grid lines - ctx.lineWidth = 1; - prettyStep = (this.defaultYStep === undefined); - step = new StepNumber(this.yMin, this.yMax, this.yStep, prettyStep); - step.start(); - if (step.getCurrent() < this.yMin) { - step.next(); - } - while (!step.end()) { - if (this.showGrid) { - from = this._convert3Dto2D(new Point3d(this.xMin, step.getCurrent(), this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMax, step.getCurrent(), this.zMin)); - ctx.strokeStyle = this.colorGrid; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - } - else { - from = this._convert3Dto2D(new Point3d(this.xMin, step.getCurrent(), this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMin+gridLenY, step.getCurrent(), this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - - from = this._convert3Dto2D(new Point3d(this.xMax, step.getCurrent(), this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMax-gridLenY, step.getCurrent(), this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - } - - xText = (Math.sin(armAngle ) > 0) ? this.xMin : this.xMax; - text = this._convert3Dto2D(new Point3d(xText, step.getCurrent(), this.zMin)); - if (Math.cos(armAngle * 2) < 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; - text.y += textMargin; - } - else if (Math.sin(armAngle * 2) > 0){ - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - } - else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; - } - ctx.fillStyle = this.colorAxis; - ctx.fillText(' ' + this.yValueLabel(step.getCurrent()) + ' ', text.x, text.y); - - step.next(); - } - - // draw z-grid lines and axis - ctx.lineWidth = 1; - prettyStep = (this.defaultZStep === undefined); - step = new StepNumber(this.zMin, this.zMax, this.zStep, prettyStep); - step.start(); - if (step.getCurrent() < this.zMin) { - step.next(); - } - xText = (Math.cos(armAngle ) > 0) ? this.xMin : this.xMax; - yText = (Math.sin(armAngle ) < 0) ? this.yMin : this.yMax; - while (!step.end()) { - // TODO: make z-grid lines really 3d? - from = this._convert3Dto2D(new Point3d(xText, yText, step.getCurrent())); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(from.x - textMargin, from.y); - ctx.stroke(); - - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = this.colorAxis; - ctx.fillText(this.zValueLabel(step.getCurrent()) + ' ', from.x - 5, from.y); - - step.next(); - } - ctx.lineWidth = 1; - from = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); - to = this._convert3Dto2D(new Point3d(xText, yText, this.zMax)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - - // draw x-axis - ctx.lineWidth = 1; - // line at yMin - xMin2d = this._convert3Dto2D(new Point3d(this.xMin, this.yMin, this.zMin)); - xMax2d = this._convert3Dto2D(new Point3d(this.xMax, this.yMin, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(xMin2d.x, xMin2d.y); - ctx.lineTo(xMax2d.x, xMax2d.y); - ctx.stroke(); - // line at ymax - xMin2d = this._convert3Dto2D(new Point3d(this.xMin, this.yMax, this.zMin)); - xMax2d = this._convert3Dto2D(new Point3d(this.xMax, this.yMax, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(xMin2d.x, xMin2d.y); - ctx.lineTo(xMax2d.x, xMax2d.y); - ctx.stroke(); - - // draw y-axis - ctx.lineWidth = 1; - // line at xMin - from = this._convert3Dto2D(new Point3d(this.xMin, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMin, this.yMax, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - // line at xMax - from = this._convert3Dto2D(new Point3d(this.xMax, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMax, this.yMax, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - - // draw x-label - var xLabel = this.xLabel; - if (xLabel.length > 0) { - yOffset = 0.1 / this.scale.y; - xText = (this.xMin + this.xMax) / 2; - yText = (Math.cos(armAngle) > 0) ? this.yMin - yOffset: this.yMax + yOffset; - text = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); - if (Math.cos(armAngle * 2) > 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; - } - else if (Math.sin(armAngle * 2) < 0){ - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - } - else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; - } - ctx.fillStyle = this.colorAxis; - ctx.fillText(xLabel, text.x, text.y); - } - - // draw y-label - var yLabel = this.yLabel; - if (yLabel.length > 0) { - xOffset = 0.1 / this.scale.x; - xText = (Math.sin(armAngle ) > 0) ? this.xMin - xOffset : this.xMax + xOffset; - yText = (this.yMin + this.yMax) / 2; - text = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); - if (Math.cos(armAngle * 2) < 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; - } - else if (Math.sin(armAngle * 2) > 0){ - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - } - else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; - } - ctx.fillStyle = this.colorAxis; - ctx.fillText(yLabel, text.x, text.y); - } - - // draw z-label - var zLabel = this.zLabel; - if (zLabel.length > 0) { - offset = 30; // pixels. // TODO: relate to the max width of the values on the z axis? - xText = (Math.cos(armAngle ) > 0) ? this.xMin : this.xMax; - yText = (Math.sin(armAngle ) < 0) ? this.yMin : this.yMax; - zText = (this.zMin + this.zMax) / 2; - text = this._convert3Dto2D(new Point3d(xText, yText, zText)); - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = this.colorAxis; - ctx.fillText(zLabel, text.x - offset, text.y); - } - }; - - /** - * Calculate the color based on the given value. - * @param {Number} H Hue, a value be between 0 and 360 - * @param {Number} S Saturation, a value between 0 and 1 - * @param {Number} V Value, a value between 0 and 1 - */ - Graph3d.prototype._hsv2rgb = function(H, S, V) { - var R, G, B, C, Hi, X; - - C = V * S; - Hi = Math.floor(H/60); // hi = 0,1,2,3,4,5 - X = C * (1 - Math.abs(((H/60) % 2) - 1)); - - switch (Hi) { - case 0: R = C; G = X; B = 0; break; - case 1: R = X; G = C; B = 0; break; - case 2: R = 0; G = C; B = X; break; - case 3: R = 0; G = X; B = C; break; - case 4: R = X; G = 0; B = C; break; - case 5: R = C; G = 0; B = X; break; - - default: R = 0; G = 0; B = 0; break; - } - - return 'RGB(' + parseInt(R*255) + ',' + parseInt(G*255) + ',' + parseInt(B*255) + ')'; - }; - - - /** - * Draw all datapoints as a grid - * This function can be used when the style is 'grid' - */ - Graph3d.prototype._redrawDataGrid = function() { - var canvas = this.frame.canvas, - ctx = canvas.getContext('2d'), - point, right, top, cross, - i, - topSideVisible, fillStyle, strokeStyle, lineWidth, - h, s, v, zAvg; - - - if (this.dataPoints === undefined || this.dataPoints.length <= 0) - return; // TODO: throw exception? - - // calculate the translations and screen position of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); - - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; - - // calculate the translation of the point at the bottom (needed for sorting) - var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); - this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; - } - - // sort the points on depth of their (x,y) position (not on z) - var sortDepth = function (a, b) { - return b.dist - a.dist; - }; - this.dataPoints.sort(sortDepth); - - if (this.style === Graph3d.STYLE.SURFACE) { - for (i = 0; i < this.dataPoints.length; i++) { - point = this.dataPoints[i]; - right = this.dataPoints[i].pointRight; - top = this.dataPoints[i].pointTop; - cross = this.dataPoints[i].pointCross; - - if (point !== undefined && right !== undefined && top !== undefined && cross !== undefined) { - - if (this.showGrayBottom || this.showShadow) { - // calculate the cross product of the two vectors from center - // to left and right, in order to know whether we are looking at the - // bottom or at the top side. We can also use the cross product - // for calculating light intensity - var aDiff = Point3d.subtract(cross.trans, point.trans); - var bDiff = Point3d.subtract(top.trans, right.trans); - var crossproduct = Point3d.crossProduct(aDiff, bDiff); - var len = crossproduct.length(); - // FIXME: there is a bug with determining the surface side (shadow or colored) - - topSideVisible = (crossproduct.z > 0); - } - else { - topSideVisible = true; - } - - if (topSideVisible) { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - zAvg = (point.point.z + right.point.z + top.point.z + cross.point.z) / 4; - h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; - s = 1; // saturation - - if (this.showShadow) { - v = Math.min(1 + (crossproduct.x / len) / 2, 1); // value. TODO: scale - fillStyle = this._hsv2rgb(h, s, v); - strokeStyle = fillStyle; - } - else { - v = 1; - fillStyle = this._hsv2rgb(h, s, v); - strokeStyle = this.colorAxis; - } - } - else { - fillStyle = 'gray'; - strokeStyle = this.colorAxis; - } - lineWidth = 0.5; - - ctx.lineWidth = lineWidth; - ctx.fillStyle = fillStyle; - ctx.strokeStyle = strokeStyle; - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); - ctx.lineTo(right.screen.x, right.screen.y); - ctx.lineTo(cross.screen.x, cross.screen.y); - ctx.lineTo(top.screen.x, top.screen.y); - ctx.closePath(); - ctx.fill(); - ctx.stroke(); - } - } - } - else { // grid style - for (i = 0; i < this.dataPoints.length; i++) { - point = this.dataPoints[i]; - right = this.dataPoints[i].pointRight; - top = this.dataPoints[i].pointTop; - - if (point !== undefined) { - if (this.showPerspective) { - lineWidth = 2 / -point.trans.z; - } - else { - lineWidth = 2 * -(this.eye.z / this.camera.getArmLength()); - } - } - - if (point !== undefined && right !== undefined) { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - zAvg = (point.point.z + right.point.z) / 2; - h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; - - ctx.lineWidth = lineWidth; - ctx.strokeStyle = this._hsv2rgb(h, 1, 1); - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); - ctx.lineTo(right.screen.x, right.screen.y); - ctx.stroke(); - } - - if (point !== undefined && top !== undefined) { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - zAvg = (point.point.z + top.point.z) / 2; - h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; - - ctx.lineWidth = lineWidth; - ctx.strokeStyle = this._hsv2rgb(h, 1, 1); - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); - ctx.lineTo(top.screen.x, top.screen.y); - ctx.stroke(); - } - } - } - }; - - - /** - * Draw all datapoints as dots. - * This function can be used when the style is 'dot' or 'dot-line' - */ - Graph3d.prototype._redrawDataDot = function() { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - var i; - - if (this.dataPoints === undefined || this.dataPoints.length <= 0) - return; // TODO: throw exception? - - // calculate the translations of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; - - // calculate the distance from the point at the bottom to the camera - var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); - this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; - } - - // order the translated points by depth - var sortDepth = function (a, b) { - return b.dist - a.dist; - }; - this.dataPoints.sort(sortDepth); - - // draw the datapoints as colored circles - var dotSize = this.frame.clientWidth * 0.02; // px - for (i = 0; i < this.dataPoints.length; i++) { - var point = this.dataPoints[i]; - - if (this.style === Graph3d.STYLE.DOTLINE) { - // draw a vertical line from the bottom to the graph value - //var from = this._convert3Dto2D(new Point3d(point.point.x, point.point.y, this.zMin)); - var from = this._convert3Dto2D(point.bottom); - ctx.lineWidth = 1; - ctx.strokeStyle = this.colorGrid; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(point.screen.x, point.screen.y); - ctx.stroke(); - } - - // calculate radius for the circle - var size; - if (this.style === Graph3d.STYLE.DOTSIZE) { - size = dotSize/2 + 2*dotSize * (point.point.value - this.valueMin) / (this.valueMax - this.valueMin); - } - else { - size = dotSize; - } - - var radius; - if (this.showPerspective) { - radius = size / -point.trans.z; - } - else { - radius = size * -(this.eye.z / this.camera.getArmLength()); - } - if (radius < 0) { - radius = 0; - } - - var hue, color, borderColor; - if (this.style === Graph3d.STYLE.DOTCOLOR ) { - // calculate the color based on the value - hue = (1 - (point.point.value - this.valueMin) * this.scale.value) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } - else if (this.style === Graph3d.STYLE.DOTSIZE) { - color = this.colorDot; - borderColor = this.colorDotBorder; - } - else { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - hue = (1 - (point.point.z - this.zMin) * this.scale.z / this.verticalRatio) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } - - // draw the circle - ctx.lineWidth = 1.0; - ctx.strokeStyle = borderColor; - ctx.fillStyle = color; - ctx.beginPath(); - ctx.arc(point.screen.x, point.screen.y, radius, 0, Math.PI*2, true); - ctx.fill(); - ctx.stroke(); - } - }; - - /** - * Draw all datapoints as bars. - * This function can be used when the style is 'bar', 'bar-color', or 'bar-size' - */ - Graph3d.prototype._redrawDataBar = function() { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - var i, j, surface, corners; - - if (this.dataPoints === undefined || this.dataPoints.length <= 0) - return; // TODO: throw exception? - - // calculate the translations of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; - - // calculate the distance from the point at the bottom to the camera - var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); - this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; - } - - // order the translated points by depth - var sortDepth = function (a, b) { - return b.dist - a.dist; - }; - this.dataPoints.sort(sortDepth); - - // draw the datapoints as bars - var xWidth = this.xBarWidth / 2; - var yWidth = this.yBarWidth / 2; - for (i = 0; i < this.dataPoints.length; i++) { - var point = this.dataPoints[i]; - - // determine color - var hue, color, borderColor; - if (this.style === Graph3d.STYLE.BARCOLOR ) { - // calculate the color based on the value - hue = (1 - (point.point.value - this.valueMin) * this.scale.value) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } - else if (this.style === Graph3d.STYLE.BARSIZE) { - color = this.colorDot; - borderColor = this.colorDotBorder; - } - else { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - hue = (1 - (point.point.z - this.zMin) * this.scale.z / this.verticalRatio) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } - - // calculate size for the bar - if (this.style === Graph3d.STYLE.BARSIZE) { - xWidth = (this.xBarWidth / 2) * ((point.point.value - this.valueMin) / (this.valueMax - this.valueMin) * 0.8 + 0.2); - yWidth = (this.yBarWidth / 2) * ((point.point.value - this.valueMin) / (this.valueMax - this.valueMin) * 0.8 + 0.2); - } - - // calculate all corner points - var me = this; - var point3d = point.point; - var top = [ - {point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, point3d.z)}, - {point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, point3d.z)}, - {point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, point3d.z)}, - {point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, point3d.z)} - ]; - var bottom = [ - {point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, this.zMin)}, - {point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, this.zMin)}, - {point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, this.zMin)}, - {point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, this.zMin)} - ]; - - // calculate screen location of the points - top.forEach(function (obj) { - obj.screen = me._convert3Dto2D(obj.point); - }); - bottom.forEach(function (obj) { - obj.screen = me._convert3Dto2D(obj.point); - }); - - // create five sides, calculate both corner points and center points - var surfaces = [ - {corners: top, center: Point3d.avg(bottom[0].point, bottom[2].point)}, - {corners: [top[0], top[1], bottom[1], bottom[0]], center: Point3d.avg(bottom[1].point, bottom[0].point)}, - {corners: [top[1], top[2], bottom[2], bottom[1]], center: Point3d.avg(bottom[2].point, bottom[1].point)}, - {corners: [top[2], top[3], bottom[3], bottom[2]], center: Point3d.avg(bottom[3].point, bottom[2].point)}, - {corners: [top[3], top[0], bottom[0], bottom[3]], center: Point3d.avg(bottom[0].point, bottom[3].point)} - ]; - point.surfaces = surfaces; - - // calculate the distance of each of the surface centers to the camera - for (j = 0; j < surfaces.length; j++) { - surface = surfaces[j]; - var transCenter = this._convertPointToTranslation(surface.center); - surface.dist = this.showPerspective ? transCenter.length() : -transCenter.z; - // TODO: this dept calculation doesn't work 100% of the cases due to perspective, - // but the current solution is fast/simple and works in 99.9% of all cases - // the issue is visible in example 14, with graph.setCameraPosition({horizontal: 2.97, vertical: 0.5, distance: 0.9}) - } - - // order the surfaces by their (translated) depth - surfaces.sort(function (a, b) { - var diff = b.dist - a.dist; - if (diff) return diff; - - // if equal depth, sort the top surface last - if (a.corners === top) return 1; - if (b.corners === top) return -1; - - // both are equal - return 0; - }); - - // draw the ordered surfaces - ctx.lineWidth = 1; - ctx.strokeStyle = borderColor; - ctx.fillStyle = color; - // NOTE: we start at j=2 instead of j=0 as we don't need to draw the two surfaces at the backside - for (j = 2; j < surfaces.length; j++) { - surface = surfaces[j]; - corners = surface.corners; - ctx.beginPath(); - ctx.moveTo(corners[3].screen.x, corners[3].screen.y); - ctx.lineTo(corners[0].screen.x, corners[0].screen.y); - ctx.lineTo(corners[1].screen.x, corners[1].screen.y); - ctx.lineTo(corners[2].screen.x, corners[2].screen.y); - ctx.lineTo(corners[3].screen.x, corners[3].screen.y); - ctx.fill(); - ctx.stroke(); - } - } - }; - - - /** - * Draw a line through all datapoints. - * This function can be used when the style is 'line' - */ - Graph3d.prototype._redrawDataLine = function() { - var canvas = this.frame.canvas, - ctx = canvas.getContext('2d'), - point, i; - - if (this.dataPoints === undefined || this.dataPoints.length <= 0) - return; // TODO: throw exception? - - // calculate the translations of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); - - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; - } - - // start the line - if (this.dataPoints.length > 0) { - point = this.dataPoints[0]; - - ctx.lineWidth = 1; // TODO: make customizable - ctx.strokeStyle = 'blue'; // TODO: make customizable - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); - } - - // draw the datapoints as colored circles - for (i = 1; i < this.dataPoints.length; i++) { - point = this.dataPoints[i]; - ctx.lineTo(point.screen.x, point.screen.y); - } - - // finish the line - if (this.dataPoints.length > 0) { - ctx.stroke(); - } - }; - - /** - * Start a moving operation inside the provided parent element - * @param {Event} event The event that occurred (required for - * retrieving the mouse position) - */ - Graph3d.prototype._onMouseDown = function(event) { - event = event || window.event; - - // check if mouse is still down (may be up when focus is lost for example - // in an iframe) - if (this.leftButtonDown) { - this._onMouseUp(event); - } - - // only react on left mouse button down - this.leftButtonDown = event.which ? (event.which === 1) : (event.button === 1); - if (!this.leftButtonDown && !this.touchDown) return; - - // get mouse position (different code for IE and all other browsers) - this.startMouseX = getMouseX(event); - this.startMouseY = getMouseY(event); - - this.startStart = new Date(this.start); - this.startEnd = new Date(this.end); - this.startArmRotation = this.camera.getArmRotation(); - - this.frame.style.cursor = 'move'; - - // add event listeners to handle moving the contents - // we store the function onmousemove and onmouseup in the graph, so we can - // remove the eventlisteners lateron in the function mouseUp() - var me = this; - this.onmousemove = function (event) {me._onMouseMove(event);}; - this.onmouseup = function (event) {me._onMouseUp(event);}; - util.addEventListener(document, 'mousemove', me.onmousemove); - util.addEventListener(document, 'mouseup', me.onmouseup); - util.preventDefault(event); - }; - - - /** - * Perform moving operating. - * This function activated from within the funcion Graph.mouseDown(). - * @param {Event} event Well, eehh, the event - */ - Graph3d.prototype._onMouseMove = function (event) { - event = event || window.event; - - // calculate change in mouse position - var diffX = parseFloat(getMouseX(event)) - this.startMouseX; - var diffY = parseFloat(getMouseY(event)) - this.startMouseY; - - var horizontalNew = this.startArmRotation.horizontal + diffX / 200; - var verticalNew = this.startArmRotation.vertical + diffY / 200; - - var snapAngle = 4; // degrees - var snapValue = Math.sin(snapAngle / 360 * 2 * Math.PI); - - // snap horizontally to nice angles at 0pi, 0.5pi, 1pi, 1.5pi, etc... - // the -0.001 is to take care that the vertical axis is always drawn at the left front corner - if (Math.abs(Math.sin(horizontalNew)) < snapValue) { - horizontalNew = Math.round((horizontalNew / Math.PI)) * Math.PI - 0.001; - } - if (Math.abs(Math.cos(horizontalNew)) < snapValue) { - horizontalNew = (Math.round((horizontalNew/ Math.PI - 0.5)) + 0.5) * Math.PI - 0.001; - } - - // snap vertically to nice angles - if (Math.abs(Math.sin(verticalNew)) < snapValue) { - verticalNew = Math.round((verticalNew / Math.PI)) * Math.PI; - } - if (Math.abs(Math.cos(verticalNew)) < snapValue) { - verticalNew = (Math.round((verticalNew/ Math.PI - 0.5)) + 0.5) * Math.PI; - } - - this.camera.setArmRotation(horizontalNew, verticalNew); - this.redraw(); - - // fire a cameraPositionChange event - var parameters = this.getCameraPosition(); - this.emit('cameraPositionChange', parameters); - - util.preventDefault(event); - }; - - - /** - * Stop moving operating. - * This function activated from within the funcion Graph.mouseDown(). - * @param {event} event The event - */ - Graph3d.prototype._onMouseUp = function (event) { - this.frame.style.cursor = 'auto'; - this.leftButtonDown = false; - - // remove event listeners here - util.removeEventListener(document, 'mousemove', this.onmousemove); - util.removeEventListener(document, 'mouseup', this.onmouseup); - util.preventDefault(event); - }; - - /** - * After having moved the mouse, a tooltip should pop up when the mouse is resting on a data point - * @param {Event} event A mouse move event - */ - Graph3d.prototype._onTooltip = function (event) { - var delay = 300; // ms - var mouseX = getMouseX(event) - util.getAbsoluteLeft(this.frame); - var mouseY = getMouseY(event) - util.getAbsoluteTop(this.frame); - - if (!this.showTooltip) { - return; - } - - if (this.tooltipTimeout) { - clearTimeout(this.tooltipTimeout); - } - - // (delayed) display of a tooltip only if no mouse button is down - if (this.leftButtonDown) { - this._hideTooltip(); - return; - } - - if (this.tooltip && this.tooltip.dataPoint) { - // tooltip is currently visible - var dataPoint = this._dataPointFromXY(mouseX, mouseY); - if (dataPoint !== this.tooltip.dataPoint) { - // datapoint changed - if (dataPoint) { - this._showTooltip(dataPoint); - } - else { - this._hideTooltip(); - } - } - } - else { - // tooltip is currently not visible - var me = this; - this.tooltipTimeout = setTimeout(function () { - me.tooltipTimeout = null; - - // show a tooltip if we have a data point - var dataPoint = me._dataPointFromXY(mouseX, mouseY); - if (dataPoint) { - me._showTooltip(dataPoint); - } - }, delay); - } - }; - - /** - * Event handler for touchstart event on mobile devices - */ - Graph3d.prototype._onTouchStart = function(event) { - this.touchDown = true; - - var me = this; - this.ontouchmove = function (event) {me._onTouchMove(event);}; - this.ontouchend = function (event) {me._onTouchEnd(event);}; - util.addEventListener(document, 'touchmove', me.ontouchmove); - util.addEventListener(document, 'touchend', me.ontouchend); - - this._onMouseDown(event); - }; - - /** - * Event handler for touchmove event on mobile devices - */ - Graph3d.prototype._onTouchMove = function(event) { - this._onMouseMove(event); - }; - - /** - * Event handler for touchend event on mobile devices - */ - Graph3d.prototype._onTouchEnd = function(event) { - this.touchDown = false; - - util.removeEventListener(document, 'touchmove', this.ontouchmove); - util.removeEventListener(document, 'touchend', this.ontouchend); - - this._onMouseUp(event); - }; - - - /** - * Event handler for mouse wheel event, used to zoom the graph - * Code from http://adomas.org/javascript-mouse-wheel/ - * @param {event} event The event - */ - Graph3d.prototype._onWheel = function(event) { - if (!event) /* For IE. */ - event = window.event; - - // retrieve delta - var delta = 0; - if (event.wheelDelta) { /* IE/Opera. */ - delta = event.wheelDelta/120; - } else if (event.detail) { /* Mozilla case. */ - // In Mozilla, sign of delta is different than in IE. - // Also, delta is multiple of 3. - delta = -event.detail/3; - } - - // If delta is nonzero, handle it. - // Basically, delta is now positive if wheel was scrolled up, - // and negative, if wheel was scrolled down. - if (delta) { - var oldLength = this.camera.getArmLength(); - var newLength = oldLength * (1 - delta / 10); - - this.camera.setArmLength(newLength); - this.redraw(); - - this._hideTooltip(); - } - - // fire a cameraPositionChange event - var parameters = this.getCameraPosition(); - this.emit('cameraPositionChange', parameters); - - // Prevent default actions caused by mouse wheel. - // That might be ugly, but we handle scrolls somehow - // anyway, so don't bother here.. - util.preventDefault(event); - }; - - /** - * Test whether a point lies inside given 2D triangle - * @param {Point2d} point - * @param {Point2d[]} triangle - * @return {boolean} Returns true if given point lies inside or on the edge of the triangle - * @private - */ - Graph3d.prototype._insideTriangle = function (point, triangle) { - var a = triangle[0], - b = triangle[1], - c = triangle[2]; - - function sign (x) { - return x > 0 ? 1 : x < 0 ? -1 : 0; - } - - var as = sign((b.x - a.x) * (point.y - a.y) - (b.y - a.y) * (point.x - a.x)); - var bs = sign((c.x - b.x) * (point.y - b.y) - (c.y - b.y) * (point.x - b.x)); - var cs = sign((a.x - c.x) * (point.y - c.y) - (a.y - c.y) * (point.x - c.x)); - - // each of the three signs must be either equal to each other or zero - return (as == 0 || bs == 0 || as == bs) && - (bs == 0 || cs == 0 || bs == cs) && - (as == 0 || cs == 0 || as == cs); - }; - - /** - * Find a data point close to given screen position (x, y) - * @param {Number} x - * @param {Number} y - * @return {Object | null} The closest data point or null if not close to any data point - * @private - */ - Graph3d.prototype._dataPointFromXY = function (x, y) { - var i, - distMax = 100, // px - dataPoint = null, - closestDataPoint = null, - closestDist = null, - center = new Point2d(x, y); - - if (this.style === Graph3d.STYLE.BAR || - this.style === Graph3d.STYLE.BARCOLOR || - this.style === Graph3d.STYLE.BARSIZE) { - // the data points are ordered from far away to closest - for (i = this.dataPoints.length - 1; i >= 0; i--) { - dataPoint = this.dataPoints[i]; - var surfaces = dataPoint.surfaces; - if (surfaces) { - for (var s = surfaces.length - 1; s >= 0; s--) { - // split each surface in two triangles, and see if the center point is inside one of these - var surface = surfaces[s]; - var corners = surface.corners; - var triangle1 = [corners[0].screen, corners[1].screen, corners[2].screen]; - var triangle2 = [corners[2].screen, corners[3].screen, corners[0].screen]; - if (this._insideTriangle(center, triangle1) || - this._insideTriangle(center, triangle2)) { - // return immediately at the first hit - return dataPoint; - } - } - } - } - } - else { - // find the closest data point, using distance to the center of the point on 2d screen - for (i = 0; i < this.dataPoints.length; i++) { - dataPoint = this.dataPoints[i]; - var point = dataPoint.screen; - if (point) { - var distX = Math.abs(x - point.x); - var distY = Math.abs(y - point.y); - var dist = Math.sqrt(distX * distX + distY * distY); - - if ((closestDist === null || dist < closestDist) && dist < distMax) { - closestDist = dist; - closestDataPoint = dataPoint; - } - } - } - } - - - return closestDataPoint; - }; - - /** - * Display a tooltip for given data point - * @param {Object} dataPoint - * @private - */ - Graph3d.prototype._showTooltip = function (dataPoint) { - var content, line, dot; - - if (!this.tooltip) { - content = document.createElement('div'); - content.style.position = 'absolute'; - content.style.padding = '10px'; - content.style.border = '1px solid #4d4d4d'; - content.style.color = '#1a1a1a'; - content.style.background = 'rgba(255,255,255,0.7)'; - content.style.borderRadius = '2px'; - content.style.boxShadow = '5px 5px 10px rgba(128,128,128,0.5)'; - - line = document.createElement('div'); - line.style.position = 'absolute'; - line.style.height = '40px'; - line.style.width = '0'; - line.style.borderLeft = '1px solid #4d4d4d'; - - dot = document.createElement('div'); - dot.style.position = 'absolute'; - dot.style.height = '0'; - dot.style.width = '0'; - dot.style.border = '5px solid #4d4d4d'; - dot.style.borderRadius = '5px'; - - this.tooltip = { - dataPoint: null, - dom: { - content: content, - line: line, - dot: dot - } - }; - } - else { - content = this.tooltip.dom.content; - line = this.tooltip.dom.line; - dot = this.tooltip.dom.dot; - } - - this._hideTooltip(); - - this.tooltip.dataPoint = dataPoint; - if (typeof this.showTooltip === 'function') { - content.innerHTML = this.showTooltip(dataPoint.point); - } - else { - content.innerHTML = '' + - '' + - '' + - '' + - '
x:' + dataPoint.point.x + '
y:' + dataPoint.point.y + '
z:' + dataPoint.point.z + '
'; - } - - content.style.left = '0'; - content.style.top = '0'; - this.frame.appendChild(content); - this.frame.appendChild(line); - this.frame.appendChild(dot); - - // calculate sizes - var contentWidth = content.offsetWidth; - var contentHeight = content.offsetHeight; - var lineHeight = line.offsetHeight; - var dotWidth = dot.offsetWidth; - var dotHeight = dot.offsetHeight; - - var left = dataPoint.screen.x - contentWidth / 2; - left = Math.min(Math.max(left, 10), this.frame.clientWidth - 10 - contentWidth); - - line.style.left = dataPoint.screen.x + 'px'; - line.style.top = (dataPoint.screen.y - lineHeight) + 'px'; - content.style.left = left + 'px'; - content.style.top = (dataPoint.screen.y - lineHeight - contentHeight) + 'px'; - dot.style.left = (dataPoint.screen.x - dotWidth / 2) + 'px'; - dot.style.top = (dataPoint.screen.y - dotHeight / 2) + 'px'; - }; - - /** - * Hide the tooltip when displayed - * @private - */ - Graph3d.prototype._hideTooltip = function () { - if (this.tooltip) { - this.tooltip.dataPoint = null; - - for (var prop in this.tooltip.dom) { - if (this.tooltip.dom.hasOwnProperty(prop)) { - var elem = this.tooltip.dom[prop]; - if (elem && elem.parentNode) { - elem.parentNode.removeChild(elem); - } - } - } - } - }; - - /**--------------------------------------------------------------------------**/ - - - /** - * Get the horizontal mouse position from a mouse event - * @param {Event} event - * @return {Number} mouse x - */ - function getMouseX (event) { - if ('clientX' in event) return event.clientX; - return event.targetTouches[0] && event.targetTouches[0].clientX || 0; - } - - /** - * Get the vertical mouse position from a mouse event - * @param {Event} event - * @return {Number} mouse y - */ - function getMouseY (event) { - if ('clientY' in event) return event.clientY; - return event.targetTouches[0] && event.targetTouches[0].clientY || 0; - } - - module.exports = Graph3d; - - -/***/ }, -/* 7 */ -/***/ function(module, exports, __webpack_require__) { - - var Point3d = __webpack_require__(10); - - /** - * @class Camera - * The camera is mounted on a (virtual) camera arm. The camera arm can rotate - * The camera is always looking in the direction of the origin of the arm. - * This way, the camera always rotates around one fixed point, the location - * of the camera arm. - * - * Documentation: - * http://en.wikipedia.org/wiki/3D_projection - */ - function Camera() { - this.armLocation = new Point3d(); - this.armRotation = {}; - this.armRotation.horizontal = 0; - this.armRotation.vertical = 0; - this.armLength = 1.7; - - this.cameraLocation = new Point3d(); - this.cameraRotation = new Point3d(0.5*Math.PI, 0, 0); - - this.calculateCameraOrientation(); - } - - /** - * Set the location (origin) of the arm - * @param {Number} x Normalized value of x - * @param {Number} y Normalized value of y - * @param {Number} z Normalized value of z - */ - Camera.prototype.setArmLocation = function(x, y, z) { - this.armLocation.x = x; - this.armLocation.y = y; - this.armLocation.z = z; - - this.calculateCameraOrientation(); - }; - - /** - * Set the rotation of the camera arm - * @param {Number} horizontal The horizontal rotation, between 0 and 2*PI. - * Optional, can be left undefined. - * @param {Number} vertical The vertical rotation, between 0 and 0.5*PI - * if vertical=0.5*PI, the graph is shown from the - * top. Optional, can be left undefined. - */ - Camera.prototype.setArmRotation = function(horizontal, vertical) { - if (horizontal !== undefined) { - this.armRotation.horizontal = horizontal; - } - - if (vertical !== undefined) { - this.armRotation.vertical = vertical; - if (this.armRotation.vertical < 0) this.armRotation.vertical = 0; - if (this.armRotation.vertical > 0.5*Math.PI) this.armRotation.vertical = 0.5*Math.PI; - } - - if (horizontal !== undefined || vertical !== undefined) { - this.calculateCameraOrientation(); - } - }; - - /** - * Retrieve the current arm rotation - * @return {object} An object with parameters horizontal and vertical - */ - Camera.prototype.getArmRotation = function() { - var rot = {}; - rot.horizontal = this.armRotation.horizontal; - rot.vertical = this.armRotation.vertical; - - return rot; - }; - - /** - * Set the (normalized) length of the camera arm. - * @param {Number} length A length between 0.71 and 5.0 - */ - Camera.prototype.setArmLength = function(length) { - if (length === undefined) - return; - - this.armLength = length; - - // Radius must be larger than the corner of the graph, - // which has a distance of sqrt(0.5^2+0.5^2) = 0.71 from the center of the - // graph - if (this.armLength < 0.71) this.armLength = 0.71; - if (this.armLength > 5.0) this.armLength = 5.0; - - this.calculateCameraOrientation(); - }; - - /** - * Retrieve the arm length - * @return {Number} length - */ - Camera.prototype.getArmLength = function() { - return this.armLength; - }; - - /** - * Retrieve the camera location - * @return {Point3d} cameraLocation - */ - Camera.prototype.getCameraLocation = function() { - return this.cameraLocation; - }; - - /** - * Retrieve the camera rotation - * @return {Point3d} cameraRotation - */ - Camera.prototype.getCameraRotation = function() { - return this.cameraRotation; - }; - - /** - * Calculate the location and rotation of the camera based on the - * position and orientation of the camera arm - */ - Camera.prototype.calculateCameraOrientation = function() { - // calculate location of the camera - this.cameraLocation.x = this.armLocation.x - this.armLength * Math.sin(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical); - this.cameraLocation.y = this.armLocation.y - this.armLength * Math.cos(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical); - this.cameraLocation.z = this.armLocation.z + this.armLength * Math.sin(this.armRotation.vertical); - - // calculate rotation of the camera - this.cameraRotation.x = Math.PI/2 - this.armRotation.vertical; - this.cameraRotation.y = 0; - this.cameraRotation.z = -this.armRotation.horizontal; - }; - - module.exports = Camera; - -/***/ }, -/* 8 */ -/***/ function(module, exports, __webpack_require__) { - - var DataView = __webpack_require__(4); - - /** - * @class Filter - * - * @param {DataSet} data The google data table - * @param {Number} column The index of the column to be filtered - * @param {Graph} graph The graph - */ - function Filter (data, column, graph) { - this.data = data; - this.column = column; - this.graph = graph; // the parent graph - - this.index = undefined; - this.value = undefined; - - // read all distinct values and select the first one - this.values = graph.getDistinctValues(data.get(), this.column); - - // sort both numeric and string values correctly - this.values.sort(function (a, b) { - return a > b ? 1 : a < b ? -1 : 0; - }); - - if (this.values.length > 0) { - this.selectValue(0); - } - - // create an array with the filtered datapoints. this will be loaded afterwards - this.dataPoints = []; - - this.loaded = false; - this.onLoadCallback = undefined; - - if (graph.animationPreload) { - this.loaded = false; - this.loadInBackground(); - } - else { - this.loaded = true; - } - }; - - - /** - * Return the label - * @return {string} label - */ - Filter.prototype.isLoaded = function() { - return this.loaded; - }; - - - /** - * Return the loaded progress - * @return {Number} percentage between 0 and 100 - */ - Filter.prototype.getLoadedProgress = function() { - var len = this.values.length; - - var i = 0; - while (this.dataPoints[i]) { - i++; - } - - return Math.round(i / len * 100); - }; - - - /** - * Return the label - * @return {string} label - */ - Filter.prototype.getLabel = function() { - return this.graph.filterLabel; - }; - - - /** - * Return the columnIndex of the filter - * @return {Number} columnIndex - */ - Filter.prototype.getColumn = function() { - return this.column; - }; - - /** - * Return the currently selected value. Returns undefined if there is no selection - * @return {*} value - */ - Filter.prototype.getSelectedValue = function() { - if (this.index === undefined) - return undefined; - - return this.values[this.index]; - }; - - /** - * Retrieve all values of the filter - * @return {Array} values - */ - Filter.prototype.getValues = function() { - return this.values; - }; - - /** - * Retrieve one value of the filter - * @param {Number} index - * @return {*} value - */ - Filter.prototype.getValue = function(index) { - if (index >= this.values.length) - throw 'Error: index out of range'; - - return this.values[index]; - }; - - - /** - * Retrieve the (filtered) dataPoints for the currently selected filter index - * @param {Number} [index] (optional) - * @return {Array} dataPoints - */ - Filter.prototype._getDataPoints = function(index) { - if (index === undefined) - index = this.index; - - if (index === undefined) - return []; - - var dataPoints; - if (this.dataPoints[index]) { - dataPoints = this.dataPoints[index]; - } - else { - var f = {}; - f.column = this.column; - f.value = this.values[index]; - - var dataView = new DataView(this.data,{filter: function (item) {return (item[f.column] == f.value);}}).get(); - dataPoints = this.graph._getDataPoints(dataView); - - this.dataPoints[index] = dataPoints; - } - - return dataPoints; - }; - - - - /** - * Set a callback function when the filter is fully loaded. - */ - Filter.prototype.setOnLoadCallback = function(callback) { - this.onLoadCallback = callback; - }; - - - /** - * Add a value to the list with available values for this filter - * No double entries will be created. - * @param {Number} index - */ - Filter.prototype.selectValue = function(index) { - if (index >= this.values.length) - throw 'Error: index out of range'; - - this.index = index; - this.value = this.values[index]; - }; - - /** - * Load all filtered rows in the background one by one - * Start this method without providing an index! - */ - Filter.prototype.loadInBackground = function(index) { - if (index === undefined) - index = 0; - - var frame = this.graph.frame; - - if (index < this.values.length) { - var dataPointsTemp = this._getDataPoints(index); - //this.graph.redrawInfo(); // TODO: not neat - - // create a progress box - if (frame.progress === undefined) { - frame.progress = document.createElement('DIV'); - frame.progress.style.position = 'absolute'; - frame.progress.style.color = 'gray'; - frame.appendChild(frame.progress); - } - var progress = this.getLoadedProgress(); - frame.progress.innerHTML = 'Loading animation... ' + progress + '%'; - // TODO: this is no nice solution... - frame.progress.style.bottom = 60 + 'px'; // TODO: use height of slider - frame.progress.style.left = 10 + 'px'; - - var me = this; - setTimeout(function() {me.loadInBackground(index+1);}, 10); - this.loaded = false; - } - else { - this.loaded = true; - - // remove the progress box - if (frame.progress !== undefined) { - frame.removeChild(frame.progress); - frame.progress = undefined; - } - - if (this.onLoadCallback) - this.onLoadCallback(); - } - }; - - module.exports = Filter; - - -/***/ }, -/* 9 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * @prototype Point2d - * @param {Number} [x] - * @param {Number} [y] - */ - function Point2d (x, y) { - this.x = x !== undefined ? x : 0; - this.y = y !== undefined ? y : 0; - } - - module.exports = Point2d; - - -/***/ }, -/* 10 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * @prototype Point3d - * @param {Number} [x] - * @param {Number} [y] - * @param {Number} [z] - */ - function Point3d(x, y, z) { - this.x = x !== undefined ? x : 0; - this.y = y !== undefined ? y : 0; - this.z = z !== undefined ? z : 0; - }; - - /** - * Subtract the two provided points, returns a-b - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} a-b - */ - Point3d.subtract = function(a, b) { - var sub = new Point3d(); - sub.x = a.x - b.x; - sub.y = a.y - b.y; - sub.z = a.z - b.z; - return sub; - }; - - /** - * Add the two provided points, returns a+b - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} a+b - */ - Point3d.add = function(a, b) { - var sum = new Point3d(); - sum.x = a.x + b.x; - sum.y = a.y + b.y; - sum.z = a.z + b.z; - return sum; - }; - - /** - * Calculate the average of two 3d points - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} The average, (a+b)/2 - */ - Point3d.avg = function(a, b) { - return new Point3d( - (a.x + b.x) / 2, - (a.y + b.y) / 2, - (a.z + b.z) / 2 - ); - }; - - /** - * Calculate the cross product of the two provided points, returns axb - * Documentation: http://en.wikipedia.org/wiki/Cross_product - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} cross product axb - */ - Point3d.crossProduct = function(a, b) { - var crossproduct = new Point3d(); - - crossproduct.x = a.y * b.z - a.z * b.y; - crossproduct.y = a.z * b.x - a.x * b.z; - crossproduct.z = a.x * b.y - a.y * b.x; - - return crossproduct; - }; - - - /** - * Rtrieve the length of the vector (or the distance from this point to the origin - * @return {Number} length - */ - Point3d.prototype.length = function() { - return Math.sqrt( - this.x * this.x + - this.y * this.y + - this.z * this.z - ); - }; - - module.exports = Point3d; - - -/***/ }, -/* 11 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - - /** - * @constructor Slider - * - * An html slider control with start/stop/prev/next buttons - * @param {Element} container The element where the slider will be created - * @param {Object} options Available options: - * {boolean} visible If true (default) the - * slider is visible. - */ - function Slider(container, options) { - if (container === undefined) { - throw 'Error: No container element defined'; - } - this.container = container; - this.visible = (options && options.visible != undefined) ? options.visible : true; - - if (this.visible) { - this.frame = document.createElement('DIV'); - //this.frame.style.backgroundColor = '#E5E5E5'; - this.frame.style.width = '100%'; - this.frame.style.position = 'relative'; - this.container.appendChild(this.frame); - - this.frame.prev = document.createElement('INPUT'); - this.frame.prev.type = 'BUTTON'; - this.frame.prev.value = 'Prev'; - this.frame.appendChild(this.frame.prev); - - this.frame.play = document.createElement('INPUT'); - this.frame.play.type = 'BUTTON'; - this.frame.play.value = 'Play'; - this.frame.appendChild(this.frame.play); - - this.frame.next = document.createElement('INPUT'); - this.frame.next.type = 'BUTTON'; - this.frame.next.value = 'Next'; - this.frame.appendChild(this.frame.next); - - this.frame.bar = document.createElement('INPUT'); - this.frame.bar.type = 'BUTTON'; - this.frame.bar.style.position = 'absolute'; - this.frame.bar.style.border = '1px solid red'; - this.frame.bar.style.width = '100px'; - this.frame.bar.style.height = '6px'; - this.frame.bar.style.borderRadius = '2px'; - this.frame.bar.style.MozBorderRadius = '2px'; - this.frame.bar.style.border = '1px solid #7F7F7F'; - this.frame.bar.style.backgroundColor = '#E5E5E5'; - this.frame.appendChild(this.frame.bar); - - this.frame.slide = document.createElement('INPUT'); - this.frame.slide.type = 'BUTTON'; - this.frame.slide.style.margin = '0px'; - this.frame.slide.value = ' '; - this.frame.slide.style.position = 'relative'; - this.frame.slide.style.left = '-100px'; - this.frame.appendChild(this.frame.slide); - - // create events - var me = this; - this.frame.slide.onmousedown = function (event) {me._onMouseDown(event);}; - this.frame.prev.onclick = function (event) {me.prev(event);}; - this.frame.play.onclick = function (event) {me.togglePlay(event);}; - this.frame.next.onclick = function (event) {me.next(event);}; - } - - this.onChangeCallback = undefined; - - this.values = []; - this.index = undefined; - - this.playTimeout = undefined; - this.playInterval = 1000; // milliseconds - this.playLoop = true; - } - - /** - * Select the previous index - */ - Slider.prototype.prev = function() { - var index = this.getIndex(); - if (index > 0) { - index--; - this.setIndex(index); - } - }; - - /** - * Select the next index - */ - Slider.prototype.next = function() { - var index = this.getIndex(); - if (index < this.values.length - 1) { - index++; - this.setIndex(index); - } - }; - - /** - * Select the next index - */ - Slider.prototype.playNext = function() { - var start = new Date(); - - var index = this.getIndex(); - if (index < this.values.length - 1) { - index++; - this.setIndex(index); - } - else if (this.playLoop) { - // jump to the start - index = 0; - this.setIndex(index); - } - - var end = new Date(); - var diff = (end - start); - - // calculate how much time it to to set the index and to execute the callback - // function. - var interval = Math.max(this.playInterval - diff, 0); - // document.title = diff // TODO: cleanup - - var me = this; - this.playTimeout = setTimeout(function() {me.playNext();}, interval); - }; - - /** - * Toggle start or stop playing - */ - Slider.prototype.togglePlay = function() { - if (this.playTimeout === undefined) { - this.play(); - } else { - this.stop(); - } - }; - - /** - * Start playing - */ - Slider.prototype.play = function() { - // Test whether already playing - if (this.playTimeout) return; - - this.playNext(); - - if (this.frame) { - this.frame.play.value = 'Stop'; - } - }; - - /** - * Stop playing - */ - Slider.prototype.stop = function() { - clearInterval(this.playTimeout); - this.playTimeout = undefined; - - if (this.frame) { - this.frame.play.value = 'Play'; - } - }; - - /** - * Set a callback function which will be triggered when the value of the - * slider bar has changed. - */ - Slider.prototype.setOnChangeCallback = function(callback) { - this.onChangeCallback = callback; - }; - - /** - * Set the interval for playing the list - * @param {Number} interval The interval in milliseconds - */ - Slider.prototype.setPlayInterval = function(interval) { - this.playInterval = interval; - }; - - /** - * Retrieve the current play interval - * @return {Number} interval The interval in milliseconds - */ - Slider.prototype.getPlayInterval = function(interval) { - return this.playInterval; - }; - - /** - * Set looping on or off - * @pararm {boolean} doLoop If true, the slider will jump to the start when - * the end is passed, and will jump to the end - * when the start is passed. - */ - Slider.prototype.setPlayLoop = function(doLoop) { - this.playLoop = doLoop; - }; - - - /** - * Execute the onchange callback function - */ - Slider.prototype.onChange = function() { - if (this.onChangeCallback !== undefined) { - this.onChangeCallback(); - } - }; - - /** - * redraw the slider on the correct place - */ - Slider.prototype.redraw = function() { - if (this.frame) { - // resize the bar - this.frame.bar.style.top = (this.frame.clientHeight/2 - - this.frame.bar.offsetHeight/2) + 'px'; - this.frame.bar.style.width = (this.frame.clientWidth - - this.frame.prev.clientWidth - - this.frame.play.clientWidth - - this.frame.next.clientWidth - 30) + 'px'; - - // position the slider button - var left = this.indexToLeft(this.index); - this.frame.slide.style.left = (left) + 'px'; - } - }; - - - /** - * Set the list with values for the slider - * @param {Array} values A javascript array with values (any type) - */ - Slider.prototype.setValues = function(values) { - this.values = values; - - if (this.values.length > 0) - this.setIndex(0); - else - this.index = undefined; - }; - - /** - * Select a value by its index - * @param {Number} index - */ - Slider.prototype.setIndex = function(index) { - if (index < this.values.length) { - this.index = index; - - this.redraw(); - this.onChange(); - } - else { - throw 'Error: index out of range'; - } - }; - - /** - * retrieve the index of the currently selected vaue - * @return {Number} index - */ - Slider.prototype.getIndex = function() { - return this.index; - }; - - - /** - * retrieve the currently selected value - * @return {*} value - */ - Slider.prototype.get = function() { - return this.values[this.index]; - }; - - - Slider.prototype._onMouseDown = function(event) { - // only react on left mouse button down - var leftButtonDown = event.which ? (event.which === 1) : (event.button === 1); - if (!leftButtonDown) return; - - this.startClientX = event.clientX; - this.startSlideX = parseFloat(this.frame.slide.style.left); - - this.frame.style.cursor = 'move'; - - // add event listeners to handle moving the contents - // we store the function onmousemove and onmouseup in the graph, so we can - // remove the eventlisteners lateron in the function mouseUp() - var me = this; - this.onmousemove = function (event) {me._onMouseMove(event);}; - this.onmouseup = function (event) {me._onMouseUp(event);}; - util.addEventListener(document, 'mousemove', this.onmousemove); - util.addEventListener(document, 'mouseup', this.onmouseup); - util.preventDefault(event); - }; - - - Slider.prototype.leftToIndex = function (left) { - var width = parseFloat(this.frame.bar.style.width) - - this.frame.slide.clientWidth - 10; - var x = left - 3; - - var index = Math.round(x / width * (this.values.length-1)); - if (index < 0) index = 0; - if (index > this.values.length-1) index = this.values.length-1; - - return index; - }; - - Slider.prototype.indexToLeft = function (index) { - var width = parseFloat(this.frame.bar.style.width) - - this.frame.slide.clientWidth - 10; - - var x = index / (this.values.length-1) * width; - var left = x + 3; - - return left; - }; - - - - Slider.prototype._onMouseMove = function (event) { - var diff = event.clientX - this.startClientX; - var x = this.startSlideX + diff; - - var index = this.leftToIndex(x); - - this.setIndex(index); - - util.preventDefault(); - }; - - - Slider.prototype._onMouseUp = function (event) { - this.frame.style.cursor = 'auto'; - - // remove event listeners - util.removeEventListener(document, 'mousemove', this.onmousemove); - util.removeEventListener(document, 'mouseup', this.onmouseup); - - util.preventDefault(); - }; - - module.exports = Slider; - - -/***/ }, -/* 12 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * @prototype StepNumber - * The class StepNumber is an iterator for Numbers. You provide a start and end - * value, and a best step size. StepNumber itself rounds to fixed values and - * a finds the step that best fits the provided step. - * - * If prettyStep is true, the step size is chosen as close as possible to the - * provided step, but being a round value like 1, 2, 5, 10, 20, 50, .... - * - * Example usage: - * var step = new StepNumber(0, 10, 2.5, true); - * step.start(); - * while (!step.end()) { - * alert(step.getCurrent()); - * step.next(); - * } - * - * Version: 1.0 - * - * @param {Number} start The start value - * @param {Number} end The end value - * @param {Number} step Optional. Step size. Must be a positive value. - * @param {boolean} prettyStep Optional. If true, the step size is rounded - * To a pretty step size (like 1, 2, 5, 10, 20, 50, ...) - */ - function StepNumber(start, end, step, prettyStep) { - // set default values - this._start = 0; - this._end = 0; - this._step = 1; - this.prettyStep = true; - this.precision = 5; - - this._current = 0; - this.setRange(start, end, step, prettyStep); - }; - - /** - * Set a new range: start, end and step. - * - * @param {Number} start The start value - * @param {Number} end The end value - * @param {Number} step Optional. Step size. Must be a positive value. - * @param {boolean} prettyStep Optional. If true, the step size is rounded - * To a pretty step size (like 1, 2, 5, 10, 20, 50, ...) - */ - StepNumber.prototype.setRange = function(start, end, step, prettyStep) { - this._start = start ? start : 0; - this._end = end ? end : 0; - - this.setStep(step, prettyStep); - }; - - /** - * Set a new step size - * @param {Number} step New step size. Must be a positive value - * @param {boolean} prettyStep Optional. If true, the provided step is rounded - * to a pretty step size (like 1, 2, 5, 10, 20, 50, ...) - */ - StepNumber.prototype.setStep = function(step, prettyStep) { - if (step === undefined || step <= 0) - return; - - if (prettyStep !== undefined) - this.prettyStep = prettyStep; - - if (this.prettyStep === true) - this._step = StepNumber.calculatePrettyStep(step); - else - this._step = step; - }; - - /** - * Calculate a nice step size, closest to the desired step size. - * Returns a value in one of the ranges 1*10^n, 2*10^n, or 5*10^n, where n is an - * integer Number. For example 1, 2, 5, 10, 20, 50, etc... - * @param {Number} step Desired step size - * @return {Number} Nice step size - */ - StepNumber.calculatePrettyStep = function (step) { - var log10 = function (x) {return Math.log(x) / Math.LN10;}; - - // try three steps (multiple of 1, 2, or 5 - var step1 = Math.pow(10, Math.round(log10(step))), - step2 = 2 * Math.pow(10, Math.round(log10(step / 2))), - step5 = 5 * Math.pow(10, Math.round(log10(step / 5))); - - // choose the best step (closest to minimum step) - var prettyStep = step1; - if (Math.abs(step2 - step) <= Math.abs(prettyStep - step)) prettyStep = step2; - if (Math.abs(step5 - step) <= Math.abs(prettyStep - step)) prettyStep = step5; - - // for safety - if (prettyStep <= 0) { - prettyStep = 1; - } - - return prettyStep; - }; - - /** - * returns the current value of the step - * @return {Number} current value - */ - StepNumber.prototype.getCurrent = function () { - return parseFloat(this._current.toPrecision(this.precision)); - }; - - /** - * returns the current step size - * @return {Number} current step size - */ - StepNumber.prototype.getStep = function () { - return this._step; - }; - - /** - * Set the current value to the largest value smaller than start, which - * is a multiple of the step size - */ - StepNumber.prototype.start = function() { - this._current = this._start - this._start % this._step; - }; - - /** - * Do a step, add the step size to the current value - */ - StepNumber.prototype.next = function () { - this._current += this._step; - }; - - /** - * Returns true whether the end is reached - * @return {boolean} True if the current value has passed the end value. - */ - StepNumber.prototype.end = function () { - return (this._current > this._end); - }; - - module.exports = StepNumber; - - -/***/ }, -/* 13 */ -/***/ function(module, exports, __webpack_require__) { - - var Emitter = __webpack_require__(56); - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Range = __webpack_require__(17); - var Core = __webpack_require__(46); - var TimeAxis = __webpack_require__(30); - var CurrentTime = __webpack_require__(21); - var CustomTime = __webpack_require__(22); - var ItemSet = __webpack_require__(27); - - /** - * Create a timeline visualization - * @param {HTMLElement} container - * @param {vis.DataSet | Array | google.visualization.DataTable} [items] - * @param {vis.DataSet | Array | google.visualization.DataTable} [groups] - * @param {Object} [options] See Timeline.setOptions for the available options. - * @constructor - * @extends Core - */ - function Timeline (container, items, groups, options) { - if (!(this instanceof Timeline)) { - throw new SyntaxError('Constructor must be called with the new operator'); - } - - // if the third element is options, the forth is groups (optionally); - if (!(Array.isArray(groups) || groups instanceof DataSet) && groups instanceof Object) { - var forthArgument = options; - options = groups; - groups = forthArgument; - } - - var me = this; - this.defaultOptions = { - start: null, - end: null, - - autoResize: true, - - orientation: 'bottom', - width: null, - height: null, - maxHeight: null, - minHeight: null - }; - this.options = util.deepExtend({}, this.defaultOptions); - - // Create the DOM, props, and emitter - this._create(container); - - // all components listed here will be repainted automatically - this.components = []; - - this.body = { - dom: this.dom, - domProps: this.props, - emitter: { - on: this.on.bind(this), - off: this.off.bind(this), - emit: this.emit.bind(this) - }, - hiddenDates: [], - util: { - snap: null, // will be specified after TimeAxis is created - toScreen: me._toScreen.bind(me), - toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width - toTime: me._toTime.bind(me), - toGlobalTime : me._toGlobalTime.bind(me) - } - }; - - // range - this.range = new Range(this.body); - this.components.push(this.range); - this.body.range = this.range; - - // time axis - this.timeAxis = new TimeAxis(this.body); - this.components.push(this.timeAxis); - this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis); - - // current time bar - this.currentTime = new CurrentTime(this.body); - this.components.push(this.currentTime); - - // custom time bar - // Note: time bar will be attached in this.setOptions when selected - this.customTime = new CustomTime(this.body); - this.components.push(this.customTime); - - // item set - this.itemSet = new ItemSet(this.body); - this.components.push(this.itemSet); - - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet - - // apply options - if (options) { - this.setOptions(options); - } - - // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS! - if (groups) { - this.setGroups(groups); - } - - // create itemset - if (items) { - this.setItems(items); - } - else { - this.redraw(); - } - } - - // Extend the functionality from Core - Timeline.prototype = new Core(); - - /** - * Set items - * @param {vis.DataSet | Array | google.visualization.DataTable | null} items - */ - Timeline.prototype.setItems = function(items) { - var initialLoad = (this.itemsData == null); - - // convert to type DataSet when needed - var newDataSet; - if (!items) { - newDataSet = null; - } - else if (items instanceof DataSet || items instanceof DataView) { - newDataSet = items; - } - else { - // turn an array into a dataset - newDataSet = new DataSet(items, { - type: { - start: 'Date', - end: 'Date' - } - }); - } - - // set items - this.itemsData = newDataSet; - this.itemSet && this.itemSet.setItems(newDataSet); - - if (initialLoad) { - if (this.options.start != undefined || this.options.end != undefined) { - if (this.options.start == undefined || this.options.end == undefined) { - var dataRange = this._getDataRange(); - } - - var start = this.options.start != undefined ? this.options.start : dataRange.start; - var end = this.options.end != undefined ? this.options.end : dataRange.end; - - this.setWindow(start, end, {animate: false}); - } - else { - this.fit({animate: false}); - } - } - }; - - /** - * Set groups - * @param {vis.DataSet | Array | google.visualization.DataTable} groups - */ - Timeline.prototype.setGroups = function(groups) { - // convert to type DataSet when needed - var newDataSet; - if (!groups) { - newDataSet = null; - } - else if (groups instanceof DataSet || groups instanceof DataView) { - newDataSet = groups; - } - else { - // turn an array into a dataset - newDataSet = new DataSet(groups); - } - - this.groupsData = newDataSet; - this.itemSet.setGroups(newDataSet); - }; - - /** - * Set selected items by their id. Replaces the current selection - * Unknown id's are silently ignored. - * @param {string[] | string} [ids] An array with zero or more id's of the items to be - * selected. If ids is an empty array, all items will be - * unselected. - * @param {Object} [options] Available options: - * `focus: boolean` - * If true, focus will be set to the selected item(s) - * `animate: boolean | number` - * If true (default), the range is animated - * smoothly to the new window. - * If a number, the number is taken as duration - * for the animation. Default duration is 500 ms. - * Only applicable when option focus is true. - */ - Timeline.prototype.setSelection = function(ids, options) { - this.itemSet && this.itemSet.setSelection(ids); - - if (options && options.focus) { - this.focus(ids, options); - } - }; - - /** - * Get the selected items by their id - * @return {Array} ids The ids of the selected items - */ - Timeline.prototype.getSelection = function() { - return this.itemSet && this.itemSet.getSelection() || []; - }; - - /** - * Adjust the visible window such that the selected item (or multiple items) - * are centered on screen. - * @param {String | String[]} id An item id or array with item ids - * @param {Object} [options] Available options: - * `animate: boolean | number` - * If true (default), the range is animated - * smoothly to the new window. - * If a number, the number is taken as duration - * for the animation. Default duration is 500 ms. - * Only applicable when option focus is true - */ - Timeline.prototype.focus = function(id, options) { - if (!this.itemsData || id == undefined) return; - - var ids = Array.isArray(id) ? id : [id]; - - // get the specified item(s) - var itemsData = this.itemsData.getDataSet().get(ids, { - type: { - start: 'Date', - end: 'Date' - } - }); - - // calculate minimum start and maximum end of specified items - var start = null; - var end = null; - itemsData.forEach(function (itemData) { - var s = itemData.start.valueOf(); - var e = 'end' in itemData ? itemData.end.valueOf() : itemData.start.valueOf(); - - if (start === null || s < start) { - start = s; - } - - if (end === null || e > end) { - end = e; - } - }); - - if (start !== null && end !== null) { - // calculate the new middle and interval for the window - var middle = (start + end) / 2; - var interval = Math.max((this.range.end - this.range.start), (end - start) * 1.1); - - var animate = (options && options.animate !== undefined) ? options.animate : true; - this.range.setRange(middle - interval / 2, middle + interval / 2, animate); - } - }; - - /** - * Get the data range of the item set. - * @returns {{min: Date, max: Date}} range A range with a start and end Date. - * When no minimum is found, min==null - * When no maximum is found, max==null - */ - Timeline.prototype.getItemRange = function() { - // calculate min from start filed - var dataset = this.itemsData.getDataSet(), - min = null, - max = null; - - if (dataset) { - // calculate the minimum value of the field 'start' - var minItem = dataset.min('start'); - min = minItem ? util.convert(minItem.start, 'Date').valueOf() : null; - // Note: we convert first to Date and then to number because else - // a conversion from ISODate to Number will fail - - // calculate maximum value of fields 'start' and 'end' - var maxStartItem = dataset.max('start'); - if (maxStartItem) { - max = util.convert(maxStartItem.start, 'Date').valueOf(); - } - var maxEndItem = dataset.max('end'); - if (maxEndItem) { - if (max == null) { - max = util.convert(maxEndItem.end, 'Date').valueOf(); - } - else { - max = Math.max(max, util.convert(maxEndItem.end, 'Date').valueOf()); - } - } - } - - return { - min: (min != null) ? new Date(min) : null, - max: (max != null) ? new Date(max) : null - }; - }; - - - module.exports = Timeline; - - -/***/ }, -/* 14 */ -/***/ function(module, exports, __webpack_require__) { - - var Emitter = __webpack_require__(56); - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Range = __webpack_require__(17); - var Core = __webpack_require__(46); - var TimeAxis = __webpack_require__(30); - var CurrentTime = __webpack_require__(21); - var CustomTime = __webpack_require__(22); - var LineGraph = __webpack_require__(29); - - /** - * Create a timeline visualization - * @param {HTMLElement} container - * @param {vis.DataSet | Array | google.visualization.DataTable} [items] - * @param {Object} [options] See Graph2d.setOptions for the available options. - * @constructor - * @extends Core - */ - function Graph2d (container, items, groups, options) { - // if the third element is options, the forth is groups (optionally); - if (!(Array.isArray(groups) || groups instanceof DataSet) && groups instanceof Object) { - var forthArgument = options; - options = groups; - groups = forthArgument; - } - - var me = this; - this.defaultOptions = { - start: null, - end: null, - - autoResize: true, - - orientation: 'bottom', - width: null, - height: null, - maxHeight: null, - minHeight: null - }; - this.options = util.deepExtend({}, this.defaultOptions); - - // Create the DOM, props, and emitter - this._create(container); - - // all components listed here will be repainted automatically - this.components = []; - - this.body = { - dom: this.dom, - domProps: this.props, - emitter: { - on: this.on.bind(this), - off: this.off.bind(this), - emit: this.emit.bind(this) - }, - hiddenDates: [], - util: { - snap: null, // will be specified after TimeAxis is created - toScreen: me._toScreen.bind(me), - toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width - toTime: me._toTime.bind(me), - toGlobalTime : me._toGlobalTime.bind(me) - } - }; - - // range - this.range = new Range(this.body); - this.components.push(this.range); - this.body.range = this.range; - - // time axis - this.timeAxis = new TimeAxis(this.body); - this.components.push(this.timeAxis); - this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis); - - // current time bar - this.currentTime = new CurrentTime(this.body); - this.components.push(this.currentTime); - - // custom time bar - // Note: time bar will be attached in this.setOptions when selected - this.customTime = new CustomTime(this.body); - this.components.push(this.customTime); - - // item set - this.linegraph = new LineGraph(this.body); - this.components.push(this.linegraph); - - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet - - // apply options - if (options) { - this.setOptions(options); - } - - // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS! - if (groups) { - this.setGroups(groups); - } - - // create itemset - if (items) { - this.setItems(items); - } - else { - this.redraw(); - } - } - - // Extend the functionality from Core - Graph2d.prototype = new Core(); - - /** - * Set items - * @param {vis.DataSet | Array | google.visualization.DataTable | null} items - */ - Graph2d.prototype.setItems = function(items) { - var initialLoad = (this.itemsData == null); - - // convert to type DataSet when needed - var newDataSet; - if (!items) { - newDataSet = null; - } - else if (items instanceof DataSet || items instanceof DataView) { - newDataSet = items; - } - else { - // turn an array into a dataset - newDataSet = new DataSet(items, { - type: { - start: 'Date', - end: 'Date' - } - }); - } - - // set items - this.itemsData = newDataSet; - this.linegraph && this.linegraph.setItems(newDataSet); - - if (initialLoad) { - if (this.options.start != undefined || this.options.end != undefined) { - var start = this.options.start != undefined ? this.options.start : null; - var end = this.options.end != undefined ? this.options.end : null; - - this.setWindow(start, end, {animate: false}); - } - else { - this.fit({animate: false}); - } - } - }; - - /** - * Set groups - * @param {vis.DataSet | Array | google.visualization.DataTable} groups - */ - Graph2d.prototype.setGroups = function(groups) { - // convert to type DataSet when needed - var newDataSet; - if (!groups) { - newDataSet = null; - } - else if (groups instanceof DataSet || groups instanceof DataView) { - newDataSet = groups; - } - else { - // turn an array into a dataset - newDataSet = new DataSet(groups); - } - - this.groupsData = newDataSet; - this.linegraph.setGroups(newDataSet); - }; - - /** - * Returns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right). - * @param groupId - * @param width - * @param height - */ - Graph2d.prototype.getLegend = function(groupId, width, height) { - if (width === undefined) {width = 15;} - if (height === undefined) {height = 15;} - if (this.linegraph.groups[groupId] !== undefined) { - return this.linegraph.groups[groupId].getLegend(width,height); - } - else { - return "cannot find group:" + groupId; - } - } - - /** - * This checks if the visible option of the supplied group (by ID) is true or false. - * @param groupId - * @returns {*} - */ - Graph2d.prototype.isGroupVisible = function(groupId) { - if (this.linegraph.groups[groupId] !== undefined) { - return (this.linegraph.groups[groupId].visible && (this.linegraph.options.groups.visibility[groupId] === undefined || this.linegraph.options.groups.visibility[groupId] == true)); - } - else { - return false; - } - } - - - /** - * Get the data range of the item set. - * @returns {{min: Date, max: Date}} range A range with a start and end Date. - * When no minimum is found, min==null - * When no maximum is found, max==null - */ - Graph2d.prototype.getItemRange = function() { - var min = null; - var max = null; - - // calculate min from start filed - for (var groupId in this.linegraph.groups) { - if (this.linegraph.groups.hasOwnProperty(groupId)) { - if (this.linegraph.groups[groupId].visible == true) { - for (var i = 0; i < this.linegraph.groups[groupId].itemsData.length; i++) { - var item = this.linegraph.groups[groupId].itemsData[i]; - var value = util.convert(item.x, 'Date').valueOf(); - min = min == null ? value : min > value ? value : min; - max = max == null ? value : max < value ? value : max; - } - } - } - } - - return { - min: (min != null) ? new Date(min) : null, - max: (max != null) ? new Date(max) : null - }; - }; - - - - module.exports = Graph2d; - - -/***/ }, -/* 15 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Created by Alex on 10/3/2014. - */ - var moment = __webpack_require__(44); - - - /** - * used in Core to convert the options into a volatile variable - * - * @param Core - */ - exports.convertHiddenOptions = function(body, hiddenDates) { - body.hiddenDates = []; - if (hiddenDates) { - if (Array.isArray(hiddenDates) == true) { - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].repeat === undefined) { - var dateItem = {}; - dateItem.start = moment(hiddenDates[i].start).toDate().valueOf(); - dateItem.end = moment(hiddenDates[i].end).toDate().valueOf(); - body.hiddenDates.push(dateItem); - } - } - body.hiddenDates.sort(function (a, b) { - return a.start - b.start; - }); // sort by start time - } - } - }; - - - /** - * create new entrees for the repeating hidden dates - * @param body - * @param hiddenDates - */ - exports.updateHiddenDates = function (body, hiddenDates) { - if (hiddenDates && body.domProps.centerContainer.width !== undefined) { - exports.convertHiddenOptions(body, hiddenDates); - - var start = moment(body.range.start); - var end = moment(body.range.end); - - var totalRange = (body.range.end - body.range.start); - var pixelTime = totalRange / body.domProps.centerContainer.width; - - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].repeat !== undefined) { - var startDate = moment(hiddenDates[i].start); - var endDate = moment(hiddenDates[i].end); - - if (startDate._d == "Invalid Date") { - throw new Error("Supplied start date is not valid: " + hiddenDates[i].start); - } - if (endDate._d == "Invalid Date") { - throw new Error("Supplied end date is not valid: " + hiddenDates[i].end); - } - - var duration = endDate - startDate; - if (duration >= 4 * pixelTime) { - - var offset = 0; - var runUntil = end.clone(); - switch (hiddenDates[i].repeat) { - case "daily": // case of time - if (startDate.day() != endDate.day()) { - offset = 1; - } - startDate.dayOfYear(start.dayOfYear()); - startDate.year(start.year()); - startDate.subtract(7,'days'); - - endDate.dayOfYear(start.dayOfYear()); - endDate.year(start.year()); - endDate.subtract(7 - offset,'days'); - - runUntil.add(1, 'weeks'); - break; - case "weekly": - var dayOffset = endDate.diff(startDate,'days') - var day = startDate.day(); - - // set the start date to the range.start - startDate.date(start.date()); - startDate.month(start.month()); - startDate.year(start.year()); - endDate = startDate.clone(); - - // force - startDate.day(day); - endDate.day(day); - endDate.add(dayOffset,'days'); - - startDate.subtract(1,'weeks'); - endDate.subtract(1,'weeks'); - - runUntil.add(1, 'weeks'); - break - case "monthly": - if (startDate.month() != endDate.month()) { - offset = 1; - } - startDate.month(start.month()); - startDate.year(start.year()); - startDate.subtract(1,'months'); - - endDate.month(start.month()); - endDate.year(start.year()); - endDate.subtract(1,'months'); - endDate.add(offset,'months'); - - runUntil.add(1, 'months'); - break; - case "yearly": - if (startDate.year() != endDate.year()) { - offset = 1; - } - startDate.year(start.year()); - startDate.subtract(1,'years'); - endDate.year(start.year()); - endDate.subtract(1,'years'); - endDate.add(offset,'years'); - - runUntil.add(1, 'years'); - break; - default: - console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); - return; - } - while (startDate < runUntil) { - body.hiddenDates.push({start: startDate.valueOf(), end: endDate.valueOf()}); - switch (hiddenDates[i].repeat) { - case "daily": - startDate.add(1, 'days'); - endDate.add(1, 'days'); - break; - case "weekly": - startDate.add(1, 'weeks'); - endDate.add(1, 'weeks'); - break - case "monthly": - startDate.add(1, 'months'); - endDate.add(1, 'months'); - break; - case "yearly": - startDate.add(1, 'y'); - endDate.add(1, 'y'); - break; - default: - console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); - return; - } - } - body.hiddenDates.push({start: startDate.valueOf(), end: endDate.valueOf()}); - } - } - } - // remove duplicates, merge where possible - exports.removeDuplicates(body); - // ensure the new positions are not on hidden dates - var startHidden = exports.isHidden(body.range.start, body.hiddenDates); - var endHidden = exports.isHidden(body.range.end,body.hiddenDates); - var rangeStart = body.range.start; - var rangeEnd = body.range.end; - if (startHidden.hidden == true) {rangeStart = body.range.startToFront == true ? startHidden.startDate - 1 : startHidden.endDate + 1;} - if (endHidden.hidden == true) {rangeEnd = body.range.endToFront == true ? endHidden.startDate - 1 : endHidden.endDate + 1;} - if (startHidden.hidden == true || endHidden.hidden == true) { - body.range._applyRange(rangeStart, rangeEnd); - } - } - - } - - - /** - * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up. - * Scales with N^2 - * @param body - */ - exports.removeDuplicates = function(body) { - var hiddenDates = body.hiddenDates; - var safeDates = []; - for (var i = 0; i < hiddenDates.length; i++) { - for (var j = 0; j < hiddenDates.length; j++) { - if (i != j && hiddenDates[j].remove != true && hiddenDates[i].remove != true) { - // j inside i - if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { - hiddenDates[j].remove = true; - } - // j start inside i - else if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].start <= hiddenDates[i].end) { - hiddenDates[i].end = hiddenDates[j].end; - hiddenDates[j].remove = true; - } - // j end inside i - else if (hiddenDates[j].end >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { - hiddenDates[i].start = hiddenDates[j].start; - hiddenDates[j].remove = true; - } - } - } - } - - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].remove !== true) { - safeDates.push(hiddenDates[i]); - } - } - - body.hiddenDates = safeDates; - body.hiddenDates.sort(function (a, b) { - return a.start - b.start; - }); // sort by start time - } - - exports.printDates = function(dates) { - for (var i =0; i < dates.length; i++) { - console.log(i, new Date(dates[i].start),new Date(dates[i].end), dates[i].start, dates[i].end, dates[i].remove); - } - } - - /** - * Used in TimeStep to avoid the hidden times. - * @param timeStep - * @param previousTime - */ - exports.stepOverHiddenDates = function(timeStep, previousTime) { - var stepInHidden = false; - var currentValue = timeStep.current.valueOf(); - for (var i = 0; i < timeStep.hiddenDates.length; i++) { - var startDate = timeStep.hiddenDates[i].start; - var endDate = timeStep.hiddenDates[i].end; - if (currentValue >= startDate && currentValue < endDate) { - stepInHidden = true; - break; - } - } - - if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) { - var prevValue = moment(previousTime); - var newValue = moment(endDate); - //check if the next step should be major - if (prevValue.year() != newValue.year()) {timeStep.switchedYear = true;} - else if (prevValue.month() != newValue.month()) {timeStep.switchedMonth = true;} - else if (prevValue.dayOfYear() != newValue.dayOfYear()) {timeStep.switchedDay = true;} - - timeStep.current = newValue.toDate(); - } - }; - - - ///** - // * Used in TimeStep to avoid the hidden times. - // * @param timeStep - // * @param previousTime - // */ - //exports.checkFirstStep = function(timeStep) { - // var stepInHidden = false; - // var currentValue = timeStep.current.valueOf(); - // for (var i = 0; i < timeStep.hiddenDates.length; i++) { - // var startDate = timeStep.hiddenDates[i].start; - // var endDate = timeStep.hiddenDates[i].end; - // if (currentValue >= startDate && currentValue < endDate) { - // stepInHidden = true; - // break; - // } - // } - // - // if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) { - // var newValue = moment(endDate); - // timeStep.current = newValue.toDate(); - // } - //}; - - /** - * replaces the Core toScreen methods - * @param Core - * @param time - * @param width - * @returns {number} - */ - exports.toScreen = function(Core, time, width) { - if (Core.body.hiddenDates.length == 0) { - var conversion = Core.range.conversion(width); - return (time.valueOf() - conversion.offset) * conversion.scale; - } - else { - var hidden = exports.isHidden(time, Core.body.hiddenDates) - if (hidden.hidden == true) { - time = hidden.startDate; - } - - var duration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); - time = exports.correctTimeForHidden(Core.body.hiddenDates, Core.range, time); - - var conversion = Core.range.conversion(width, duration); - return (time.valueOf() - conversion.offset) * conversion.scale; - } - }; - - - /** - * Replaces the core toTime methods - * @param body - * @param range - * @param x - * @param width - * @returns {Date} - */ - exports.toTime = function(Core, x, width) { - if (Core.body.hiddenDates.length == 0) { - var conversion = Core.range.conversion(width); - return new Date(x / conversion.scale + conversion.offset); - } - else { - var hiddenDuration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); - var totalDuration = Core.range.end - Core.range.start - hiddenDuration; - var partialDuration = totalDuration * x / width; - var accumulatedHiddenDuration = exports.getAccumulatedHiddenDuration(Core.body.hiddenDates, Core.range, partialDuration); - - var newTime = new Date(accumulatedHiddenDuration + partialDuration + Core.range.start); - return newTime; - } - }; - - - /** - * Support function - * - * @param hiddenDates - * @param range - * @returns {number} - */ - exports.getHiddenDurationBetween = function(hiddenDates, start, end) { - var duration = 0; - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= start && endDate < end) { - duration += endDate - startDate; - } - } - return duration; - }; - - - /** - * Support function - * @param hiddenDates - * @param range - * @param time - * @returns {{duration: number, time: *, offset: number}} - */ - exports.correctTimeForHidden = function(hiddenDates, range, time) { - time = moment(time).toDate().valueOf(); - time -= exports.getHiddenDurationBefore(hiddenDates,range,time); - return time; - }; - - exports.getHiddenDurationBefore = function(hiddenDates, range, time) { - var timeOffset = 0; - time = moment(time).toDate().valueOf(); - - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= range.start && endDate < range.end) { - if (time >= endDate) { - timeOffset += (endDate - startDate); - } - } - } - return timeOffset; - } - - /** - * sum the duration from start to finish, including the hidden duration, - * until the required amount has been reached, return the accumulated hidden duration - * @param hiddenDates - * @param range - * @param time - * @returns {{duration: number, time: *, offset: number}} - */ - exports.getAccumulatedHiddenDuration = function(hiddenDates, range, requiredDuration) { - var hiddenDuration = 0; - var duration = 0; - var previousPoint = range.start; - //exports.printDates(hiddenDates) - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= range.start && endDate < range.end) { - duration += startDate - previousPoint; - previousPoint = endDate; - if (duration >= requiredDuration) { - break; - } - else { - hiddenDuration += endDate - startDate; - } - } - } - - return hiddenDuration; - }; - - - - /** - * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true - * @param hiddenDates - * @param time - * @param direction - * @param correctionEnabled - * @returns {*} - */ - exports.snapAwayFromHidden = function(hiddenDates, time, direction, correctionEnabled) { - var isHidden = exports.isHidden(time, hiddenDates); - if (isHidden.hidden == true) { - if (direction < 0) { - if (correctionEnabled == true) { - return isHidden.startDate - (isHidden.endDate - time) - 1; - } - else { - return isHidden.startDate - 1; - } - } - else { - if (correctionEnabled == true) { - return isHidden.endDate + (time - isHidden.startDate) + 1; - } - else { - return isHidden.endDate + 1; - } - } - } - else { - return time; - } - - } - - - /** - * Check if a time is hidden - * - * @param time - * @param hiddenDates - * @returns {{hidden: boolean, startDate: Window.start, endDate: *}} - */ - exports.isHidden = function(time, hiddenDates) { - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - - if (time >= startDate && time < endDate) { // if the start is entering a hidden zone - return {hidden: true, startDate: startDate, endDate: endDate}; - break; - } - } - return {hidden: false, startDate: startDate, endDate: endDate}; - } - -/***/ }, -/* 16 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * @constructor DataStep - * The class DataStep is an iterator for data for the lineGraph. You provide a start data point and an - * end data point. The class itself determines the best scale (step size) based on the - * provided start Date, end Date, and minimumStep. - * - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * - * Alternatively, you can set a scale by hand. - * After creation, you can initialize the class by executing first(). Then you - * can iterate from the start date to the end date via next(). You can check if - * the end date is reached with the function hasNext(). After each step, you can - * retrieve the current date via getCurrent(). - * The DataStep has scales ranging from milliseconds, seconds, minutes, hours, - * days, to years. - * - * Version: 1.2 - * - * @param {Date} [start] The start date, for example new Date(2010, 9, 21) - * or new Date(2010, 9, 21, 23, 45, 00) - * @param {Date} [end] The end date - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds - */ - function DataStep(start, end, minimumStep, containerHeight, customRange, alignZeros) { - // variables - this.current = 0; - - this.autoScale = true; - this.stepIndex = 0; - this.step = 1; - this.scale = 1; - - this.marginStart; - this.marginEnd; - this.deadSpace = 0; - - this.majorSteps = [1, 2, 5, 10]; - this.minorSteps = [0.25, 0.5, 1, 2]; - - this.alignZeros = alignZeros; - - this.setRange(start, end, minimumStep, containerHeight, customRange); - } - - - - /** - * Set a new range - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * @param {Number} [start] The start date and time. - * @param {Number} [end] The end date and time. - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds - */ - DataStep.prototype.setRange = function(start, end, minimumStep, containerHeight, customRange) { - this._start = customRange.min === undefined ? start : customRange.min; - this._end = customRange.max === undefined ? end : customRange.max; - - if (this._start == this._end) { - this._start -= 0.75; - this._end += 1; - } - - if (this.autoScale == true) { - this.setMinimumStep(minimumStep, containerHeight); - } - - this.setFirst(customRange); - }; - - /** - * Automatically determine the scale that bests fits the provided minimum step - * @param {Number} [minimumStep] The minimum step size in milliseconds - */ - DataStep.prototype.setMinimumStep = function(minimumStep, containerHeight) { - // round to floor - var size = this._end - this._start; - var safeSize = size * 1.2; - var minimumStepValue = minimumStep * (safeSize / containerHeight); - var orderOfMagnitude = Math.round(Math.log(safeSize)/Math.LN10); - - var minorStepIdx = -1; - var magnitudefactor = Math.pow(10,orderOfMagnitude); - - var start = 0; - if (orderOfMagnitude < 0) { - start = orderOfMagnitude; - } - - var solutionFound = false; - for (var i = start; Math.abs(i) <= Math.abs(orderOfMagnitude); i++) { - magnitudefactor = Math.pow(10,i); - for (var j = 0; j < this.minorSteps.length; j++) { - var stepSize = magnitudefactor * this.minorSteps[j]; - if (stepSize >= minimumStepValue) { - solutionFound = true; - minorStepIdx = j; - break; - } - } - if (solutionFound == true) { - break; - } - } - this.stepIndex = minorStepIdx; - this.scale = magnitudefactor; - this.step = magnitudefactor * this.minorSteps[minorStepIdx]; - }; - - - - /** - * Round the current date to the first minor date value - * This must be executed once when the current date is set to start Date - */ - DataStep.prototype.setFirst = function(customRange) { - if (customRange === undefined) { - customRange = {}; - } - - var niceStart = customRange.min === undefined ? this._start - (this.scale * 2 * this.minorSteps[this.stepIndex]) : customRange.min; - var niceEnd = customRange.max === undefined ? this._end + (this.scale * this.minorSteps[this.stepIndex]) : customRange.max; - - this.marginEnd = customRange.max === undefined ? this.roundToMinor(niceEnd) : customRange.max; - this.marginStart = customRange.min === undefined ? this.roundToMinor(niceStart) : customRange.min; - - // if we need to align the zero's we need to make sure that there is a zero to use. - if (this.alignZeros == true && (this.marginEnd - this.marginStart) % this.step != 0) { - this.marginEnd += this.marginEnd % this.step; - } - - this.deadSpace = this.roundToMinor(niceEnd) - niceEnd + this.roundToMinor(niceStart) - niceStart; - this.marginRange = this.marginEnd - this.marginStart; - - - this.current = this.marginEnd; - }; - - DataStep.prototype.roundToMinor = function(value) { - var rounded = value - (value % (this.scale * this.minorSteps[this.stepIndex])); - if (value % (this.scale * this.minorSteps[this.stepIndex]) > 0.5 * (this.scale * this.minorSteps[this.stepIndex])) { - return rounded + (this.scale * this.minorSteps[this.stepIndex]); - } - else { - return rounded; - } - } - - - /** - * Check if the there is a next step - * @return {boolean} true if the current date has not passed the end date - */ - DataStep.prototype.hasNext = function () { - return (this.current >= this.marginStart); - }; - - /** - * Do the next step - */ - DataStep.prototype.next = function() { - var prev = this.current; - this.current -= this.step; - - // safety mechanism: if current time is still unchanged, move to the end - if (this.current == prev) { - this.current = this._end; - } - }; - - /** - * Do the next step - */ - DataStep.prototype.previous = function() { - this.current += this.step; - this.marginEnd += this.step; - this.marginRange = this.marginEnd - this.marginStart; - }; - - - - /** - * Get the current datetime - * @return {String} current The current date - */ - DataStep.prototype.getCurrent = function(decimals) { - var toPrecision = '' + Number(this.current).toPrecision(5); - // If decimals is specified, then limit or extend the string as required - if(decimals !== undefined && !isNaN(Number(decimals))) { - // If string includes exponent, then we need to add it to the end - var exp = ""; - var index = toPrecision.indexOf("e"); - if(index != -1) { - // Get the exponent - exp = toPrecision.slice(index); - // Remove the exponent in case we need to zero-extend - toPrecision = toPrecision.slice(0, index); - } - index = Math.max(toPrecision.indexOf(","), toPrecision.indexOf(".")); - if(index === -1) { - // No decimal found - if we want decimals, then we need to add it - if(decimals !== 0) { - toPrecision += '.'; - } - // Calculate how long the string should be - index = toPrecision.length + decimals; - } - else if(decimals !== 0) { - // Calculate how long the string should be - accounting for the decimal place - index += decimals + 1; - } - if(index > toPrecision.length) { - // We need to add zeros! - for(var cnt = index - toPrecision.length; cnt > 0; cnt--) { - toPrecision += '0'; - } - } - else { - // we need to remove characters - toPrecision = toPrecision.slice(0, index); - } - // Add the exponent if there is one - toPrecision += exp; - } - else { - if (toPrecision.indexOf(",") != -1 || toPrecision.indexOf(".") != -1) { - // If no decimal is specified, and there are decimal places, remove trailing zeros - for (var i = toPrecision.length - 1; i > 0; i--) { - if (toPrecision[i] == "0") { - toPrecision = toPrecision.slice(0, i); - } - else if (toPrecision[i] == "." || toPrecision[i] == ",") { - toPrecision = toPrecision.slice(0, i); - break; - } - else { - break; - } - } - } - } - - return toPrecision; - }; - - - - /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate - */ - DataStep.prototype.snap = function(date) { - - }; - - /** - * Check if the current value is a major value (for example when the step - * is DAY, a major value is each first day of the MONTH) - * @return {boolean} true if current date is major, else false. - */ - DataStep.prototype.isMajor = function() { - return (this.current % (this.scale * this.majorSteps[this.stepIndex]) == 0); - }; - - module.exports = DataStep; - - -/***/ }, -/* 17 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var hammerUtil = __webpack_require__(47); - var moment = __webpack_require__(44); - var Component = __webpack_require__(20); - var DateUtil = __webpack_require__(15); - - /** - * @constructor Range - * A Range controls a numeric range with a start and end value. - * The Range adjusts the range based on mouse events or programmatic changes, - * and triggers events when the range is changing or has been changed. - * @param {{dom: Object, domProps: Object, emitter: Emitter}} body - * @param {Object} [options] See description at Range.setOptions - */ - function Range(body, options) { - var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0); - this.start = now.clone().add(-3, 'days').valueOf(); // Number - this.end = now.clone().add(4, 'days').valueOf(); // Number - - this.body = body; - this.deltaDifference = 0; - this.scaleOffset = 0; - this.startToFront = false; - this.endToFront = true; - - // default options - this.defaultOptions = { - start: null, - end: null, - direction: 'horizontal', // 'horizontal' or 'vertical' - moveable: true, - zoomable: true, - min: null, - max: null, - zoomMin: 10, // milliseconds - zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000 // milliseconds - }; - this.options = util.extend({}, this.defaultOptions); - - this.props = { - touch: {} - }; - this.animateTimer = null; - - // drag listeners for dragging - this.body.emitter.on('dragstart', this._onDragStart.bind(this)); - this.body.emitter.on('drag', this._onDrag.bind(this)); - this.body.emitter.on('dragend', this._onDragEnd.bind(this)); - - // ignore dragging when holding - this.body.emitter.on('hold', this._onHold.bind(this)); - - // mouse wheel for zooming - this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this)); - this.body.emitter.on('DOMMouseScroll', this._onMouseWheel.bind(this)); // For FF - - // pinch to zoom - this.body.emitter.on('touch', this._onTouch.bind(this)); - this.body.emitter.on('pinch', this._onPinch.bind(this)); - - this.setOptions(options); - } - - Range.prototype = new Component(); - - /** - * Set options for the range controller - * @param {Object} options Available options: - * {Number | Date | String} start Start date for the range - * {Number | Date | String} end End date for the range - * {Number} min Minimum value for start - * {Number} max Maximum value for end - * {Number} zoomMin Set a minimum value for - * (end - start). - * {Number} zoomMax Set a maximum value for - * (end - start). - * {Boolean} moveable Enable moving of the range - * by dragging. True by default - * {Boolean} zoomable Enable zooming of the range - * by pinching/scrolling. True by default - */ - Range.prototype.setOptions = function (options) { - if (options) { - // copy the options that we know - var fields = ['direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable', 'activate', 'hiddenDates']; - util.selectiveExtend(fields, this.options, options); - - if ('start' in options || 'end' in options) { - // apply a new range. both start and end are optional - this.setRange(options.start, options.end); - } - } - }; - - /** - * Test whether direction has a valid value - * @param {String} direction 'horizontal' or 'vertical' - */ - function validateDirection (direction) { - if (direction != 'horizontal' && direction != 'vertical') { - throw new TypeError('Unknown direction "' + direction + '". ' + - 'Choose "horizontal" or "vertical".'); - } - } - - /** - * Set a new start and end range - * @param {Date | Number | String} [start] - * @param {Date | Number | String} [end] - * @param {boolean | number} [animate=false] If true, the range is animated - * smoothly to the new window. - * If animate is a number, the - * number is taken as duration - * Default duration is 500 ms. - * - */ - Range.prototype.setRange = function(start, end, animate) { - var _start = start != undefined ? util.convert(start, 'Date').valueOf() : null; - var _end = end != undefined ? util.convert(end, 'Date').valueOf() : null; - this._cancelAnimation(); - - if (animate) { - var me = this; - var initStart = this.start; - var initEnd = this.end; - var duration = typeof animate === 'number' ? animate : 500; - var initTime = new Date().valueOf(); - var anyChanged = false; - - var next = function () { - if (!me.props.touch.dragging) { - var now = new Date().valueOf(); - var time = now - initTime; - var done = time > duration; - var s = (done || _start === null) ? _start : util.easeInOutQuad(time, initStart, _start, duration); - var e = (done || _end === null) ? _end : util.easeInOutQuad(time, initEnd, _end, duration); - - changed = me._applyRange(s, e); - DateUtil.updateHiddenDates(me.body, me.options.hiddenDates); - anyChanged = anyChanged || changed; - if (changed) { - me.body.emitter.emit('rangechange', {start: new Date(me.start), end: new Date(me.end)}); - } - - if (done) { - if (anyChanged) { - me.body.emitter.emit('rangechanged', {start: new Date(me.start), end: new Date(me.end)}); - } - } - else { - // animate with as high as possible frame rate, leave 20 ms in between - // each to prevent the browser from blocking - me.animateTimer = setTimeout(next, 20); - } - } - } - - return next(); - } - else { - var changed = this._applyRange(_start, _end); - DateUtil.updateHiddenDates(this.body, this.options.hiddenDates); - if (changed) { - var params = {start: new Date(this.start), end: new Date(this.end)}; - this.body.emitter.emit('rangechange', params); - this.body.emitter.emit('rangechanged', params); - } - } - }; - - /** - * Stop an animation - * @private - */ - Range.prototype._cancelAnimation = function () { - if (this.animateTimer) { - clearTimeout(this.animateTimer); - this.animateTimer = null; - } - }; - - /** - * Set a new start and end range. This method is the same as setRange, but - * does not trigger a range change and range changed event, and it returns - * true when the range is changed - * @param {Number} [start] - * @param {Number} [end] - * @return {Boolean} changed - * @private - */ - Range.prototype._applyRange = function(start, end) { - var newStart = (start != null) ? util.convert(start, 'Date').valueOf() : this.start, - newEnd = (end != null) ? util.convert(end, 'Date').valueOf() : this.end, - max = (this.options.max != null) ? util.convert(this.options.max, 'Date').valueOf() : null, - min = (this.options.min != null) ? util.convert(this.options.min, 'Date').valueOf() : null, - diff; - - // check for valid number - if (isNaN(newStart) || newStart === null) { - throw new Error('Invalid start "' + start + '"'); - } - if (isNaN(newEnd) || newEnd === null) { - throw new Error('Invalid end "' + end + '"'); - } - - // prevent start < end - if (newEnd < newStart) { - newEnd = newStart; - } - - // prevent start < min - if (min !== null) { - if (newStart < min) { - diff = (min - newStart); - newStart += diff; - newEnd += diff; - - // prevent end > max - if (max != null) { - if (newEnd > max) { - newEnd = max; - } - } - } - } - - // prevent end > max - if (max !== null) { - if (newEnd > max) { - diff = (newEnd - max); - newStart -= diff; - newEnd -= diff; - - // prevent start < min - if (min != null) { - if (newStart < min) { - newStart = min; - } - } - } - } - - // prevent (end-start) < zoomMin - if (this.options.zoomMin !== null) { - var zoomMin = parseFloat(this.options.zoomMin); - if (zoomMin < 0) { - zoomMin = 0; - } - if ((newEnd - newStart) < zoomMin) { - if ((this.end - this.start) === zoomMin) { - // ignore this action, we are already zoomed to the minimum - newStart = this.start; - newEnd = this.end; - } - else { - // zoom to the minimum - diff = (zoomMin - (newEnd - newStart)); - newStart -= diff / 2; - newEnd += diff / 2; - } - } - } - - // prevent (end-start) > zoomMax - if (this.options.zoomMax !== null) { - var zoomMax = parseFloat(this.options.zoomMax); - if (zoomMax < 0) { - zoomMax = 0; - } - if ((newEnd - newStart) > zoomMax) { - if ((this.end - this.start) === zoomMax) { - // ignore this action, we are already zoomed to the maximum - newStart = this.start; - newEnd = this.end; - } - else { - // zoom to the maximum - diff = ((newEnd - newStart) - zoomMax); - newStart += diff / 2; - newEnd -= diff / 2; - } - } - } - - var changed = (this.start != newStart || this.end != newEnd); - - // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not neccesarily of type Range) - if (!((newStart >= this.start && newStart <= this.end) || (newEnd >= this.start && newEnd <= this.end)) && - !((this.start >= newStart && this.start <= newEnd) || (this.end >= newStart && this.end <= newEnd) )) { - this.body.emitter.emit('checkRangedItems'); - } - - this.start = newStart; - this.end = newEnd; - return changed; - }; - - /** - * Retrieve the current range. - * @return {Object} An object with start and end properties - */ - Range.prototype.getRange = function() { - return { - start: this.start, - end: this.end - }; - }; - - /** - * Calculate the conversion offset and scale for current range, based on - * the provided width - * @param {Number} width - * @returns {{offset: number, scale: number}} conversion - */ - Range.prototype.conversion = function (width, totalHidden) { - return Range.conversion(this.start, this.end, width, totalHidden); - }; - - /** - * Static method to calculate the conversion offset and scale for a range, - * based on the provided start, end, and width - * @param {Number} start - * @param {Number} end - * @param {Number} width - * @returns {{offset: number, scale: number}} conversion - */ - Range.conversion = function (start, end, width, totalHidden) { - if (totalHidden === undefined) { - totalHidden = 0; - } - if (width != 0 && (end - start != 0)) { - return { - offset: start, - scale: width / (end - start - totalHidden) - } - } - else { - return { - offset: 0, - scale: 1 - }; - } - }; - - /** - * Start dragging horizontally or vertically - * @param {Event} event - * @private - */ - Range.prototype._onDragStart = function(event) { - this.deltaDifference = 0; - this.previousDelta = 0; - // only allow dragging when configured as movable - if (!this.options.moveable) return; - - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; - - this.props.touch.start = this.start; - this.props.touch.end = this.end; - this.props.touch.dragging = true; - - if (this.body.dom.root) { - this.body.dom.root.style.cursor = 'move'; - } - }; - - /** - * Perform dragging operation - * @param {Event} event - * @private - */ - Range.prototype._onDrag = function (event) { - // only allow dragging when configured as movable - if (!this.options.moveable) return; - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; - - var direction = this.options.direction; - validateDirection(direction); - - var delta = (direction == 'horizontal') ? event.gesture.deltaX : event.gesture.deltaY; - delta -= this.deltaDifference; - var interval = (this.props.touch.end - this.props.touch.start); - - // normalize dragging speed if cutout is in between. - var duration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - interval -= duration; - - var width = (direction == 'horizontal') ? this.body.domProps.center.width : this.body.domProps.center.height; - var diffRange = -delta / width * interval; - var newStart = this.props.touch.start + diffRange; - var newEnd = this.props.touch.end + diffRange; - - - // snapping times away from hidden zones - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, this.previousDelta-delta, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, this.previousDelta-delta, true); - if (safeStart != newStart || safeEnd != newEnd) { - this.deltaDifference += delta; - this.props.touch.start = safeStart; - this.props.touch.end = safeEnd; - this._onDrag(event); - return; - } - - this.previousDelta = delta; - this._applyRange(newStart, newEnd); - - // fire a rangechange event - this.body.emitter.emit('rangechange', { - start: new Date(this.start), - end: new Date(this.end) - }); - }; - - /** - * Stop dragging operation - * @param {event} event - * @private - */ - Range.prototype._onDragEnd = function (event) { - // only allow dragging when configured as movable - if (!this.options.moveable) return; - - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; - - this.props.touch.dragging = false; - if (this.body.dom.root) { - this.body.dom.root.style.cursor = 'auto'; - } - - // fire a rangechanged event - this.body.emitter.emit('rangechanged', { - start: new Date(this.start), - end: new Date(this.end) - }); - }; - - /** - * Event handler for mouse wheel event, used to zoom - * Code from http://adomas.org/javascript-mouse-wheel/ - * @param {Event} event - * @private - */ - Range.prototype._onMouseWheel = function(event) { - // only allow zooming when configured as zoomable and moveable - if (!(this.options.zoomable && this.options.moveable)) return; - - // retrieve delta - var delta = 0; - if (event.wheelDelta) { /* IE/Opera. */ - delta = event.wheelDelta / 120; - } else if (event.detail) { /* Mozilla case. */ - // In Mozilla, sign of delta is different than in IE. - // Also, delta is multiple of 3. - delta = -event.detail / 3; - } - - // If delta is nonzero, handle it. - // Basically, delta is now positive if wheel was scrolled up, - // and negative, if wheel was scrolled down. - if (delta) { - // perform the zoom action. Delta is normally 1 or -1 - - // adjust a negative delta such that zooming in with delta 0.1 - // equals zooming out with a delta -0.1 - var scale; - if (delta < 0) { - scale = 1 - (delta / 5); - } - else { - scale = 1 / (1 + (delta / 5)) ; - } - - // calculate center, the date to zoom around - var gesture = hammerUtil.fakeGesture(this, event), - pointer = getPointer(gesture.center, this.body.dom.center), - pointerDate = this._pointerToDate(pointer); - - this.zoom(scale, pointerDate, delta); - } - - // Prevent default actions caused by mouse wheel - // (else the page and timeline both zoom and scroll) - event.preventDefault(); - }; - - /** - * Start of a touch gesture - * @private - */ - Range.prototype._onTouch = function (event) { - this.props.touch.start = this.start; - this.props.touch.end = this.end; - this.props.touch.allowDragging = true; - this.props.touch.center = null; - this.scaleOffset = 0; - this.deltaDifference = 0; - }; - - /** - * On start of a hold gesture - * @private - */ - Range.prototype._onHold = function () { - this.props.touch.allowDragging = false; - }; - - /** - * Handle pinch event - * @param {Event} event - * @private - */ - Range.prototype._onPinch = function (event) { - // only allow zooming when configured as zoomable and moveable - if (!(this.options.zoomable && this.options.moveable)) return; - - this.props.touch.allowDragging = false; - - if (event.gesture.touches.length > 1) { - if (!this.props.touch.center) { - this.props.touch.center = getPointer(event.gesture.center, this.body.dom.center); - } - - var scale = 1 / (event.gesture.scale + this.scaleOffset); - var centerDate = this._pointerToDate(this.props.touch.center); - - var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.body.hiddenDates, this, centerDate); - var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; - - // calculate new start and end - var newStart = (centerDate - hiddenDurationBefore) + (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale; - var newEnd = (centerDate + hiddenDurationAfter) + (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale; - - // snapping times away from hidden zones - this.startToFront = 1 - scale > 0 ? false : true; // used to do the right autocorrection with periodic hidden times - this.endToFront = scale - 1 > 0 ? false : true; // used to do the right autocorrection with periodic hidden times - - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, 1 - scale, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, scale - 1, true); - if (safeStart != newStart || safeEnd != newEnd) { - this.props.touch.start = safeStart; - this.props.touch.end = safeEnd; - this.scaleOffset = 1 - event.gesture.scale; - newStart = safeStart; - newEnd = safeEnd; - } - - this.setRange(newStart, newEnd); - - this.startToFront = false; // revert to default - this.endToFront = true; // revert to default - } - }; - - /** - * Helper function to calculate the center date for zooming - * @param {{x: Number, y: Number}} pointer - * @return {number} date - * @private - */ - Range.prototype._pointerToDate = function (pointer) { - var conversion; - var direction = this.options.direction; - - validateDirection(direction); - - if (direction == 'horizontal') { - return this.body.util.toTime(pointer.x).valueOf(); - } - else { - var height = this.body.domProps.center.height; - conversion = this.conversion(height); - return pointer.y / conversion.scale + conversion.offset; - } - }; - - /** - * Get the pointer location relative to the location of the dom element - * @param {{pageX: Number, pageY: Number}} touch - * @param {Element} element HTML DOM element - * @return {{x: Number, y: Number}} pointer - * @private - */ - function getPointer (touch, element) { - return { - x: touch.pageX - util.getAbsoluteLeft(element), - y: touch.pageY - util.getAbsoluteTop(element) - }; - } - - /** - * Zoom the range the given scale in or out. Start and end date will - * be adjusted, and the timeline will be redrawn. You can optionally give a - * date around which to zoom. - * For example, try scale = 0.9 or 1.1 - * @param {Number} scale Scaling factor. Values above 1 will zoom out, - * values below 1 will zoom in. - * @param {Number} [center] Value representing a date around which will - * be zoomed. - */ - Range.prototype.zoom = function(scale, center, delta) { - // if centerDate is not provided, take it half between start Date and end Date - if (center == null) { - center = (this.start + this.end) / 2; - } - - var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.body.hiddenDates, this, center); - var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; - - // calculate new start and end - var newStart = (center-hiddenDurationBefore) + (this.start - (center-hiddenDurationBefore)) * scale; - var newEnd = (center+hiddenDurationAfter) + (this.end - (center+hiddenDurationAfter)) * scale; - - // snapping times away from hidden zones - this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times - this.endToFront = -delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, delta, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, -delta, true); - if (safeStart != newStart || safeEnd != newEnd) { - newStart = safeStart; - newEnd = safeEnd; - } - - this.setRange(newStart, newEnd); - - this.startToFront = false; // revert to default - this.endToFront = true; // revert to default - }; - - - - /** - * Move the range with a given delta to the left or right. Start and end - * value will be adjusted. For example, try delta = 0.1 or -0.1 - * @param {Number} delta Moving amount. Positive value will move right, - * negative value will move left - */ - Range.prototype.move = function(delta) { - // zoom start Date and end Date relative to the centerDate - var diff = (this.end - this.start); - - // apply new values - var newStart = this.start + diff * delta; - var newEnd = this.end + diff * delta; - - // TODO: reckon with min and max range - - this.start = newStart; - this.end = newEnd; - }; - - /** - * Move the range to a new center point - * @param {Number} moveTo New center point of the range - */ - Range.prototype.moveTo = function(moveTo) { - var center = (this.start + this.end) / 2; - - var diff = center - moveTo; - - // calculate new start and end - var newStart = this.start - diff; - var newEnd = this.end - diff; - - this.setRange(newStart, newEnd); - }; - - module.exports = Range; - - -/***/ }, -/* 18 */ -/***/ function(module, exports, __webpack_require__) { - - // Utility functions for ordering and stacking of items - var EPSILON = 0.001; // used when checking collisions, to prevent round-off errors - - /** - * Order items by their start data - * @param {Item[]} items - */ - exports.orderByStart = function(items) { - items.sort(function (a, b) { - return a.data.start - b.data.start; - }); - }; - - /** - * Order items by their end date. If they have no end date, their start date - * is used. - * @param {Item[]} items - */ - exports.orderByEnd = function(items) { - items.sort(function (a, b) { - var aTime = ('end' in a.data) ? a.data.end : a.data.start, - bTime = ('end' in b.data) ? b.data.end : b.data.start; - - return aTime - bTime; - }); - }; - - /** - * Adjust vertical positions of the items such that they don't overlap each - * other. - * @param {Item[]} items - * All visible items - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * Margins between items and between items and the axis. - * @param {boolean} [force=false] - * If true, all items will be repositioned. If false (default), only - * items having a top===null will be re-stacked - */ - exports.stack = function(items, margin, force) { - var i, iMax; - - if (force) { - // reset top position of all items - for (i = 0, iMax = items.length; i < iMax; i++) { - items[i].top = null; - } - } - - // calculate new, non-overlapping positions - for (i = 0, iMax = items.length; i < iMax; i++) { - var item = items[i]; - if (item.stack && item.top === null) { - // initialize top position - item.top = margin.axis; - - do { - // TODO: optimize checking for overlap. when there is a gap without items, - // you only need to check for items from the next item on, not from zero - var collidingItem = null; - for (var j = 0, jj = items.length; j < jj; j++) { - var other = items[j]; - if (other.top !== null && other !== item && other.stack && exports.collision(item, other, margin.item)) { - collidingItem = other; - break; - } - } - - if (collidingItem != null) { - // There is a collision. Reposition the items above the colliding element - item.top = collidingItem.top + collidingItem.height + margin.item.vertical; - } - } while (collidingItem); - } - } - }; - - - /** - * Adjust vertical positions of the items without stacking them - * @param {Item[]} items - * All visible items - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * Margins between items and between items and the axis. - */ - exports.nostack = function(items, margin, subgroups) { - var i, iMax, newTop; - - // reset top position of all items - for (i = 0, iMax = items.length; i < iMax; i++) { - if (items[i].data.subgroup !== undefined) { - newTop = margin.axis; - for (var subgroup in subgroups) { - if (subgroups.hasOwnProperty(subgroup)) { - if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroups[items[i].data.subgroup].index) { - newTop += subgroups[subgroup].height + margin.item.vertical; - } - } - } - items[i].top = newTop; - } - else { - items[i].top = margin.axis; - } - } - }; - - /** - * Test if the two provided items collide - * The items must have parameters left, width, top, and height. - * @param {Item} a The first item - * @param {Item} b The second item - * @param {{horizontal: number, vertical: number}} margin - * An object containing a horizontal and vertical - * minimum required margin. - * @return {boolean} true if a and b collide, else false - */ - exports.collision = function(a, b, margin) { - return ((a.left - margin.horizontal + EPSILON) < (b.left + b.width) && - (a.left + a.width + margin.horizontal - EPSILON) > b.left && - (a.top - margin.vertical + EPSILON) < (b.top + b.height) && - (a.top + a.height + margin.vertical - EPSILON) > b.top); - }; - - -/***/ }, -/* 19 */ -/***/ function(module, exports, __webpack_require__) { - - var moment = __webpack_require__(44); - var DateUtil = __webpack_require__(15); - - /** - * @constructor TimeStep - * The class TimeStep is an iterator for dates. You provide a start date and an - * end date. The class itself determines the best scale (step size) based on the - * provided start Date, end Date, and minimumStep. - * - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * - * Alternatively, you can set a scale by hand. - * After creation, you can initialize the class by executing first(). Then you - * can iterate from the start date to the end date via next(). You can check if - * the end date is reached with the function hasNext(). After each step, you can - * retrieve the current date via getCurrent(). - * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours, - * days, to years. - * - * Version: 1.2 - * - * @param {Date} [start] The start date, for example new Date(2010, 9, 21) - * or new Date(2010, 9, 21, 23, 45, 00) - * @param {Date} [end] The end date - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds - */ - function TimeStep(start, end, minimumStep, hiddenDates) { - // variables - this.current = new Date(); - this._start = new Date(); - this._end = new Date(); - - this.autoScale = true; - this.scale = TimeStep.SCALE.DAY; - this.step = 1; - - // initialize the range - this.setRange(start, end, minimumStep); - - // hidden Dates options - this.switchedDay = false; - this.switchedMonth = false; - this.switchedYear = false; - this.hiddenDates = hiddenDates; - if (hiddenDates === undefined) { - this.hiddenDates = []; - } - } - - /// enum scale - TimeStep.SCALE = { - MILLISECOND: 1, - SECOND: 2, - MINUTE: 3, - HOUR: 4, - DAY: 5, - WEEKDAY: 6, - MONTH: 7, - YEAR: 8 - }; - - - /** - * Set a new range - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * @param {Date} [start] The start date and time. - * @param {Date} [end] The end date and time. - * @param {int} [minimumStep] Optional. Minimum step size in milliseconds - */ - TimeStep.prototype.setRange = function(start, end, minimumStep) { - if (!(start instanceof Date) || !(end instanceof Date)) { - throw "No legal start or end date in method setRange"; - } - - this._start = (start != undefined) ? new Date(start.valueOf()) : new Date(); - this._end = (end != undefined) ? new Date(end.valueOf()) : new Date(); - - if (this.autoScale) { - this.setMinimumStep(minimumStep); - } - }; - - /** - * Set the range iterator to the start date. - */ - TimeStep.prototype.first = function() { - this.current = new Date(this._start.valueOf()); - this.roundToMinor(); - }; - - /** - * Round the current date to the first minor date value - * This must be executed once when the current date is set to start Date - */ - TimeStep.prototype.roundToMinor = function() { - // round to floor - // IMPORTANT: we have no breaks in this switch! (this is no bug) - //noinspection FallthroughInSwitchStatementJS - switch (this.scale) { - case TimeStep.SCALE.YEAR: - this.current.setFullYear(this.step * Math.floor(this.current.getFullYear() / this.step)); - this.current.setMonth(0); - case TimeStep.SCALE.MONTH: this.current.setDate(1); - case TimeStep.SCALE.DAY: // intentional fall through - case TimeStep.SCALE.WEEKDAY: this.current.setHours(0); - case TimeStep.SCALE.HOUR: this.current.setMinutes(0); - case TimeStep.SCALE.MINUTE: this.current.setSeconds(0); - case TimeStep.SCALE.SECOND: this.current.setMilliseconds(0); - //case TimeStep.SCALE.MILLISECOND: // nothing to do for milliseconds - } - - if (this.step != 1) { - // round down to the first minor value that is a multiple of the current step size - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: this.current.setMilliseconds(this.current.getMilliseconds() - this.current.getMilliseconds() % this.step); break; - case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() - this.current.getSeconds() % this.step); break; - case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() - this.current.getMinutes() % this.step); break; - case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() - this.current.getHours() % this.step); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate((this.current.getDate()-1) - (this.current.getDate()-1) % this.step + 1); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() - this.current.getMonth() % this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() - this.current.getFullYear() % this.step); break; - default: break; - } - } - }; - - /** - * Check if the there is a next step - * @return {boolean} true if the current date has not passed the end date - */ - TimeStep.prototype.hasNext = function () { - return (this.current.valueOf() <= this._end.valueOf()); - }; - - /** - * Do the next step - */ - TimeStep.prototype.next = function() { - var prev = this.current.valueOf(); - - // Two cases, needed to prevent issues with switching daylight savings - // (end of March and end of October) - if (this.current.getMonth() < 6) { - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: - - this.current = new Date(this.current.valueOf() + this.step); break; - case TimeStep.SCALE.SECOND: this.current = new Date(this.current.valueOf() + this.step * 1000); break; - case TimeStep.SCALE.MINUTE: this.current = new Date(this.current.valueOf() + this.step * 1000 * 60); break; - case TimeStep.SCALE.HOUR: - this.current = new Date(this.current.valueOf() + this.step * 1000 * 60 * 60); - // in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...) - var h = this.current.getHours(); - this.current.setHours(h - (h % this.step)); - break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break; - default: break; - } - } - else { - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: this.current = new Date(this.current.valueOf() + this.step); break; - case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() + this.step); break; - case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() + this.step); break; - case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() + this.step); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break; - default: break; - } - } - - if (this.step != 1) { - // round down to the correct major value - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: if(this.current.getMilliseconds() < this.step) this.current.setMilliseconds(0); break; - case TimeStep.SCALE.SECOND: if(this.current.getSeconds() < this.step) this.current.setSeconds(0); break; - case TimeStep.SCALE.MINUTE: if(this.current.getMinutes() < this.step) this.current.setMinutes(0); break; - case TimeStep.SCALE.HOUR: if(this.current.getHours() < this.step) this.current.setHours(0); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: if(this.current.getDate() < this.step+1) this.current.setDate(1); break; - case TimeStep.SCALE.MONTH: if(this.current.getMonth() < this.step) this.current.setMonth(0); break; - case TimeStep.SCALE.YEAR: break; // nothing to do for year - default: break; - } - } - - // safety mechanism: if current time is still unchanged, move to the end - if (this.current.valueOf() == prev) { - this.current = new Date(this._end.valueOf()); - } - - DateUtil.stepOverHiddenDates(this, prev); - }; - - - /** - * Get the current datetime - * @return {Date} current The current date - */ - TimeStep.prototype.getCurrent = function() { - return this.current; - }; - - /** - * Set a custom scale. Autoscaling will be disabled. - * For example setScale(SCALE.MINUTES, 5) will result - * in minor steps of 5 minutes, and major steps of an hour. - * - * @param {TimeStep.SCALE} newScale - * A scale. Choose from SCALE.MILLISECOND, - * SCALE.SECOND, SCALE.MINUTE, SCALE.HOUR, - * SCALE.WEEKDAY, SCALE.DAY, SCALE.MONTH, - * SCALE.YEAR. - * @param {Number} newStep A step size, by default 1. Choose for - * example 1, 2, 5, or 10. - */ - TimeStep.prototype.setScale = function(newScale, newStep) { - this.scale = newScale; - - if (newStep > 0) { - this.step = newStep; - } - - this.autoScale = false; - }; - - /** - * Enable or disable autoscaling - * @param {boolean} enable If true, autoascaling is set true - */ - TimeStep.prototype.setAutoScale = function (enable) { - this.autoScale = enable; - }; - - - /** - * Automatically determine the scale that bests fits the provided minimum step - * @param {Number} [minimumStep] The minimum step size in milliseconds - */ - TimeStep.prototype.setMinimumStep = function(minimumStep) { - if (minimumStep == undefined) { - return; - } - - //var b = asc + ds; - - var stepYear = (1000 * 60 * 60 * 24 * 30 * 12); - var stepMonth = (1000 * 60 * 60 * 24 * 30); - var stepDay = (1000 * 60 * 60 * 24); - var stepHour = (1000 * 60 * 60); - var stepMinute = (1000 * 60); - var stepSecond = (1000); - var stepMillisecond= (1); - - // find the smallest step that is larger than the provided minimumStep - if (stepYear*1000 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1000;} - if (stepYear*500 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 500;} - if (stepYear*100 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 100;} - if (stepYear*50 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 50;} - if (stepYear*10 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 10;} - if (stepYear*5 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 5;} - if (stepYear > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1;} - if (stepMonth*3 > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 3;} - if (stepMonth > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 1;} - if (stepDay*5 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 5;} - if (stepDay*2 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 2;} - if (stepDay > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 1;} - if (stepDay/2 > minimumStep) {this.scale = TimeStep.SCALE.WEEKDAY; this.step = 1;} - if (stepHour*4 > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 4;} - if (stepHour > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 1;} - if (stepMinute*15 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 15;} - if (stepMinute*10 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 10;} - if (stepMinute*5 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 5;} - if (stepMinute > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 1;} - if (stepSecond*15 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 15;} - if (stepSecond*10 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 10;} - if (stepSecond*5 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 5;} - if (stepSecond > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 1;} - if (stepMillisecond*200 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 200;} - if (stepMillisecond*100 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 100;} - if (stepMillisecond*50 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 50;} - if (stepMillisecond*10 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 10;} - if (stepMillisecond*5 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 5;} - if (stepMillisecond > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 1;} - }; - - /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate - */ - TimeStep.prototype.snap = function(date) { - var clone = new Date(date.valueOf()); - - if (this.scale == TimeStep.SCALE.YEAR) { - var year = clone.getFullYear() + Math.round(clone.getMonth() / 12); - clone.setFullYear(Math.round(year / this.step) * this.step); - clone.setMonth(0); - clone.setDate(0); - clone.setHours(0); - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); - } - else if (this.scale == TimeStep.SCALE.MONTH) { - if (clone.getDate() > 15) { - clone.setDate(1); - clone.setMonth(clone.getMonth() + 1); - // important: first set Date to 1, after that change the month. - } - else { - clone.setDate(1); - } - - clone.setHours(0); - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); - } - else if (this.scale == TimeStep.SCALE.DAY) { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 5: - case 2: - clone.setHours(Math.round(clone.getHours() / 24) * 24); break; - default: - clone.setHours(Math.round(clone.getHours() / 12) * 12); break; - } - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); - } - else if (this.scale == TimeStep.SCALE.WEEKDAY) { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 5: - case 2: - clone.setHours(Math.round(clone.getHours() / 12) * 12); break; - default: - clone.setHours(Math.round(clone.getHours() / 6) * 6); break; - } - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); - } - else if (this.scale == TimeStep.SCALE.HOUR) { - switch (this.step) { - case 4: - clone.setMinutes(Math.round(clone.getMinutes() / 60) * 60); break; - default: - clone.setMinutes(Math.round(clone.getMinutes() / 30) * 30); break; - } - clone.setSeconds(0); - clone.setMilliseconds(0); - } else if (this.scale == TimeStep.SCALE.MINUTE) { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 15: - case 10: - clone.setMinutes(Math.round(clone.getMinutes() / 5) * 5); - clone.setSeconds(0); - break; - case 5: - clone.setSeconds(Math.round(clone.getSeconds() / 60) * 60); break; - default: - clone.setSeconds(Math.round(clone.getSeconds() / 30) * 30); break; - } - clone.setMilliseconds(0); - } - else if (this.scale == TimeStep.SCALE.SECOND) { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 15: - case 10: - clone.setSeconds(Math.round(clone.getSeconds() / 5) * 5); - clone.setMilliseconds(0); - break; - case 5: - clone.setMilliseconds(Math.round(clone.getMilliseconds() / 1000) * 1000); break; - default: - clone.setMilliseconds(Math.round(clone.getMilliseconds() / 500) * 500); break; - } - } - else if (this.scale == TimeStep.SCALE.MILLISECOND) { - var step = this.step > 5 ? this.step / 2 : 1; - clone.setMilliseconds(Math.round(clone.getMilliseconds() / step) * step); - } - - return clone; - }; - - /** - * Check if the current value is a major value (for example when the step - * is DAY, a major value is each first day of the MONTH) - * @return {boolean} true if current date is major, else false. - */ - TimeStep.prototype.isMajor = function() { - if (this.switchedYear == true) { - this.switchedYear = false; - switch (this.scale) { - case TimeStep.SCALE.YEAR: - case TimeStep.SCALE.MONTH: - case TimeStep.SCALE.WEEKDAY: - case TimeStep.SCALE.DAY: - case TimeStep.SCALE.HOUR: - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.SECOND: - case TimeStep.SCALE.MILLISECOND: - return true; - default: - return false; - } - } - else if (this.switchedMonth == true) { - this.switchedMonth = false; - switch (this.scale) { - case TimeStep.SCALE.WEEKDAY: - case TimeStep.SCALE.DAY: - case TimeStep.SCALE.HOUR: - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.SECOND: - case TimeStep.SCALE.MILLISECOND: - return true; - default: - return false; - } - } - else if (this.switchedDay == true) { - this.switchedDay = false; - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: - case TimeStep.SCALE.SECOND: - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.HOUR: - return true; - default: - return false; - } - } - - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: - return (this.current.getMilliseconds() == 0); - case TimeStep.SCALE.SECOND: - return (this.current.getSeconds() == 0); - case TimeStep.SCALE.MINUTE: - return (this.current.getHours() == 0) && (this.current.getMinutes() == 0); - case TimeStep.SCALE.HOUR: - return (this.current.getHours() == 0); - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: - return (this.current.getDate() == 1); - case TimeStep.SCALE.MONTH: - return (this.current.getMonth() == 0); - case TimeStep.SCALE.YEAR: - return false; - default: - return false; - } - }; - - - /** - * Returns formatted text for the minor axislabel, depending on the current - * date and the scale. For example when scale is MINUTE, the current time is - * formatted as "hh:mm". - * @param {Date} [date] custom date. if not provided, current date is taken - */ - TimeStep.prototype.getLabelMinor = function(date) { - if (date == undefined) { - date = this.current; - } - - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: return moment(date).format('SSS'); - case TimeStep.SCALE.SECOND: return moment(date).format('s'); - case TimeStep.SCALE.MINUTE: return moment(date).format('HH:mm'); - case TimeStep.SCALE.HOUR: return moment(date).format('HH:mm'); - case TimeStep.SCALE.WEEKDAY: return moment(date).format('ddd D'); - case TimeStep.SCALE.DAY: return moment(date).format('D'); - case TimeStep.SCALE.MONTH: return moment(date).format('MMM'); - case TimeStep.SCALE.YEAR: return moment(date).format('YYYY'); - default: return ''; - } - }; - - - /** - * Returns formatted text for the major axis label, depending on the current - * date and the scale. For example when scale is MINUTE, the major scale is - * hours, and the hour will be formatted as "hh". - * @param {Date} [date] custom date. if not provided, current date is taken - */ - TimeStep.prototype.getLabelMajor = function(date) { - if (date == undefined) { - date = this.current; - } - - //noinspection FallthroughInSwitchStatementJS - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND:return moment(date).format('HH:mm:ss'); - case TimeStep.SCALE.SECOND: return moment(date).format('D MMMM HH:mm'); - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.HOUR: return moment(date).format('ddd D MMMM'); - case TimeStep.SCALE.WEEKDAY: - case TimeStep.SCALE.DAY: return moment(date).format('MMMM YYYY'); - case TimeStep.SCALE.MONTH: return moment(date).format('YYYY'); - case TimeStep.SCALE.YEAR: return ''; - default: return ''; - } - }; - - module.exports = TimeStep; - - -/***/ }, -/* 20 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Prototype for visual components - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body] - * @param {Object} [options] - */ - function Component (body, options) { - this.options = null; - this.props = null; - } - - /** - * Set options for the component. The new options will be merged into the - * current options. - * @param {Object} options - */ - Component.prototype.setOptions = function(options) { - if (options) { - util.extend(this.options, options); - } - }; - - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - Component.prototype.redraw = function() { - // should be implemented by the component - return false; - }; - - /** - * Destroy the component. Cleanup DOM and event listeners - */ - Component.prototype.destroy = function() { - // should be implemented by the component - }; - - /** - * Test whether the component is resized since the last time _isResized() was - * called. - * @return {Boolean} Returns true if the component is resized - * @protected - */ - Component.prototype._isResized = function() { - var resized = (this.props._previousWidth !== this.props.width || - this.props._previousHeight !== this.props.height); - - this.props._previousWidth = this.props.width; - this.props._previousHeight = this.props.height; - - return resized; - }; - - module.exports = Component; - - -/***/ }, -/* 21 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var Component = __webpack_require__(20); - var moment = __webpack_require__(44); - var locales = __webpack_require__(48); - - /** - * A current time bar - * @param {{range: Range, dom: Object, domProps: Object}} body - * @param {Object} [options] Available parameters: - * {Boolean} [showCurrentTime] - * @constructor CurrentTime - * @extends Component - */ - function CurrentTime (body, options) { - this.body = body; - - // default options - this.defaultOptions = { - showCurrentTime: true, - - locales: locales, - locale: 'en' - }; - this.options = util.extend({}, this.defaultOptions); - this.offset = 0; - - this._create(); - - this.setOptions(options); - } - - CurrentTime.prototype = new Component(); - - /** - * Create the HTML DOM for the current time bar - * @private - */ - CurrentTime.prototype._create = function() { - var bar = document.createElement('div'); - bar.className = 'currenttime'; - bar.style.position = 'absolute'; - bar.style.top = '0px'; - bar.style.height = '100%'; - - this.bar = bar; - }; - - /** - * Destroy the CurrentTime bar - */ - CurrentTime.prototype.destroy = function () { - this.options.showCurrentTime = false; - this.redraw(); // will remove the bar from the DOM and stop refreshing - - this.body = null; - }; - - /** - * Set options for the component. Options will be merged in current options. - * @param {Object} options Available parameters: - * {boolean} [showCurrentTime] - */ - CurrentTime.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['showCurrentTime', 'locale', 'locales'], this.options, options); - } - }; - - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - CurrentTime.prototype.redraw = function() { - if (this.options.showCurrentTime) { - var parent = this.body.dom.backgroundVertical; - if (this.bar.parentNode != parent) { - // attach to the dom - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - parent.appendChild(this.bar); - - this.start(); - } - - var now = new Date(new Date().valueOf() + this.offset); - var x = this.body.util.toScreen(now); - - var locale = this.options.locales[this.options.locale]; - var title = locale.current + ' ' + locale.time + ': ' + moment(now).format('dddd, MMMM Do YYYY, H:mm:ss'); - title = title.charAt(0).toUpperCase() + title.substring(1); - - this.bar.style.left = x + 'px'; - this.bar.title = title; - } - else { - // remove the line from the DOM - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - this.stop(); - } - - return false; - }; - - /** - * Start auto refreshing the current time bar - */ - CurrentTime.prototype.start = function() { - var me = this; - - function update () { - me.stop(); - - // determine interval to refresh - var scale = me.body.range.conversion(me.body.domProps.center.width).scale; - var interval = 1 / scale / 10; - if (interval < 30) interval = 30; - if (interval > 1000) interval = 1000; - - me.redraw(); - - // start a timer to adjust for the new time - me.currentTimeTimer = setTimeout(update, interval); - } - - update(); - }; - - /** - * Stop auto refreshing the current time bar - */ - CurrentTime.prototype.stop = function() { - if (this.currentTimeTimer !== undefined) { - clearTimeout(this.currentTimeTimer); - delete this.currentTimeTimer; - } - }; - - /** - * Set a current time. This can be used for example to ensure that a client's - * time is synchronized with a shared server time. - * @param {Date | String | Number} time A Date, unix timestamp, or - * ISO date string. - */ - CurrentTime.prototype.setCurrentTime = function(time) { - var t = util.convert(time, 'Date').valueOf(); - var now = new Date().valueOf(); - this.offset = t - now; - this.redraw(); - }; - - /** - * Get the current time. - * @return {Date} Returns the current time. - */ - CurrentTime.prototype.getCurrentTime = function() { - return new Date(new Date().valueOf() + this.offset); - }; - - module.exports = CurrentTime; - - -/***/ }, -/* 22 */ -/***/ function(module, exports, __webpack_require__) { - - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); - var Component = __webpack_require__(20); - var moment = __webpack_require__(44); - var locales = __webpack_require__(48); - - /** - * A custom time bar - * @param {{range: Range, dom: Object}} body - * @param {Object} [options] Available parameters: - * {Boolean} [showCustomTime] - * @constructor CustomTime - * @extends Component - */ - - function CustomTime (body, options) { - this.body = body; - - // default options - this.defaultOptions = { - showCustomTime: false, - locales: locales, - locale: 'en' - }; - this.options = util.extend({}, this.defaultOptions); - - this.customTime = new Date(); - this.eventParams = {}; // stores state parameters while dragging the bar - - // create the DOM - this._create(); - - this.setOptions(options); - } - - CustomTime.prototype = new Component(); - - /** - * Set options for the component. Options will be merged in current options. - * @param {Object} options Available parameters: - * {boolean} [showCustomTime] - */ - CustomTime.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['showCustomTime', 'locale', 'locales'], this.options, options); - } - }; - - /** - * Create the DOM for the custom time - * @private - */ - CustomTime.prototype._create = function() { - var bar = document.createElement('div'); - bar.className = 'customtime'; - bar.style.position = 'absolute'; - bar.style.top = '0px'; - bar.style.height = '100%'; - this.bar = bar; - - var drag = document.createElement('div'); - drag.style.position = 'relative'; - drag.style.top = '0px'; - drag.style.left = '-10px'; - drag.style.height = '100%'; - drag.style.width = '20px'; - bar.appendChild(drag); - - // attach event listeners - this.hammer = Hammer(bar, { - prevent_default: true - }); - this.hammer.on('dragstart', this._onDragStart.bind(this)); - this.hammer.on('drag', this._onDrag.bind(this)); - this.hammer.on('dragend', this._onDragEnd.bind(this)); - }; - - /** - * Destroy the CustomTime bar - */ - CustomTime.prototype.destroy = function () { - this.options.showCustomTime = false; - this.redraw(); // will remove the bar from the DOM - - this.hammer.enable(false); - this.hammer = null; - - this.body = null; - }; - - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - CustomTime.prototype.redraw = function () { - if (this.options.showCustomTime) { - var parent = this.body.dom.backgroundVertical; - if (this.bar.parentNode != parent) { - // attach to the dom - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - parent.appendChild(this.bar); - } - - var x = this.body.util.toScreen(this.customTime); - - var locale = this.options.locales[this.options.locale]; - var title = locale.time + ': ' + moment(this.customTime).format('dddd, MMMM Do YYYY, H:mm:ss'); - title = title.charAt(0).toUpperCase() + title.substring(1); - - this.bar.style.left = x + 'px'; - this.bar.title = title; - } - else { - // remove the line from the DOM - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - } - - return false; - }; - - /** - * Set custom time. - * @param {Date | number | string} time - */ - CustomTime.prototype.setCustomTime = function(time) { - this.customTime = util.convert(time, 'Date'); - this.redraw(); - }; - - /** - * Retrieve the current custom time. - * @return {Date} customTime - */ - CustomTime.prototype.getCustomTime = function() { - return new Date(this.customTime.valueOf()); - }; - - /** - * Start moving horizontally - * @param {Event} event - * @private - */ - CustomTime.prototype._onDragStart = function(event) { - this.eventParams.dragging = true; - this.eventParams.customTime = this.customTime; - - event.stopPropagation(); - event.preventDefault(); - }; - - /** - * Perform moving operating. - * @param {Event} event - * @private - */ - CustomTime.prototype._onDrag = function (event) { - if (!this.eventParams.dragging) return; - - var deltaX = event.gesture.deltaX, - x = this.body.util.toScreen(this.eventParams.customTime) + deltaX, - time = this.body.util.toTime(x); - - this.setCustomTime(time); - - // fire a timechange event - this.body.emitter.emit('timechange', { - time: new Date(this.customTime.valueOf()) - }); - - event.stopPropagation(); - event.preventDefault(); - }; - - /** - * Stop moving operating. - * @param {event} event - * @private - */ - CustomTime.prototype._onDragEnd = function (event) { - if (!this.eventParams.dragging) return; - - // fire a timechanged event - this.body.emitter.emit('timechanged', { - time: new Date(this.customTime.valueOf()) - }); - - event.stopPropagation(); - event.preventDefault(); - }; - - module.exports = CustomTime; - - -/***/ }, -/* 23 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); - var Component = __webpack_require__(20); - var DataStep = __webpack_require__(16); - - /** - * A horizontal time axis - * @param {Object} [options] See DataAxis.setOptions for the available - * options. - * @constructor DataAxis - * @extends Component - * @param body - */ - function DataAxis (body, options, svg, linegraphOptions) { - this.id = util.randomUUID(); - this.body = body; - - this.defaultOptions = { - orientation: 'left', // supported: 'left', 'right' - showMinorLabels: true, - showMajorLabels: true, - icons: true, - majorLinesOffset: 7, - minorLinesOffset: 4, - labelOffsetX: 10, - labelOffsetY: 2, - iconWidth: 20, - width: '40px', - visible: true, - alignZeros: true, - customRange: { - left: {min:undefined, max:undefined}, - right: {min:undefined, max:undefined} - }, - title: { - left: {text:undefined}, - right: {text:undefined} - }, - format: { - left: {decimals: undefined}, - right: {decimals: undefined} - } - }; - - this.linegraphOptions = linegraphOptions; - this.linegraphSVG = svg; - this.props = {}; - this.DOMelements = { // dynamic elements - lines: {}, - labels: {}, - title: {} - }; - - this.dom = {}; - - this.range = {start:0, end:0}; - - this.options = util.extend({}, this.defaultOptions); - this.conversionFactor = 1; - - this.setOptions(options); - this.width = Number(('' + this.options.width).replace("px","")); - this.minWidth = this.width; - this.height = this.linegraphSVG.offsetHeight; - this.hidden = false; - - this.stepPixels = 25; - this.stepPixelsForced = 25; - this.zeroCrossing = -1; - - this.lineOffset = 0; - this.master = true; - this.svgElements = {}; - this.iconsRemoved = false; - - - this.groups = {}; - this.amountOfGroups = 0; - - // create the HTML DOM - this._create(); - - var me = this; - this.body.emitter.on("verticalDrag", function() { - me.dom.lineContainer.style.top = me.body.domProps.scrollTop + 'px'; - }); - } - - DataAxis.prototype = new Component(); - - - DataAxis.prototype.addGroup = function(label, graphOptions) { - if (!this.groups.hasOwnProperty(label)) { - this.groups[label] = graphOptions; - } - this.amountOfGroups += 1; - }; - - DataAxis.prototype.updateGroup = function(label, graphOptions) { - this.groups[label] = graphOptions; - }; - - DataAxis.prototype.removeGroup = function(label) { - if (this.groups.hasOwnProperty(label)) { - delete this.groups[label]; - this.amountOfGroups -= 1; - } - }; - - - DataAxis.prototype.setOptions = function (options) { - if (options) { - var redraw = false; - if (this.options.orientation != options.orientation && options.orientation !== undefined) { - redraw = true; - } - var fields = [ - 'orientation', - 'showMinorLabels', - 'showMajorLabels', - 'icons', - 'majorLinesOffset', - 'minorLinesOffset', - 'labelOffsetX', - 'labelOffsetY', - 'iconWidth', - 'width', - 'visible', - 'customRange', - 'title', - 'format', - 'alignZeros' - ]; - util.selectiveExtend(fields, this.options, options); - - this.minWidth = Number(('' + this.options.width).replace("px","")); - - if (redraw == true && this.dom.frame) { - this.hide(); - this.show(); - } - } - }; - - - /** - * Create the HTML DOM for the DataAxis - */ - DataAxis.prototype._create = function() { - this.dom.frame = document.createElement('div'); - this.dom.frame.style.width = this.options.width; - this.dom.frame.style.height = this.height; - - this.dom.lineContainer = document.createElement('div'); - this.dom.lineContainer.style.width = '100%'; - this.dom.lineContainer.style.height = this.height; - this.dom.lineContainer.style.position = 'relative'; - - // create svg element for graph drawing. - this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.svg.style.position = "absolute"; - this.svg.style.top = '0px'; - this.svg.style.height = '100%'; - this.svg.style.width = '100%'; - this.svg.style.display = "block"; - this.dom.frame.appendChild(this.svg); - }; - - DataAxis.prototype._redrawGroupIcons = function () { - DOMutil.prepareElements(this.svgElements); - - var x; - var iconWidth = this.options.iconWidth; - var iconHeight = 15; - var iconOffset = 4; - var y = iconOffset + 0.5 * iconHeight; - - if (this.options.orientation == 'left') { - x = iconOffset; - } - else { - x = this.width - iconWidth - iconOffset; - } - - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); - y += iconHeight + iconOffset; - } - } - } - - DOMutil.cleanupElements(this.svgElements); - this.iconsRemoved = false; - }; - - DataAxis.prototype._cleanupIcons = function() { - if (this.iconsRemoved == false) { - DOMutil.prepareElements(this.svgElements); - DOMutil.cleanupElements(this.svgElements); - this.iconsRemoved = true; - } - } - - /** - * Create the HTML DOM for the DataAxis - */ - DataAxis.prototype.show = function() { - this.hidden = false; - if (!this.dom.frame.parentNode) { - if (this.options.orientation == 'left') { - this.body.dom.left.appendChild(this.dom.frame); - } - else { - this.body.dom.right.appendChild(this.dom.frame); - } - } - - if (!this.dom.lineContainer.parentNode) { - this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer); - } - }; - - /** - * Create the HTML DOM for the DataAxis - */ - DataAxis.prototype.hide = function() { - this.hidden = true; - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - - if (this.dom.lineContainer.parentNode) { - this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer); - } - }; - - /** - * Set a range (start and end) - * @param end - * @param start - * @param end - */ - DataAxis.prototype.setRange = function (start, end) { - if (this.master == false && this.options.alignZeros == true && this.zeroCrossing != -1) { - if (start > 0) { - start = 0; - } - } - this.range.start = start; - this.range.end = end; - }; - - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - DataAxis.prototype.redraw = function () { - var changeCalled = false; - var activeGroups = 0; - - // Make sure the line container adheres to the vertical scrolling. - this.dom.lineContainer.style.top = this.body.domProps.scrollTop + 'px'; - - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - activeGroups++; - } - } - } - if (this.amountOfGroups == 0 || activeGroups == 0) { - this.hide(); - } - else { - this.show(); - this.height = Number(this.linegraphSVG.style.height.replace("px","")); - - // svg offsetheight did not work in firefox and explorer... - this.dom.lineContainer.style.height = this.height + 'px'; - this.width = this.options.visible == true ? Number(('' + this.options.width).replace("px","")) : 0; - - var props = this.props; - var frame = this.dom.frame; - - // update classname - frame.className = 'dataaxis'; - - // calculate character width and height - this._calculateCharSize(); - - var orientation = this.options.orientation; - var showMinorLabels = this.options.showMinorLabels; - var showMajorLabels = this.options.showMajorLabels; - - // determine the width and height of the elements for the axis - props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; - props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; - - props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset; - props.minorLineHeight = 1; - props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset; - props.majorLineHeight = 1; - - // take frame offline while updating (is almost twice as fast) - if (orientation == 'left') { - frame.style.top = '0'; - frame.style.left = '0'; - frame.style.bottom = ''; - frame.style.width = this.width + 'px'; - frame.style.height = this.height + "px"; - } - else { // right - frame.style.top = ''; - frame.style.bottom = '0'; - frame.style.left = '0'; - frame.style.width = this.width + 'px'; - frame.style.height = this.height + "px"; - } - changeCalled = this._redrawLabels(); - - if (this.options.icons == true) { - this._redrawGroupIcons(); - } - else { - this._cleanupIcons(); - } - - this._redrawTitle(orientation); - } - return changeCalled; - }; - - /** - * Repaint major and minor text labels and vertical grid lines - * @private - */ - DataAxis.prototype._redrawLabels = function () { - DOMutil.prepareElements(this.DOMelements.lines); - DOMutil.prepareElements(this.DOMelements.labels); - - var orientation = this.options['orientation']; - - // calculate range and step (step such that we have space for 7 characters per label) - var minimumStep = this.master ? this.props.majorCharHeight || 10 : this.stepPixelsForced; - - var step = new DataStep( - this.range.start, - this.range.end, - minimumStep, - this.dom.frame.offsetHeight, - this.options.customRange[this.options.orientation], - this.master == false && this.options.alignZeros // doess the step have to align zeros? only if not master and the options is on - ); - - this.step = step; - // get the distance in pixels for a step - // dead space is space that is "left over" after a step - var stepPixels = (this.dom.frame.offsetHeight - (step.deadSpace * (this.dom.frame.offsetHeight / step.marginRange))) / (((step.marginRange - step.deadSpace) / step.step)); - - this.stepPixels = stepPixels; - - var amountOfSteps = this.height / stepPixels; - var stepDifference = 0; - - // the slave axis needs to use the same horizontal lines as the master axis. - if (this.master == false) { - stepPixels = this.stepPixelsForced; - stepDifference = Math.round((this.dom.frame.offsetHeight / stepPixels) - amountOfSteps); - for (var i = 0; i < 0.5 * stepDifference; i++) { - step.previous(); - } - amountOfSteps = this.height / stepPixels; - - if (this.zeroCrossing != -1 && this.options.alignZeros == true) { - var zeroStepDifference = (step.marginEnd / step.step) - this.zeroCrossing; - if (zeroStepDifference > 0) { - for (var i = 0; i < zeroStepDifference; i++) {step.next();} - } - else if (zeroStepDifference < 0) { - for (var i = 0; i < -zeroStepDifference; i++) {step.previous();} - } - } - } - else { - amountOfSteps += 0.25; - } - - - this.valueAtZero = step.marginEnd; - var marginStartPos = 0; - - // do not draw the first label - var max = 1; - - // Get the number of decimal places - var decimals; - if(this.options.format[orientation] !== undefined) { - decimals = this.options.format[orientation].decimals; - } - - this.maxLabelSize = 0; - var y = 0; - while (max < Math.round(amountOfSteps)) { - step.next(); - y = Math.round(max * stepPixels); - marginStartPos = max * stepPixels; - var isMajor = step.isMajor(); - - if (this.options['showMinorLabels'] && isMajor == false || this.master == false && this.options['showMinorLabels'] == true) { - this._redrawLabel(y - 2, step.getCurrent(decimals), orientation, 'yAxis minor', this.props.minorCharHeight); - } - - if (isMajor && this.options['showMajorLabels'] && this.master == true || - this.options['showMinorLabels'] == false && this.master == false && isMajor == true) { - if (y >= 0) { - this._redrawLabel(y - 2, step.getCurrent(decimals), orientation, 'yAxis major', this.props.majorCharHeight); - } - this._redrawLine(y, orientation, 'grid horizontal major', this.options.majorLinesOffset, this.props.majorLineWidth); - } - else { - this._redrawLine(y, orientation, 'grid horizontal minor', this.options.minorLinesOffset, this.props.minorLineWidth); - } - - if (this.master == true && step.current == 0) { - this.zeroCrossing = max; - } - - max++; - } - - if (this.master == false) { - this.conversionFactor = y / (this.valueAtZero - step.current); - } - else { - this.conversionFactor = this.dom.frame.offsetHeight / step.marginRange; - } - - // Note that title is rotated, so we're using the height, not width! - var titleWidth = 0; - if (this.options.title[orientation] !== undefined && this.options.title[orientation].text !== undefined) { - titleWidth = this.props.titleCharHeight; - } - var offset = this.options.icons == true ? Math.max(this.options.iconWidth, titleWidth) + this.options.labelOffsetX + 15 : titleWidth + this.options.labelOffsetX + 15; - - // this will resize the yAxis to accommodate the labels. - if (this.maxLabelSize > (this.width - offset) && this.options.visible == true) { - this.width = this.maxLabelSize + offset; - this.options.width = this.width + "px"; - DOMutil.cleanupElements(this.DOMelements.lines); - DOMutil.cleanupElements(this.DOMelements.labels); - this.redraw(); - return true; - } - // this will resize the yAxis if it is too big for the labels. - else if (this.maxLabelSize < (this.width - offset) && this.options.visible == true && this.width > this.minWidth) { - this.width = Math.max(this.minWidth,this.maxLabelSize + offset); - this.options.width = this.width + "px"; - DOMutil.cleanupElements(this.DOMelements.lines); - DOMutil.cleanupElements(this.DOMelements.labels); - this.redraw(); - return true; - } - else { - DOMutil.cleanupElements(this.DOMelements.lines); - DOMutil.cleanupElements(this.DOMelements.labels); - return false; - } - }; - - DataAxis.prototype.convertValue = function (value) { - var invertedValue = this.valueAtZero - value; - var convertedValue = invertedValue * this.conversionFactor; - return convertedValue; - }; - - /** - * Create a label for the axis at position x - * @private - * @param y - * @param text - * @param orientation - * @param className - * @param characterHeight - */ - DataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) { - // reuse redundant label - var label = DOMutil.getDOMElement('div',this.DOMelements.labels, this.dom.frame); //this.dom.redundant.labels.shift(); - label.className = className; - label.innerHTML = text; - if (orientation == 'left') { - label.style.left = '-' + this.options.labelOffsetX + 'px'; - label.style.textAlign = "right"; - } - else { - label.style.right = '-' + this.options.labelOffsetX + 'px'; - label.style.textAlign = "left"; - } - - label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px'; - - text += ''; - - var largestWidth = Math.max(this.props.majorCharWidth,this.props.minorCharWidth); - if (this.maxLabelSize < text.length * largestWidth) { - this.maxLabelSize = text.length * largestWidth; - } - }; - - /** - * Create a minor line for the axis at position y - * @param y - * @param orientation - * @param className - * @param offset - * @param width - */ - DataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) { - if (this.master == true) { - var line = DOMutil.getDOMElement('div',this.DOMelements.lines, this.dom.lineContainer);//this.dom.redundant.lines.shift(); - line.className = className; - line.innerHTML = ''; - - if (orientation == 'left') { - line.style.left = (this.width - offset) + 'px'; - } - else { - line.style.right = (this.width - offset) + 'px'; - } - - line.style.width = width + 'px'; - line.style.top = y + 'px'; - } - }; - - /** - * Create a title for the axis - * @private - * @param orientation - */ - DataAxis.prototype._redrawTitle = function (orientation) { - DOMutil.prepareElements(this.DOMelements.title); - - // Check if the title is defined for this axes - if (this.options.title[orientation] !== undefined && this.options.title[orientation].text !== undefined) { - var title = DOMutil.getDOMElement('div', this.DOMelements.title, this.dom.frame); - title.className = 'yAxis title ' + orientation; - title.innerHTML = this.options.title[orientation].text; - - // Add style - if provided - if (this.options.title[orientation].style !== undefined) { - util.addCssText(title, this.options.title[orientation].style); - } - - if (orientation == 'left') { - title.style.left = this.props.titleCharHeight + 'px'; - } - else { - title.style.right = this.props.titleCharHeight + 'px'; - } - - title.style.width = this.height + 'px'; - } - - // we need to clean up in case we did not use all elements. - DOMutil.cleanupElements(this.DOMelements.title); - }; - - - - - /** - * Determine the size of text on the axis (both major and minor axis). - * The size is calculated only once and then cached in this.props. - * @private - */ - DataAxis.prototype._calculateCharSize = function () { - // determine the char width and height on the minor axis - if (!('minorCharHeight' in this.props)) { - var textMinor = document.createTextNode('0'); - var measureCharMinor = document.createElement('div'); - measureCharMinor.className = 'yAxis minor measure'; - measureCharMinor.appendChild(textMinor); - this.dom.frame.appendChild(measureCharMinor); - - this.props.minorCharHeight = measureCharMinor.clientHeight; - this.props.minorCharWidth = measureCharMinor.clientWidth; - - this.dom.frame.removeChild(measureCharMinor); - } - - if (!('majorCharHeight' in this.props)) { - var textMajor = document.createTextNode('0'); - var measureCharMajor = document.createElement('div'); - measureCharMajor.className = 'yAxis major measure'; - measureCharMajor.appendChild(textMajor); - this.dom.frame.appendChild(measureCharMajor); - - this.props.majorCharHeight = measureCharMajor.clientHeight; - this.props.majorCharWidth = measureCharMajor.clientWidth; - - this.dom.frame.removeChild(measureCharMajor); - } - - if (!('titleCharHeight' in this.props)) { - var textTitle = document.createTextNode('0'); - var measureCharTitle = document.createElement('div'); - measureCharTitle.className = 'yAxis title measure'; - measureCharTitle.appendChild(textTitle); - this.dom.frame.appendChild(measureCharTitle); - - this.props.titleCharHeight = measureCharTitle.clientHeight; - this.props.titleCharWidth = measureCharTitle.clientWidth; - - this.dom.frame.removeChild(measureCharTitle); - } - }; - - /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate - */ - DataAxis.prototype.snap = function(date) { - return this.step.snap(date); - }; - - module.exports = DataAxis; - - -/***/ }, -/* 24 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); - var Line = __webpack_require__(51); - var Bar = __webpack_require__(52); - var Points = __webpack_require__(53); - - /** - * /** - * @param {object} group | the object of the group from the dataset - * @param {string} groupId | ID of the group - * @param {object} options | the default options - * @param {array} groupsUsingDefaultStyles | this array has one entree. - * It is passed as an array so it is passed by reference. - * It enumerates through the default styles - * @constructor - */ - function GraphGroup (group, groupId, options, groupsUsingDefaultStyles) { - this.id = groupId; - var fields = ['sampling','style','sort','yAxisOrientation','barChart','drawPoints','shaded','catmullRom'] - this.options = util.selectiveBridgeObject(fields,options); - this.usingDefaultStyle = group.className === undefined; - this.groupsUsingDefaultStyles = groupsUsingDefaultStyles; - this.zeroPosition = 0; - this.update(group); - if (this.usingDefaultStyle == true) { - this.groupsUsingDefaultStyles[0] += 1; - } - this.itemsData = []; - this.visible = group.visible === undefined ? true : group.visible; - } - - - /** - * this loads a reference to all items in this group into this group. - * @param {array} items - */ - GraphGroup.prototype.setItems = function(items) { - if (items != null) { - this.itemsData = items; - if (this.options.sort == true) { - this.itemsData.sort(function (a,b) {return a.x - b.x;}) - } - } - else { - this.itemsData = []; - } - }; - - - /** - * this is used for plotting barcharts, this way, we only have to calculate it once. - * @param pos - */ - GraphGroup.prototype.setZeroPosition = function(pos) { - this.zeroPosition = pos; - }; - - - /** - * set the options of the graph group over the default options. - * @param options - */ - GraphGroup.prototype.setOptions = function(options) { - if (options !== undefined) { - var fields = ['sampling','style','sort','yAxisOrientation','barChart']; - util.selectiveDeepExtend(fields, this.options, options); - - util.mergeOptions(this.options, options,'catmullRom'); - util.mergeOptions(this.options, options,'drawPoints'); - util.mergeOptions(this.options, options,'shaded'); - - if (options.catmullRom) { - if (typeof options.catmullRom == 'object') { - if (options.catmullRom.parametrization) { - if (options.catmullRom.parametrization == 'uniform') { - this.options.catmullRom.alpha = 0; - } - else if (options.catmullRom.parametrization == 'chordal') { - this.options.catmullRom.alpha = 1.0; - } - else { - this.options.catmullRom.parametrization = 'centripetal'; - this.options.catmullRom.alpha = 0.5; - } - } - } - } - } - - if (this.options.style == 'line') { - this.type = new Line(this.id, this.options); - } - else if (this.options.style == 'bar') { - this.type = new Bar(this.id, this.options); - } - else if (this.options.style == 'points') { - this.type = new Points(this.id, this.options); - } - }; - - - /** - * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph - * @param group - */ - GraphGroup.prototype.update = function(group) { - this.group = group; - this.content = group.content || 'graph'; - this.className = group.className || this.className || "graphGroup" + this.groupsUsingDefaultStyles[0] % 10; - this.visible = group.visible === undefined ? true : group.visible; - this.style = group.style; - this.setOptions(group.options); - }; - - - /** - * draw the icon for the legend. - * - * @param x - * @param y - * @param JSONcontainer - * @param SVGcontainer - * @param iconWidth - * @param iconHeight - */ - GraphGroup.prototype.drawIcon = function(x, y, JSONcontainer, SVGcontainer, iconWidth, iconHeight) { - var fillHeight = iconHeight * 0.5; - var path, fillPath; - - var outline = DOMutil.getSVGElement("rect", JSONcontainer, SVGcontainer); - outline.setAttributeNS(null, "x", x); - outline.setAttributeNS(null, "y", y - fillHeight); - outline.setAttributeNS(null, "width", iconWidth); - outline.setAttributeNS(null, "height", 2*fillHeight); - outline.setAttributeNS(null, "class", "outline"); - - if (this.options.style == 'line') { - path = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); - path.setAttributeNS(null, "class", this.className); - if(this.style !== undefined) { - path.setAttributeNS(null, "style", this.style); - } - - path.setAttributeNS(null, "d", "M" + x + ","+y+" L" + (x + iconWidth) + ","+y+""); - if (this.options.shaded.enabled == true) { - fillPath = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); - if (this.options.shaded.orientation == 'top') { - fillPath.setAttributeNS(null, "d", "M"+x+", " + (y - fillHeight) + - "L"+x+","+y+" L"+ (x + iconWidth) + ","+y+" L"+ (x + iconWidth) + "," + (y - fillHeight)); - } - else { - fillPath.setAttributeNS(null, "d", "M"+x+","+y+" " + - "L"+x+"," + (y + fillHeight) + " " + - "L"+ (x + iconWidth) + "," + (y + fillHeight) + - "L"+ (x + iconWidth) + ","+y); - } - fillPath.setAttributeNS(null, "class", this.className + " iconFill"); - } - - if (this.options.drawPoints.enabled == true) { - DOMutil.drawPoint(x + 0.5 * iconWidth,y, this, JSONcontainer, SVGcontainer); - } - } - else { - var barWidth = Math.round(0.3 * iconWidth); - var bar1Height = Math.round(0.4 * iconHeight); - var bar2Height = Math.round(0.75 * iconHeight); - - var offset = Math.round((iconWidth - (2 * barWidth))/3); - - DOMutil.drawBar(x + 0.5*barWidth + offset , y + fillHeight - bar1Height - 1, barWidth, bar1Height, this.className + ' bar', JSONcontainer, SVGcontainer); - DOMutil.drawBar(x + 1.5*barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, this.className + ' bar', JSONcontainer, SVGcontainer); - } - }; - - - /** - * return the legend entree for this group. - * - * @param iconWidth - * @param iconHeight - * @returns {{icon: HTMLElement, label: (group.content|*|string), orientation: (.options.yAxisOrientation|*)}} - */ - GraphGroup.prototype.getLegend = function(iconWidth, iconHeight) { - var svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.drawIcon(0,0.5*iconHeight,[],svg,iconWidth,iconHeight); - return {icon: svg, label: this.content, orientation:this.options.yAxisOrientation}; - } - - GraphGroup.prototype.getYRange = function(groupData) { - return this.type.getYRange(groupData); - } - - GraphGroup.prototype.draw = function(dataset, group, framework) { - this.type.draw(dataset, group, framework); - } - - - module.exports = GraphGroup; - - -/***/ }, -/* 25 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var stack = __webpack_require__(18); - var RangeItem = __webpack_require__(35); - - /** - * @constructor Group - * @param {Number | String} groupId - * @param {Object} data - * @param {ItemSet} itemSet - */ - function Group (groupId, data, itemSet) { - this.groupId = groupId; - this.subgroups = {}; - this.subgroupIndex = 0; - this.subgroupOrderer = data && data.subgroupOrder; - this.itemSet = itemSet; - - this.dom = {}; - this.props = { - label: { - width: 0, - height: 0 - } - }; - this.className = null; - - this.items = {}; // items filtered by groupId of this group - this.visibleItems = []; // items currently visible in window - this.orderedItems = { - byStart: [], - byEnd: [] - }; - this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap. - var me = this; - this.itemSet.body.emitter.on("checkRangedItems", function () { - me.checkRangedItems = true; - }) - - this._create(); - - this.setData(data); - } - - /** - * Create DOM elements for the group - * @private - */ - Group.prototype._create = function() { - var label = document.createElement('div'); - label.className = 'vlabel'; - this.dom.label = label; - - var inner = document.createElement('div'); - inner.className = 'inner'; - label.appendChild(inner); - this.dom.inner = inner; - - var foreground = document.createElement('div'); - foreground.className = 'group'; - foreground['timeline-group'] = this; - this.dom.foreground = foreground; - - this.dom.background = document.createElement('div'); - this.dom.background.className = 'group'; - - this.dom.axis = document.createElement('div'); - this.dom.axis.className = 'group'; - - // create a hidden marker to detect when the Timelines container is attached - // to the DOM, or the style of a parent of the Timeline is changed from - // display:none is changed to visible. - this.dom.marker = document.createElement('div'); - this.dom.marker.style.visibility = 'hidden'; // TODO: ask jos why this is not none? - this.dom.marker.innerHTML = '?'; - this.dom.background.appendChild(this.dom.marker); - }; - - /** - * Set the group data for this group - * @param {Object} data Group data, can contain properties content and className - */ - Group.prototype.setData = function(data) { - // update contents - var content = data && data.content; - if (content instanceof Element) { - this.dom.inner.appendChild(content); - } - else if (content !== undefined && content !== null) { - this.dom.inner.innerHTML = content; - } - else { - this.dom.inner.innerHTML = this.groupId || ''; // groupId can be null - } - - // update title - this.dom.label.title = data && data.title || ''; - - if (!this.dom.inner.firstChild) { - util.addClassName(this.dom.inner, 'hidden'); - } - else { - util.removeClassName(this.dom.inner, 'hidden'); - } - - // update className - var className = data && data.className || null; - if (className != this.className) { - if (this.className) { - util.removeClassName(this.dom.label, this.className); - util.removeClassName(this.dom.foreground, this.className); - util.removeClassName(this.dom.background, this.className); - util.removeClassName(this.dom.axis, this.className); - } - util.addClassName(this.dom.label, className); - util.addClassName(this.dom.foreground, className); - util.addClassName(this.dom.background, className); - util.addClassName(this.dom.axis, className); - this.className = className; - } - - // update style - if (this.style) { - util.removeCssText(this.dom.label, this.style); - this.style = null; - } - if (data && data.style) { - util.addCssText(this.dom.label, data.style); - this.style = data.style; - } - }; - - /** - * Get the width of the group label - * @return {number} width - */ - Group.prototype.getLabelWidth = function() { - return this.props.label.width; - }; - - - /** - * Repaint this group - * @param {{start: number, end: number}} range - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @param {boolean} [restack=false] Force restacking of all items - * @return {boolean} Returns true if the group is resized - */ - Group.prototype.redraw = function(range, margin, restack) { - var resized = false; - - this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); - - // force recalculation of the height of the items when the marker height changed - // (due to the Timeline being attached to the DOM or changed from display:none to visible) - var markerHeight = this.dom.marker.clientHeight; - if (markerHeight != this.lastMarkerHeight) { - this.lastMarkerHeight = markerHeight; - - util.forEach(this.items, function (item) { - item.dirty = true; - if (item.displayed) item.redraw(); - }); - - restack = true; - } - - // reposition visible items vertically - if (this.itemSet.options.stack) { // TODO: ugly way to access options... - stack.stack(this.visibleItems, margin, restack); - } - else { // no stacking - stack.nostack(this.visibleItems, margin, this.subgroups); - } - - // recalculate the height of the group - var height = this._calculateHeight(margin); - - // calculate actual size and position - var foreground = this.dom.foreground; - this.top = foreground.offsetTop; - this.left = foreground.offsetLeft; - this.width = foreground.offsetWidth; - resized = util.updateProperty(this, 'height', height) || resized; - - // recalculate size of label - resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized; - resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized; - - // apply new height - this.dom.background.style.height = height + 'px'; - this.dom.foreground.style.height = height + 'px'; - this.dom.label.style.height = height + 'px'; - - // update vertical position of items after they are re-stacked and the height of the group is calculated - for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { - var item = this.visibleItems[i]; - item.repositionY(margin); - } - - return resized; - }; - - /** - * recalculate the height of the group - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @returns {number} Returns the height - * @private - */ - Group.prototype._calculateHeight = function (margin) { - // recalculate the height of the group - var height; - var visibleItems = this.visibleItems; - //var visibleSubgroups = []; - //this.visibleSubgroups = 0; - this.resetSubgroups(); - var me = this; - if (visibleItems.length) { - var min = visibleItems[0].top; - var max = visibleItems[0].top + visibleItems[0].height; - util.forEach(visibleItems, function (item) { - min = Math.min(min, item.top); - max = Math.max(max, (item.top + item.height)); - if (item.data.subgroup !== undefined) { - me.subgroups[item.data.subgroup].height = Math.max(me.subgroups[item.data.subgroup].height,item.height); - me.subgroups[item.data.subgroup].visible = true; - //if (visibleSubgroups.indexOf(item.data.subgroup) == -1){ - // visibleSubgroups.push(item.data.subgroup); - // me.visibleSubgroups += 1; - //} - } - }); - if (min > margin.axis) { - // there is an empty gap between the lowest item and the axis - var offset = min - margin.axis; - max -= offset; - util.forEach(visibleItems, function (item) { - item.top -= offset; - }); - } - height = max + margin.item.vertical / 2; - } - else { - height = margin.axis + margin.item.vertical; - } - height = Math.max(height, this.props.label.height); - - return height; - }; - - /** - * Show this group: attach to the DOM - */ - Group.prototype.show = function() { - if (!this.dom.label.parentNode) { - this.itemSet.dom.labelSet.appendChild(this.dom.label); - } - - if (!this.dom.foreground.parentNode) { - this.itemSet.dom.foreground.appendChild(this.dom.foreground); - } - - if (!this.dom.background.parentNode) { - this.itemSet.dom.background.appendChild(this.dom.background); - } - - if (!this.dom.axis.parentNode) { - this.itemSet.dom.axis.appendChild(this.dom.axis); - } - }; - - /** - * Hide this group: remove from the DOM - */ - Group.prototype.hide = function() { - var label = this.dom.label; - if (label.parentNode) { - label.parentNode.removeChild(label); - } - - var foreground = this.dom.foreground; - if (foreground.parentNode) { - foreground.parentNode.removeChild(foreground); - } - - var background = this.dom.background; - if (background.parentNode) { - background.parentNode.removeChild(background); - } - - var axis = this.dom.axis; - if (axis.parentNode) { - axis.parentNode.removeChild(axis); - } - }; - - /** - * Add an item to the group - * @param {Item} item - */ - Group.prototype.add = function(item) { - this.items[item.id] = item; - item.setParent(this); - - // add to - if (item.data.subgroup !== undefined) { - if (this.subgroups[item.data.subgroup] === undefined) { - this.subgroups[item.data.subgroup] = {height:0, visible: false, index:this.subgroupIndex, items: []}; - this.subgroupIndex++; - } - this.subgroups[item.data.subgroup].items.push(item); - } - this.orderSubgroups(); - - if (this.visibleItems.indexOf(item) == -1) { - var range = this.itemSet.body.range; // TODO: not nice accessing the range like this - this._checkIfVisible(item, this.visibleItems, range); - } - }; - - Group.prototype.orderSubgroups = function() { - if (this.subgroupOrderer !== undefined) { - var sortArray = []; - if (typeof this.subgroupOrderer == 'string') { - for (var subgroup in this.subgroups) { - sortArray.push({subgroup: subgroup, sortField: this.subgroups[subgroup].items[0].data[this.subgroupOrderer]}) - } - sortArray.sort(function (a, b) { - return a.sortField - b.sortField; - }) - } - else if (typeof this.subgroupOrderer == 'function') { - for (var subgroup in this.subgroups) { - sortArray.push(this.subgroups[subgroup].items[0].data); - } - sortArray.sort(this.subgroupOrderer); - } - - if (sortArray.length > 0) { - for (var i = 0; i < sortArray.length; i++) { - this.subgroups[sortArray[i].subgroup].index = i; - } - } - } - }; - - Group.prototype.resetSubgroups = function() { - for (var subgroup in this.subgroups) { - if (this.subgroups.hasOwnProperty(subgroup)) { - this.subgroups[subgroup].visible = false; - } - } - }; - - /** - * Remove an item from the group - * @param {Item} item - */ - Group.prototype.remove = function(item) { - delete this.items[item.id]; - item.setParent(null); - - // remove from visible items - var index = this.visibleItems.indexOf(item); - if (index != -1) this.visibleItems.splice(index, 1); - - // TODO: also remove from ordered items? - }; - - - /** - * Remove an item from the corresponding DataSet - * @param {Item} item - */ - Group.prototype.removeFromDataSet = function(item) { - this.itemSet.removeItem(item.id); - }; - - - /** - * Reorder the items - */ - Group.prototype.order = function() { - var array = util.toArray(this.items); - var startArray = []; - var endArray = []; - - for (var i = 0; i < array.length; i++) { - if (array[i].data.end !== undefined) { - endArray.push(array[i]); - } - startArray.push(array[i]); - } - this.orderedItems = { - byStart: startArray, - byEnd: endArray - }; - - stack.orderByStart(this.orderedItems.byStart); - stack.orderByEnd(this.orderedItems.byEnd); - }; - - - /** - * Update the visible items - * @param {{byStart: Item[], byEnd: Item[]}} orderedItems All items ordered by start date and by end date - * @param {Item[]} visibleItems The previously visible items. - * @param {{start: number, end: number}} range Visible range - * @return {Item[]} visibleItems The new visible items. - * @private - */ - Group.prototype._updateVisibleItems = function(orderedItems, oldVisibleItems, range) { - var visibleItems = []; - var visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems - var interval = (range.end - range.start) / 4; - var lowerBound = range.start - interval; - var upperBound = range.end + interval; - var item, i; - - // this function is used to do the binary search. - var searchFunction = function (value) { - if (value < lowerBound) {return -1;} - else if (value <= upperBound) {return 0;} - else {return 1;} - } - - // first check if the items that were in view previously are still in view. - // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window! - // also cleans up invisible items. - if (oldVisibleItems.length > 0) { - for (i = 0; i < oldVisibleItems.length; i++) { - this._checkIfVisibleWithReference(oldVisibleItems[i], visibleItems, visibleItemsLookup, range); - } - } - - // we do a binary search for the items that have only start values. - var initialPosByStart = util.binarySearchCustom(orderedItems.byStart, searchFunction, 'data','start'); - - // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values. - this._traceVisible(initialPosByStart, orderedItems.byStart, visibleItems, visibleItemsLookup, function (item) { - return (item.data.start < lowerBound || item.data.start > upperBound); - }); - - // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown. - // We therefore have to brute force check all items in the byEnd list - if (this.checkRangedItems == true) { - this.checkRangedItems = false; - for (i = 0; i < orderedItems.byEnd.length; i++) { - this._checkIfVisibleWithReference(orderedItems.byEnd[i], visibleItems, visibleItemsLookup, range); - } - } - else { - // we do a binary search for the items that have defined end times. - var initialPosByEnd = util.binarySearchCustom(orderedItems.byEnd, searchFunction, 'data','end'); - - // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values. - this._traceVisible(initialPosByEnd, orderedItems.byEnd, visibleItems, visibleItemsLookup, function (item) { - return (item.data.end < lowerBound || item.data.end > upperBound); - }); - } - - - // finally, we reposition all the visible items. - for (i = 0; i < visibleItems.length; i++) { - item = visibleItems[i]; - if (!item.displayed) item.show(); - // reposition item horizontally - item.repositionX(); - } - - // debug - //console.log("new line") - //if (this.groupId == null) { - // for (i = 0; i < orderedItems.byStart.length; i++) { - // item = orderedItems.byStart[i].data; - // console.log('start',i,initialPosByStart, item.start.valueOf(), item.content, item.start >= lowerBound && item.start <= upperBound,i == initialPosByStart ? "<------------------- HEREEEE" : "") - // } - // for (i = 0; i < orderedItems.byEnd.length; i++) { - // item = orderedItems.byEnd[i].data; - // console.log('rangeEnd',i,initialPosByEnd, item.end.valueOf(), item.content, item.end >= range.start && item.end <= range.end,i == initialPosByEnd ? "<------------------- HEREEEE" : "") - // } - //} - - return visibleItems; - }; - - Group.prototype._traceVisible = function (initialPos, items, visibleItems, visibleItemsLookup, breakCondition) { - var item; - var i; - - if (initialPos != -1) { - for (i = initialPos; i >= 0; i--) { - item = items[i]; - if (breakCondition(item)) { - break; - } - else { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); - } - } - } - - for (i = initialPos + 1; i < items.length; i++) { - item = items[i]; - if (breakCondition(item)) { - break; - } - else { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); - } - } - } - } - } - - - /** - * this function is very similar to the _checkIfInvisible() but it does not - * return booleans, hides the item if it should not be seen and always adds to - * the visibleItems. - * this one is for brute forcing and hiding. - * - * @param {Item} item - * @param {Array} visibleItems - * @param {{start:number, end:number}} range - * @private - */ - Group.prototype._checkIfVisible = function(item, visibleItems, range) { - if (item.isVisible(range)) { - if (!item.displayed) item.show(); - // reposition item horizontally - item.repositionX(); - visibleItems.push(item); - } - else { - if (item.displayed) item.hide(); - } - }; - - - /** - * this function is very similar to the _checkIfInvisible() but it does not - * return booleans, hides the item if it should not be seen and always adds to - * the visibleItems. - * this one is for brute forcing and hiding. - * - * @param {Item} item - * @param {Array} visibleItems - * @param {{start:number, end:number}} range - * @private - */ - Group.prototype._checkIfVisibleWithReference = function(item, visibleItems, visibleItemsLookup, range) { - if (item.isVisible(range)) { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); - } - } - else { - if (item.displayed) item.hide(); - } - }; - - - - module.exports = Group; - - -/***/ }, -/* 26 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var Group = __webpack_require__(25); - - /** - * @constructor BackgroundGroup - * @param {Number | String} groupId - * @param {Object} data - * @param {ItemSet} itemSet - */ - function BackgroundGroup (groupId, data, itemSet) { - Group.call(this, groupId, data, itemSet); - - this.width = 0; - this.height = 0; - this.top = 0; - this.left = 0; - } - - BackgroundGroup.prototype = Object.create(Group.prototype); - - /** - * Repaint this group - * @param {{start: number, end: number}} range - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @param {boolean} [restack=false] Force restacking of all items - * @return {boolean} Returns true if the group is resized - */ - BackgroundGroup.prototype.redraw = function(range, margin, restack) { - var resized = false; - - this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); - - // calculate actual size - this.width = this.dom.background.offsetWidth; - - // apply new height (just always zero for BackgroundGroup - this.dom.background.style.height = '0'; - - // update vertical position of items after they are re-stacked and the height of the group is calculated - for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { - var item = this.visibleItems[i]; - item.repositionY(margin); - } - - return resized; - }; - - /** - * Show this group: attach to the DOM - */ - BackgroundGroup.prototype.show = function() { - if (!this.dom.background.parentNode) { - this.itemSet.dom.background.appendChild(this.dom.background); - } - }; - - module.exports = BackgroundGroup; - - -/***/ }, -/* 27 */ -/***/ function(module, exports, __webpack_require__) { - - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Component = __webpack_require__(20); - var Group = __webpack_require__(25); - var BackgroundGroup = __webpack_require__(26); - var BoxItem = __webpack_require__(33); - var PointItem = __webpack_require__(34); - var RangeItem = __webpack_require__(35); - var BackgroundItem = __webpack_require__(32); - - - var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items - var BACKGROUND = '__background__'; // reserved group id for background items without group - - /** - * An ItemSet holds a set of items and ranges which can be displayed in a - * range. The width is determined by the parent of the ItemSet, and the height - * is determined by the size of the items. - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body - * @param {Object} [options] See ItemSet.setOptions for the available options. - * @constructor ItemSet - * @extends Component - */ - function ItemSet(body, options) { - this.body = body; - - this.defaultOptions = { - type: null, // 'box', 'point', 'range', 'background' - orientation: 'bottom', // 'top' or 'bottom' - align: 'auto', // alignment of box items - stack: true, - groupOrder: null, - - selectable: true, - editable: { - updateTime: false, - updateGroup: false, - add: false, - remove: false - }, - - onAdd: function (item, callback) { - callback(item); - }, - onUpdate: function (item, callback) { - callback(item); - }, - onMove: function (item, callback) { - callback(item); - }, - onRemove: function (item, callback) { - callback(item); - }, - onMoving: function (item, callback) { - callback(item); - }, - - margin: { - item: { - horizontal: 10, - vertical: 10 - }, - axis: 20 - }, - padding: 5 - }; - - // options is shared by this ItemSet and all its items - this.options = util.extend({}, this.defaultOptions); - - // options for getting items from the DataSet with the correct type - this.itemOptions = { - type: {start: 'Date', end: 'Date'} - }; - - this.conversion = { - toScreen: body.util.toScreen, - toTime: body.util.toTime - }; - this.dom = {}; - this.props = {}; - this.hammer = null; - - var me = this; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet - - // listeners for the DataSet of the items - this.itemListeners = { - 'add': function (event, params, senderId) { - me._onAdd(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdate(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemove(params.items); - } - }; - - // listeners for the DataSet of the groups - this.groupListeners = { - 'add': function (event, params, senderId) { - me._onAddGroups(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdateGroups(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemoveGroups(params.items); - } - }; - - this.items = {}; // object with an Item for every data item - this.groups = {}; // Group object for every group - this.groupIds = []; - - this.selection = []; // list with the ids of all selected nodes - this.stackDirty = true; // if true, all items will be restacked on next redraw - - this.touchParams = {}; // stores properties while dragging - // create the HTML DOM - - this._create(); - - this.setOptions(options); - } - - ItemSet.prototype = new Component(); - - // available item types will be registered here - ItemSet.types = { - background: BackgroundItem, - box: BoxItem, - range: RangeItem, - point: PointItem - }; - - /** - * Create the HTML DOM for the ItemSet - */ - ItemSet.prototype._create = function(){ - var frame = document.createElement('div'); - frame.className = 'itemset'; - frame['timeline-itemset'] = this; - this.dom.frame = frame; - - // create background panel - var background = document.createElement('div'); - background.className = 'background'; - frame.appendChild(background); - this.dom.background = background; - - // create foreground panel - var foreground = document.createElement('div'); - foreground.className = 'foreground'; - frame.appendChild(foreground); - this.dom.foreground = foreground; - - // create axis panel - var axis = document.createElement('div'); - axis.className = 'axis'; - this.dom.axis = axis; - - // create labelset - var labelSet = document.createElement('div'); - labelSet.className = 'labelset'; - this.dom.labelSet = labelSet; - - // create ungrouped Group - this._updateUngrouped(); - - // create background Group - var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this); - backgroundGroup.show(); - this.groups[BACKGROUND] = backgroundGroup; - - // attach event listeners - // Note: we bind to the centerContainer for the case where the height - // of the center container is larger than of the ItemSet, so we - // can click in the empty area to create a new item or deselect an item. - this.hammer = Hammer(this.body.dom.centerContainer, { - preventDefault: true - }); - - // drag items when selected - this.hammer.on('touch', this._onTouch.bind(this)); - this.hammer.on('dragstart', this._onDragStart.bind(this)); - this.hammer.on('drag', this._onDrag.bind(this)); - this.hammer.on('dragend', this._onDragEnd.bind(this)); - - // single select (or unselect) when tapping an item - this.hammer.on('tap', this._onSelectItem.bind(this)); - - // multi select when holding mouse/touch, or on ctrl+click - this.hammer.on('hold', this._onMultiSelectItem.bind(this)); - - // add item on doubletap - this.hammer.on('doubletap', this._onAddItem.bind(this)); - - // attach to the DOM - this.show(); - }; - - /** - * Set options for the ItemSet. Existing options will be extended/overwritten. - * @param {Object} [options] The following options are available: - * {String} type - * Default type for the items. Choose from 'box' - * (default), 'point', 'range', or 'background'. - * The default style can be overwritten by - * individual items. - * {String} align - * Alignment for the items, only applicable for - * BoxItem. Choose 'center' (default), 'left', or - * 'right'. - * {String} orientation - * Orientation of the item set. Choose 'top' or - * 'bottom' (default). - * {Function} groupOrder - * A sorting function for ordering groups - * {Boolean} stack - * If true (deafult), items will be stacked on - * top of each other. - * {Number} margin.axis - * Margin between the axis and the items in pixels. - * Default is 20. - * {Number} margin.item.horizontal - * Horizontal margin between items in pixels. - * Default is 10. - * {Number} margin.item.vertical - * Vertical Margin between items in pixels. - * Default is 10. - * {Number} margin.item - * Margin between items in pixels in both horizontal - * and vertical direction. Default is 10. - * {Number} margin - * Set margin for both axis and items in pixels. - * {Number} padding - * Padding of the contents of an item in pixels. - * Must correspond with the items css. Default is 5. - * {Boolean} selectable - * If true (default), items can be selected. - * {Boolean} editable - * Set all editable options to true or false - * {Boolean} editable.updateTime - * Allow dragging an item to an other moment in time - * {Boolean} editable.updateGroup - * Allow dragging an item to an other group - * {Boolean} editable.add - * Allow creating new items on double tap - * {Boolean} editable.remove - * Allow removing items by clicking the delete button - * top right of a selected item. - * {Function(item: Item, callback: Function)} onAdd - * Callback function triggered when an item is about to be added: - * when the user double taps an empty space in the Timeline. - * {Function(item: Item, callback: Function)} onUpdate - * Callback function fired when an item is about to be updated. - * This function typically has to show a dialog where the user - * change the item. If not implemented, nothing happens. - * {Function(item: Item, callback: Function)} onMove - * Fired when an item has been moved. If not implemented, - * the move action will be accepted. - * {Function(item: Item, callback: Function)} onRemove - * Fired when an item is about to be deleted. - * If not implemented, the item will be always removed. - */ - ItemSet.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - var fields = ['type', 'align', 'orientation', 'padding', 'stack', 'selectable', 'groupOrder', 'dataAttributes', 'template','hide']; - util.selectiveExtend(fields, this.options, options); - - if ('margin' in options) { - if (typeof options.margin === 'number') { - this.options.margin.axis = options.margin; - this.options.margin.item.horizontal = options.margin; - this.options.margin.item.vertical = options.margin; - } - else if (typeof options.margin === 'object') { - util.selectiveExtend(['axis'], this.options.margin, options.margin); - if ('item' in options.margin) { - if (typeof options.margin.item === 'number') { - this.options.margin.item.horizontal = options.margin.item; - this.options.margin.item.vertical = options.margin.item; - } - else if (typeof options.margin.item === 'object') { - util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item); - } - } - } - } - - if ('editable' in options) { - if (typeof options.editable === 'boolean') { - this.options.editable.updateTime = options.editable; - this.options.editable.updateGroup = options.editable; - this.options.editable.add = options.editable; - this.options.editable.remove = options.editable; - } - else if (typeof options.editable === 'object') { - util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove'], this.options.editable, options.editable); - } - } - - // callback functions - var addCallback = (function (name) { - var fn = options[name]; - if (fn) { - if (!(fn instanceof Function)) { - throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)'); - } - this.options[name] = fn; - } - }).bind(this); - ['onAdd', 'onUpdate', 'onRemove', 'onMove', 'onMoving'].forEach(addCallback); - - // force the itemSet to refresh: options like orientation and margins may be changed - this.markDirty(); - } - }; - - /** - * Mark the ItemSet dirty so it will refresh everything with next redraw - */ - ItemSet.prototype.markDirty = function() { - this.groupIds = []; - this.stackDirty = true; - }; - - /** - * Destroy the ItemSet - */ - ItemSet.prototype.destroy = function() { - this.hide(); - this.setItems(null); - this.setGroups(null); - - this.hammer = null; - - this.body = null; - this.conversion = null; - }; - - /** - * Hide the component from the DOM - */ - ItemSet.prototype.hide = function() { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - - // remove the axis with dots - if (this.dom.axis.parentNode) { - this.dom.axis.parentNode.removeChild(this.dom.axis); - } - - // remove the labelset containing all group labels - if (this.dom.labelSet.parentNode) { - this.dom.labelSet.parentNode.removeChild(this.dom.labelSet); - } - }; - - /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed - */ - ItemSet.prototype.show = function() { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } - - // show axis with dots - if (!this.dom.axis.parentNode) { - this.body.dom.backgroundVertical.appendChild(this.dom.axis); - } - - // show labelset containing labels - if (!this.dom.labelSet.parentNode) { - this.body.dom.left.appendChild(this.dom.labelSet); - } - }; - - /** - * Set selected items by their id. Replaces the current selection - * Unknown id's are silently ignored. - * @param {string[] | string} [ids] An array with zero or more id's of the items to be - * selected, or a single item id. If ids is undefined - * or an empty array, all items will be unselected. - */ - ItemSet.prototype.setSelection = function(ids) { - var i, ii, id, item; - - if (ids == undefined) ids = []; - if (!Array.isArray(ids)) ids = [ids]; - - // unselect currently selected items - for (i = 0, ii = this.selection.length; i < ii; i++) { - id = this.selection[i]; - item = this.items[id]; - if (item) item.unselect(); - } - - // select items - this.selection = []; - for (i = 0, ii = ids.length; i < ii; i++) { - id = ids[i]; - item = this.items[id]; - if (item) { - this.selection.push(id); - item.select(); - } - } - }; - - /** - * Get the selected items by their id - * @return {Array} ids The ids of the selected items - */ - ItemSet.prototype.getSelection = function() { - return this.selection.concat([]); - }; - - /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items - */ - ItemSet.prototype.getVisibleItems = function() { - var range = this.body.range.getRange(); - var left = this.body.util.toScreen(range.start); - var right = this.body.util.toScreen(range.end); - - var ids = []; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - var group = this.groups[groupId]; - var rawVisibleItems = group.visibleItems; - - // filter the "raw" set with visibleItems into a set which is really - // visible by pixels - for (var i = 0; i < rawVisibleItems.length; i++) { - var item = rawVisibleItems[i]; - // TODO: also check whether visible vertically - if ((item.left < right) && (item.left + item.width > left)) { - ids.push(item.id); - } - } - } - } - - return ids; - }; - - /** - * Deselect a selected item - * @param {String | Number} id - * @private - */ - ItemSet.prototype._deselect = function(id) { - var selection = this.selection; - for (var i = 0, ii = selection.length; i < ii; i++) { - if (selection[i] == id) { // non-strict comparison! - selection.splice(i, 1); - break; - } - } - }; - - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - ItemSet.prototype.redraw = function() { - var margin = this.options.margin, - range = this.body.range, - asSize = util.option.asSize, - options = this.options, - orientation = options.orientation, - resized = false, - frame = this.dom.frame, - editable = options.editable.updateTime || options.editable.updateGroup; - - // recalculate absolute position (before redrawing groups) - this.props.top = this.body.domProps.top.height + this.body.domProps.border.top; - this.props.left = this.body.domProps.left.width + this.body.domProps.border.left; - - // update class name - frame.className = 'itemset' + (editable ? ' editable' : ''); - - // reorder the groups (if needed) - resized = this._orderGroups() || resized; - - // check whether zoomed (in that case we need to re-stack everything) - // TODO: would be nicer to get this as a trigger from Range - var visibleInterval = range.end - range.start; - var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.props.width != this.props.lastWidth); - if (zoomed) this.stackDirty = true; - this.lastVisibleInterval = visibleInterval; - this.props.lastWidth = this.props.width; - - var restack = this.stackDirty; - var firstGroup = this._firstGroup(); - var firstMargin = { - item: margin.item, - axis: margin.axis - }; - var nonFirstMargin = { - item: margin.item, - axis: margin.item.vertical / 2 - }; - var height = 0; - var minHeight = margin.axis + margin.item.vertical; - - // redraw the background group - this.groups[BACKGROUND].redraw(range, nonFirstMargin, restack); - - // redraw all regular groups - util.forEach(this.groups, function (group) { - var groupMargin = (group == firstGroup) ? firstMargin : nonFirstMargin; - var groupResized = group.redraw(range, groupMargin, restack); - resized = groupResized || resized; - height += group.height; - }); - height = Math.max(height, minHeight); - this.stackDirty = false; - - // update frame height - frame.style.height = asSize(height); - - // calculate actual size - this.props.width = frame.offsetWidth; - this.props.height = height; - - // reposition axis - this.dom.axis.style.top = asSize((orientation == 'top') ? - (this.body.domProps.top.height + this.body.domProps.border.top) : - (this.body.domProps.top.height + this.body.domProps.centerContainer.height)); - this.dom.axis.style.left = '0'; - - // check if this component is resized - resized = this._isResized() || resized; - - return resized; - }; - - /** - * Get the first group, aligned with the axis - * @return {Group | null} firstGroup - * @private - */ - ItemSet.prototype._firstGroup = function() { - var firstGroupIndex = (this.options.orientation == 'top') ? 0 : (this.groupIds.length - 1); - var firstGroupId = this.groupIds[firstGroupIndex]; - var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED]; - - return firstGroup || null; - }; - - /** - * Create or delete the group holding all ungrouped items. This group is used when - * there are no groups specified. - * @protected - */ - ItemSet.prototype._updateUngrouped = function() { - var ungrouped = this.groups[UNGROUPED]; - var background = this.groups[BACKGROUND]; - var item, itemId; - - if (this.groupsData) { - // remove the group holding all ungrouped items - if (ungrouped) { - ungrouped.hide(); - delete this.groups[UNGROUPED]; - - for (itemId in this.items) { - if (this.items.hasOwnProperty(itemId)) { - item = this.items[itemId]; - item.parent && item.parent.remove(item); - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - group && group.add(item) || item.hide(); - } - } - } - } - else { - // create a group holding all (unfiltered) items - if (!ungrouped) { - var id = null; - var data = null; - ungrouped = new Group(id, data, this); - this.groups[UNGROUPED] = ungrouped; - - for (itemId in this.items) { - if (this.items.hasOwnProperty(itemId)) { - item = this.items[itemId]; - ungrouped.add(item); - } - } - - ungrouped.show(); - } - } - }; - - /** - * Get the element for the labelset - * @return {HTMLElement} labelSet - */ - ItemSet.prototype.getLabelSet = function() { - return this.dom.labelSet; - }; - - /** - * Set items - * @param {vis.DataSet | null} items - */ - ItemSet.prototype.setItems = function(items) { - var me = this, - ids, - oldItemsData = this.itemsData; - - // replace the dataset - if (!items) { - this.itemsData = null; - } - else if (items instanceof DataSet || items instanceof DataView) { - this.itemsData = items; - } - else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } - - if (oldItemsData) { - // unsubscribe from old dataset - util.forEach(this.itemListeners, function (callback, event) { - oldItemsData.off(event, callback); - }); - - // remove all drawn items - ids = oldItemsData.getIds(); - this._onRemove(ids); - } - - if (this.itemsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.itemListeners, function (callback, event) { - me.itemsData.on(event, callback, id); - }); - - // add all new items - ids = this.itemsData.getIds(); - this._onAdd(ids); - - // update the group holding all ungrouped items - this._updateUngrouped(); - } - }; - - /** - * Get the current items - * @returns {vis.DataSet | null} - */ - ItemSet.prototype.getItems = function() { - return this.itemsData; - }; - - /** - * Set groups - * @param {vis.DataSet} groups - */ - ItemSet.prototype.setGroups = function(groups) { - var me = this, - ids; - - // unsubscribe from current dataset - if (this.groupsData) { - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.unsubscribe(event, callback); - }); - - // remove all drawn groups - ids = this.groupsData.getIds(); - this.groupsData = null; - this._onRemoveGroups(ids); // note: this will cause a redraw - } - - // replace the dataset - if (!groups) { - this.groupsData = null; - } - else if (groups instanceof DataSet || groups instanceof DataView) { - this.groupsData = groups; - } - else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } - - if (this.groupsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.on(event, callback, id); - }); - - // draw all ms - ids = this.groupsData.getIds(); - this._onAddGroups(ids); - } - - // update the group holding all ungrouped items - this._updateUngrouped(); - - // update the order of all items in each group - this._order(); - - this.body.emitter.emit('change', {queue: true}); - }; - - /** - * Get the current groups - * @returns {vis.DataSet | null} groups - */ - ItemSet.prototype.getGroups = function() { - return this.groupsData; - }; - - /** - * Remove an item by its id - * @param {String | Number} id - */ - ItemSet.prototype.removeItem = function(id) { - var item = this.itemsData.get(id), - dataset = this.itemsData.getDataSet(); - - if (item) { - // confirm deletion - this.options.onRemove(item, function (item) { - if (item) { - // remove by id here, it is possible that an item has no id defined - // itself, so better not delete by the item itself - dataset.remove(id); - } - }); - } - }; - - /** - * Get the time of an item based on it's data and options.type - * @param {Object} itemData - * @returns {string} Returns the type - * @private - */ - ItemSet.prototype._getType = function (itemData) { - return itemData.type || this.options.type || (itemData.end ? 'range' : 'box'); - }; - - - /** - * Get the group id for an item - * @param {Object} itemData - * @returns {string} Returns the groupId - * @private - */ - ItemSet.prototype._getGroupId = function (itemData) { - var type = this._getType(itemData); - if (type == 'background' && itemData.group == undefined) { - return BACKGROUND; - } - else { - return this.groupsData ? itemData.group : UNGROUPED; - } - }; - - /** - * Handle updated items - * @param {Number[]} ids - * @protected - */ - ItemSet.prototype._onUpdate = function(ids) { - var me = this; - - ids.forEach(function (id) { - var itemData = me.itemsData.get(id, me.itemOptions); - var item = me.items[id]; - var type = me._getType(itemData); - - var constructor = ItemSet.types[type]; - - if (item) { - // update item - if (!constructor || !(item instanceof constructor)) { - // item type has changed, delete the item and recreate it - me._removeItem(item); - item = null; - } - else { - me._updateItem(item, itemData); - } - } - - if (!item) { - // create item - if (constructor) { - item = new constructor(itemData, me.conversion, me.options); - item.id = id; // TODO: not so nice setting id afterwards - me._addItem(item); - } - else if (type == 'rangeoverflow') { - // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day - throw new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: ' + - '.vis.timeline .item.range .content {overflow: visible;}'); - } - else { - throw new TypeError('Unknown item type "' + type + '"'); - } - } - }); - - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change', {queue: true}); - }; - - /** - * Handle added items - * @param {Number[]} ids - * @protected - */ - ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; - - /** - * Handle removed items - * @param {Number[]} ids - * @protected - */ - ItemSet.prototype._onRemove = function(ids) { - var count = 0; - var me = this; - ids.forEach(function (id) { - var item = me.items[id]; - if (item) { - count++; - me._removeItem(item); - } - }); - - if (count) { - // update order - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change', {queue: true}); - } - }; - - /** - * Update the order of item in all groups - * @private - */ - ItemSet.prototype._order = function() { - // reorder the items in all groups - // TODO: optimization: only reorder groups affected by the changed items - util.forEach(this.groups, function (group) { - group.order(); - }); - }; - - /** - * Handle updated groups - * @param {Number[]} ids - * @private - */ - ItemSet.prototype._onUpdateGroups = function(ids) { - this._onAddGroups(ids); - }; - - /** - * Handle changed groups (added or updated) - * @param {Number[]} ids - * @private - */ - ItemSet.prototype._onAddGroups = function(ids) { - var me = this; - - ids.forEach(function (id) { - var groupData = me.groupsData.get(id); - var group = me.groups[id]; - - if (!group) { - // check for reserved ids - if (id == UNGROUPED || id == BACKGROUND) { - throw new Error('Illegal group id. ' + id + ' is a reserved id.'); - } - - var groupOptions = Object.create(me.options); - util.extend(groupOptions, { - height: null - }); - - group = new Group(id, groupData, me); - me.groups[id] = group; - - // add items with this groupId to the new group - for (var itemId in me.items) { - if (me.items.hasOwnProperty(itemId)) { - var item = me.items[itemId]; - if (item.data.group == id) { - group.add(item); - } - } - } - - group.order(); - group.show(); - } - else { - // update group - group.setData(groupData); - } - }); - - this.body.emitter.emit('change', {queue: true}); - }; - - /** - * Handle removed groups - * @param {Number[]} ids - * @private - */ - ItemSet.prototype._onRemoveGroups = function(ids) { - var groups = this.groups; - ids.forEach(function (id) { - var group = groups[id]; - - if (group) { - group.hide(); - delete groups[id]; - } - }); - - this.markDirty(); - - this.body.emitter.emit('change', {queue: true}); - }; - - /** - * Reorder the groups if needed - * @return {boolean} changed - * @private - */ - ItemSet.prototype._orderGroups = function () { - if (this.groupsData) { - // reorder the groups - var groupIds = this.groupsData.getIds({ - order: this.options.groupOrder - }); - - var changed = !util.equalArray(groupIds, this.groupIds); - if (changed) { - // hide all groups, removes them from the DOM - var groups = this.groups; - groupIds.forEach(function (groupId) { - groups[groupId].hide(); - }); - - // show the groups again, attach them to the DOM in correct order - groupIds.forEach(function (groupId) { - groups[groupId].show(); - }); - - this.groupIds = groupIds; - } - - return changed; - } - else { - return false; - } - }; - - /** - * Add a new item - * @param {Item} item - * @private - */ - ItemSet.prototype._addItem = function(item) { - this.items[item.id] = item; - - // add to group - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - if (group) group.add(item); - }; - - /** - * Update an existing item - * @param {Item} item - * @param {Object} itemData - * @private - */ - ItemSet.prototype._updateItem = function(item, itemData) { - var oldGroupId = item.data.group; - - // update the items data (will redraw the item when displayed) - item.setData(itemData); - - // update group - if (oldGroupId != item.data.group) { - var oldGroup = this.groups[oldGroupId]; - if (oldGroup) oldGroup.remove(item); - - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - if (group) group.add(item); - } - }; - - /** - * Delete an item from the ItemSet: remove it from the DOM, from the map - * with items, and from the map with visible items, and from the selection - * @param {Item} item - * @private - */ - ItemSet.prototype._removeItem = function(item) { - // remove from DOM - item.hide(); - - // remove from items - delete this.items[item.id]; - - // remove from selection - var index = this.selection.indexOf(item.id); - if (index != -1) this.selection.splice(index, 1); - - // remove from group - item.parent && item.parent.remove(item); - }; - - /** - * Create an array containing all items being a range (having an end date) - * @param array - * @returns {Array} - * @private - */ - ItemSet.prototype._constructByEndArray = function(array) { - var endArray = []; - - for (var i = 0; i < array.length; i++) { - if (array[i] instanceof RangeItem) { - endArray.push(array[i]); - } - } - return endArray; - }; - - /** - * Register the clicked item on touch, before dragStart is initiated. - * - * dragStart is initiated from a mousemove event, which can have left the item - * already resulting in an item == null - * - * @param {Event} event - * @private - */ - ItemSet.prototype._onTouch = function (event) { - // store the touched item, used in _onDragStart - this.touchParams.item = ItemSet.itemFromTarget(event); - }; - - /** - * Start dragging the selected events - * @param {Event} event - * @private - */ - ItemSet.prototype._onDragStart = function (event) { - if (!this.options.editable.updateTime && !this.options.editable.updateGroup) { - return; - } - - var item = this.touchParams.item || null; - var me = this; - var props; - - if (item && item.selected) { - var dragLeftItem = event.target.dragLeftItem; - var dragRightItem = event.target.dragRightItem; - - if (dragLeftItem) { - props = { - item: dragLeftItem, - initialX: event.gesture.center.clientX - }; - - if (me.options.editable.updateTime) { - props.start = item.data.start.valueOf(); - } - if (me.options.editable.updateGroup) { - if ('group' in item.data) props.group = item.data.group; - } - - this.touchParams.itemProps = [props]; - } - else if (dragRightItem) { - props = { - item: dragRightItem, - initialX: event.gesture.center.clientX - }; - - if (me.options.editable.updateTime) { - props.end = item.data.end.valueOf(); - } - if (me.options.editable.updateGroup) { - if ('group' in item.data) props.group = item.data.group; - } - - this.touchParams.itemProps = [props]; - } - else { - this.touchParams.itemProps = this.getSelection().map(function (id) { - var item = me.items[id]; - var props = { - item: item, - initialX: event.gesture.center.clientX - }; - - if (me.options.editable.updateTime) { - if ('start' in item.data) props.start = item.data.start.valueOf(); - if ('end' in item.data) props.end = item.data.end.valueOf(); - } - if (me.options.editable.updateGroup) { - if ('group' in item.data) props.group = item.data.group; - } - - return props; - }); - } - - event.stopPropagation(); - } - }; - - /** - * Drag selected items - * @param {Event} event - * @private - */ - ItemSet.prototype._onDrag = function (event) { - event.preventDefault() - - if (this.touchParams.itemProps) { - var me = this; - var snap = this.body.util.snap || null; - var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.left.width; - - // move - this.touchParams.itemProps.forEach(function (props) { - var newProps = {}; - var current = me.body.util.toTime(event.gesture.center.clientX - xOffset); - var initial = me.body.util.toTime(props.initialX - xOffset); - var offset = current - initial; - - if ('start' in props) { - var start = new Date(props.start + offset); - newProps.start = snap ? snap(start) : start; - } - - if ('end' in props) { - var end = new Date(props.end + offset); - newProps.end = snap ? snap(end) : end; - } - - if ('group' in props) { - // drag from one group to another - var group = ItemSet.groupFromTarget(event); - newProps.group = group && group.groupId; - } - - // confirm moving the item - var itemData = util.extend({}, props.item.data, newProps); - me.options.onMoving(itemData, function (itemData) { - if (itemData) { - me._updateItemProps(props.item, itemData); - } - }); - }); - - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change'); - - event.stopPropagation(); - } - }; - - /** - * Update an items properties - * @param {Item} item - * @param {Object} props Can contain properties start, end, and group. - * @private - */ - ItemSet.prototype._updateItemProps = function(item, props) { - // TODO: copy all properties from props to item? (also new ones) - if ('start' in props) item.data.start = props.start; - if ('end' in props) item.data.end = props.end; - if ('group' in props && item.data.group != props.group) { - this._moveToGroup(item, props.group) - } - }; - - /** - * Move an item to another group - * @param {Item} item - * @param {String | Number} groupId - * @private - */ - ItemSet.prototype._moveToGroup = function(item, groupId) { - var group = this.groups[groupId]; - if (group && group.groupId != item.data.group) { - var oldGroup = item.parent; - oldGroup.remove(item); - oldGroup.order(); - group.add(item); - group.order(); - - item.data.group = group.groupId; - } - }; - - /** - * End of dragging selected items - * @param {Event} event - * @private - */ - ItemSet.prototype._onDragEnd = function (event) { - event.preventDefault() - - if (this.touchParams.itemProps) { - // prepare a change set for the changed items - var changes = [], - me = this, - dataset = this.itemsData.getDataSet(); - - var itemProps = this.touchParams.itemProps ; - this.touchParams.itemProps = null; - itemProps.forEach(function (props) { - var id = props.item.id, - itemData = me.itemsData.get(id, me.itemOptions); - - var changed = false; - if ('start' in props.item.data) { - changed = (props.start != props.item.data.start.valueOf()); - itemData.start = util.convert(props.item.data.start, - dataset._options.type && dataset._options.type.start || 'Date'); - } - if ('end' in props.item.data) { - changed = changed || (props.end != props.item.data.end.valueOf()); - itemData.end = util.convert(props.item.data.end, - dataset._options.type && dataset._options.type.end || 'Date'); - } - if ('group' in props.item.data) { - changed = changed || (props.group != props.item.data.group); - itemData.group = props.item.data.group; - } - - // only apply changes when start or end is actually changed - if (changed) { - me.options.onMove(itemData, function (itemData) { - if (itemData) { - // apply changes - itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined) - changes.push(itemData); - } - else { - // restore original values - me._updateItemProps(props.item, props); - - me.stackDirty = true; // force re-stacking of all items next redraw - me.body.emitter.emit('change'); - } - }); - } - }); - - // apply the changes to the data (if there are changes) - if (changes.length) { - dataset.update(changes); - } - - event.stopPropagation(); - } - }; - - /** - * Handle selecting/deselecting an item when tapping it - * @param {Event} event - * @private - */ - ItemSet.prototype._onSelectItem = function (event) { - if (!this.options.selectable) return; - - var ctrlKey = event.gesture.srcEvent && event.gesture.srcEvent.ctrlKey; - var shiftKey = event.gesture.srcEvent && event.gesture.srcEvent.shiftKey; - if (ctrlKey || shiftKey) { - this._onMultiSelectItem(event); - return; - } - - var oldSelection = this.getSelection(); - - var item = ItemSet.itemFromTarget(event); - var selection = item ? [item.id] : []; - this.setSelection(selection); - - var newSelection = this.getSelection(); - - // emit a select event, - // except when old selection is empty and new selection is still empty - if (newSelection.length > 0 || oldSelection.length > 0) { - this.body.emitter.emit('select', { - items: newSelection - }); - } - }; - - /** - * Handle creation and updates of an item on double tap - * @param event - * @private - */ - ItemSet.prototype._onAddItem = function (event) { - if (!this.options.selectable) return; - if (!this.options.editable.add) return; - - var me = this, - snap = this.body.util.snap || null, - item = ItemSet.itemFromTarget(event); - - if (item) { - // update item - - // execute async handler to update the item (or cancel it) - var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset - this.options.onUpdate(itemData, function (itemData) { - if (itemData) { - me.itemsData.getDataSet().update(itemData); - } - }); - } - else { - // add item - var xAbs = util.getAbsoluteLeft(this.dom.frame); - var x = event.gesture.center.pageX - xAbs; - var start = this.body.util.toTime(x); - var newItem = { - start: snap ? snap(start) : start, - content: 'new item' - }; - - // when default type is a range, add a default end date to the new item - if (this.options.type === 'range') { - var end = this.body.util.toTime(x + this.props.width / 5); - newItem.end = snap ? snap(end) : end; - } - - newItem[this.itemsData._fieldId] = util.randomUUID(); - - var group = ItemSet.groupFromTarget(event); - if (group) { - newItem.group = group.groupId; - } - - // execute async handler to customize (or cancel) adding an item - this.options.onAdd(newItem, function (item) { - if (item) { - me.itemsData.getDataSet().add(item); - // TODO: need to trigger a redraw? - } - }); - } - }; - - /** - * Handle selecting/deselecting multiple items when holding an item - * @param {Event} event - * @private - */ - ItemSet.prototype._onMultiSelectItem = function (event) { - if (!this.options.selectable) return; - - var selection, - item = ItemSet.itemFromTarget(event); - - if (item) { - // multi select items - selection = this.getSelection(); // current selection - - var shiftKey = event.gesture.touches[0] && event.gesture.touches[0].shiftKey || false; - if (shiftKey) { - // select all items between the old selection and the tapped item - - // determine the selection range - selection.push(item.id); - var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions)); - - // select all items within the selection range - selection = []; - for (var id in this.items) { - if (this.items.hasOwnProperty(id)) { - var _item = this.items[id]; - var start = _item.data.start; - var end = (_item.data.end !== undefined) ? _item.data.end : start; - - if (start >= range.min && end <= range.max) { - selection.push(_item.id); // do not use id but item.id, id itself is stringified - } - } - } - } - else { - // add/remove this item from the current selection - var index = selection.indexOf(item.id); - if (index == -1) { - // item is not yet selected -> select it - selection.push(item.id); - } - else { - // item is already selected -> deselect it - selection.splice(index, 1); - } - } - - this.setSelection(selection); - - this.body.emitter.emit('select', { - items: this.getSelection() - }); - } - }; - - /** - * Calculate the time range of a list of items - * @param {Array.} itemsData - * @return {{min: Date, max: Date}} Returns the range of the provided items - * @private - */ - ItemSet._getItemRange = function(itemsData) { - var max = null; - var min = null; - - itemsData.forEach(function (data) { - if (min == null || data.start < min) { - min = data.start; - } - - if (data.end != undefined) { - if (max == null || data.end > max) { - max = data.end; - } - } - else { - if (max == null || data.start > max) { - max = data.start; - } - } - }); - - return { - min: min, - max: max - } - }; - - /** - * Find an item from an event target: - * searches for the attribute 'timeline-item' in the event target's element tree - * @param {Event} event - * @return {Item | null} item - */ - ItemSet.itemFromTarget = function(event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-item')) { - return target['timeline-item']; - } - target = target.parentNode; - } - - return null; - }; - - /** - * Find the Group from an event target: - * searches for the attribute 'timeline-group' in the event target's element tree - * @param {Event} event - * @return {Group | null} group - */ - ItemSet.groupFromTarget = function(event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-group')) { - return target['timeline-group']; - } - target = target.parentNode; - } - - return null; - }; - - /** - * Find the ItemSet from an event target: - * searches for the attribute 'timeline-itemset' in the event target's element tree - * @param {Event} event - * @return {ItemSet | null} item - */ - ItemSet.itemSetFromTarget = function(event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-itemset')) { - return target['timeline-itemset']; - } - target = target.parentNode; - } - - return null; - }; - - module.exports = ItemSet; - - -/***/ }, -/* 28 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); - var Component = __webpack_require__(20); - - /** - * Legend for Graph2d - */ - function Legend(body, options, side, linegraphOptions) { - this.body = body; - this.defaultOptions = { - enabled: true, - icons: true, - iconSize: 20, - iconSpacing: 6, - left: { - visible: true, - position: 'top-left' // top/bottom - left,center,right - }, - right: { - visible: true, - position: 'top-left' // top/bottom - left,center,right - } - } - this.side = side; - this.options = util.extend({},this.defaultOptions); - this.linegraphOptions = linegraphOptions; - - this.svgElements = {}; - this.dom = {}; - this.groups = {}; - this.amountOfGroups = 0; - this._create(); - - this.setOptions(options); - } - - Legend.prototype = new Component(); - - Legend.prototype.clear = function() { - this.groups = {}; - this.amountOfGroups = 0; - } - - Legend.prototype.addGroup = function(label, graphOptions) { - - if (!this.groups.hasOwnProperty(label)) { - this.groups[label] = graphOptions; - } - this.amountOfGroups += 1; - }; - - Legend.prototype.updateGroup = function(label, graphOptions) { - this.groups[label] = graphOptions; - }; - - Legend.prototype.removeGroup = function(label) { - if (this.groups.hasOwnProperty(label)) { - delete this.groups[label]; - this.amountOfGroups -= 1; - } - }; - - Legend.prototype._create = function() { - this.dom.frame = document.createElement('div'); - this.dom.frame.className = 'legend'; - this.dom.frame.style.position = "absolute"; - this.dom.frame.style.top = "10px"; - this.dom.frame.style.display = "block"; - - this.dom.textArea = document.createElement('div'); - this.dom.textArea.className = 'legendText'; - this.dom.textArea.style.position = "relative"; - this.dom.textArea.style.top = "0px"; - - this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.svg.style.position = 'absolute'; - this.svg.style.top = 0 +'px'; - this.svg.style.width = this.options.iconSize + 5 + 'px'; - this.svg.style.height = '100%'; - - this.dom.frame.appendChild(this.svg); - this.dom.frame.appendChild(this.dom.textArea); - }; - - /** - * Hide the component from the DOM - */ - Legend.prototype.hide = function() { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - }; - - /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed - */ - Legend.prototype.show = function() { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } - }; - - Legend.prototype.setOptions = function(options) { - var fields = ['enabled','orientation','icons','left','right']; - util.selectiveDeepExtend(fields, this.options, options); - }; - - Legend.prototype.redraw = function() { - var activeGroups = 0; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - activeGroups++; - } - } - } - - if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) { - this.hide(); - } - else { - this.show(); - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') { - this.dom.frame.style.left = '4px'; - this.dom.frame.style.textAlign = "left"; - this.dom.textArea.style.textAlign = "left"; - this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px'; - this.dom.textArea.style.right = ''; - this.svg.style.left = 0 +'px'; - this.svg.style.right = ''; - } - else { - this.dom.frame.style.right = '4px'; - this.dom.frame.style.textAlign = "right"; - this.dom.textArea.style.textAlign = "right"; - this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px'; - this.dom.textArea.style.left = ''; - this.svg.style.right = 0 +'px'; - this.svg.style.left = ''; - } - - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') { - this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px'; - this.dom.frame.style.bottom = ''; - } - else { - var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height; - this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace("px","")) + 'px'; - this.dom.frame.style.top = ''; - } - - if (this.options.icons == false) { - this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px'; - this.dom.textArea.style.right = ''; - this.dom.textArea.style.left = ''; - this.svg.style.width = '0px'; - } - else { - this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px' - this.drawLegendIcons(); - } - - var content = ''; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - content += this.groups[groupId].content + '
'; - } - } - } - this.dom.textArea.innerHTML = content; - this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px'; - } - }; - - Legend.prototype.drawLegendIcons = function() { - if (this.dom.frame.parentNode) { - DOMutil.prepareElements(this.svgElements); - var padding = window.getComputedStyle(this.dom.frame).paddingTop; - var iconOffset = Number(padding.replace('px','')); - var x = iconOffset; - var iconWidth = this.options.iconSize; - var iconHeight = 0.75 * this.options.iconSize; - var y = iconOffset + 0.5 * iconHeight + 3; - - this.svg.style.width = iconWidth + 5 + iconOffset + 'px'; - - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); - y += iconHeight + this.options.iconSpacing; - } - } - } - - DOMutil.cleanupElements(this.svgElements); - } - }; - - module.exports = Legend; - - -/***/ }, -/* 29 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Component = __webpack_require__(20); - var DataAxis = __webpack_require__(23); - var GraphGroup = __webpack_require__(24); - var Legend = __webpack_require__(28); - var BarGraphFunctions = __webpack_require__(52); - - var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items - - /** - * This is the constructor of the LineGraph. It requires a Timeline body and options. - * - * @param body - * @param options - * @constructor - */ - function LineGraph(body, options) { - this.id = util.randomUUID(); - this.body = body; - - this.defaultOptions = { - yAxisOrientation: 'left', - defaultGroup: 'default', - sort: true, - sampling: true, - graphHeight: '400px', - shaded: { - enabled: false, - orientation: 'bottom' // top, bottom - }, - style: 'line', // line, bar - barChart: { - width: 50, - handleOverlap: 'overlap', - align: 'center' // left, center, right - }, - catmullRom: { - enabled: true, - parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5) - alpha: 0.5 - }, - drawPoints: { - enabled: true, - size: 6, - style: 'square' // square, circle - }, - dataAxis: { - showMinorLabels: true, - showMajorLabels: true, - icons: false, - width: '40px', - visible: true, - alignZeros: true, - customRange: { - left: {min:undefined, max:undefined}, - right: {min:undefined, max:undefined} - } - //, these options are not set by default, but this shows the format they will be in - //format: { - // left: {decimals: 2}, - // right: {decimals: 2} - //}, - //title: { - // left: { - // text: 'left', - // style: 'color:black;' - // }, - // right: { - // text: 'right', - // style: 'color:black;' - // } - //} - }, - legend: { - enabled: false, - icons: true, - left: { - visible: true, - position: 'top-left' // top/bottom - left,right - }, - right: { - visible: true, - position: 'top-right' // top/bottom - left,right - } - }, - groups: { - visibility: {} - } - }; - - // options is shared by this ItemSet and all its items - this.options = util.extend({}, this.defaultOptions); - this.dom = {}; - this.props = {}; - this.hammer = null; - this.groups = {}; - this.abortedGraphUpdate = false; - this.autoSizeSVG = false; - - var me = this; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet - - // listeners for the DataSet of the items - this.itemListeners = { - 'add': function (event, params, senderId) { - me._onAdd(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdate(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemove(params.items); - } - }; - - // listeners for the DataSet of the groups - this.groupListeners = { - 'add': function (event, params, senderId) { - me._onAddGroups(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdateGroups(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemoveGroups(params.items); - } - }; - - this.items = {}; // object with an Item for every data item - this.selection = []; // list with the ids of all selected nodes - this.lastStart = this.body.range.start; - this.touchParams = {}; // stores properties while dragging - - this.svgElements = {}; - this.setOptions(options); - this.groupsUsingDefaultStyles = [0]; - this.COUNTER = 0; - this.body.emitter.on('rangechanged', function() { - me.lastStart = me.body.range.start; - me.svg.style.left = util.option.asSize(-me.width); - me.redraw.call(me,true); - }); - - // create the HTML DOM - this._create(); - this.framework = {svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups}; - this.body.emitter.emit('change'); - - } - - LineGraph.prototype = new Component(); - - /** - * Create the HTML DOM for the ItemSet - */ - LineGraph.prototype._create = function(){ - var frame = document.createElement('div'); - frame.className = 'LineGraph'; - this.dom.frame = frame; - - // create svg element for graph drawing. - this.svg = document.createElementNS('http://www.w3.org/2000/svg','svg'); - this.svg.style.position = 'relative'; - this.svg.style.height = ('' + this.options.graphHeight).replace('px','') + 'px'; - this.svg.style.display = 'block'; - frame.appendChild(this.svg); - - // data axis - this.options.dataAxis.orientation = 'left'; - this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups); - - this.options.dataAxis.orientation = 'right'; - this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups); - delete this.options.dataAxis.orientation; - - // legends - this.legendLeft = new Legend(this.body, this.options.legend, 'left', this.options.groups); - this.legendRight = new Legend(this.body, this.options.legend, 'right', this.options.groups); - - this.show(); - }; - - /** - * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element. - * @param {object} options - */ - LineGraph.prototype.setOptions = function(options) { - if (options) { - var fields = ['sampling','defaultGroup','graphHeight','yAxisOrientation','style','barChart','dataAxis','sort','groups']; - if (options.graphHeight === undefined && options.height !== undefined && this.body.domProps.centerContainer.height !== undefined) { - this.autoSizeSVG = true; - } - else if (this.body.domProps.centerContainer.height !== undefined && options.graphHeight !== undefined) { - if (parseInt((options.graphHeight + '').replace("px",'')) < this.body.domProps.centerContainer.height) { - this.autoSizeSVG = true; - } - } - util.selectiveDeepExtend(fields, this.options, options); - util.mergeOptions(this.options, options,'catmullRom'); - util.mergeOptions(this.options, options,'drawPoints'); - util.mergeOptions(this.options, options,'shaded'); - util.mergeOptions(this.options, options,'legend'); - - if (options.catmullRom) { - if (typeof options.catmullRom == 'object') { - if (options.catmullRom.parametrization) { - if (options.catmullRom.parametrization == 'uniform') { - this.options.catmullRom.alpha = 0; - } - else if (options.catmullRom.parametrization == 'chordal') { - this.options.catmullRom.alpha = 1.0; - } - else { - this.options.catmullRom.parametrization = 'centripetal'; - this.options.catmullRom.alpha = 0.5; - } - } - } - } - - if (this.yAxisLeft) { - if (options.dataAxis !== undefined) { - this.yAxisLeft.setOptions(this.options.dataAxis); - this.yAxisRight.setOptions(this.options.dataAxis); - } - } - - if (this.legendLeft) { - if (options.legend !== undefined) { - this.legendLeft.setOptions(this.options.legend); - this.legendRight.setOptions(this.options.legend); - } - } - - if (this.groups.hasOwnProperty(UNGROUPED)) { - this.groups[UNGROUPED].setOptions(options); - } - } - - // this is used to redraw the graph if the visibility of the groups is changed. - if (this.dom.frame) { - this.redraw(true); - } - }; - - /** - * Hide the component from the DOM - */ - LineGraph.prototype.hide = function() { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - }; - - - /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed - */ - LineGraph.prototype.show = function() { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } - }; - - - /** - * Set items - * @param {vis.DataSet | null} items - */ - LineGraph.prototype.setItems = function(items) { - var me = this, - ids, - oldItemsData = this.itemsData; - - // replace the dataset - if (!items) { - this.itemsData = null; - } - else if (items instanceof DataSet || items instanceof DataView) { - this.itemsData = items; - } - else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } - - if (oldItemsData) { - // unsubscribe from old dataset - util.forEach(this.itemListeners, function (callback, event) { - oldItemsData.off(event, callback); - }); - - // remove all drawn items - ids = oldItemsData.getIds(); - this._onRemove(ids); - } - - if (this.itemsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.itemListeners, function (callback, event) { - me.itemsData.on(event, callback, id); - }); - - // add all new items - ids = this.itemsData.getIds(); - this._onAdd(ids); - } - this._updateUngrouped(); - //this._updateGraph(); - this.redraw(true); - }; - - - /** - * Set groups - * @param {vis.DataSet} groups - */ - LineGraph.prototype.setGroups = function(groups) { - var me = this; - var ids; - - // unsubscribe from current dataset - if (this.groupsData) { - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.unsubscribe(event, callback); - }); - - // remove all drawn groups - ids = this.groupsData.getIds(); - this.groupsData = null; - this._onRemoveGroups(ids); // note: this will cause a redraw - } - - // replace the dataset - if (!groups) { - this.groupsData = null; - } - else if (groups instanceof DataSet || groups instanceof DataView) { - this.groupsData = groups; - } - else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } - - if (this.groupsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.on(event, callback, id); - }); - - // draw all ms - ids = this.groupsData.getIds(); - this._onAddGroups(ids); - } - this._onUpdate(); - }; - - - /** - * Update the data - * @param [ids] - * @private - */ - LineGraph.prototype._onUpdate = function(ids) { - this._updateUngrouped(); - this._updateAllGroupData(); - //this._updateGraph(); - this.redraw(true); - }; - LineGraph.prototype._onAdd = function (ids) {this._onUpdate(ids);}; - LineGraph.prototype._onRemove = function (ids) {this._onUpdate(ids);}; - LineGraph.prototype._onUpdateGroups = function (groupIds) { - for (var i = 0; i < groupIds.length; i++) { - var group = this.groupsData.get(groupIds[i]); - this._updateGroup(group, groupIds[i]); - } - - //this._updateGraph(); - this.redraw(true); - }; - LineGraph.prototype._onAddGroups = function (groupIds) {this._onUpdateGroups(groupIds);}; - - - /** - * this cleans the group out off the legends and the dataaxis, updates the ungrouped and updates the graph - * @param {Array} groupIds - * @private - */ - LineGraph.prototype._onRemoveGroups = function (groupIds) { - for (var i = 0; i < groupIds.length; i++) { - if (this.groups.hasOwnProperty(groupIds[i])) { - if (this.groups[groupIds[i]].options.yAxisOrientation == 'right') { - this.yAxisRight.removeGroup(groupIds[i]); - this.legendRight.removeGroup(groupIds[i]); - this.legendRight.redraw(); - } - else { - this.yAxisLeft.removeGroup(groupIds[i]); - this.legendLeft.removeGroup(groupIds[i]); - this.legendLeft.redraw(); - } - delete this.groups[groupIds[i]]; - } - } - this._updateUngrouped(); - //this._updateGraph(); - this.redraw(true); - }; - - - /** - * update a group object with the group dataset entree - * - * @param group - * @param groupId - * @private - */ - LineGraph.prototype._updateGroup = function (group, groupId) { - if (!this.groups.hasOwnProperty(groupId)) { - this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles); - if (this.groups[groupId].options.yAxisOrientation == 'right') { - this.yAxisRight.addGroup(groupId, this.groups[groupId]); - this.legendRight.addGroup(groupId, this.groups[groupId]); - } - else { - this.yAxisLeft.addGroup(groupId, this.groups[groupId]); - this.legendLeft.addGroup(groupId, this.groups[groupId]); - } - } - else { - this.groups[groupId].update(group); - if (this.groups[groupId].options.yAxisOrientation == 'right') { - this.yAxisRight.updateGroup(groupId, this.groups[groupId]); - this.legendRight.updateGroup(groupId, this.groups[groupId]); - } - else { - this.yAxisLeft.updateGroup(groupId, this.groups[groupId]); - this.legendLeft.updateGroup(groupId, this.groups[groupId]); - } - } - this.legendLeft.redraw(); - this.legendRight.redraw(); - }; - - - /** - * this updates all groups, it is used when there is an update the the itemset. - * - * @private - */ - LineGraph.prototype._updateAllGroupData = function () { - if (this.itemsData != null) { - var groupsContent = {}; - var groupId; - for (groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - groupsContent[groupId] = []; - } - } - for (var itemId in this.itemsData._data) { - if (this.itemsData._data.hasOwnProperty(itemId)) { - var item = this.itemsData._data[itemId]; - if (groupsContent[item.group] === undefined) { - throw new Error('Cannot find referenced group. Possible reason: items added before groups? Groups need to be added before items, as items refer to groups.') - } - item.x = util.convert(item.x,'Date'); - groupsContent[item.group].push(item); - } - } - for (groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - this.groups[groupId].setItems(groupsContent[groupId]); - } - } - } - }; - - - /** - * Create or delete the group holding all ungrouped items. This group is used when - * there are no groups specified. This anonymous group is called 'graph'. - * @protected - */ - LineGraph.prototype._updateUngrouped = function() { - if (this.itemsData && this.itemsData != null) { - var ungroupedCounter = 0; - for (var itemId in this.itemsData._data) { - if (this.itemsData._data.hasOwnProperty(itemId)) { - var item = this.itemsData._data[itemId]; - if (item != undefined) { - if (item.hasOwnProperty('group')) { - if (item.group === undefined) { - item.group = UNGROUPED; - } - } - else { - item.group = UNGROUPED; - } - ungroupedCounter = item.group == UNGROUPED ? ungroupedCounter + 1 : ungroupedCounter; - } - } - } - - if (ungroupedCounter == 0) { - delete this.groups[UNGROUPED]; - this.legendLeft.removeGroup(UNGROUPED); - this.legendRight.removeGroup(UNGROUPED); - this.yAxisLeft.removeGroup(UNGROUPED); - this.yAxisRight.removeGroup(UNGROUPED); - } - else { - var group = {id: UNGROUPED, content: this.options.defaultGroup}; - this._updateGroup(group, UNGROUPED); - } - } - else { - delete this.groups[UNGROUPED]; - this.legendLeft.removeGroup(UNGROUPED); - this.legendRight.removeGroup(UNGROUPED); - this.yAxisLeft.removeGroup(UNGROUPED); - this.yAxisRight.removeGroup(UNGROUPED); - } - - this.legendLeft.redraw(); - this.legendRight.redraw(); - }; - - - /** - * Redraw the component, mandatory function - * @return {boolean} Returns true if the component is resized - */ - LineGraph.prototype.redraw = function(forceGraphUpdate) { - var resized = false; - - this.svg.style.height = ('' + this.options.graphHeight).replace('px','') + 'px'; - if (this.lastWidth === undefined && this.width || this.lastWidth != this.width) { - resized = true; - } - // check if this component is resized - resized = this._isResized() || resized; - // check whether zoomed (in that case we need to re-stack everything) - var visibleInterval = this.body.range.end - this.body.range.start; - //var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.width != this.lastWidth); // we get this from the range changed event - this.lastVisibleInterval = visibleInterval; - this.lastWidth = this.width; - - // calculate actual size and position - this.width = this.dom.frame.offsetWidth; - - // the svg element is three times as big as the width, this allows for fully dragging left and right - // without reloading the graph. the controls for this are bound to events in the constructor - if (resized == true) { - this.svg.style.width = util.option.asSize(3*this.width); - this.svg.style.left = util.option.asSize(-this.width); - } - - if (this.abortedGraphUpdate == true || forceGraphUpdate == true) { - resized = resized || this._updateGraph(); - } - else { - // move the whole svg while dragging - if (this.lastStart != 0) { - var offset = this.body.range.start - this.lastStart; - var range = this.body.range.end - this.body.range.start; - if (this.width != 0) { - var rangePerPixelInv = this.width/range; - var xOffset = offset * rangePerPixelInv; - this.svg.style.left = (-this.width - xOffset) + 'px'; - } - } - - } - - this.legendLeft.redraw(); - this.legendRight.redraw(); - - return resized; - }; - - - /** - * Update and redraw the graph. - * - */ - LineGraph.prototype._updateGraph = function () { - // reset the svg elements - DOMutil.prepareElements(this.svgElements); - if (this.width != 0 && this.itemsData != null) { - var group, i; - var preprocessedGroupData = {}; - var processedGroupData = {}; - var groupRanges = {}; - var changeCalled = false; - - // update the height of the graph on each redraw of the graph. - if (this.autoSizeSVG == true) { - if (this.options.graphHeight != this.body.domProps.centerContainer.height + 'px') { - this.options.graphHeight = this.body.domProps.centerContainer.height + 'px'; - this.svg.style.height = this.body.domProps.centerContainer.height + 'px'; - } - this.autoSizeSVG = false; - } - - // getting group Ids - var groupIds = []; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - group = this.groups[groupId]; - if (group.visible == true && (this.options.groups.visibility[groupId] === undefined || this.options.groups.visibility[groupId] == true)) { - groupIds.push(groupId); - } - } - } - if (groupIds.length > 0) { - // this is the range of the SVG canvas - var minDate = this.body.util.toGlobalTime(-this.body.domProps.root.width); - var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width); - var groupsData = {}; - // fill groups data, this only loads the data we require based on the timewindow - this._getRelevantData(groupIds, groupsData, minDate, maxDate); - - // apply sampling, if disabled, it will pass through this function. - this._applySampling(groupIds, groupsData); - - // we transform the X coordinates to detect collisions - for (i = 0; i < groupIds.length; i++) { - preprocessedGroupData[groupIds[i]] = this._convertXcoordinates(groupsData[groupIds[i]]); - } - - // now all needed data has been collected we start the processing. - this._getYRanges(groupIds, preprocessedGroupData, groupRanges); - - // update the Y axis first, we use this data to draw at the correct Y points - // changeCalled is required to clean the SVG on a change emit. - changeCalled = this._updateYAxis(groupIds, groupRanges); - var MAX_CYCLES = 5; - if (changeCalled == true && this.COUNTER < MAX_CYCLES) { - DOMutil.cleanupElements(this.svgElements); - this.abortedGraphUpdate = true; - this.COUNTER++; - this.body.emitter.emit('change'); - return true; - } - else { - if (this.COUNTER > MAX_CYCLES) { - console.log("WARNING: there may be an infinite loop in the _updateGraph emitter cycle.") - } - this.COUNTER = 0; - this.abortedGraphUpdate = false; - - // With the yAxis scaled correctly, use this to get the Y values of the points. - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - processedGroupData[groupIds[i]] = this._convertYcoordinates(groupsData[groupIds[i]], group); - } - - // draw the groups - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - if (group.options.style != 'bar') { // bar needs to be drawn enmasse - group.draw(processedGroupData[groupIds[i]], group, this.framework); - } - } - BarGraphFunctions.draw(groupIds, processedGroupData, this.framework); - } - } - } - - // cleanup unused svg elements - DOMutil.cleanupElements(this.svgElements); - return false; - }; - - - /** - * first select and preprocess the data from the datasets. - * the groups have their preselection of data, we now loop over this data to see - * what data we need to draw. Sorted data is much faster. - * more optimization is possible by doing the sampling before and using the binary search - * to find the end date to determine the increment. - * - * @param {array} groupIds - * @param {object} groupsData - * @param {date} minDate - * @param {date} maxDate - * @private - */ - LineGraph.prototype._getRelevantData = function (groupIds, groupsData, minDate, maxDate) { - var group, i, j, item; - if (groupIds.length > 0) { - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - groupsData[groupIds[i]] = []; - var dataContainer = groupsData[groupIds[i]]; - // optimization for sorted data - if (group.options.sort == true) { - var guess = Math.max(0, util.binarySearchValue(group.itemsData, minDate, 'x', 'before')); - for (j = guess; j < group.itemsData.length; j++) { - item = group.itemsData[j]; - if (item !== undefined) { - if (item.x > maxDate) { - dataContainer.push(item); - break; - } - else { - dataContainer.push(item); - } - } - } - } - else { - for (j = 0; j < group.itemsData.length; j++) { - item = group.itemsData[j]; - if (item !== undefined) { - if (item.x > minDate && item.x < maxDate) { - dataContainer.push(item); - } - } - } - } - } - } - }; - - - /** - * - * @param groupIds - * @param groupsData - * @private - */ - LineGraph.prototype._applySampling = function (groupIds, groupsData) { - var group; - if (groupIds.length > 0) { - for (var i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - if (group.options.sampling == true) { - var dataContainer = groupsData[groupIds[i]]; - if (dataContainer.length > 0) { - var increment = 1; - var amountOfPoints = dataContainer.length; - - // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop - // of width changing of the yAxis. - var xDistance = this.body.util.toGlobalScreen(dataContainer[dataContainer.length - 1].x) - this.body.util.toGlobalScreen(dataContainer[0].x); - var pointsPerPixel = amountOfPoints / xDistance; - increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1, Math.round(pointsPerPixel))); - - var sampledData = []; - for (var j = 0; j < amountOfPoints; j += increment) { - sampledData.push(dataContainer[j]); - - } - groupsData[groupIds[i]] = sampledData; - } - } - } - } - }; - - - /** - * - * - * @param {array} groupIds - * @param {object} groupsData - * @param {object} groupRanges | this is being filled here - * @private - */ - LineGraph.prototype._getYRanges = function (groupIds, groupsData, groupRanges) { - var groupData, group, i; - var barCombinedDataLeft = []; - var barCombinedDataRight = []; - var options; - if (groupIds.length > 0) { - for (i = 0; i < groupIds.length; i++) { - groupData = groupsData[groupIds[i]]; - options = this.groups[groupIds[i]].options; - if (groupData.length > 0) { - group = this.groups[groupIds[i]]; - // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups. - if (options.barChart.handleOverlap == 'stack' && options.style == 'bar') { - if (options.yAxisOrientation == 'left') {barCombinedDataLeft = barCombinedDataLeft.concat(group.getYRange(groupData)) ;} - else {barCombinedDataRight = barCombinedDataRight.concat(group.getYRange(groupData));} - } - else { - groupRanges[groupIds[i]] = group.getYRange(groupData,groupIds[i]); - } - } - } - - // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups. - BarGraphFunctions.getStackedBarYRange(barCombinedDataLeft , groupRanges, groupIds, '__barchartLeft' , 'left' ); - BarGraphFunctions.getStackedBarYRange(barCombinedDataRight, groupRanges, groupIds, '__barchartRight', 'right'); - } - }; - - - /** - * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden. - * @param {Array} groupIds - * @param {Object} groupRanges - * @private - */ - LineGraph.prototype._updateYAxis = function (groupIds, groupRanges) { - var changeCalled = false; - var yAxisLeftUsed = false; - var yAxisRightUsed = false; - var minLeft = 1e9, minRight = 1e9, maxLeft = -1e9, maxRight = -1e9, minVal, maxVal; - // if groups are present - if (groupIds.length > 0) { - // this is here to make sure that if there are no items in the axis but there are groups, that there is no infinite draw/redraw loop. - for (var i = 0; i < groupIds.length; i++) { - var group = this.groups[groupIds[i]]; - if (group && group.options.yAxisOrientation == 'left') { - yAxisLeftUsed = true; - minLeft = 0; - maxLeft = 0; - } - else { - yAxisRightUsed = true; - minRight = 0; - maxRight = 0; - } - } - - // if there are items: - for (var i = 0; i < groupIds.length; i++) { - if (groupRanges.hasOwnProperty(groupIds[i])) { - if (groupRanges[groupIds[i]].ignore !== true) { - minVal = groupRanges[groupIds[i]].min; - maxVal = groupRanges[groupIds[i]].max; - - if (groupRanges[groupIds[i]].yAxisOrientation == 'left') { - yAxisLeftUsed = true; - minLeft = minLeft > minVal ? minVal : minLeft; - maxLeft = maxLeft < maxVal ? maxVal : maxLeft; - } - else { - yAxisRightUsed = true; - minRight = minRight > minVal ? minVal : minRight; - maxRight = maxRight < maxVal ? maxVal : maxRight; - } - } - } - } - - if (yAxisLeftUsed == true) { - this.yAxisLeft.setRange(minLeft, maxLeft); - } - if (yAxisRightUsed == true) { - this.yAxisRight.setRange(minRight, maxRight); - } - } - changeCalled = this._toggleAxisVisiblity(yAxisLeftUsed , this.yAxisLeft) || changeCalled; - changeCalled = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || changeCalled; - - if (yAxisRightUsed == true && yAxisLeftUsed == true) { - this.yAxisLeft.drawIcons = true; - this.yAxisRight.drawIcons = true; - } - else { - this.yAxisLeft.drawIcons = false; - this.yAxisRight.drawIcons = false; - } - - this.yAxisRight.master = !yAxisLeftUsed; - - if (this.yAxisRight.master == false) { - if (yAxisRightUsed == true) {this.yAxisLeft.lineOffset = this.yAxisRight.width;} - else {this.yAxisLeft.lineOffset = 0;} - - changeCalled = this.yAxisLeft.redraw() || changeCalled; - this.yAxisRight.stepPixelsForced = this.yAxisLeft.stepPixels; - this.yAxisRight.zeroCrossing = this.yAxisLeft.zeroCrossing; - changeCalled = this.yAxisRight.redraw() || changeCalled; - } - else { - changeCalled = this.yAxisRight.redraw() || changeCalled; - } - - // clean the accumulated lists - if (groupIds.indexOf('__barchartLeft') != -1) { - groupIds.splice(groupIds.indexOf('__barchartLeft'),1); - } - if (groupIds.indexOf('__barchartRight') != -1) { - groupIds.splice(groupIds.indexOf('__barchartRight'),1); - } - - return changeCalled; - }; - - - /** - * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function - * - * @param {boolean} axisUsed - * @returns {boolean} - * @private - * @param axis - */ - LineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) { - var changed = false; - if (axisUsed == false) { - if (axis.dom.frame.parentNode && axis.hidden == false) { - axis.hide() - changed = true; - } - } - else { - if (!axis.dom.frame.parentNode && axis.hidden == true) { - axis.show(); - changed = true; - } - } - return changed; - }; - - - /** - * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the - * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for - * the yAxis. - * - * @param datapoints - * @returns {Array} - * @private - */ - LineGraph.prototype._convertXcoordinates = function (datapoints) { - var extractedData = []; - var xValue, yValue; - var toScreen = this.body.util.toScreen; - - for (var i = 0; i < datapoints.length; i++) { - xValue = toScreen(datapoints[i].x) + this.width; - yValue = datapoints[i].y; - extractedData.push({x: xValue, y: yValue}); - } - - return extractedData; - }; - - - /** - * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the - * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for - * the yAxis. - * - * @param datapoints - * @param group - * @returns {Array} - * @private - */ - LineGraph.prototype._convertYcoordinates = function (datapoints, group) { - var extractedData = []; - var xValue, yValue; - var toScreen = this.body.util.toScreen; - var axis = this.yAxisLeft; - var svgHeight = Number(this.svg.style.height.replace('px','')); - if (group.options.yAxisOrientation == 'right') { - axis = this.yAxisRight; - } - - for (var i = 0; i < datapoints.length; i++) { - xValue = toScreen(datapoints[i].x) + this.width; - yValue = Math.round(axis.convertValue(datapoints[i].y)); - extractedData.push({x: xValue, y: yValue}); - } - - group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0))); - - return extractedData; - }; - - - module.exports = LineGraph; - - -/***/ }, -/* 30 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var Component = __webpack_require__(20); - var TimeStep = __webpack_require__(19); - var DateUtil = __webpack_require__(15); - var moment = __webpack_require__(44); - - /** - * A horizontal time axis - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body - * @param {Object} [options] See TimeAxis.setOptions for the available - * options. - * @constructor TimeAxis - * @extends Component - */ - function TimeAxis (body, options) { - this.dom = { - foreground: null, - majorLines: [], - majorTexts: [], - minorLines: [], - minorTexts: [], - redundant: { - majorLines: [], - majorTexts: [], - minorLines: [], - minorTexts: [] - } - }; - this.props = { - range: { - start: 0, - end: 0, - minimumStep: 0 - }, - lineTop: 0 - }; - - this.defaultOptions = { - orientation: 'bottom', // supported: 'top', 'bottom' - // TODO: implement timeaxis orientations 'left' and 'right' - showMinorLabels: true, - showMajorLabels: true - }; - this.options = util.extend({}, this.defaultOptions); - - this.body = body; - - // create the HTML DOM - this._create(); - - this.setOptions(options); - } - - TimeAxis.prototype = new Component(); - - /** - * Set options for the TimeAxis. - * Parameters will be merged in current options. - * @param {Object} options Available options: - * {string} [orientation] - * {boolean} [showMinorLabels] - * {boolean} [showMajorLabels] - */ - TimeAxis.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels','hiddenDates'], this.options, options); - - // apply locale to moment.js - // TODO: not so nice, this is applied globally to moment.js - if ('locale' in options) { - if (typeof moment.locale === 'function') { - // moment.js 2.8.1+ - moment.locale(options.locale); - } - else { - moment.lang(options.locale); - } - } - } - }; - - /** - * Create the HTML DOM for the TimeAxis - */ - TimeAxis.prototype._create = function() { - this.dom.foreground = document.createElement('div'); - this.dom.background = document.createElement('div'); - - this.dom.foreground.className = 'timeaxis foreground'; - this.dom.background.className = 'timeaxis background'; - }; - - /** - * Destroy the TimeAxis - */ - TimeAxis.prototype.destroy = function() { - // remove from DOM - if (this.dom.foreground.parentNode) { - this.dom.foreground.parentNode.removeChild(this.dom.foreground); - } - if (this.dom.background.parentNode) { - this.dom.background.parentNode.removeChild(this.dom.background); - } - - this.body = null; - }; - - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - TimeAxis.prototype.redraw = function () { - var options = this.options; - var props = this.props; - var foreground = this.dom.foreground; - var background = this.dom.background; - - // determine the correct parent DOM element (depending on option orientation) - var parent = (options.orientation == 'top') ? this.body.dom.top : this.body.dom.bottom; - var parentChanged = (foreground.parentNode !== parent); - - // calculate character width and height - this._calculateCharSize(); - - // TODO: recalculate sizes only needed when parent is resized or options is changed - var orientation = this.options.orientation, - showMinorLabels = this.options.showMinorLabels, - showMajorLabels = this.options.showMajorLabels; - - // determine the width and height of the elemens for the axis - props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; - props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; - props.height = props.minorLabelHeight + props.majorLabelHeight; - props.width = foreground.offsetWidth; - - props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight - - (options.orientation == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height); - props.minorLineWidth = 1; // TODO: really calculate width - props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight; - props.majorLineWidth = 1; // TODO: really calculate width - - // take foreground and background offline while updating (is almost twice as fast) - var foregroundNextSibling = foreground.nextSibling; - var backgroundNextSibling = background.nextSibling; - foreground.parentNode && foreground.parentNode.removeChild(foreground); - background.parentNode && background.parentNode.removeChild(background); - - foreground.style.height = this.props.height + 'px'; - - this._repaintLabels(); - - // put DOM online again (at the same place) - if (foregroundNextSibling) { - parent.insertBefore(foreground, foregroundNextSibling); - } - else { - parent.appendChild(foreground) - } - if (backgroundNextSibling) { - this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling); - } - else { - this.body.dom.backgroundVertical.appendChild(background) - } - - return this._isResized() || parentChanged; - }; - - /** - * Repaint major and minor text labels and vertical grid lines - * @private - */ - TimeAxis.prototype._repaintLabels = function () { - var orientation = this.options.orientation; - - // calculate range and step (step such that we have space for 7 characters per label) - var start = util.convert(this.body.range.start, 'Number'); - var end = util.convert(this.body.range.end, 'Number'); - var timeLabelsize = this.body.util.toTime((this.props.minorCharWidth || 10) * 7).valueOf(); - var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.body.hiddenDates, this.body.range, timeLabelsize); - minimumStep -= this.body.util.toTime(0).valueOf(); - - - var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates); - this.step = step; - - // Move all DOM elements to a "redundant" list, where they - // can be picked for re-use, and clear the lists with lines and texts. - // At the end of the function _repaintLabels, left over elements will be cleaned up - var dom = this.dom; - dom.redundant.majorLines = dom.majorLines; - dom.redundant.majorTexts = dom.majorTexts; - dom.redundant.minorLines = dom.minorLines; - dom.redundant.minorTexts = dom.minorTexts; - dom.majorLines = []; - dom.majorTexts = []; - dom.minorLines = []; - dom.minorTexts = []; - - step.first(); - var xFirstMajorLabel = undefined; - var max = 0; - while (step.hasNext() && max < 1000) { - max++; - var cur = step.getCurrent(); - var x = this.body.util.toScreen(cur); - var isMajor = step.isMajor(); - - - // TODO: lines must have a width, such that we can create css backgrounds - - if (this.options.showMinorLabels) { - this._repaintMinorText(x, step.getLabelMinor(), orientation); - } - - if (isMajor && this.options.showMajorLabels) { - if (x > 0) { - if (xFirstMajorLabel == undefined) { - xFirstMajorLabel = x; - } - this._repaintMajorText(x, step.getLabelMajor(), orientation); - } - this._repaintMajorLine(x, orientation); - } - else { - this._repaintMinorLine(x, orientation); - } - - step.next(); - } - - // create a major label on the left when needed - if (this.options.showMajorLabels) { - var leftTime = this.body.util.toTime(0), - leftText = step.getLabelMajor(leftTime), - widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation - - if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) { - this._repaintMajorText(0, leftText, orientation); - } - } - - // Cleanup leftover DOM elements from the redundant list - util.forEach(this.dom.redundant, function (arr) { - while (arr.length) { - var elem = arr.pop(); - if (elem && elem.parentNode) { - elem.parentNode.removeChild(elem); - } - } - }); - }; - - /** - * Create a minor label for the axis at position x - * @param {Number} x - * @param {String} text - * @param {String} orientation "top" or "bottom" (default) - * @private - */ - TimeAxis.prototype._repaintMinorText = function (x, text, orientation) { - // reuse redundant label - var label = this.dom.redundant.minorTexts.shift(); - - if (!label) { - // create new label - var content = document.createTextNode(''); - label = document.createElement('div'); - label.appendChild(content); - label.className = 'text minor'; - this.dom.foreground.appendChild(label); - } - this.dom.minorTexts.push(label); - - label.childNodes[0].nodeValue = text; - - label.style.top = (orientation == 'top') ? (this.props.majorLabelHeight + 'px') : '0'; - label.style.left = x + 'px'; - //label.title = title; // TODO: this is a heavy operation - }; - - /** - * Create a Major label for the axis at position x - * @param {Number} x - * @param {String} text - * @param {String} orientation "top" or "bottom" (default) - * @private - */ - TimeAxis.prototype._repaintMajorText = function (x, text, orientation) { - // reuse redundant label - var label = this.dom.redundant.majorTexts.shift(); - - if (!label) { - // create label - var content = document.createTextNode(text); - label = document.createElement('div'); - label.className = 'text major'; - label.appendChild(content); - this.dom.foreground.appendChild(label); - } - this.dom.majorTexts.push(label); - - label.childNodes[0].nodeValue = text; - //label.title = title; // TODO: this is a heavy operation - - label.style.top = (orientation == 'top') ? '0' : (this.props.minorLabelHeight + 'px'); - label.style.left = x + 'px'; - }; - - /** - * Create a minor line for the axis at position x - * @param {Number} x - * @param {String} orientation "top" or "bottom" (default) - * @private - */ - TimeAxis.prototype._repaintMinorLine = function (x, orientation) { - // reuse redundant line - var line = this.dom.redundant.minorLines.shift(); - - if (!line) { - // create vertical line - line = document.createElement('div'); - line.className = 'grid vertical minor'; - this.dom.background.appendChild(line); - } - this.dom.minorLines.push(line); - - var props = this.props; - if (orientation == 'top') { - line.style.top = props.majorLabelHeight + 'px'; - } - else { - line.style.top = this.body.domProps.top.height + 'px'; - } - line.style.height = props.minorLineHeight + 'px'; - line.style.left = (x - props.minorLineWidth / 2) + 'px'; - }; - - /** - * Create a Major line for the axis at position x - * @param {Number} x - * @param {String} orientation "top" or "bottom" (default) - * @private - */ - TimeAxis.prototype._repaintMajorLine = function (x, orientation) { - // reuse redundant line - var line = this.dom.redundant.majorLines.shift(); - - if (!line) { - // create vertical line - line = document.createElement('DIV'); - line.className = 'grid vertical major'; - this.dom.background.appendChild(line); - } - this.dom.majorLines.push(line); - - var props = this.props; - if (orientation == 'top') { - line.style.top = '0'; - } - else { - line.style.top = this.body.domProps.top.height + 'px'; - } - line.style.left = (x - props.majorLineWidth / 2) + 'px'; - line.style.height = props.majorLineHeight + 'px'; - }; - - /** - * Determine the size of text on the axis (both major and minor axis). - * The size is calculated only once and then cached in this.props. - * @private - */ - TimeAxis.prototype._calculateCharSize = function () { - // Note: We calculate char size with every redraw. Size may change, for - // example when any of the timelines parents had display:none for example. - - // determine the char width and height on the minor axis - if (!this.dom.measureCharMinor) { - this.dom.measureCharMinor = document.createElement('DIV'); - this.dom.measureCharMinor.className = 'text minor measure'; - this.dom.measureCharMinor.style.position = 'absolute'; - - this.dom.measureCharMinor.appendChild(document.createTextNode('0')); - this.dom.foreground.appendChild(this.dom.measureCharMinor); - } - this.props.minorCharHeight = this.dom.measureCharMinor.clientHeight; - this.props.minorCharWidth = this.dom.measureCharMinor.clientWidth; - - // determine the char width and height on the major axis - if (!this.dom.measureCharMajor) { - this.dom.measureCharMajor = document.createElement('DIV'); - this.dom.measureCharMajor.className = 'text major measure'; - this.dom.measureCharMajor.style.position = 'absolute'; - - this.dom.measureCharMajor.appendChild(document.createTextNode('0')); - this.dom.foreground.appendChild(this.dom.measureCharMajor); - } - this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight; - this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth; - }; - - /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate - */ - TimeAxis.prototype.snap = function(date) { - return this.step.snap(date); - }; - - module.exports = TimeAxis; - - -/***/ }, -/* 31 */ -/***/ function(module, exports, __webpack_require__) { - - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); - - /** - * @constructor Item - * @param {Object} data Object containing (optional) parameters type, - * start, end, content, group, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} options Configuration options - * // TODO: describe available options - */ - function Item (data, conversion, options) { - this.id = null; - this.parent = null; - this.data = data; - this.dom = null; - this.conversion = conversion || {}; - this.options = options || {}; - - this.selected = false; - this.displayed = false; - this.dirty = true; - - this.top = null; - this.left = null; - this.width = null; - this.height = null; - } - - Item.prototype.stack = true; - - /** - * Select current item - */ - Item.prototype.select = function() { - this.selected = true; - this.dirty = true; - if (this.displayed) this.redraw(); - }; - - /** - * Unselect current item - */ - Item.prototype.unselect = function() { - this.selected = false; - this.dirty = true; - if (this.displayed) this.redraw(); - }; - - /** - * Set data for the item. Existing data will be updated. The id should not - * be changed. When the item is displayed, it will be redrawn immediately. - * @param {Object} data - */ - Item.prototype.setData = function(data) { - this.data = data; - this.dirty = true; - if (this.displayed) this.redraw(); - }; - - /** - * Set a parent for the item - * @param {ItemSet | Group} parent - */ - Item.prototype.setParent = function(parent) { - if (this.displayed) { - this.hide(); - this.parent = parent; - if (this.parent) { - this.show(); - } - } - else { - this.parent = parent; - } - }; - - /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - Item.prototype.isVisible = function(range) { - // Should be implemented by Item implementations - return false; - }; - - /** - * Show the Item in the DOM (when not already visible) - * @return {Boolean} changed - */ - Item.prototype.show = function() { - return false; - }; - - /** - * Hide the Item from the DOM (when visible) - * @return {Boolean} changed - */ - Item.prototype.hide = function() { - return false; - }; - - /** - * Repaint the item - */ - Item.prototype.redraw = function() { - // should be implemented by the item - }; - - /** - * Reposition the Item horizontally - */ - Item.prototype.repositionX = function() { - // should be implemented by the item - }; - - /** - * Reposition the Item vertically - */ - Item.prototype.repositionY = function() { - // should be implemented by the item - }; - - /** - * Repaint a delete button on the top right of the item when the item is selected - * @param {HTMLElement} anchor - * @protected - */ - Item.prototype._repaintDeleteButton = function (anchor) { - if (this.selected && this.options.editable.remove && !this.dom.deleteButton) { - // create and show button - var me = this; - - var deleteButton = document.createElement('div'); - deleteButton.className = 'delete'; - deleteButton.title = 'Delete this item'; - - Hammer(deleteButton, { - preventDefault: true - }).on('tap', function (event) { - me.parent.removeFromDataSet(me); - event.stopPropagation(); - }); - - anchor.appendChild(deleteButton); - this.dom.deleteButton = deleteButton; - } - else if (!this.selected && this.dom.deleteButton) { - // remove button - if (this.dom.deleteButton.parentNode) { - this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton); - } - this.dom.deleteButton = null; - } - }; - - /** - * Set HTML contents for the item - * @param {Element} element HTML element to fill with the contents - * @private - */ - Item.prototype._updateContents = function (element) { - var content; - if (this.options.template) { - var itemData = this.parent.itemSet.itemsData.get(this.id); // get a clone of the data from the dataset - content = this.options.template(itemData); - } - else { - content = this.data.content; - } - - if(content !== this.content) { - // only replace the content when changed - if (content instanceof Element) { - element.innerHTML = ''; - element.appendChild(content); - } - else if (content != undefined) { - element.innerHTML = content; - } - else { - if (!(this.data.type == 'background' && this.data.content === undefined)) { - throw new Error('Property "content" missing in item ' + this.id); - } - } - - this.content = content; - } - }; - - /** - * Set HTML contents for the item - * @param {Element} element HTML element to fill with the contents - * @private - */ - Item.prototype._updateTitle = function (element) { - if (this.data.title != null) { - element.title = this.data.title || ''; - } - else { - element.removeAttribute('title'); - } - }; - - /** - * Process dataAttributes timeline option and set as data- attributes on dom.content - * @param {Element} element HTML element to which the attributes will be attached - * @private - */ - Item.prototype._updateDataAttributes = function(element) { - if (this.options.dataAttributes && this.options.dataAttributes.length > 0) { - var attributes = []; - - if (Array.isArray(this.options.dataAttributes)) { - attributes = this.options.dataAttributes; - } - else if (this.options.dataAttributes == 'all') { - attributes = Object.keys(this.data); - } - else { - return; - } - - for (var i = 0; i < attributes.length; i++) { - var name = attributes[i]; - var value = this.data[name]; - - if (value != null) { - element.setAttribute('data-' + name, value); - } - else { - element.removeAttribute('data-' + name); - } - } - } - }; - - /** - * Update custom styles of the element - * @param element - * @private - */ - Item.prototype._updateStyle = function(element) { - // remove old styles - if (this.style) { - util.removeCssText(element, this.style); - this.style = null; - } - - // append new styles - if (this.data.style) { - util.addCssText(element, this.data.style); - this.style = this.data.style; - } - }; - - module.exports = Item; - - -/***/ }, -/* 32 */ -/***/ function(module, exports, __webpack_require__) { - - var Hammer = __webpack_require__(45); - var Item = __webpack_require__(31); - var BackgroundGroup = __webpack_require__(26); - var RangeItem = __webpack_require__(35); - - /** - * @constructor BackgroundItem - * @extends Item - * @param {Object} data Object containing parameters start, end - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe options - */ - // TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation - function BackgroundItem (data, conversion, options) { - this.props = { - content: { - width: 0 - } - }; - this.overflow = false; // if contents can overflow (css styling), this flag is set to true - - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data.id); - } - if (data.end == undefined) { - throw new Error('Property "end" missing in item ' + data.id); - } - } - - Item.call(this, data, conversion, options); - - this.emptyContent = false; - } - - BackgroundItem.prototype = new Item (null, null, null); - - BackgroundItem.prototype.baseClassName = 'item background'; - BackgroundItem.prototype.stack = false; - - /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - BackgroundItem.prototype.isVisible = function(range) { - // determine visibility - return (this.data.start < range.end) && (this.data.end > range.start); - }; - - /** - * Repaint the item - */ - BackgroundItem.prototype.redraw = function() { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; - - // background box - dom.box = document.createElement('div'); - // className is updated in redraw() - - // contents box - dom.content = document.createElement('div'); - dom.content.className = 'content'; - dom.box.appendChild(dom.content); - - // Note: we do NOT attach this item as attribute to the DOM, - // such that background items cannot be selected - //dom.box['timeline-item'] = this; - - this.dirty = true; - } - - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.box.parentNode) { - var background = this.parent.dom.background; - if (!background) { - throw new Error('Cannot redraw item: parent has no background container element'); - } - background.appendChild(dom.box); - } - this.displayed = true; - - // Update DOM when item is marked dirty. An item is marked dirty when: - // - the item is not yet rendered - // - the item's data is changed - // - the item is selected/deselected - if (this.dirty) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.content); - this._updateDataAttributes(this.dom.content); - this._updateStyle(this.dom.box); - - // update class - var className = (this.data.className ? (' ' + this.data.className) : '') + - (this.selected ? ' selected' : ''); - dom.box.className = this.baseClassName + className; - - // determine from css whether this box has overflow - this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; - - // recalculate size - this.props.content.width = this.dom.content.offsetWidth; - this.height = 0; // set height zero, so this item will be ignored when stacking items - - this.dirty = false; - } - }; - - /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. - */ - BackgroundItem.prototype.show = RangeItem.prototype.show; - - /** - * Hide the item from the DOM (when visible) - * @return {Boolean} changed - */ - BackgroundItem.prototype.hide = RangeItem.prototype.hide; - - /** - * Reposition the item horizontally - * @Override - */ - BackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX; - - /** - * Reposition the item vertically - * @Override - */ - BackgroundItem.prototype.repositionY = function(margin) { - var onTop = this.options.orientation === 'top'; - this.dom.content.style.top = onTop ? '' : '0'; - this.dom.content.style.bottom = onTop ? '0' : ''; - var height; - - // special positioning for subgroups - if (this.data.subgroup !== undefined) { - var itemSubgroup = this.data.subgroup; - var subgroups = this.parent.subgroups; - var subgroupIndex = subgroups[itemSubgroup].index; - // if the orientation is top, we need to take the difference in height into account. - if (onTop == true) { - // the first subgroup will have to account for the distance from the top to the first item. - height = this.parent.subgroups[itemSubgroup].height + margin.item.vertical; - height += subgroupIndex == 0 ? margin.axis - 0.5*margin.item.vertical : 0; - var newTop = this.parent.top; - for (var subgroup in subgroups) { - if (subgroups.hasOwnProperty(subgroup)) { - if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroupIndex) { - newTop += subgroups[subgroup].height + margin.item.vertical; - } - } - } - - // the others will have to be offset downwards with this same distance. - newTop += subgroupIndex != 0 ? margin.axis - 0.5 * margin.item.vertical : 0; - this.dom.box.style.top = newTop + 'px'; - this.dom.box.style.bottom = ''; - } - // and when the orientation is bottom: - else { - var newTop = this.parent.top; - for (var subgroup in subgroups) { - if (subgroups.hasOwnProperty(subgroup)) { - if (subgroups[subgroup].visible == true && subgroups[subgroup].index > subgroupIndex) { - newTop += subgroups[subgroup].height + margin.item.vertical; - } - } - } - height = this.parent.subgroups[itemSubgroup].height + margin.item.vertical; - this.dom.box.style.top = newTop + 'px'; - this.dom.box.style.bottom = ''; - } - } - // and in the case of no subgroups: - else { - // we want backgrounds with groups to only show in groups. - if (this.parent instanceof BackgroundGroup) { - // if the item is not in a group: - height = Math.max(this.parent.height, - this.parent.itemSet.body.domProps.center.height, - this.parent.itemSet.body.domProps.centerContainer.height); - this.dom.box.style.top = onTop ? '0' : ''; - this.dom.box.style.bottom = onTop ? '' : '0'; - } - else { - height = this.parent.height; - // same alignment for items when orientation is top or bottom - this.dom.box.style.top = this.parent.top + 'px'; - this.dom.box.style.bottom = ''; - } - } - this.dom.box.style.height = height + 'px'; - }; - - module.exports = BackgroundItem; - - -/***/ }, -/* 33 */ -/***/ function(module, exports, __webpack_require__) { - - var Item = __webpack_require__(31); - var util = __webpack_require__(1); - - /** - * @constructor BoxItem - * @extends Item - * @param {Object} data Object containing parameters start - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe available options - */ - function BoxItem (data, conversion, options) { - this.props = { - dot: { - width: 0, - height: 0 - }, - line: { - width: 0, - height: 0 - } - }; - - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data); - } - } - - Item.call(this, data, conversion, options); - } - - BoxItem.prototype = new Item (null, null, null); - - /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - BoxItem.prototype.isVisible = function(range) { - // determine visibility - // TODO: account for the real width of the item. Right now we just add 1/4 to the window - var interval = (range.end - range.start) / 4; - return (this.data.start > range.start - interval) && (this.data.start < range.end + interval); - }; - - /** - * Repaint the item - */ - BoxItem.prototype.redraw = function() { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; - - // create main box - dom.box = document.createElement('DIV'); - - // contents box (inside the background box). used for making margins - dom.content = document.createElement('DIV'); - dom.content.className = 'content'; - dom.box.appendChild(dom.content); - - // line to axis - dom.line = document.createElement('DIV'); - dom.line.className = 'line'; - - // dot on axis - dom.dot = document.createElement('DIV'); - dom.dot.className = 'dot'; - - // attach this item as attribute - dom.box['timeline-item'] = this; - - this.dirty = true; - } - - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.box.parentNode) { - var foreground = this.parent.dom.foreground; - if (!foreground) throw new Error('Cannot redraw item: parent has no foreground container element'); - foreground.appendChild(dom.box); - } - if (!dom.line.parentNode) { - var background = this.parent.dom.background; - if (!background) throw new Error('Cannot redraw item: parent has no background container element'); - background.appendChild(dom.line); - } - if (!dom.dot.parentNode) { - var axis = this.parent.dom.axis; - if (!background) throw new Error('Cannot redraw item: parent has no axis container element'); - axis.appendChild(dom.dot); - } - this.displayed = true; - - // Update DOM when item is marked dirty. An item is marked dirty when: - // - the item is not yet rendered - // - the item's data is changed - // - the item is selected/deselected - if (this.dirty) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.box); - this._updateDataAttributes(this.dom.box); - this._updateStyle(this.dom.box); - - // update class - var className = (this.data.className? ' ' + this.data.className : '') + - (this.selected ? ' selected' : ''); - dom.box.className = 'item box' + className; - dom.line.className = 'item line' + className; - dom.dot.className = 'item dot' + className; - - // recalculate size - this.props.dot.height = dom.dot.offsetHeight; - this.props.dot.width = dom.dot.offsetWidth; - this.props.line.width = dom.line.offsetWidth; - this.width = dom.box.offsetWidth; - this.height = dom.box.offsetHeight; - - this.dirty = false; - } - - this._repaintDeleteButton(dom.box); - }; - - /** - * Show the item in the DOM (when not already displayed). The items DOM will - * be created when needed. - */ - BoxItem.prototype.show = function() { - if (!this.displayed) { - this.redraw(); - } - }; - - /** - * Hide the item from the DOM (when visible) - */ - BoxItem.prototype.hide = function() { - if (this.displayed) { - var dom = this.dom; - - if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box); - if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line); - if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot); - - this.top = null; - this.left = null; - - this.displayed = false; - } - }; - - /** - * Reposition the item horizontally - * @Override - */ - BoxItem.prototype.repositionX = function() { - var start = this.conversion.toScreen(this.data.start); - var align = this.options.align; - var left; - var box = this.dom.box; - var line = this.dom.line; - var dot = this.dom.dot; - - // calculate left position of the box - if (align == 'right') { - this.left = start - this.width; - } - else if (align == 'left') { - this.left = start; - } - else { - // default or 'center' - this.left = start - this.width / 2; - } - - // reposition box - box.style.left = this.left + 'px'; - - // reposition line - line.style.left = (start - this.props.line.width / 2) + 'px'; - - // reposition dot - dot.style.left = (start - this.props.dot.width / 2) + 'px'; - }; - - /** - * Reposition the item vertically - * @Override - */ - BoxItem.prototype.repositionY = function() { - var orientation = this.options.orientation; - var box = this.dom.box; - var line = this.dom.line; - var dot = this.dom.dot; - - if (orientation == 'top') { - box.style.top = (this.top || 0) + 'px'; - - line.style.top = '0'; - line.style.height = (this.parent.top + this.top + 1) + 'px'; - line.style.bottom = ''; - } - else { // orientation 'bottom' - var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty - var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top; - - box.style.top = (this.parent.height - this.top - this.height || 0) + 'px'; - line.style.top = (itemSetHeight - lineHeight) + 'px'; - line.style.bottom = '0'; - } - - dot.style.top = (-this.props.dot.height / 2) + 'px'; - }; - - module.exports = BoxItem; - - -/***/ }, -/* 34 */ -/***/ function(module, exports, __webpack_require__) { - - var Item = __webpack_require__(31); - - /** - * @constructor PointItem - * @extends Item - * @param {Object} data Object containing parameters start - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe available options - */ - function PointItem (data, conversion, options) { - this.props = { - dot: { - top: 0, - width: 0, - height: 0 - }, - content: { - height: 0, - marginLeft: 0 - } - }; - - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data); - } - } - - Item.call(this, data, conversion, options); - } - - PointItem.prototype = new Item (null, null, null); - - /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - PointItem.prototype.isVisible = function(range) { - // determine visibility - // TODO: account for the real width of the item. Right now we just add 1/4 to the window - var interval = (range.end - range.start) / 4; - return (this.data.start > range.start - interval) && (this.data.start < range.end + interval); - }; - - /** - * Repaint the item - */ - PointItem.prototype.redraw = function() { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; - - // background box - dom.point = document.createElement('div'); - // className is updated in redraw() - - // contents box, right from the dot - dom.content = document.createElement('div'); - dom.content.className = 'content'; - dom.point.appendChild(dom.content); - - // dot at start - dom.dot = document.createElement('div'); - dom.point.appendChild(dom.dot); - - // attach this item as attribute - dom.point['timeline-item'] = this; - - this.dirty = true; - } - - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.point.parentNode) { - var foreground = this.parent.dom.foreground; - if (!foreground) { - throw new Error('Cannot redraw item: parent has no foreground container element'); - } - foreground.appendChild(dom.point); - } - this.displayed = true; - - // Update DOM when item is marked dirty. An item is marked dirty when: - // - the item is not yet rendered - // - the item's data is changed - // - the item is selected/deselected - if (this.dirty) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.point); - this._updateDataAttributes(this.dom.point); - this._updateStyle(this.dom.point); - - // update class - var className = (this.data.className? ' ' + this.data.className : '') + - (this.selected ? ' selected' : ''); - dom.point.className = 'item point' + className; - dom.dot.className = 'item dot' + className; - - // recalculate size - this.width = dom.point.offsetWidth; - this.height = dom.point.offsetHeight; - this.props.dot.width = dom.dot.offsetWidth; - this.props.dot.height = dom.dot.offsetHeight; - this.props.content.height = dom.content.offsetHeight; - - // resize contents - dom.content.style.marginLeft = 2 * this.props.dot.width + 'px'; - //dom.content.style.marginRight = ... + 'px'; // TODO: margin right - - dom.dot.style.top = ((this.height - this.props.dot.height) / 2) + 'px'; - dom.dot.style.left = (this.props.dot.width / 2) + 'px'; - - this.dirty = false; - } - - this._repaintDeleteButton(dom.point); - }; - - /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. - */ - PointItem.prototype.show = function() { - if (!this.displayed) { - this.redraw(); - } - }; - - /** - * Hide the item from the DOM (when visible) - */ - PointItem.prototype.hide = function() { - if (this.displayed) { - if (this.dom.point.parentNode) { - this.dom.point.parentNode.removeChild(this.dom.point); - } - - this.top = null; - this.left = null; - - this.displayed = false; - } - }; - - /** - * Reposition the item horizontally - * @Override - */ - PointItem.prototype.repositionX = function() { - var start = this.conversion.toScreen(this.data.start); - - this.left = start - this.props.dot.width; - - // reposition point - this.dom.point.style.left = this.left + 'px'; - }; - - /** - * Reposition the item vertically - * @Override - */ - PointItem.prototype.repositionY = function() { - var orientation = this.options.orientation, - point = this.dom.point; - - if (orientation == 'top') { - point.style.top = this.top + 'px'; - } - else { - point.style.top = (this.parent.height - this.top - this.height) + 'px'; - } - }; - - module.exports = PointItem; - - -/***/ }, -/* 35 */ -/***/ function(module, exports, __webpack_require__) { - - var Hammer = __webpack_require__(45); - var Item = __webpack_require__(31); - - /** - * @constructor RangeItem - * @extends Item - * @param {Object} data Object containing parameters start, end - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe options - */ - function RangeItem (data, conversion, options) { - this.props = { - content: { - width: 0 - } - }; - this.overflow = false; // if contents can overflow (css styling), this flag is set to true - - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data.id); - } - if (data.end == undefined) { - throw new Error('Property "end" missing in item ' + data.id); - } - } - - Item.call(this, data, conversion, options); - } - - RangeItem.prototype = new Item (null, null, null); - - RangeItem.prototype.baseClassName = 'item range'; - - /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - RangeItem.prototype.isVisible = function(range) { - // determine visibility - return (this.data.start < range.end) && (this.data.end > range.start); - }; - - /** - * Repaint the item - */ - RangeItem.prototype.redraw = function() { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; - - // background box - dom.box = document.createElement('div'); - // className is updated in redraw() - - // contents box - dom.content = document.createElement('div'); - dom.content.className = 'content'; - dom.box.appendChild(dom.content); - - // attach this item as attribute - dom.box['timeline-item'] = this; - - this.dirty = true; - } - - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.box.parentNode) { - var foreground = this.parent.dom.foreground; - if (!foreground) { - throw new Error('Cannot redraw item: parent has no foreground container element'); - } - foreground.appendChild(dom.box); - } - this.displayed = true; - - // Update DOM when item is marked dirty. An item is marked dirty when: - // - the item is not yet rendered - // - the item's data is changed - // - the item is selected/deselected - if (this.dirty) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.box); - this._updateDataAttributes(this.dom.box); - this._updateStyle(this.dom.box); - - // update class - var className = (this.data.className ? (' ' + this.data.className) : '') + - (this.selected ? ' selected' : ''); - dom.box.className = this.baseClassName + className; - - // determine from css whether this box has overflow - this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; - - // recalculate size - // turn off max-width to be able to calculate the real width - // this causes an extra browser repaint/reflow, but so be it - this.dom.content.style.maxWidth = 'none'; - this.props.content.width = this.dom.content.offsetWidth; - this.height = this.dom.box.offsetHeight; - this.dom.content.style.maxWidth = ''; - - this.dirty = false; - } - - this._repaintDeleteButton(dom.box); - this._repaintDragLeft(); - this._repaintDragRight(); - }; - - /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. - */ - RangeItem.prototype.show = function() { - if (!this.displayed) { - this.redraw(); - } - }; - - /** - * Hide the item from the DOM (when visible) - * @return {Boolean} changed - */ - RangeItem.prototype.hide = function() { - if (this.displayed) { - var box = this.dom.box; - - if (box.parentNode) { - box.parentNode.removeChild(box); - } - - this.top = null; - this.left = null; - - this.displayed = false; - } - }; - - /** - * Reposition the item horizontally - * @Override - */ - RangeItem.prototype.repositionX = function() { - var parentWidth = this.parent.width; - var start = this.conversion.toScreen(this.data.start); - var end = this.conversion.toScreen(this.data.end); - var contentLeft; - var contentWidth; - - // limit the width of the this, as browsers cannot draw very wide divs - if (start < -parentWidth) { - start = -parentWidth; - } - if (end > 2 * parentWidth) { - end = 2 * parentWidth; - } - var boxWidth = Math.max(end - start, 1); - - if (this.overflow) { - this.left = start; - this.width = boxWidth + this.props.content.width; - contentWidth = this.props.content.width; - - // Note: The calculation of width is an optimistic calculation, giving - // a width which will not change when moving the Timeline - // So no re-stacking needed, which is nicer for the eye; - } - else { - this.left = start; - this.width = boxWidth; - contentWidth = Math.min(end - start - 2 * this.options.padding, this.props.content.width); - } - - this.dom.box.style.left = this.left + 'px'; - this.dom.box.style.width = boxWidth + 'px'; - - switch (this.options.align) { - case 'left': - this.dom.content.style.left = '0'; - break; - - case 'right': - this.dom.content.style.left = Math.max((boxWidth - contentWidth - 2 * this.options.padding), 0) + 'px'; - break; - - case 'center': - this.dom.content.style.left = Math.max((boxWidth - contentWidth - 2 * this.options.padding) / 2, 0) + 'px'; - break; - - default: // 'auto' - // when range exceeds left of the window, position the contents at the left of the visible area - if (this.overflow) { - if (end > 0) { - contentLeft = Math.max(-start, 0); - } - else { - contentLeft = -contentWidth; // ensure it's not visible anymore - } - } - else { - if (start < 0) { - contentLeft = Math.min(-start, - (end - start - contentWidth - 2 * this.options.padding)); - // TODO: remove the need for options.padding. it's terrible. - } - else { - contentLeft = 0; - } - } - this.dom.content.style.left = contentLeft + 'px'; - } - }; - - /** - * Reposition the item vertically - * @Override - */ - RangeItem.prototype.repositionY = function() { - var orientation = this.options.orientation, - box = this.dom.box; - - if (orientation == 'top') { - box.style.top = this.top + 'px'; - } - else { - box.style.top = (this.parent.height - this.top - this.height) + 'px'; - } - }; - - /** - * Repaint a drag area on the left side of the range when the range is selected - * @protected - */ - RangeItem.prototype._repaintDragLeft = function () { - if (this.selected && this.options.editable.updateTime && !this.dom.dragLeft) { - // create and show drag area - var dragLeft = document.createElement('div'); - dragLeft.className = 'drag-left'; - dragLeft.dragLeftItem = this; - - // TODO: this should be redundant? - Hammer(dragLeft, { - preventDefault: true - }).on('drag', function () { - //console.log('drag left') - }); - - this.dom.box.appendChild(dragLeft); - this.dom.dragLeft = dragLeft; - } - else if (!this.selected && this.dom.dragLeft) { - // delete drag area - if (this.dom.dragLeft.parentNode) { - this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft); - } - this.dom.dragLeft = null; - } - }; - - /** - * Repaint a drag area on the right side of the range when the range is selected - * @protected - */ - RangeItem.prototype._repaintDragRight = function () { - if (this.selected && this.options.editable.updateTime && !this.dom.dragRight) { - // create and show drag area - var dragRight = document.createElement('div'); - dragRight.className = 'drag-right'; - dragRight.dragRightItem = this; - - // TODO: this should be redundant? - Hammer(dragRight, { - preventDefault: true - }).on('drag', function () { - //console.log('drag right') - }); - - this.dom.box.appendChild(dragRight); - this.dom.dragRight = dragRight; - } - else if (!this.selected && this.dom.dragRight) { - // delete drag area - if (this.dom.dragRight.parentNode) { - this.dom.dragRight.parentNode.removeChild(this.dom.dragRight); - } - this.dom.dragRight = null; - } - }; - - module.exports = RangeItem; - - -/***/ }, -/* 36 */ -/***/ function(module, exports, __webpack_require__) { - - var Emitter = __webpack_require__(56); - var Hammer = __webpack_require__(45); - var keycharm = __webpack_require__(57); - var util = __webpack_require__(1); - var hammerUtil = __webpack_require__(47); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var dotparser = __webpack_require__(42); - var gephiParser = __webpack_require__(43); - var Groups = __webpack_require__(38); - var Images = __webpack_require__(39); - var Node = __webpack_require__(40); - var Edge = __webpack_require__(37); - var Popup = __webpack_require__(41); - var MixinLoader = __webpack_require__(54); - var Activator = __webpack_require__(55); - var locales = __webpack_require__(49); - - // Load custom shapes into CanvasRenderingContext2D - __webpack_require__(50); - - /** - * @constructor Network - * Create a network visualization, displaying nodes and edges. - * - * @param {Element} container The DOM element in which the Network will - * be created. Normally a div element. - * @param {Object} data An object containing parameters - * {Array} nodes - * {Array} edges - * @param {Object} options Options - */ - function Network (container, data, options) { - if (!(this instanceof Network)) { - throw new SyntaxError('Constructor must be called with the new operator'); - } - - this._initializeMixinLoaders(); - - // create variables and set default values - this.containerElement = container; - - // render and calculation settings - this.renderRefreshRate = 60; // hz (fps) - this.renderTimestep = 1000 / this.renderRefreshRate; // ms -- saves calculation later on - this.renderTime = 0.5 * this.renderTimestep; // measured time it takes to render a frame - this.maxPhysicsTicksPerRender = 3; // max amount of physics ticks per render step. - this.physicsDiscreteStepsize = 0.50; // discrete stepsize of the simulation - - this.initializing = true; - - this.triggerFunctions = {add:null,edit:null,editEdge:null,connect:null,del:null}; - - // set constant values - this.defaultOptions = { - nodes: { - mass: 1, - radiusMin: 10, - radiusMax: 30, - radius: 10, - shape: 'ellipse', - image: undefined, - widthMin: 16, // px - widthMax: 64, // px - fontColor: 'black', - fontSize: 14, // px - fontFace: 'verdana', - fontFill: undefined, - level: -1, - color: { - border: '#2B7CE9', - background: '#97C2FC', - highlight: { - border: '#2B7CE9', - background: '#D2E5FF' - }, - hover: { - border: '#2B7CE9', - background: '#D2E5FF' - } - }, - borderColor: '#2B7CE9', - backgroundColor: '#97C2FC', - highlightColor: '#D2E5FF', - group: undefined, - borderWidth: 1, - borderWidthSelected: undefined - }, - edges: { - widthMin: 1, // - widthMax: 15,// - width: 1, - widthSelectionMultiplier: 2, - hoverWidth: 1.5, - style: 'line', - color: { - color:'#848484', - highlight:'#848484', - hover: '#848484' - }, - fontColor: '#343434', - fontSize: 14, // px - fontFace: 'arial', - fontFill: 'white', - arrowScaleFactor: 1, - dash: { - length: 10, - gap: 5, - altLength: undefined - }, - inheritColor: "from" // to, from, false, true (== from) - }, - configurePhysics:false, - physics: { - barnesHut: { - enabled: true, - theta: 1 / 0.6, // inverted to save time during calculation - gravitationalConstant: -2000, - centralGravity: 0.3, - springLength: 95, - springConstant: 0.04, - damping: 0.09 - }, - repulsion: { - centralGravity: 0.0, - springLength: 200, - springConstant: 0.05, - nodeDistance: 100, - damping: 0.09 - }, - hierarchicalRepulsion: { - enabled: false, - centralGravity: 0.0, - springLength: 100, - springConstant: 0.01, - nodeDistance: 150, - damping: 0.09 - }, - damping: null, - centralGravity: null, - springLength: null, - springConstant: null - }, - clustering: { // Per Node in Cluster = PNiC - enabled: false, // (Boolean) | global on/off switch for clustering. - initialMaxNodes: 100, // (# nodes) | if the initial amount of nodes is larger than this, we cluster until the total number is less than this threshold. - clusterThreshold:500, // (# nodes) | during calculate forces, we check if the total number of nodes is larger than this. If it is, cluster until reduced to reduceToNodes - reduceToNodes:300, // (# nodes) | during calculate forces, we check if the total number of nodes is larger than clusterThreshold. If it is, cluster until reduced to this - chainThreshold: 0.4, // (% of all drawn nodes)| maximum percentage of allowed chainnodes (long strings of connected nodes) within all nodes. (lower means less chains). - clusterEdgeThreshold: 20, // (px) | edge length threshold. if smaller, this node is clustered. - sectorThreshold: 100, // (# nodes in cluster) | cluster size threshold. If larger, expanding in own sector. - screenSizeThreshold: 0.2, // (% of canvas) | relative size threshold. If the width or height of a clusternode takes up this much of the screen, decluster node. - fontSizeMultiplier: 4.0, // (px PNiC) | how much the cluster font size grows per node in cluster (in px). - maxFontSize: 1000, - forceAmplification: 0.1, // (multiplier PNiC) | factor of increase fo the repulsion force of a cluster (per node in cluster). - distanceAmplification: 0.1, // (multiplier PNiC) | factor how much the repulsion distance of a cluster increases (per node in cluster). - edgeGrowth: 20, // (px PNiC) | amount of clusterSize connected to the edge is multiplied with this and added to edgeLength. - nodeScaling: {width: 1, // (px PNiC) | growth of the width per node in cluster. - height: 1, // (px PNiC) | growth of the height per node in cluster. - radius: 1}, // (px PNiC) | growth of the radius per node in cluster. - maxNodeSizeIncrements: 600, // (# increments) | max growth of the width per node in cluster. - activeAreaBoxSize: 80, // (px) | box area around the curser where clusters are popped open. - clusterLevelDifference: 2 - }, - navigation: { - enabled: false - }, - keyboard: { - enabled: false, - speed: {x: 10, y: 10, zoom: 0.02} - }, - dataManipulation: { - enabled: false, - initiallyVisible: false - }, - hierarchicalLayout: { - enabled:false, - levelSeparation: 150, - nodeSpacing: 100, - direction: "UD", // UD, DU, LR, RL - layout: "hubsize" // hubsize, directed - }, - freezeForStabilization: false, - smoothCurves: { - enabled: true, - dynamic: true, - type: "continuous", - roundness: 0.5 - }, - maxVelocity: 30, - minVelocity: 0.1, // px/s - stabilize: true, // stabilize before displaying the network - stabilizationIterations: 1000, // maximum number of iteration to stabilize - locale: 'en', - locales: locales, - tooltip: { - delay: 300, - fontColor: 'black', - fontSize: 14, // px - fontFace: 'verdana', - color: { - border: '#666', - background: '#FFFFC6' - } - }, - dragNetwork: true, - dragNodes: true, - zoomable: true, - hover: false, - hideEdgesOnDrag: false, - hideNodesOnDrag: false, - width : '100%', - height : '100%', - selectable: true - }; - this.constants = util.extend({}, this.defaultOptions); - this.pixelRatio = 1; - - - this.hoverObj = {nodes:{},edges:{}}; - this.controlNodesActive = false; - this.navigationHammers = {existing:[], _new: []}; - - // animation properties - this.animationSpeed = 1/this.renderRefreshRate; - this.animationEasingFunction = "easeInOutQuint"; - this.easingTime = 0; - this.sourceScale = 0; - this.targetScale = 0; - this.sourceTranslation = 0; - this.targetTranslation = 0; - this.lockedOnNodeId = null; - this.lockedOnNodeOffset = null; - this.touchTime = 0; - - // Node variables - var network = this; - this.groups = new Groups(); // object with groups - this.images = new Images(); // object with images - this.images.setOnloadCallback(function () { - network._redraw(); - }); - - // keyboard navigation variables - this.xIncrement = 0; - this.yIncrement = 0; - this.zoomIncrement = 0; - - // loading all the mixins: - // load the force calculation functions, grouped under the physics system. - this._loadPhysicsSystem(); - // create a frame and canvas - this._create(); - // load the sector system. (mandatory, fully integrated with Network) - this._loadSectorSystem(); - // load the cluster system. (mandatory, even when not using the cluster system, there are function calls to it) - this._loadClusterSystem(); - // load the selection system. (mandatory, required by Network) - this._loadSelectionSystem(); - // load the selection system. (mandatory, required by Network) - this._loadHierarchySystem(); - - - // apply options - this._setTranslation(this.frame.clientWidth / 2, this.frame.clientHeight / 2); - this._setScale(1); - this.setOptions(options); - - // other vars - this.freezeSimulation = false;// freeze the simulation - this.cachedFunctions = {}; - this.startedStabilization = false; - this.stabilized = false; - this.stabilizationIterations = null; - this.draggingNodes = false; - - // containers for nodes and edges - this.calculationNodes = {}; - this.calculationNodeIndices = []; - this.nodeIndices = []; // array with all the indices of the nodes. Used to speed up forces calculation - this.nodes = {}; // object with Node objects - this.edges = {}; // object with Edge objects - - // position and scale variables and objects - this.canvasTopLeft = {"x": 0,"y": 0}; // coordinates of the top left of the canvas. they will be set during _redraw. - this.canvasBottomRight = {"x": 0,"y": 0}; // coordinates of the bottom right of the canvas. they will be set during _redraw - this.pointerPosition = {"x": 0,"y": 0}; // coordinates of the bottom right of the canvas. they will be set during _redraw - this.areaCenter = {}; // object with x and y elements used for determining the center of the zoom action - this.scale = 1; // defining the global scale variable in the constructor - this.previousScale = this.scale; // this is used to check if the zoom operation is zooming in or out - - // datasets or dataviews - this.nodesData = null; // A DataSet or DataView - this.edgesData = null; // A DataSet or DataView - - // create event listeners used to subscribe on the DataSets of the nodes and edges - this.nodesListeners = { - 'add': function (event, params) { - network._addNodes(params.items); - network.start(); - }, - 'update': function (event, params) { - network._updateNodes(params.items, params.data); - network.start(); - }, - 'remove': function (event, params) { - network._removeNodes(params.items); - network.start(); - } - }; - this.edgesListeners = { - 'add': function (event, params) { - network._addEdges(params.items); - network.start(); - }, - 'update': function (event, params) { - network._updateEdges(params.items); - network.start(); - }, - 'remove': function (event, params) { - network._removeEdges(params.items); - network.start(); - } - }; - - // properties for the animation - this.moving = true; - this.timer = undefined; // Scheduling function. Is definded in this.start(); - - // load data (the disable start variable will be the same as the enabled clustering) - this.setData(data,this.constants.clustering.enabled || this.constants.hierarchicalLayout.enabled); - - // hierarchical layout - this.initializing = false; - if (this.constants.hierarchicalLayout.enabled == true) { - this._setupHierarchicalLayout(); - } - else { - // zoom so all data will fit on the screen, if clustering is enabled, we do not want start to be called here. - if (this.constants.stabilize == false) { - this.zoomExtent(undefined, true,this.constants.clustering.enabled); - } - } - - // if clustering is disabled, the simulation will have started in the setData function - if (this.constants.clustering.enabled) { - this.startWithClustering(); - } - } - - // Extend Network with an Emitter mixin - Emitter(Network.prototype); - - /** - * Get the script path where the vis.js library is located - * - * @returns {string | null} path Path or null when not found. Path does not - * end with a slash. - * @private - */ - Network.prototype._getScriptPath = function() { - var scripts = document.getElementsByTagName( 'script' ); - - // find script named vis.js or vis.min.js - for (var i = 0; i < scripts.length; i++) { - var src = scripts[i].src; - var match = src && /\/?vis(.min)?\.js$/.exec(src); - if (match) { - // return path without the script name - return src.substring(0, src.length - match[0].length); - } - } - - return null; - }; - - - /** - * Find the center position of the network - * @private - */ - Network.prototype._getRange = function() { - var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node; - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (minX > (node.x)) {minX = node.x;} - if (maxX < (node.x)) {maxX = node.x;} - if (minY > (node.y)) {minY = node.y;} - if (maxY < (node.y)) {maxY = node.y;} - } - } - if (minX == 1e9 && maxX == -1e9 && minY == 1e9 && maxY == -1e9) { - minY = 0, maxY = 0, minX = 0, maxX = 0; - } - return {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; - }; - - - /** - * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; - * @returns {{x: number, y: number}} - * @private - */ - Network.prototype._findCenter = function(range) { - return {x: (0.5 * (range.maxX + range.minX)), - y: (0.5 * (range.maxY + range.minY))}; - }; - - - /** - * This function zooms out to fit all data on screen based on amount of nodes - * - * @param {Boolean} [initialZoom] | zoom based on fitted formula or range, true = fitted, default = false; - * @param {Boolean} [disableStart] | If true, start is not called. - */ - Network.prototype.zoomExtent = function(animationOptions, initialZoom, disableStart) { - if (initialZoom === undefined) { - initialZoom = false; - } - if (disableStart === undefined) { - disableStart = false; - } - if (animationOptions === undefined) { - animationOptions = false; - } - - var range = this._getRange(); - var zoomLevel; - - if (initialZoom == true) { - var numberOfNodes = this.nodeIndices.length; - if (this.constants.smoothCurves == true) { - if (this.constants.clustering.enabled == true && - numberOfNodes >= this.constants.clustering.initialMaxNodes) { - zoomLevel = 49.07548 / (numberOfNodes + 142.05338) + 9.1444e-04; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. - } - else { - zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. - } - } - else { - if (this.constants.clustering.enabled == true && - numberOfNodes >= this.constants.clustering.initialMaxNodes) { - zoomLevel = 77.5271985 / (numberOfNodes + 187.266146) + 4.76710517e-05; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. - } - else { - zoomLevel = 30.5062972 / (numberOfNodes + 19.93597763) + 0.08413486; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. - } - } - - // correct for larger canvasses. - var factor = Math.min(this.frame.canvas.clientWidth / 600, this.frame.canvas.clientHeight / 600); - zoomLevel *= factor; - } - else { - var xDistance = Math.abs(range.maxX - range.minX) * 1.1; - var yDistance = Math.abs(range.maxY - range.minY) * 1.1; - - var xZoomLevel = this.frame.canvas.clientWidth / xDistance; - var yZoomLevel = this.frame.canvas.clientHeight / yDistance; - - zoomLevel = (xZoomLevel <= yZoomLevel) ? xZoomLevel : yZoomLevel; - } - - if (zoomLevel > 1.0) { - zoomLevel = 1.0; - } - - - var center = this._findCenter(range); - if (disableStart == false) { - var options = {position: center, scale: zoomLevel, animation: animationOptions}; - this.moveTo(options); - this.moving = true; - this.start(); - } - else { - center.x *= zoomLevel; - center.y *= zoomLevel; - center.x -= 0.5 * this.frame.canvas.clientWidth; - center.y -= 0.5 * this.frame.canvas.clientHeight; - this._setScale(zoomLevel); - this._setTranslation(-center.x,-center.y); - } - }; - - - /** - * Update the this.nodeIndices with the most recent node index list - * @private - */ - Network.prototype._updateNodeIndexList = function() { - this._clearNodeIndexList(); - for (var idx in this.nodes) { - if (this.nodes.hasOwnProperty(idx)) { - this.nodeIndices.push(idx); - } - } - }; - - - /** - * Set nodes and edges, and optionally options as well. - * - * @param {Object} data Object containing parameters: - * {Array | DataSet | DataView} [nodes] Array with nodes - * {Array | DataSet | DataView} [edges] Array with edges - * {String} [dot] String containing data in DOT format - * {String} [gephi] String containing data in gephi JSON format - * {Options} [options] Object with options - * @param {Boolean} [disableStart] | optional: disable the calling of the start function. - */ - Network.prototype.setData = function(data, disableStart) { - if (disableStart === undefined) { - disableStart = false; - } - // we set initializing to true to ensure that the hierarchical layout is not performed until both nodes and edges are added. - this.initializing = true; - - if (data && data.dot && (data.nodes || data.edges)) { - throw new SyntaxError('Data must contain either parameter "dot" or ' + - ' parameter pair "nodes" and "edges", but not both.'); - } - - // set options - this.setOptions(data && data.options); - // set all data - if (data && data.dot) { - // parse DOT file - if(data && data.dot) { - var dotData = dotparser.DOTToGraph(data.dot); - this.setData(dotData); - return; - } - } - else if (data && data.gephi) { - // parse DOT file - if(data && data.gephi) { - var gephiData = gephiParser.parseGephi(data.gephi); - this.setData(gephiData); - return; - } - } - else { - this._setNodes(data && data.nodes); - this._setEdges(data && data.edges); - } - this._putDataInSector(); - if (disableStart == false) { - if (this.constants.hierarchicalLayout.enabled == true) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - else { - // find a stable position or start animating to a stable position - if (this.constants.stabilize) { - this._stabilize(); - } - } - this.start(); - } - this.initializing = false; - }; - - /** - * Set options - * @param {Object} options - */ - Network.prototype.setOptions = function (options) { - if (options) { - var prop; - - var fields = ['nodes','edges','smoothCurves','hierarchicalLayout','clustering','navigation', - 'keyboard','dataManipulation','onAdd','onEdit','onEditEdge','onConnect','onDelete','clickToUse' - ]; - // extend all but the values in fields - util.selectiveNotDeepExtend(fields,this.constants, options); - util.selectiveNotDeepExtend(['color'],this.constants.nodes, options.nodes); - util.selectiveNotDeepExtend(['color','length'],this.constants.edges, options.edges); - - if (options.physics) { - util.mergeOptions(this.constants.physics, options.physics,'barnesHut'); - util.mergeOptions(this.constants.physics, options.physics,'repulsion'); - - if (options.physics.hierarchicalRepulsion) { - this.constants.hierarchicalLayout.enabled = true; - this.constants.physics.hierarchicalRepulsion.enabled = true; - this.constants.physics.barnesHut.enabled = false; - for (prop in options.physics.hierarchicalRepulsion) { - if (options.physics.hierarchicalRepulsion.hasOwnProperty(prop)) { - this.constants.physics.hierarchicalRepulsion[prop] = options.physics.hierarchicalRepulsion[prop]; - } - } - } - } - - if (options.onAdd) {this.triggerFunctions.add = options.onAdd;} - if (options.onEdit) {this.triggerFunctions.edit = options.onEdit;} - if (options.onEditEdge) {this.triggerFunctions.editEdge = options.onEditEdge;} - if (options.onConnect) {this.triggerFunctions.connect = options.onConnect;} - if (options.onDelete) {this.triggerFunctions.del = options.onDelete;} - - util.mergeOptions(this.constants, options,'smoothCurves'); - util.mergeOptions(this.constants, options,'hierarchicalLayout'); - util.mergeOptions(this.constants, options,'clustering'); - util.mergeOptions(this.constants, options,'navigation'); - util.mergeOptions(this.constants, options,'keyboard'); - util.mergeOptions(this.constants, options,'dataManipulation'); - - - if (options.dataManipulation) { - this.editMode = this.constants.dataManipulation.initiallyVisible; - } - - - // TODO: work out these options and document them - if (options.edges) { - if (options.edges.color !== undefined) { - if (util.isString(options.edges.color)) { - this.constants.edges.color = {}; - this.constants.edges.color.color = options.edges.color; - this.constants.edges.color.highlight = options.edges.color; - this.constants.edges.color.hover = options.edges.color; - } - else { - if (options.edges.color.color !== undefined) {this.constants.edges.color.color = options.edges.color.color;} - if (options.edges.color.highlight !== undefined) {this.constants.edges.color.highlight = options.edges.color.highlight;} - if (options.edges.color.hover !== undefined) {this.constants.edges.color.hover = options.edges.color.hover;} - } - } - - if (!options.edges.fontColor) { - if (options.edges.color !== undefined) { - if (util.isString(options.edges.color)) {this.constants.edges.fontColor = options.edges.color;} - else if (options.edges.color.color !== undefined) {this.constants.edges.fontColor = options.edges.color.color;} - } - } - } - - if (options.nodes) { - if (options.nodes.color) { - var newColorObj = util.parseColor(options.nodes.color); - this.constants.nodes.color.background = newColorObj.background; - this.constants.nodes.color.border = newColorObj.border; - this.constants.nodes.color.highlight.background = newColorObj.highlight.background; - this.constants.nodes.color.highlight.border = newColorObj.highlight.border; - this.constants.nodes.color.hover.background = newColorObj.hover.background; - this.constants.nodes.color.hover.border = newColorObj.hover.border; - } - } - if (options.groups) { - for (var groupname in options.groups) { - if (options.groups.hasOwnProperty(groupname)) { - var group = options.groups[groupname]; - this.groups.add(groupname, group); - } - } - } - - if (options.tooltip) { - for (prop in options.tooltip) { - if (options.tooltip.hasOwnProperty(prop)) { - this.constants.tooltip[prop] = options.tooltip[prop]; - } - } - if (options.tooltip.color) { - this.constants.tooltip.color = util.parseColor(options.tooltip.color); - } - } - - if ('clickToUse' in options) { - if (options.clickToUse) { - this.activator = new Activator(this.frame); - this.activator.on('change', this._createKeyBinds.bind(this)); - } - else { - if (this.activator) { - this.activator.destroy(); - delete this.activator; - } - } - } - - if (options.labels) { - throw new Error('Option "labels" is deprecated. Use options "locale" and "locales" instead.'); - } - } - - // (Re)loading the mixins that can be enabled or disabled in the options. - // load the force calculation functions, grouped under the physics system. - this._loadPhysicsSystem(); - // load the navigation system. - this._loadNavigationControls(); - // load the data manipulation system - this._loadManipulationSystem(); - // configure the smooth curves - this._configureSmoothCurves(); - - - // bind keys. If disabled, this will not do anything; - this._createKeyBinds(); - this.setSize(this.constants.width, this.constants.height); - this.moving = true; - this.start(); - }; - - - - /** - * Create the main frame for the Network. - * This function is executed once when a Network object is created. The frame - * contains a canvas, and this canvas contains all objects like the axis and - * nodes. - * @private - */ - Network.prototype._create = function () { - // remove all elements from the container element. - while (this.containerElement.hasChildNodes()) { - this.containerElement.removeChild(this.containerElement.firstChild); - } - - this.frame = document.createElement('div'); - this.frame.className = 'vis network-frame'; - this.frame.style.position = 'relative'; - this.frame.style.overflow = 'hidden'; - - - ////////////////////////////////////////////////////////////////// - - this.frame.canvas = document.createElement("canvas"); - - this.frame.canvas.style.position = 'relative'; - this.frame.appendChild(this.frame.canvas); - - - if (!this.frame.canvas.getContext) { - var noCanvas = document.createElement( 'DIV' ); - noCanvas.style.color = 'red'; - noCanvas.style.fontWeight = 'bold' ; - noCanvas.style.padding = '10px'; - noCanvas.innerHTML = 'Error: your browser does not support HTML canvas'; - this.frame.canvas.appendChild(noCanvas); - } - else { - - var ctx = this.frame.canvas.getContext("2d"); - - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || - ctx.mozBackingStorePixelRatio || - ctx.msBackingStorePixelRatio || - ctx.oBackingStorePixelRatio || - ctx.backingStorePixelRatio || 1); - - - - this.frame.canvas.getContext("2d").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - } - - ////////////////////////////////////////////////////////////////// - - - var me = this; - this.drag = {}; - this.pinch = {}; - this.hammer = Hammer(this.frame.canvas, { - prevent_default: true - }); - this.hammer.on('tap', me._onTap.bind(me) ); - this.hammer.on('doubletap', me._onDoubleTap.bind(me) ); - this.hammer.on('hold', me._onHold.bind(me) ); - this.hammer.on('pinch', me._onPinch.bind(me) ); - this.hammer.on('touch', me._onTouch.bind(me) ); - this.hammer.on('dragstart', me._onDragStart.bind(me) ); - this.hammer.on('drag', me._onDrag.bind(me) ); - this.hammer.on('dragend', me._onDragEnd.bind(me) ); - this.hammer.on('mousewheel',me._onMouseWheel.bind(me) ); - this.hammer.on('DOMMouseScroll',me._onMouseWheel.bind(me) ); // for FF - this.hammer.on('mousemove', me._onMouseMoveTitle.bind(me) ); - - this.hammerFrame = Hammer(this.frame, { - prevent_default: true - }); - this.hammerFrame.on('release', me._onRelease.bind(me) ); - - // add the frame to the container element - this.containerElement.appendChild(this.frame); - - }; - - - /** - * Binding the keys for keyboard navigation. These functions are defined in the NavigationMixin - * @private - */ - Network.prototype._createKeyBinds = function() { - var me = this; - if (this.keycharm !== undefined) { - this.keycharm.destroy(); - } - this.keycharm = keycharm(); - - this.keycharm.reset(); - - if (this.constants.keyboard.enabled && this.isActive()) { - this.keycharm.bind("up", this._moveUp.bind(me) , "keydown"); - this.keycharm.bind("up", this._yStopMoving.bind(me), "keyup"); - this.keycharm.bind("down", this._moveDown.bind(me) , "keydown"); - this.keycharm.bind("down", this._yStopMoving.bind(me), "keyup"); - this.keycharm.bind("left", this._moveLeft.bind(me) , "keydown"); - this.keycharm.bind("left", this._xStopMoving.bind(me), "keyup"); - this.keycharm.bind("right",this._moveRight.bind(me), "keydown"); - this.keycharm.bind("right",this._xStopMoving.bind(me), "keyup"); - this.keycharm.bind("=", this._zoomIn.bind(me), "keydown"); - this.keycharm.bind("=", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("num+", this._zoomIn.bind(me), "keydown"); - this.keycharm.bind("num+", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("num-", this._zoomOut.bind(me), "keydown"); - this.keycharm.bind("num-", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("-", this._zoomOut.bind(me), "keydown"); - this.keycharm.bind("-", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("[", this._zoomIn.bind(me), "keydown"); - this.keycharm.bind("[", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("]", this._zoomOut.bind(me), "keydown"); - this.keycharm.bind("]", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("pageup",this._zoomIn.bind(me), "keydown"); - this.keycharm.bind("pageup",this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("pagedown",this._zoomOut.bind(me),"keydown"); - this.keycharm.bind("pagedown",this._stopZoom.bind(me), "keyup"); - } - - if (this.constants.dataManipulation.enabled == true) { - this.keycharm.bind("esc",this._createManipulatorBar.bind(me)); - this.keycharm.bind("delete",this._deleteSelected.bind(me)); - } - }; - - /** - * Get the pointer location from a touch location - * @param {{pageX: Number, pageY: Number}} touch - * @return {{x: Number, y: Number}} pointer - * @private - */ - Network.prototype._getPointer = function (touch) { - return { - x: touch.pageX - util.getAbsoluteLeft(this.frame.canvas), - y: touch.pageY - util.getAbsoluteTop(this.frame.canvas) - }; - }; - - /** - * On start of a touch gesture, store the pointer - * @param event - * @private - */ - Network.prototype._onTouch = function (event) { - if (new Date().valueOf() - this.touchTime > 100) { - this.drag.pointer = this._getPointer(event.gesture.center); - this.drag.pinched = false; - this.pinch.scale = this._getScale(); - - // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame) - this.touchTime = new Date().valueOf(); - - this._handleTouch(this.drag.pointer); - } - }; - - /** - * handle drag start event - * @private - */ - Network.prototype._onDragStart = function () { - this._handleDragStart(); - }; - - - /** - * This function is called by _onDragStart. - * It is separated out because we can then overload it for the datamanipulation system. - * - * @private - */ - Network.prototype._handleDragStart = function() { - var drag = this.drag; - var node = this._getNodeAt(drag.pointer); - // note: drag.pointer is set in _onTouch to get the initial touch location - - drag.dragging = true; - drag.selection = []; - drag.translation = this._getTranslation(); - drag.nodeId = null; - this.draggingNodes = false; - - if (node != null && this.constants.dragNodes == true) { - this.draggingNodes = true; - drag.nodeId = node.id; - // select the clicked node if not yet selected - if (!node.isSelected()) { - this._selectObject(node,false); - } - - this.emit("dragStart",{nodeIds:this.getSelection().nodes}); - - // create an array with the selected nodes and their original location and status - for (var objectId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(objectId)) { - var object = this.selectionObj.nodes[objectId]; - var s = { - id: object.id, - node: object, - - // store original x, y, xFixed and yFixed, make the node temporarily Fixed - x: object.x, - y: object.y, - xFixed: object.xFixed, - yFixed: object.yFixed - }; - - object.xFixed = true; - object.yFixed = true; - - drag.selection.push(s); - } - } - } - }; - - - /** - * handle drag event - * @private - */ - Network.prototype._onDrag = function (event) { - this._handleOnDrag(event) - }; - - - /** - * This function is called by _onDrag. - * It is separated out because we can then overload it for the datamanipulation system. - * - * @private - */ - Network.prototype._handleOnDrag = function(event) { - if (this.drag.pinched) { - return; - } - - // remove the focus on node if it is focussed on by the focusOnNode - this.releaseNode(); - - var pointer = this._getPointer(event.gesture.center); - var me = this; - var drag = this.drag; - var selection = drag.selection; - if (selection && selection.length && this.constants.dragNodes == true) { - // calculate delta's and new location - var deltaX = pointer.x - drag.pointer.x; - var deltaY = pointer.y - drag.pointer.y; - - // update position of all selected nodes - selection.forEach(function (s) { - var node = s.node; - - if (!s.xFixed) { - node.x = me._XconvertDOMtoCanvas(me._XconvertCanvasToDOM(s.x) + deltaX); - } - - if (!s.yFixed) { - node.y = me._YconvertDOMtoCanvas(me._YconvertCanvasToDOM(s.y) + deltaY); - } - }); - - - // start _animationStep if not yet running - if (!this.moving) { - this.moving = true; - this.start(); - } - } - else { - if (this.constants.dragNetwork == true) { - // move the network - var diffX = pointer.x - this.drag.pointer.x; - var diffY = pointer.y - this.drag.pointer.y; - - this._setTranslation( - this.drag.translation.x + diffX, - this.drag.translation.y + diffY - ); - this._redraw(); - // this.moving = true; - // this.start(); - } - } - }; - - /** - * handle drag start event - * @private - */ - Network.prototype._onDragEnd = function (event) { - this._handleDragEnd(event); - }; - - - Network.prototype._handleDragEnd = function(event) { - this.drag.dragging = false; - var selection = this.drag.selection; - if (selection && selection.length) { - selection.forEach(function (s) { - // restore original xFixed and yFixed - s.node.xFixed = s.xFixed; - s.node.yFixed = s.yFixed; - }); - this.moving = true; - this.start(); - } - else { - this._redraw(); - } - if (this.draggingNodes == false) { - this.emit("dragEnd",{nodeIds:[]}); - } - else { - this.emit("dragEnd",{nodeIds:this.getSelection().nodes}); - } - - } - /** - * handle tap/click event: select/unselect a node - * @private - */ - Network.prototype._onTap = function (event) { - var pointer = this._getPointer(event.gesture.center); - this.pointerPosition = pointer; - this._handleTap(pointer); - - }; - - - /** - * handle doubletap event - * @private - */ - Network.prototype._onDoubleTap = function (event) { - var pointer = this._getPointer(event.gesture.center); - this._handleDoubleTap(pointer); - }; - - - /** - * handle long tap event: multi select nodes - * @private - */ - Network.prototype._onHold = function (event) { - var pointer = this._getPointer(event.gesture.center); - this.pointerPosition = pointer; - this._handleOnHold(pointer); - }; - - /** - * handle the release of the screen - * - * @private - */ - Network.prototype._onRelease = function (event) { - var pointer = this._getPointer(event.gesture.center); - this._handleOnRelease(pointer); - }; - - /** - * Handle pinch event - * @param event - * @private - */ - Network.prototype._onPinch = function (event) { - var pointer = this._getPointer(event.gesture.center); - - this.drag.pinched = true; - if (!('scale' in this.pinch)) { - this.pinch.scale = 1; - } - - // TODO: enabled moving while pinching? - var scale = this.pinch.scale * event.gesture.scale; - this._zoom(scale, pointer) - }; - - /** - * Zoom the network in or out - * @param {Number} scale a number around 1, and between 0.01 and 10 - * @param {{x: Number, y: Number}} pointer Position on screen - * @return {Number} appliedScale scale is limited within the boundaries - * @private - */ - Network.prototype._zoom = function(scale, pointer) { - if (this.constants.zoomable == true) { - var scaleOld = this._getScale(); - if (scale < 0.00001) { - scale = 0.00001; - } - if (scale > 10) { - scale = 10; - } - - var preScaleDragPointer = null; - if (this.drag !== undefined) { - if (this.drag.dragging == true) { - preScaleDragPointer = this.DOMtoCanvas(this.drag.pointer); - } - } - // + this.frame.canvas.clientHeight / 2 - var translation = this._getTranslation(); - - var scaleFrac = scale / scaleOld; - var tx = (1 - scaleFrac) * pointer.x + translation.x * scaleFrac; - var ty = (1 - scaleFrac) * pointer.y + translation.y * scaleFrac; - - this.areaCenter = {"x" : this._XconvertDOMtoCanvas(pointer.x), - "y" : this._YconvertDOMtoCanvas(pointer.y)}; - - this._setScale(scale); - this._setTranslation(tx, ty); - this.updateClustersDefault(); - - if (preScaleDragPointer != null) { - var postScaleDragPointer = this.canvasToDOM(preScaleDragPointer); - this.drag.pointer.x = postScaleDragPointer.x; - this.drag.pointer.y = postScaleDragPointer.y; - } - - this._redraw(); - - if (scaleOld < scale) { - this.emit("zoom", {direction:"+"}); - } - else { - this.emit("zoom", {direction:"-"}); - } - - return scale; - } - }; - - - /** - * Event handler for mouse wheel event, used to zoom the timeline - * See http://adomas.org/javascript-mouse-wheel/ - * https://github.com/EightMedia/hammer.js/issues/256 - * @param {MouseEvent} event - * @private - */ - Network.prototype._onMouseWheel = function(event) { - // retrieve delta - var delta = 0; - if (event.wheelDelta) { /* IE/Opera. */ - delta = event.wheelDelta/120; - } else if (event.detail) { /* Mozilla case. */ - // In Mozilla, sign of delta is different than in IE. - // Also, delta is multiple of 3. - delta = -event.detail/3; - } - - // If delta is nonzero, handle it. - // Basically, delta is now positive if wheel was scrolled up, - // and negative, if wheel was scrolled down. - if (delta) { - - // calculate the new scale - var scale = this._getScale(); - var zoom = delta / 10; - if (delta < 0) { - zoom = zoom / (1 - zoom); - } - scale *= (1 + zoom); - - // calculate the pointer location - var gesture = hammerUtil.fakeGesture(this, event); - var pointer = this._getPointer(gesture.center); - - // apply the new scale - this._zoom(scale, pointer); - } - - // Prevent default actions caused by mouse wheel. - event.preventDefault(); - }; - - - /** - * Mouse move handler for checking whether the title moves over a node with a title. - * @param {Event} event - * @private - */ - Network.prototype._onMouseMoveTitle = function (event) { - var gesture = hammerUtil.fakeGesture(this, event); - var pointer = this._getPointer(gesture.center); - - // check if the previously selected node is still selected - if (this.popupObj) { - this._checkHidePopup(pointer); - } - - // start a timeout that will check if the mouse is positioned above - // an element - var me = this; - var checkShow = function() { - me._checkShowPopup(pointer); - }; - if (this.popupTimer) { - clearInterval(this.popupTimer); // stop any running calculationTimer - } - if (!this.drag.dragging) { - this.popupTimer = setTimeout(checkShow, this.constants.tooltip.delay); - } - - - /** - * Adding hover highlights - */ - if (this.constants.hover == true) { - // removing all hover highlights - for (var edgeId in this.hoverObj.edges) { - if (this.hoverObj.edges.hasOwnProperty(edgeId)) { - this.hoverObj.edges[edgeId].hover = false; - delete this.hoverObj.edges[edgeId]; - } - } - - // adding hover highlights - var obj = this._getNodeAt(pointer); - if (obj == null) { - obj = this._getEdgeAt(pointer); - } - if (obj != null) { - this._hoverObject(obj); - } - - // removing all node hover highlights except for the selected one. - for (var nodeId in this.hoverObj.nodes) { - if (this.hoverObj.nodes.hasOwnProperty(nodeId)) { - if (obj instanceof Node && obj.id != nodeId || obj instanceof Edge || obj == null) { - this._blurObject(this.hoverObj.nodes[nodeId]); - delete this.hoverObj.nodes[nodeId]; - } - } - } - this.redraw(); - } - }; - - /** - * Check if there is an element on the given position in the network - * (a node or edge). If so, and if this element has a title, - * show a popup window with its title. - * - * @param {{x:Number, y:Number}} pointer - * @private - */ - Network.prototype._checkShowPopup = function (pointer) { - var obj = { - left: this._XconvertDOMtoCanvas(pointer.x), - top: this._YconvertDOMtoCanvas(pointer.y), - right: this._XconvertDOMtoCanvas(pointer.x), - bottom: this._YconvertDOMtoCanvas(pointer.y) - }; - - var id; - var lastPopupNode = this.popupObj; - - if (this.popupObj == undefined) { - // search the nodes for overlap, select the top one in case of multiple nodes - var nodes = this.nodes; - for (id in nodes) { - if (nodes.hasOwnProperty(id)) { - var node = nodes[id]; - if (node.getTitle() !== undefined && node.isOverlappingWith(obj)) { - this.popupObj = node; - break; - } - } - } - } - - if (this.popupObj === undefined) { - // search the edges for overlap - var edges = this.edges; - for (id in edges) { - if (edges.hasOwnProperty(id)) { - var edge = edges[id]; - if (edge.connected && (edge.getTitle() !== undefined) && - edge.isOverlappingWith(obj)) { - this.popupObj = edge; - break; - } - } - } - } - - if (this.popupObj) { - // show popup message window - if (this.popupObj != lastPopupNode) { - var me = this; - if (!me.popup) { - me.popup = new Popup(me.frame, me.constants.tooltip); - } - - // adjust a small offset such that the mouse cursor is located in the - // bottom left location of the popup, and you can easily move over the - // popup area - me.popup.setPosition(pointer.x - 3, pointer.y - 3); - me.popup.setText(me.popupObj.getTitle()); - me.popup.show(); - } - } - else { - if (this.popup) { - this.popup.hide(); - } - } - }; - - - /** - * Check if the popup must be hided, which is the case when the mouse is no - * longer hovering on the object - * @param {{x:Number, y:Number}} pointer - * @private - */ - Network.prototype._checkHidePopup = function (pointer) { - if (!this.popupObj || !this._getNodeAt(pointer) ) { - this.popupObj = undefined; - if (this.popup) { - this.popup.hide(); - } - } - }; - - - /** - * Set a new size for the network - * @param {string} width Width in pixels or percentage (for example '800px' - * or '50%') - * @param {string} height Height in pixels or percentage (for example '400px' - * or '30%') - */ - Network.prototype.setSize = function(width, height) { - var emitEvent = false; - var oldWidth = this.frame.canvas.width; - var oldHeight = this.frame.canvas.height; - if (width != this.constants.width || height != this.constants.height || this.frame.style.width != width || this.frame.style.height != height) { - this.frame.style.width = width; - this.frame.style.height = height; - - this.frame.canvas.style.width = '100%'; - this.frame.canvas.style.height = '100%'; - - this.frame.canvas.width = this.frame.canvas.clientWidth * this.pixelRatio; - this.frame.canvas.height = this.frame.canvas.clientHeight * this.pixelRatio; - - this.constants.width = width; - this.constants.height = height; - - emitEvent = true; - } - else { - // this would adapt the width of the canvas to the width from 100% if and only if - // there is a change. - - if (this.frame.canvas.width != this.frame.canvas.clientWidth * this.pixelRatio) { - this.frame.canvas.width = this.frame.canvas.clientWidth * this.pixelRatio; - emitEvent = true; - } - if (this.frame.canvas.height != this.frame.canvas.clientHeight * this.pixelRatio) { - this.frame.canvas.height = this.frame.canvas.clientHeight * this.pixelRatio; - emitEvent = true; - } - } - - if (emitEvent == true) { - this.emit('resize', {width:this.frame.canvas.width * this.pixelRatio,height:this.frame.canvas.height * this.pixelRatio, oldWidth: oldWidth * this.pixelRatio, oldHeight: oldHeight * this.pixelRatio}); - } - }; - - /** - * Set a data set with nodes for the network - * @param {Array | DataSet | DataView} nodes The data containing the nodes. - * @private - */ - Network.prototype._setNodes = function(nodes) { - var oldNodesData = this.nodesData; - - if (nodes instanceof DataSet || nodes instanceof DataView) { - this.nodesData = nodes; - } - else if (Array.isArray(nodes)) { - this.nodesData = new DataSet(); - this.nodesData.add(nodes); - } - else if (!nodes) { - this.nodesData = new DataSet(); - } - else { - throw new TypeError('Array or DataSet expected'); - } - - if (oldNodesData) { - // unsubscribe from old dataset - util.forEach(this.nodesListeners, function (callback, event) { - oldNodesData.off(event, callback); - }); - } - - // remove drawn nodes - this.nodes = {}; - - if (this.nodesData) { - // subscribe to new dataset - var me = this; - util.forEach(this.nodesListeners, function (callback, event) { - me.nodesData.on(event, callback); - }); - - // draw all new nodes - var ids = this.nodesData.getIds(); - this._addNodes(ids); - } - this._updateSelection(); - }; - - /** - * Add nodes - * @param {Number[] | String[]} ids - * @private - */ - Network.prototype._addNodes = function(ids) { - var id; - for (var i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - var data = this.nodesData.get(id); - var node = new Node(data, this.images, this.groups, this.constants); - this.nodes[id] = node; // note: this may replace an existing node - if ((node.xFixed == false || node.yFixed == false) && (node.x === null || node.y === null)) { - var radius = 10 * 0.1*ids.length + 10; - var angle = 2 * Math.PI * Math.random(); - if (node.xFixed == false) {node.x = radius * Math.cos(angle);} - if (node.yFixed == false) {node.y = radius * Math.sin(angle);} - } - this.moving = true; - } - - this._updateNodeIndexList(); - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - this._updateCalculationNodes(); - this._reconnectEdges(); - this._updateValueRange(this.nodes); - this.updateLabels(); - }; - - /** - * Update existing nodes, or create them when not yet existing - * @param {Number[] | String[]} ids - * @private - */ - Network.prototype._updateNodes = function(ids,changedData) { - var nodes = this.nodes; - for (var i = 0, len = ids.length; i < len; i++) { - var id = ids[i]; - var node = nodes[id]; - var data = changedData[i]; - if (node) { - // update node - node.setProperties(data, this.constants); - } - else { - // create node - node = new Node(properties, this.images, this.groups, this.constants); - nodes[id] = node; - } - } - this.moving = true; - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - this._updateNodeIndexList(); - this._updateValueRange(nodes); - }; - - /** - * Remove existing nodes. If nodes do not exist, the method will just ignore it. - * @param {Number[] | String[]} ids - * @private - */ - Network.prototype._removeNodes = function(ids) { - var nodes = this.nodes; - for (var i = 0, len = ids.length; i < len; i++) { - var id = ids[i]; - delete nodes[id]; - } - this._updateNodeIndexList(); - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - this._updateCalculationNodes(); - this._reconnectEdges(); - this._updateSelection(); - this._updateValueRange(nodes); - }; - - /** - * Load edges by reading the data table - * @param {Array | DataSet | DataView} edges The data containing the edges. - * @private - * @private - */ - Network.prototype._setEdges = function(edges) { - var oldEdgesData = this.edgesData; - - if (edges instanceof DataSet || edges instanceof DataView) { - this.edgesData = edges; - } - else if (Array.isArray(edges)) { - this.edgesData = new DataSet(); - this.edgesData.add(edges); - } - else if (!edges) { - this.edgesData = new DataSet(); - } - else { - throw new TypeError('Array or DataSet expected'); - } - - if (oldEdgesData) { - // unsubscribe from old dataset - util.forEach(this.edgesListeners, function (callback, event) { - oldEdgesData.off(event, callback); - }); - } - - // remove drawn edges - this.edges = {}; - - if (this.edgesData) { - // subscribe to new dataset - var me = this; - util.forEach(this.edgesListeners, function (callback, event) { - me.edgesData.on(event, callback); - }); - - // draw all new nodes - var ids = this.edgesData.getIds(); - this._addEdges(ids); - } - - this._reconnectEdges(); - }; - - /** - * Add edges - * @param {Number[] | String[]} ids - * @private - */ - Network.prototype._addEdges = function (ids) { - var edges = this.edges, - edgesData = this.edgesData; - - for (var i = 0, len = ids.length; i < len; i++) { - var id = ids[i]; - - var oldEdge = edges[id]; - if (oldEdge) { - oldEdge.disconnect(); - } - - var data = edgesData.get(id, {"showInternalIds" : true}); - edges[id] = new Edge(data, this, this.constants); - } - this.moving = true; - this._updateValueRange(edges); - this._createBezierNodes(); - this._updateCalculationNodes(); - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - }; - - /** - * Update existing edges, or create them when not yet existing - * @param {Number[] | String[]} ids - * @private - */ - Network.prototype._updateEdges = function (ids) { - var edges = this.edges, - edgesData = this.edgesData; - for (var i = 0, len = ids.length; i < len; i++) { - var id = ids[i]; - - var data = edgesData.get(id); - var edge = edges[id]; - if (edge) { - // update edge - edge.disconnect(); - edge.setProperties(data, this.constants); - edge.connect(); - } - else { - // create edge - edge = new Edge(data, this, this.constants); - this.edges[id] = edge; - } - } - - this._createBezierNodes(); - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - this.moving = true; - this._updateValueRange(edges); - }; - - /** - * Remove existing edges. Non existing ids will be ignored - * @param {Number[] | String[]} ids - * @private - */ - Network.prototype._removeEdges = function (ids) { - var edges = this.edges; - for (var i = 0, len = ids.length; i < len; i++) { - var id = ids[i]; - var edge = edges[id]; - if (edge) { - if (edge.via != null) { - delete this.sectors['support']['nodes'][edge.via.id]; - } - edge.disconnect(); - delete edges[id]; - } - } - - this.moving = true; - this._updateValueRange(edges); - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - this._updateCalculationNodes(); - }; - - /** - * Reconnect all edges - * @private - */ - Network.prototype._reconnectEdges = function() { - var id, - nodes = this.nodes, - edges = this.edges; - for (id in nodes) { - if (nodes.hasOwnProperty(id)) { - nodes[id].edges = []; - nodes[id].dynamicEdges = []; - } - } - - for (id in edges) { - if (edges.hasOwnProperty(id)) { - var edge = edges[id]; - edge.from = null; - edge.to = null; - edge.connect(); - } - } - }; - - /** - * Update the values of all object in the given array according to the current - * value range of the objects in the array. - * @param {Object} obj An object containing a set of Edges or Nodes - * The objects must have a method getValue() and - * setValueRange(min, max). - * @private - */ - Network.prototype._updateValueRange = function(obj) { - var id; - - // determine the range of the objects - var valueMin = undefined; - var valueMax = undefined; - for (id in obj) { - if (obj.hasOwnProperty(id)) { - var value = obj[id].getValue(); - if (value !== undefined) { - valueMin = (valueMin === undefined) ? value : Math.min(value, valueMin); - valueMax = (valueMax === undefined) ? value : Math.max(value, valueMax); - } - } - } - - // adjust the range of all objects - if (valueMin !== undefined && valueMax !== undefined) { - for (id in obj) { - if (obj.hasOwnProperty(id)) { - obj[id].setValueRange(valueMin, valueMax); - } - } - } - }; - - /** - * Redraw the network with the current data - * chart will be resized too. - */ - Network.prototype.redraw = function() { - this.setSize(this.constants.width, this.constants.height); - this._redraw(); - }; - - /** - * Redraw the network with the current data - * @private - */ - Network.prototype._redraw = function() { - var ctx = this.frame.canvas.getContext('2d'); - - ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - - // clear the canvas - var w = this.frame.canvas.width * this.pixelRatio; - var h = this.frame.canvas.height * this.pixelRatio; - ctx.clearRect(0, 0, w, h); - - // set scaling and translation - ctx.save(); - ctx.translate(this.translation.x, this.translation.y); - ctx.scale(this.scale, this.scale); - - this.canvasTopLeft = { - "x": this._XconvertDOMtoCanvas(0), - "y": this._YconvertDOMtoCanvas(0) - }; - this.canvasBottomRight = { - "x": this._XconvertDOMtoCanvas(this.frame.canvas.clientWidth * this.pixelRatio), - "y": this._YconvertDOMtoCanvas(this.frame.canvas.clientHeight * this.pixelRatio) - }; - - - this._doInAllSectors("_drawAllSectorNodes",ctx); - if (this.drag.dragging == false || this.drag.dragging === undefined || this.constants.hideEdgesOnDrag == false) { - this._doInAllSectors("_drawEdges",ctx); - } - - if (this.drag.dragging == false || this.drag.dragging === undefined || this.constants.hideNodesOnDrag == false) { - this._doInAllSectors("_drawNodes",ctx,false); - } - - if (this.controlNodesActive == true) { - this._doInAllSectors("_drawControlNodes",ctx); - } - - // this._doInSupportSector("_drawNodes",ctx,true); - // this._drawTree(ctx,"#F00F0F"); - - // restore original scaling and translation - ctx.restore(); - }; - - /** - * Set the translation of the network - * @param {Number} offsetX Horizontal offset - * @param {Number} offsetY Vertical offset - * @private - */ - Network.prototype._setTranslation = function(offsetX, offsetY) { - if (this.translation === undefined) { - this.translation = { - x: 0, - y: 0 - }; - } - - if (offsetX !== undefined) { - this.translation.x = offsetX; - } - if (offsetY !== undefined) { - this.translation.y = offsetY; - } - - this.emit('viewChanged'); - }; - - /** - * Get the translation of the network - * @return {Object} translation An object with parameters x and y, both a number - * @private - */ - Network.prototype._getTranslation = function() { - return { - x: this.translation.x, - y: this.translation.y - }; - }; - - /** - * Scale the network - * @param {Number} scale Scaling factor 1.0 is unscaled - * @private - */ - Network.prototype._setScale = function(scale) { - this.scale = scale; - }; - - /** - * Get the current scale of the network - * @return {Number} scale Scaling factor 1.0 is unscaled - * @private - */ - Network.prototype._getScale = function() { - return this.scale; - }; - - /** - * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to - * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) - * @param {number} x - * @returns {number} - * @private - */ - Network.prototype._XconvertDOMtoCanvas = function(x) { - return (x - this.translation.x) / this.scale; - }; - - /** - * Convert the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to - * the X coordinate in DOM-space (coordinate point in browser relative to the container div) - * @param {number} x - * @returns {number} - * @private - */ - Network.prototype._XconvertCanvasToDOM = function(x) { - return x * this.scale + this.translation.x; - }; - - /** - * Convert the Y coordinate in DOM-space (coordinate point in browser relative to the container div) to - * the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) - * @param {number} y - * @returns {number} - * @private - */ - Network.prototype._YconvertDOMtoCanvas = function(y) { - return (y - this.translation.y) / this.scale; - }; - - /** - * Convert the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to - * the Y coordinate in DOM-space (coordinate point in browser relative to the container div) - * @param {number} y - * @returns {number} - * @private - */ - Network.prototype._YconvertCanvasToDOM = function(y) { - return y * this.scale + this.translation.y ; - }; - - - /** - * - * @param {object} pos = {x: number, y: number} - * @returns {{x: number, y: number}} - * @constructor - */ - Network.prototype.canvasToDOM = function (pos) { - return {x: this._XconvertCanvasToDOM(pos.x), y: this._YconvertCanvasToDOM(pos.y)}; - }; - - /** - * - * @param {object} pos = {x: number, y: number} - * @returns {{x: number, y: number}} - * @constructor - */ - Network.prototype.DOMtoCanvas = function (pos) { - return {x: this._XconvertDOMtoCanvas(pos.x), y: this._YconvertDOMtoCanvas(pos.y)}; - }; - - /** - * Redraw all nodes - * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); - * @param {CanvasRenderingContext2D} ctx - * @param {Boolean} [alwaysShow] - * @private - */ - Network.prototype._drawNodes = function(ctx,alwaysShow) { - if (alwaysShow === undefined) { - alwaysShow = false; - } - - // first draw the unselected nodes - var nodes = this.nodes; - var selected = []; - - for (var id in nodes) { - if (nodes.hasOwnProperty(id)) { - nodes[id].setScaleAndPos(this.scale,this.canvasTopLeft,this.canvasBottomRight); - if (nodes[id].isSelected()) { - selected.push(id); - } - else { - if (nodes[id].inArea() || alwaysShow) { - nodes[id].draw(ctx); - } - } - } - } - - // draw the selected nodes on top - for (var s = 0, sMax = selected.length; s < sMax; s++) { - if (nodes[selected[s]].inArea() || alwaysShow) { - nodes[selected[s]].draw(ctx); - } - } - }; - - /** - * Redraw all edges - * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); - * @param {CanvasRenderingContext2D} ctx - * @private - */ - Network.prototype._drawEdges = function(ctx) { - var edges = this.edges; - for (var id in edges) { - if (edges.hasOwnProperty(id)) { - var edge = edges[id]; - edge.setScale(this.scale); - if (edge.connected) { - edges[id].draw(ctx); - } - } - } - }; - - /** - * Redraw all edges - * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); - * @param {CanvasRenderingContext2D} ctx - * @private - */ - Network.prototype._drawControlNodes = function(ctx) { - var edges = this.edges; - for (var id in edges) { - if (edges.hasOwnProperty(id)) { - edges[id]._drawControlNodes(ctx); - } - } - }; - - /** - * Find a stable position for all nodes - * @private - */ - Network.prototype._stabilize = function() { - if (this.constants.freezeForStabilization == true) { - this._freezeDefinedNodes(); - } - - // find stable position - var count = 0; - while (this.moving && count < this.constants.stabilizationIterations) { - this._physicsTick(); - count++; - } - this.zoomExtent(undefined,false,true); - if (this.constants.freezeForStabilization == true) { - this._restoreFrozenNodes(); - } - }; - - /** - * When initializing and stabilizing, we can freeze nodes with a predefined position. This greatly speeds up stabilization - * because only the supportnodes for the smoothCurves have to settle. - * - * @private - */ - Network.prototype._freezeDefinedNodes = function() { - var nodes = this.nodes; - for (var id in nodes) { - if (nodes.hasOwnProperty(id)) { - if (nodes[id].x != null && nodes[id].y != null) { - nodes[id].fixedData.x = nodes[id].xFixed; - nodes[id].fixedData.y = nodes[id].yFixed; - nodes[id].xFixed = true; - nodes[id].yFixed = true; - } - } - } - }; - - /** - * Unfreezes the nodes that have been frozen by _freezeDefinedNodes. - * - * @private - */ - Network.prototype._restoreFrozenNodes = function() { - var nodes = this.nodes; - for (var id in nodes) { - if (nodes.hasOwnProperty(id)) { - if (nodes[id].fixedData.x != null) { - nodes[id].xFixed = nodes[id].fixedData.x; - nodes[id].yFixed = nodes[id].fixedData.y; - } - } - } - }; - - - /** - * Check if any of the nodes is still moving - * @param {number} vmin the minimum velocity considered as 'moving' - * @return {boolean} true if moving, false if non of the nodes is moving - * @private - */ - Network.prototype._isMoving = function(vmin) { - var nodes = this.nodes; - for (var id in nodes) { - if (nodes.hasOwnProperty(id) && nodes[id].isMoving(vmin)) { - return true; - } - } - return false; - }; - - - /** - * /** - * Perform one discrete step for all nodes - * - * @private - */ - Network.prototype._discreteStepNodes = function() { - var interval = this.physicsDiscreteStepsize; - var nodes = this.nodes; - var nodeId; - var nodesPresent = false; - - if (this.constants.maxVelocity > 0) { - for (nodeId in nodes) { - if (nodes.hasOwnProperty(nodeId)) { - nodes[nodeId].discreteStepLimited(interval, this.constants.maxVelocity); - nodesPresent = true; - } - } - } - else { - for (nodeId in nodes) { - if (nodes.hasOwnProperty(nodeId)) { - nodes[nodeId].discreteStep(interval); - nodesPresent = true; - } - } - } - - if (nodesPresent == true) { - var vminCorrected = this.constants.minVelocity / Math.max(this.scale,0.05); - if (vminCorrected > 0.5*this.constants.maxVelocity) { - return true; - } - else { - return this._isMoving(vminCorrected); - } - } - return false; - }; - - /** - * A single simulation step (or "tick") in the physics simulation - * - * @private - */ - Network.prototype._physicsTick = function() { - if (!this.freezeSimulation) { - if (this.moving == true) { - var mainMovingStatus = false; - var supportMovingStatus = false; - - this._doInAllActiveSectors("_initializeForceCalculation"); - var mainMoving = this._doInAllActiveSectors("_discreteStepNodes"); - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - supportMovingStatus = this._doInSupportSector("_discreteStepNodes"); - } - // gather movement data from all sectors, if one moves, we are NOT stabilzied - for (var i = 0; i < mainMoving.length; i++) {mainMovingStatus = mainMoving[0] || mainMovingStatus;} - - // determine if the network has stabilzied - this.moving = mainMovingStatus || supportMovingStatus; - - this.stabilizationIterations++; - } - } - }; - - - /** - * This function runs one step of the animation. It calls an x amount of physics ticks and one render tick. - * It reschedules itself at the beginning of the function - * - * @private - */ - Network.prototype._animationStep = function() { - // reset the timer so a new scheduled animation step can be set - this.timer = undefined; - // handle the keyboad movement - this._handleNavigation(); - - // this schedules a new animation step - this.start(); - - // start the physics simulation - var calculationTime = Date.now(); - var maxSteps = 1; - this._physicsTick(); - var timeRequired = Date.now() - calculationTime; - while (timeRequired < 0.9*(this.renderTimestep - this.renderTime) && maxSteps < this.maxPhysicsTicksPerRender) { - this._physicsTick(); - timeRequired = Date.now() - calculationTime; - maxSteps++; - } - // start the rendering process - var renderTime = Date.now(); - this._redraw(); - this.renderTime = Date.now() - renderTime; - }; - - if (typeof window !== 'undefined') { - window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || - window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; - } - - /** - * Schedule a animation step with the refreshrate interval. - */ - Network.prototype.start = function() { - if (this.moving == true || this.xIncrement != 0 || this.yIncrement != 0 || this.zoomIncrement != 0) { - if (this.startedStabilization == false) { - this.emit("startStabilization"); - this.startedStabilization = true; - } - - if (!this.timer) { - var ua = navigator.userAgent.toLowerCase(); - - var requiresTimeout = false; - if (ua.indexOf('msie 9.0') != -1) { // IE 9 - requiresTimeout = true; - } - else if (ua.indexOf('safari') != -1) { // safari - if (ua.indexOf('chrome') <= -1) { - requiresTimeout = true; - } - } - - if (requiresTimeout == true) { - this.timer = window.setTimeout(this._animationStep.bind(this), this.renderTimestep); // wait this.renderTimeStep milliseconds and perform the animation step function - } - else{ - this.timer = window.requestAnimationFrame(this._animationStep.bind(this), this.renderTimestep); // wait this.renderTimeStep milliseconds and perform the animation step function - } - } - } - else { - this._redraw(); - if (this.stabilizationIterations > 0) { - // trigger the "stabilized" event. - // The event is triggered on the next tick, to prevent the case that - // it is fired while initializing the Network, in which case you would not - // be able to catch it - var me = this; - var params = { - iterations: me.stabilizationIterations - }; - me.stabilizationIterations = 0; - me.startedStabilization = false; - setTimeout(function () { - me.emit("stabilized", params); - }, 0); - } - } - }; - - - /** - * Move the network according to the keyboard presses. - * - * @private - */ - Network.prototype._handleNavigation = function() { - if (this.xIncrement != 0 || this.yIncrement != 0) { - var translation = this._getTranslation(); - this._setTranslation(translation.x+this.xIncrement, translation.y+this.yIncrement); - } - if (this.zoomIncrement != 0) { - var center = { - x: this.frame.canvas.clientWidth / 2, - y: this.frame.canvas.clientHeight / 2 - }; - this._zoom(this.scale*(1 + this.zoomIncrement), center); - } - }; - - - /** - * Freeze the _animationStep - */ - Network.prototype.toggleFreeze = function() { - if (this.freezeSimulation == false) { - this.freezeSimulation = true; - } - else { - this.freezeSimulation = false; - this.start(); - } - }; - - - /** - * This function cleans the support nodes if they are not needed and adds them when they are. - * - * @param {boolean} [disableStart] - * @private - */ - Network.prototype._configureSmoothCurves = function(disableStart) { - if (disableStart === undefined) { - disableStart = true; - } - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - this._createBezierNodes(); - // cleanup unused support nodes - for (var nodeId in this.sectors['support']['nodes']) { - if (this.sectors['support']['nodes'].hasOwnProperty(nodeId)) { - if (this.edges[this.sectors['support']['nodes'][nodeId].parentEdgeId] === undefined) { - delete this.sectors['support']['nodes'][nodeId]; - } - } - } - } - else { - // delete the support nodes - this.sectors['support']['nodes'] = {}; - for (var edgeId in this.edges) { - if (this.edges.hasOwnProperty(edgeId)) { - this.edges[edgeId].via = null; - } - } - } - - - this._updateCalculationNodes(); - if (!disableStart) { - this.moving = true; - this.start(); - } - }; - - - /** - * Bezier curves require an anchor point to calculate the smooth flow. These points are nodes. These nodes are invisible but - * are used for the force calculation. - * - * @private - */ - Network.prototype._createBezierNodes = function() { - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - for (var edgeId in this.edges) { - if (this.edges.hasOwnProperty(edgeId)) { - var edge = this.edges[edgeId]; - if (edge.via == null) { - var nodeId = "edgeId:".concat(edge.id); - this.sectors['support']['nodes'][nodeId] = new Node( - {id:nodeId, - mass:1, - shape:'circle', - image:"", - internalMultiplier:1 - },{},{},this.constants); - edge.via = this.sectors['support']['nodes'][nodeId]; - edge.via.parentEdgeId = edge.id; - edge.positionBezierNode(); - } - } - } - } - }; - - /** - * load the functions that load the mixins into the prototype. - * - * @private - */ - Network.prototype._initializeMixinLoaders = function () { - for (var mixin in MixinLoader) { - if (MixinLoader.hasOwnProperty(mixin)) { - Network.prototype[mixin] = MixinLoader[mixin]; - } - } - }; - - /** - * Load the XY positions of the nodes into the dataset. - */ - Network.prototype.storePosition = function() { - console.log("storePosition is depricated: use .storePositions() from now on.") - this.storePositions(); - }; - - /** - * Load the XY positions of the nodes into the dataset. - */ - Network.prototype.storePositions = function() { - var dataArray = []; - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - var allowedToMoveX = !this.nodes.xFixed; - var allowedToMoveY = !this.nodes.yFixed; - if (this.nodesData._data[nodeId].x != Math.round(node.x) || this.nodesData._data[nodeId].y != Math.round(node.y)) { - dataArray.push({id:nodeId,x:Math.round(node.x),y:Math.round(node.y),allowedToMoveX:allowedToMoveX,allowedToMoveY:allowedToMoveY}); - } - } - } - this.nodesData.update(dataArray); - }; - - /** - * Return the positions of the nodes. - */ - Network.prototype.getPositions = function(ids) { - var dataArray = {}; - if (ids !== undefined) { - if (Array.isArray(ids) == true) { - for (var i = 0; i < ids.length; i++) { - if (this.nodes[ids[i]] !== undefined) { - var node = this.nodes[ids[i]]; - dataArray[ids[i]] = {x: Math.round(node.x), y: Math.round(node.y)}; - } - } - } - else { - if (this.nodes[ids] !== undefined) { - var node = this.nodes[ids]; - dataArray[ids] = {x: Math.round(node.x), y: Math.round(node.y)}; - } - } - } - else { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - dataArray[nodeId] = {x: Math.round(node.x), y: Math.round(node.y)}; - } - } - } - return dataArray; - }; - - - - /** - * Center a node in view. - * - * @param {Number} nodeId - * @param {Number} [options] - */ - Network.prototype.focusOnNode = function (nodeId, options) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (options === undefined) { - options = {}; - } - var nodePosition = {x: this.nodes[nodeId].x, y: this.nodes[nodeId].y}; - options.position = nodePosition; - options.lockedOnNode = nodeId; - - this.moveTo(options) - } - else { - console.log("This nodeId cannot be found."); - } - }; - - /** - * - * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels - * | options.scale = Number // scale to move to - * | options.position = {x:Number, y:Number} // position to move to - * | options.animation = {duration:Number, easingFunction:String} || Boolean // position to move to - */ - Network.prototype.moveTo = function (options) { - if (options === undefined) { - options = {}; - return; - } - if (options.offset === undefined) {options.offset = {x: 0, y: 0}; } - if (options.offset.x === undefined) {options.offset.x = 0; } - if (options.offset.y === undefined) {options.offset.y = 0; } - if (options.scale === undefined) {options.scale = this._getScale(); } - if (options.position === undefined) {options.position = this._getTranslation();} - if (options.animation === undefined) {options.animation = {duration:0}; } - if (options.animation === false ) {options.animation = {duration:0}; } - if (options.animation === true ) {options.animation = {}; } - if (options.animation.duration === undefined) {options.animation.duration = 1000; } // default duration - if (options.animation.easingFunction === undefined) {options.animation.easingFunction = "easeInOutQuad"; } // default easing function - - this.animateView(options); - }; - - /** - * - * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels - * | options.time = Number // animation time in milliseconds - * | options.scale = Number // scale to animate to - * | options.position = {x:Number, y:Number} // position to animate to - * | options.easingFunction = String // linear, easeInQuad, easeOutQuad, easeInOutQuad, - * // easeInCubic, easeOutCubic, easeInOutCubic, - * // easeInQuart, easeOutQuart, easeInOutQuart, - * // easeInQuint, easeOutQuint, easeInOutQuint - */ - Network.prototype.animateView = function (options) { - if (options === undefined) { - options = {}; - return; - } - - // release if something focussed on the node - this.releaseNode(); - if (options.locked == true) { - this.lockedOnNodeId = options.lockedOnNode; - this.lockedOnNodeOffset = options.offset; - } - - // forcefully complete the old animation if it was still running - if (this.easingTime != 0) { - this._transitionRedraw(1); // by setting easingtime to 1, we finish the animation. - } - - this.sourceScale = this._getScale(); - this.sourceTranslation = this._getTranslation(); - this.targetScale = options.scale; - - // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw - // but at least then we'll have the target transition - this._setScale(this.targetScale); - var viewCenter = this.DOMtoCanvas({x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight}); - var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node - x: viewCenter.x - options.position.x, - y: viewCenter.y - options.position.y - }; - this.targetTranslation = { - x: this.sourceTranslation.x + distanceFromCenter.x * this.targetScale + options.offset.x, - y: this.sourceTranslation.y + distanceFromCenter.y * this.targetScale + options.offset.y - }; - - // if the time is set to 0, don't do an animation - if (options.animation.duration == 0) { - if (this.lockedOnNodeId != null) { - this._classicRedraw = this._redraw; - this._redraw = this._lockedRedraw; - } - else { - this._setScale(this.targetScale); - this._setTranslation(this.targetTranslation.x, this.targetTranslation.y); - this._redraw(); - } - } - else { - this.animationSpeed = 1 / (this.renderRefreshRate * options.animation.duration * 0.001) || 1 / this.renderRefreshRate; - this.animationEasingFunction = options.animation.easingFunction; - this._classicRedraw = this._redraw; - this._redraw = this._transitionRedraw; - this._redraw(); - this.moving = true; - this.start(); - } - }; - - - Network.prototype._lockedRedraw = function () { - var nodePosition = {x: this.nodes[this.lockedOnNodeId].x, y: this.nodes[this.lockedOnNodeId].y}; - var viewCenter = this.DOMtoCanvas({x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight}); - var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node - x: viewCenter.x - nodePosition.x, - y: viewCenter.y - nodePosition.y - }; - var sourceTranslation = this._getTranslation(); - var targetTranslation = { - x: sourceTranslation.x + distanceFromCenter.x * this.scale + this.lockedOnNodeOffset.x, - y: sourceTranslation.y + distanceFromCenter.y * this.scale + this.lockedOnNodeOffset.y - }; - - this._setTranslation(targetTranslation.x,targetTranslation.y); - this._classicRedraw(); - } - - Network.prototype.releaseNode = function () { - if (this.lockedOnNodeId != null) { - this._redraw = this._classicRedraw; - this.lockedOnNodeId = null; - this.lockedOnNodeOffset = null; - } - } - - /** - * - * @param easingTime - * @private - */ - Network.prototype._transitionRedraw = function (easingTime) { - this.easingTime = easingTime || this.easingTime + this.animationSpeed; - this.easingTime += this.animationSpeed; - - var progress = util.easingFunctions[this.animationEasingFunction](this.easingTime); - - this._setScale(this.sourceScale + (this.targetScale - this.sourceScale) * progress); - this._setTranslation( - this.sourceTranslation.x + (this.targetTranslation.x - this.sourceTranslation.x) * progress, - this.sourceTranslation.y + (this.targetTranslation.y - this.sourceTranslation.y) * progress - ); - - this._classicRedraw(); - this.moving = true; - - // cleanup - if (this.easingTime >= 1.0) { - this.easingTime = 0; - if (this.lockedOnNodeId != null) { - this._redraw = this._lockedRedraw; - } - else { - this._redraw = this._classicRedraw; - } - this.emit("animationFinished"); - } - }; - - Network.prototype._classicRedraw = function () { - // placeholder function to be overloaded by animations; - }; - - /** - * Returns true when the Network is active. - * @returns {boolean} - */ - Network.prototype.isActive = function () { - return !this.activator || this.activator.active; - }; - - - /** - * Sets the scale - * @returns {Number} - */ - Network.prototype.setScale = function () { - return this._setScale(); - }; - - - /** - * Returns the scale - * @returns {Number} - */ - Network.prototype.getScale = function () { - return this._getScale(); - }; - - - /** - * Returns the scale - * @returns {Number} - */ - Network.prototype.getCenterCoordinates = function () { - return this.DOMtoCanvas({x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight}); - }; - - module.exports = Network; - - -/***/ }, -/* 37 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var Node = __webpack_require__(40); - - /** - * @class Edge - * - * A edge connects two nodes - * @param {Object} properties Object with properties. Must contain - * At least properties from and to. - * Available properties: from (number), - * to (number), label (string, color (string), - * width (number), style (string), - * length (number), title (string) - * @param {Network} network A Network object, used to find and edge to - * nodes. - * @param {Object} constants An object with default values for - * example for the color - */ - function Edge (properties, network, networkConstants) { - if (!network) { - throw "No network provided"; - } - var fields = ['edges','physics']; - var constants = util.selectiveBridgeObject(fields,networkConstants); - this.options = constants.edges; - this.physics = constants.physics; - this.options['smoothCurves'] = networkConstants['smoothCurves']; - - - this.network = network; - - // initialize variables - this.id = undefined; - this.fromId = undefined; - this.toId = undefined; - this.title = undefined; - this.widthSelected = this.options.width * this.options.widthSelectionMultiplier; - this.value = undefined; - this.selected = false; - this.hover = false; - this.labelDimensions = {top:0,left:0,width:0,height:0,yLine:0}; // could be cached - this.dirtyLabel = true; - - this.from = null; // a node - this.to = null; // a node - this.via = null; // a temp node - - this.fromBackup = null; // used to clean up after reconnect - this.toBackup = null;; // used to clean up after reconnect - - // we use this to be able to reconnect the edge to a cluster if its node is put into a cluster - // by storing the original information we can revert to the original connection when the cluser is opened. - this.originalFromId = []; - this.originalToId = []; - - this.connected = false; - - this.widthFixed = false; - this.lengthFixed = false; - - this.setProperties(properties); - - this.controlNodesEnabled = false; - this.controlNodes = {from:null, to:null, positions:{}}; - this.connectedNode = null; - } - - /** - * Set or overwrite properties for the edge - * @param {Object} properties an object with properties - * @param {Object} constants and object with default, global properties - */ - Edge.prototype.setProperties = function(properties) { - if (!properties) { - return; - } - - var fields = ['style','fontSize','fontFace','fontColor','fontFill','width', - 'widthSelectionMultiplier','hoverWidth','arrowScaleFactor','dash','inheritColor' - ]; - util.selectiveDeepExtend(fields, this.options, properties); - - if (properties.from !== undefined) {this.fromId = properties.from;} - if (properties.to !== undefined) {this.toId = properties.to;} - - if (properties.id !== undefined) {this.id = properties.id;} - if (properties.label !== undefined) {this.label = properties.label; this.dirtyLabel = true;} - - if (properties.title !== undefined) {this.title = properties.title;} - if (properties.value !== undefined) {this.value = properties.value;} - if (properties.length !== undefined) {this.physics.springLength = properties.length;} - - if (properties.color !== undefined) { - this.options.inheritColor = false; - if (util.isString(properties.color)) { - this.options.color.color = properties.color; - this.options.color.highlight = properties.color; - } - else { - if (properties.color.color !== undefined) {this.options.color.color = properties.color.color;} - if (properties.color.highlight !== undefined) {this.options.color.highlight = properties.color.highlight;} - if (properties.color.hover !== undefined) {this.options.color.hover = properties.color.hover;} - } - } - - // A node is connected when it has a from and to node. - this.connect(); - - this.widthFixed = this.widthFixed || (properties.width !== undefined); - this.lengthFixed = this.lengthFixed || (properties.length !== undefined); - - this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; - - // set draw method based on style - switch (this.options.style) { - case 'line': this.draw = this._drawLine; break; - case 'arrow': this.draw = this._drawArrow; break; - case 'arrow-center': this.draw = this._drawArrowCenter; break; - case 'dash-line': this.draw = this._drawDashLine; break; - default: this.draw = this._drawLine; break; - } - }; - - /** - * Connect an edge to its nodes - */ - Edge.prototype.connect = function () { - this.disconnect(); - - this.from = this.network.nodes[this.fromId] || null; - this.to = this.network.nodes[this.toId] || null; - this.connected = (this.from && this.to); - - if (this.connected) { - this.from.attachEdge(this); - this.to.attachEdge(this); - } - else { - if (this.from) { - this.from.detachEdge(this); - } - if (this.to) { - this.to.detachEdge(this); - } - } - }; - - /** - * Disconnect an edge from its nodes - */ - Edge.prototype.disconnect = function () { - if (this.from) { - this.from.detachEdge(this); - this.from = null; - } - if (this.to) { - this.to.detachEdge(this); - this.to = null; - } - - this.connected = false; - }; - - /** - * get the title of this edge. - * @return {string} title The title of the edge, or undefined when no title - * has been set. - */ - Edge.prototype.getTitle = function() { - return typeof this.title === "function" ? this.title() : this.title; - }; - - - /** - * Retrieve the value of the edge. Can be undefined - * @return {Number} value - */ - Edge.prototype.getValue = function() { - return this.value; - }; - - /** - * Adjust the value range of the edge. The edge will adjust it's width - * based on its value. - * @param {Number} min - * @param {Number} max - */ - Edge.prototype.setValueRange = function(min, max) { - if (!this.widthFixed && this.value !== undefined) { - var scale = (this.options.widthMax - this.options.widthMin) / (max - min); - this.options.width= (this.value - min) * scale + this.options.widthMin; - this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; - } - }; - - /** - * Redraw a edge - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - */ - Edge.prototype.draw = function(ctx) { - throw "Method draw not initialized in edge"; - }; - - /** - * Check if this object is overlapping with the provided object - * @param {Object} obj an object with parameters left, top - * @return {boolean} True if location is located on the edge - */ - Edge.prototype.isOverlappingWith = function(obj) { - if (this.connected) { - var distMax = 10; - var xFrom = this.from.x; - var yFrom = this.from.y; - var xTo = this.to.x; - var yTo = this.to.y; - var xObj = obj.left; - var yObj = obj.top; - - var dist = this._getDistanceToEdge(xFrom, yFrom, xTo, yTo, xObj, yObj); - - return (dist < distMax); - } - else { - return false - } - }; - - Edge.prototype._getColor = function() { - var colorObj = this.options.color; - if (this.options.inheritColor == "to") { - colorObj = { - highlight: this.to.options.color.highlight.border, - hover: this.to.options.color.hover.border, - color: this.to.options.color.border - }; - } - else if (this.options.inheritColor == "from" || this.options.inheritColor == true) { - colorObj = { - highlight: this.from.options.color.highlight.border, - hover: this.from.options.color.hover.border, - color: this.from.options.color.border - }; - } - - if (this.selected == true) {return colorObj.highlight;} - else if (this.hover == true) {return colorObj.hover;} - else {return colorObj.color;} - }; - - - /** - * Redraw a edge as a line - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private - */ - Edge.prototype._drawLine = function(ctx) { - // set style - ctx.strokeStyle = this._getColor(); - ctx.lineWidth = this._getLineWidth(); - - if (this.from != this.to) { - // draw line - var via = this._line(ctx); - - // draw label - var point; - if (this.label) { - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; - } - else { - point = this._pointOnLine(0.5); - } - this._label(ctx, this.label, point.x, point.y); - } - } - else { - var x, y; - var radius = this.physics.springLength / 4; - var node = this.from; - if (!node.width) { - node.resize(ctx); - } - if (node.width > node.height) { - x = node.x + node.width / 2; - y = node.y - radius; - } - else { - x = node.x + radius; - y = node.y - node.height / 2; - } - this._circle(ctx, x, y, radius); - point = this._pointOnCircle(x, y, radius, 0.5); - this._label(ctx, this.label, point.x, point.y); - } - }; - - /** - * Get the line width of the edge. Depends on width and whether one of the - * connected nodes is selected. - * @return {Number} width - * @private - */ - Edge.prototype._getLineWidth = function() { - if (this.selected == true) { - return Math.max(Math.min(this.widthSelected, this.options.widthMax), 0.3*this.networkScaleInv); - } - else { - if (this.hover == true) { - return Math.max(Math.min(this.options.hoverWidth, this.options.widthMax), 0.3*this.networkScaleInv); - } - else { - return Math.max(this.options.width, 0.3*this.networkScaleInv); - } - } - }; - - Edge.prototype._getViaCoordinates = function () { - var xVia = null; - var yVia = null; - var factor = this.options.smoothCurves.roundness; - var type = this.options.smoothCurves.type; - - var dx = Math.abs(this.from.x - this.to.x); - var dy = Math.abs(this.from.y - this.to.y); - if (type == 'discrete' || type == 'diagonalCross') { - if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dy; - yVia = this.from.y - factor * dy; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dy; - yVia = this.from.y - factor * dy; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dy; - yVia = this.from.y + factor * dy; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dy; - yVia = this.from.y + factor * dy; - } - } - if (type == "discrete") { - xVia = dx < factor * dy ? this.from.x : xVia; - } - } - else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dx; - yVia = this.from.y - factor * dx; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dx; - yVia = this.from.y - factor * dx; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dx; - yVia = this.from.y + factor * dx; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dx; - yVia = this.from.y + factor * dx; - } - } - if (type == "discrete") { - yVia = dy < factor * dx ? this.from.y : yVia; - } - } - } - else if (type == "straightCross") { - if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { // up - down - xVia = this.from.x; - if (this.from.y < this.to.y) { - yVia = this.to.y - (1-factor) * dy; - } - else { - yVia = this.to.y + (1-factor) * dy; - } - } - else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { // left - right - if (this.from.x < this.to.x) { - xVia = this.to.x - (1-factor) * dx; - } - else { - xVia = this.to.x + (1-factor) * dx; - } - yVia = this.from.y; - } - } - else if (type == 'horizontal') { - if (this.from.x < this.to.x) { - xVia = this.to.x - (1-factor) * dx; - } - else { - xVia = this.to.x + (1-factor) * dx; - } - yVia = this.from.y; - } - else if (type == 'vertical') { - xVia = this.from.x; - if (this.from.y < this.to.y) { - yVia = this.to.y - (1-factor) * dy; - } - else { - yVia = this.to.y + (1-factor) * dy; - } - } - else { // continuous - if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - // console.log(1) - xVia = this.from.x + factor * dy; - yVia = this.from.y - factor * dy; - xVia = this.to.x < xVia ? this.to.x : xVia; - } - else if (this.from.x > this.to.x) { - // console.log(2) - xVia = this.from.x - factor * dy; - yVia = this.from.y - factor * dy; - xVia = this.to.x > xVia ? this.to.x :xVia; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - // console.log(3) - xVia = this.from.x + factor * dy; - yVia = this.from.y + factor * dy; - xVia = this.to.x < xVia ? this.to.x : xVia; - } - else if (this.from.x > this.to.x) { - // console.log(4, this.from.x, this.to.x) - xVia = this.from.x - factor * dy; - yVia = this.from.y + factor * dy; - xVia = this.to.x > xVia ? this.to.x : xVia; - } - } - } - else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - // console.log(5) - xVia = this.from.x + factor * dx; - yVia = this.from.y - factor * dx; - yVia = this.to.y > yVia ? this.to.y : yVia; - } - else if (this.from.x > this.to.x) { - // console.log(6) - xVia = this.from.x - factor * dx; - yVia = this.from.y - factor * dx; - yVia = this.to.y > yVia ? this.to.y : yVia; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - // console.log(7) - xVia = this.from.x + factor * dx; - yVia = this.from.y + factor * dx; - yVia = this.to.y < yVia ? this.to.y : yVia; - } - else if (this.from.x > this.to.x) { - // console.log(8) - xVia = this.from.x - factor * dx; - yVia = this.from.y + factor * dx; - yVia = this.to.y < yVia ? this.to.y : yVia; - } - } - } - } - - - return {x:xVia, y:yVia}; - }; - - /** - * Draw a line between two nodes - * @param {CanvasRenderingContext2D} ctx - * @private - */ - Edge.prototype._line = function (ctx) { - // draw a straight line - ctx.beginPath(); - ctx.moveTo(this.from.x, this.from.y); - if (this.options.smoothCurves.enabled == true) { - if (this.options.smoothCurves.dynamic == false) { - var via = this._getViaCoordinates(); - if (via.x == null) { - ctx.lineTo(this.to.x, this.to.y); - ctx.stroke(); - return null; - } - else { - // this.via.x = via.x; - // this.via.y = via.y; - ctx.quadraticCurveTo(via.x,via.y,this.to.x, this.to.y); - ctx.stroke(); - return via; - } - } - else { - ctx.quadraticCurveTo(this.via.x,this.via.y,this.to.x, this.to.y); - ctx.stroke(); - return this.via; - } - } - else { - ctx.lineTo(this.to.x, this.to.y); - ctx.stroke(); - return null; - } - }; - - /** - * Draw a line from a node to itself, a circle - * @param {CanvasRenderingContext2D} ctx - * @param {Number} x - * @param {Number} y - * @param {Number} radius - * @private - */ - Edge.prototype._circle = function (ctx, x, y, radius) { - // draw a circle - ctx.beginPath(); - ctx.arc(x, y, radius, 0, 2 * Math.PI, false); - ctx.stroke(); - }; - - /** - * Draw label with white background and with the middle at (x, y) - * @param {CanvasRenderingContext2D} ctx - * @param {String} text - * @param {Number} x - * @param {Number} y - * @private - */ - Edge.prototype._label = function (ctx, text, x, y) { - if (text) { - ctx.font = ((this.from.selected || this.to.selected) ? "bold " : "") + - this.options.fontSize + "px " + this.options.fontFace; - var yLine; - - if (this.dirtyLabel == true) { - var lines = String(text).split('\n'); - var lineCount = lines.length; - var fontSize = (Number(this.options.fontSize) + 4); - yLine = y + (1 - lineCount) / 2 * fontSize; - - var width = ctx.measureText(lines[0]).width; - for (var i = 1; i < lineCount; i++) { - var lineWidth = ctx.measureText(lines[i]).width; - width = lineWidth > width ? lineWidth : width; - } - var height = this.options.fontSize * lineCount; - var left = x - width / 2; - var top = y - height / 2; - - // cache - this.labelDimensions = {top:top,left:left,width:width,height:height,yLine:yLine}; - } - - - if (this.options.fontFill !== undefined && this.options.fontFill !== null && this.options.fontFill !== "none") { - ctx.fillStyle = this.options.fontFill; - ctx.fillRect(this.labelDimensions.left, - this.labelDimensions.top, - this.labelDimensions.width, - this.labelDimensions.height); - } - - // draw text - ctx.fillStyle = this.options.fontColor || "black"; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - yLine = this.labelDimensions.yLine; - for (var i = 0; i < lineCount; i++) { - ctx.fillText(lines[i], x, yLine); - yLine += fontSize; - } - } - }; - - /** - * Redraw a edge as a dashed line - * Draw this edge in the given canvas - * @author David Jordan - * @date 2012-08-08 - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private - */ - Edge.prototype._drawDashLine = function(ctx) { - // set style - ctx.strokeStyle = this._getColor(); - ctx.lineWidth = this._getLineWidth(); - - var via = null; - // only firefox and chrome support this method, else we use the legacy one. - if (ctx.mozDash !== undefined || ctx.setLineDash !== undefined) { - // configure the dash pattern - var pattern = [0]; - if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) { - pattern = [this.options.dash.length,this.options.dash.gap]; - } - else { - pattern = [5,5]; - } - - // set dash settings for chrome or firefox - if (typeof ctx.setLineDash !== 'undefined') { //Chrome - ctx.setLineDash(pattern); - ctx.lineDashOffset = 0; - - } else { //Firefox - ctx.mozDash = pattern; - ctx.mozDashOffset = 0; - } - - // draw the line - via = this._line(ctx); - - // restore the dash settings. - if (typeof ctx.setLineDash !== 'undefined') { //Chrome - ctx.setLineDash([0]); - ctx.lineDashOffset = 0; - - } else { //Firefox - ctx.mozDash = [0]; - ctx.mozDashOffset = 0; - } - } - else { // unsupporting smooth lines - // draw dashed line - ctx.beginPath(); - ctx.lineCap = 'round'; - if (this.options.dash.altLength !== undefined) //If an alt dash value has been set add to the array this value - { - ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, - [this.options.dash.length,this.options.dash.gap,this.options.dash.altLength,this.options.dash.gap]); - } - else if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) //If a dash and gap value has been set add to the array this value - { - ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, - [this.options.dash.length,this.options.dash.gap]); - } - else //If all else fails draw a line - { - ctx.moveTo(this.from.x, this.from.y); - ctx.lineTo(this.to.x, this.to.y); - } - ctx.stroke(); - } - - // draw label - if (this.label) { - var point; - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; - } - else { - point = this._pointOnLine(0.5); - } - this._label(ctx, this.label, point.x, point.y); - } - }; - - /** - * Get a point on a line - * @param {Number} percentage. Value between 0 (line start) and 1 (line end) - * @return {Object} point - * @private - */ - Edge.prototype._pointOnLine = function (percentage) { - return { - x: (1 - percentage) * this.from.x + percentage * this.to.x, - y: (1 - percentage) * this.from.y + percentage * this.to.y - } - }; - - /** - * Get a point on a circle - * @param {Number} x - * @param {Number} y - * @param {Number} radius - * @param {Number} percentage. Value between 0 (line start) and 1 (line end) - * @return {Object} point - * @private - */ - Edge.prototype._pointOnCircle = function (x, y, radius, percentage) { - var angle = (percentage - 3/8) * 2 * Math.PI; - return { - x: x + radius * Math.cos(angle), - y: y - radius * Math.sin(angle) - } - }; - - /** - * Redraw a edge as a line with an arrow halfway the line - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private - */ - Edge.prototype._drawArrowCenter = function(ctx) { - var point; - // set style - ctx.strokeStyle = this._getColor(); - ctx.fillStyle = ctx.strokeStyle; - ctx.lineWidth = this._getLineWidth(); - - if (this.from != this.to) { - // draw line - var via = this._line(ctx); - - var angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); - var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - // draw an arrow halfway the line - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; - } - else { - point = this._pointOnLine(0.5); - } - - ctx.arrow(point.x, point.y, angle, length); - ctx.fill(); - ctx.stroke(); - - // draw label - if (this.label) { - this._label(ctx, this.label, point.x, point.y); - } - } - else { - // draw circle - var x, y; - var radius = 0.25 * Math.max(100,this.physics.springLength); - var node = this.from; - if (!node.width) { - node.resize(ctx); - } - if (node.width > node.height) { - x = node.x + node.width * 0.5; - y = node.y - radius; - } - else { - x = node.x + radius; - y = node.y - node.height * 0.5; - } - this._circle(ctx, x, y, radius); - - // draw all arrows - var angle = 0.2 * Math.PI; - var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - point = this._pointOnCircle(x, y, radius, 0.5); - ctx.arrow(point.x, point.y, angle, length); - ctx.fill(); - ctx.stroke(); - - // draw label - if (this.label) { - point = this._pointOnCircle(x, y, radius, 0.5); - this._label(ctx, this.label, point.x, point.y); - } - } - }; - - - - /** - * Redraw a edge as a line with an arrow - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private - */ - Edge.prototype._drawArrow = function(ctx) { - // set style - ctx.strokeStyle = this._getColor(); - ctx.fillStyle = ctx.strokeStyle; - ctx.lineWidth = this._getLineWidth(); - - var angle, length; - //draw a line - if (this.from != this.to) { - angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); - var dx = (this.to.x - this.from.x); - var dy = (this.to.y - this.from.y); - var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - - var fromBorderDist = this.from.distanceToBorder(ctx, angle + Math.PI); - var fromBorderPoint = (edgeSegmentLength - fromBorderDist) / edgeSegmentLength; - var xFrom = (fromBorderPoint) * this.from.x + (1 - fromBorderPoint) * this.to.x; - var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; - - var via; - if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true ) { - via = this.via; - } - else if (this.options.smoothCurves.enabled == true) { - via = this._getViaCoordinates(); - } - - if (this.options.smoothCurves.enabled == true && via.x != null) { - angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); - dx = (this.to.x - via.x); - dy = (this.to.y - via.y); - edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - } - var toBorderDist = this.to.distanceToBorder(ctx, angle); - var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; - - var xTo,yTo; - if (this.options.smoothCurves.enabled == true && via.x != null) { - xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; - } - else { - xTo = (1 - toBorderPoint) * this.from.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * this.from.y + toBorderPoint * this.to.y; - } - - ctx.beginPath(); - ctx.moveTo(xFrom,yFrom); - if (this.options.smoothCurves.enabled == true && via.x != null) { - ctx.quadraticCurveTo(via.x,via.y,xTo, yTo); - } - else { - ctx.lineTo(xTo, yTo); - } - ctx.stroke(); - - // draw arrow at the end of the line - length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - ctx.arrow(xTo, yTo, angle, length); - ctx.fill(); - ctx.stroke(); - - // draw label - if (this.label) { - var point; - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; - } - else { - point = this._pointOnLine(0.5); - } - this._label(ctx, this.label, point.x, point.y); - } - } - else { - // draw circle - var node = this.from; - var x, y, arrow; - var radius = 0.25 * Math.max(100,this.physics.springLength); - if (!node.width) { - node.resize(ctx); - } - if (node.width > node.height) { - x = node.x + node.width * 0.5; - y = node.y - radius; - arrow = { - x: x, - y: node.y, - angle: 0.9 * Math.PI - }; - } - else { - x = node.x + radius; - y = node.y - node.height * 0.5; - arrow = { - x: node.x, - y: y, - angle: 0.6 * Math.PI - }; - } - ctx.beginPath(); - // TODO: similarly, for a line without arrows, draw to the border of the nodes instead of the center - ctx.arc(x, y, radius, 0, 2 * Math.PI, false); - ctx.stroke(); - - // draw all arrows - var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - ctx.arrow(arrow.x, arrow.y, arrow.angle, length); - ctx.fill(); - ctx.stroke(); - - // draw label - if (this.label) { - point = this._pointOnCircle(x, y, radius, 0.5); - this._label(ctx, this.label, point.x, point.y); - } - } - }; - - - - /** - * Calculate the distance between a point (x3,y3) and a line segment from - * (x1,y1) to (x2,y2). - * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @param {number} x3 - * @param {number} y3 - * @private - */ - Edge.prototype._getDistanceToEdge = function (x1,y1, x2,y2, x3,y3) { // x3,y3 is the point - var returnValue = 0; - if (this.from != this.to) { - if (this.options.smoothCurves.enabled == true) { - var xVia, yVia; - if (this.options.smoothCurves.enabled == true && this.options.smoothCurves.dynamic == true) { - xVia = this.via.x; - yVia = this.via.y; - } - else { - var via = this._getViaCoordinates(); - xVia = via.x; - yVia = via.y; - } - var minDistance = 1e9; - var distance; - var i,t,x,y, lastX, lastY; - for (i = 0; i < 10; i++) { - t = 0.1*i; - x = Math.pow(1-t,2)*x1 + (2*t*(1 - t))*xVia + Math.pow(t,2)*x2; - y = Math.pow(1-t,2)*y1 + (2*t*(1 - t))*yVia + Math.pow(t,2)*y2; - if (i > 0) { - distance = this._getDistanceToLine(lastX,lastY,x,y, x3,y3); - minDistance = distance < minDistance ? distance : minDistance; - } - lastX = x; lastY = y; - } - returnValue = minDistance; - } - else { - returnValue = this._getDistanceToLine(x1,y1,x2,y2,x3,y3); - } - } - else { - var x, y, dx, dy; - var radius = 0.25 * this.physics.springLength; - var node = this.from; - if (node.width > node.height) { - x = node.x + 0.5 * node.width; - y = node.y - radius; - } - else { - x = node.x + radius; - y = node.y - 0.5 * node.height; - } - dx = x - x3; - dy = y - y3; - returnValue = Math.abs(Math.sqrt(dx*dx + dy*dy) - radius); - } - - if (this.labelDimensions.left < x3 && - this.labelDimensions.left + this.labelDimensions.width > x3 && - this.labelDimensions.top < y3 && - this.labelDimensions.top + this.labelDimensions.height > y3) { - return 0; - } - else { - return returnValue; - } - }; - - Edge.prototype._getDistanceToLine = function(x1,y1,x2,y2,x3,y3) { - var px = x2-x1, - py = y2-y1, - something = px*px + py*py, - u = ((x3 - x1) * px + (y3 - y1) * py) / something; - - if (u > 1) { - u = 1; - } - else if (u < 0) { - u = 0; - } - - var x = x1 + u * px, - y = y1 + u * py, - dx = x - x3, - dy = y - y3; - - //# Note: If the actual distance does not matter, - //# if you only want to compare what this function - //# returns to other results of this function, you - //# can just return the squared distance instead - //# (i.e. remove the sqrt) to gain a little performance - - return Math.sqrt(dx*dx + dy*dy); - }; - - /** - * This allows the zoom level of the network to influence the rendering - * - * @param scale - */ - Edge.prototype.setScale = function(scale) { - this.networkScaleInv = 1.0/scale; - }; - - - Edge.prototype.select = function() { - this.selected = true; - }; - - Edge.prototype.unselect = function() { - this.selected = false; - }; - - Edge.prototype.positionBezierNode = function() { - if (this.via !== null && this.from !== null && this.to !== null) { - this.via.x = 0.5 * (this.from.x + this.to.x); - this.via.y = 0.5 * (this.from.y + this.to.y); - } - }; - - /** - * This function draws the control nodes for the manipulator. - * In order to enable this, only set the this.controlNodesEnabled to true. - * @param ctx - */ - Edge.prototype._drawControlNodes = function(ctx) { - if (this.controlNodesEnabled == true) { - if (this.controlNodes.from === null && this.controlNodes.to === null) { - var nodeIdFrom = "edgeIdFrom:".concat(this.id); - var nodeIdTo = "edgeIdTo:".concat(this.id); - var constants = { - nodes:{group:'', radius:8}, - physics:{damping:0}, - clustering: {maxNodeSizeIncrements: 0 ,nodeScaling: {width:0, height: 0, radius:0}} - }; - this.controlNodes.from = new Node( - {id:nodeIdFrom, - shape:'dot', - color:{background:'#ff4e00', border:'#3c3c3c', highlight: {background:'#07f968'}} - },{},{},constants); - this.controlNodes.to = new Node( - {id:nodeIdTo, - shape:'dot', - color:{background:'#ff4e00', border:'#3c3c3c', highlight: {background:'#07f968'}} - },{},{},constants); - } - - if (this.controlNodes.from.selected == false && this.controlNodes.to.selected == false) { - this.controlNodes.positions = this.getControlNodePositions(ctx); - this.controlNodes.from.x = this.controlNodes.positions.from.x; - this.controlNodes.from.y = this.controlNodes.positions.from.y; - this.controlNodes.to.x = this.controlNodes.positions.to.x; - this.controlNodes.to.y = this.controlNodes.positions.to.y; - } - - this.controlNodes.from.draw(ctx); - this.controlNodes.to.draw(ctx); - } - else { - this.controlNodes = {from:null, to:null, positions:{}}; - } - }; - - /** - * Enable control nodes. - * @private - */ - Edge.prototype._enableControlNodes = function() { - this.fromBackup = this.from; - this.toBackup = this.to; - this.controlNodesEnabled = true; - }; - - /** - * disable control nodes and remove from dynamicEdges from old node - * @private - */ - Edge.prototype._disableControlNodes = function() { - this.fromId = this.from.id; - this.toId = this.to.id; - if (this.fromId != this.fromBackup.id) { // from was changed, remove edge from old 'from' node dynamic edges - this.fromBackup.detachEdge(this); - } - else if (this.toId != this.toBackup.id) { // to was changed, remove edge from old 'to' node dynamic edges - this.toBackup.detachEdge(this); - } - - this.fromBackup = null; - this.toBackup = null; - this.controlNodesEnabled = false; - }; - - - /** - * This checks if one of the control nodes is selected and if so, returns the control node object. Else it returns null. - * @param x - * @param y - * @returns {null} - * @private - */ - Edge.prototype._getSelectedControlNode = function(x,y) { - var positions = this.controlNodes.positions; - var fromDistance = Math.sqrt(Math.pow(x - positions.from.x,2) + Math.pow(y - positions.from.y,2)); - var toDistance = Math.sqrt(Math.pow(x - positions.to.x ,2) + Math.pow(y - positions.to.y ,2)); - - if (fromDistance < 15) { - this.connectedNode = this.from; - this.from = this.controlNodes.from; - return this.controlNodes.from; - } - else if (toDistance < 15) { - this.connectedNode = this.to; - this.to = this.controlNodes.to; - return this.controlNodes.to; - } - else { - return null; - } - }; - - - /** - * this resets the control nodes to their original position. - * @private - */ - Edge.prototype._restoreControlNodes = function() { - if (this.controlNodes.from.selected == true) { - this.from = this.connectedNode; - this.connectedNode = null; - this.controlNodes.from.unselect(); - } - else if (this.controlNodes.to.selected == true) { - this.to = this.connectedNode; - this.connectedNode = null; - this.controlNodes.to.unselect(); - } - }; - - /** - * this calculates the position of the control nodes on the edges of the parent nodes. - * - * @param ctx - * @returns {{from: {x: number, y: number}, to: {x: *, y: *}}} - */ - Edge.prototype.getControlNodePositions = function(ctx) { - var angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); - var dx = (this.to.x - this.from.x); - var dy = (this.to.y - this.from.y); - var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - var fromBorderDist = this.from.distanceToBorder(ctx, angle + Math.PI); - var fromBorderPoint = (edgeSegmentLength - fromBorderDist) / edgeSegmentLength; - var xFrom = (fromBorderPoint) * this.from.x + (1 - fromBorderPoint) * this.to.x; - var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; - - var via; - if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true) { - via = this.via; - } - else if (this.options.smoothCurves.enabled == true) { - via = this._getViaCoordinates(); - } - - if (this.options.smoothCurves.enabled == true && via.x != null) { - angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); - dx = (this.to.x - via.x); - dy = (this.to.y - via.y); - edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - } - var toBorderDist = this.to.distanceToBorder(ctx, angle); - var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; - - var xTo,yTo; - if (this.options.smoothCurves.enabled == true && via.x != null) { - xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; - } - else { - xTo = (1 - toBorderPoint) * this.from.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * this.from.y + toBorderPoint * this.to.y; - } - - return {from:{x:xFrom,y:yFrom},to:{x:xTo,y:yTo}}; - }; - - module.exports = Edge; - -/***/ }, -/* 38 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - - /** - * @class Groups - * This class can store groups and properties specific for groups. - */ - function Groups() { - this.clear(); - this.defaultIndex = 0; - } - - - /** - * default constants for group colors - */ - Groups.DEFAULT = [ - {border: "#2B7CE9", background: "#97C2FC", highlight: {border: "#2B7CE9", background: "#D2E5FF"}, hover: {border: "#2B7CE9", background: "#D2E5FF"}}, // blue - {border: "#FFA500", background: "#FFFF00", highlight: {border: "#FFA500", background: "#FFFFA3"}, hover: {border: "#FFA500", background: "#FFFFA3"}}, // yellow - {border: "#FA0A10", background: "#FB7E81", highlight: {border: "#FA0A10", background: "#FFAFB1"}, hover: {border: "#FA0A10", background: "#FFAFB1"}}, // red - {border: "#41A906", background: "#7BE141", highlight: {border: "#41A906", background: "#A1EC76"}, hover: {border: "#41A906", background: "#A1EC76"}}, // green - {border: "#E129F0", background: "#EB7DF4", highlight: {border: "#E129F0", background: "#F0B3F5"}, hover: {border: "#E129F0", background: "#F0B3F5"}}, // magenta - {border: "#7C29F0", background: "#AD85E4", highlight: {border: "#7C29F0", background: "#D3BDF0"}, hover: {border: "#7C29F0", background: "#D3BDF0"}}, // purple - {border: "#C37F00", background: "#FFA807", highlight: {border: "#C37F00", background: "#FFCA66"}, hover: {border: "#C37F00", background: "#FFCA66"}}, // orange - {border: "#4220FB", background: "#6E6EFD", highlight: {border: "#4220FB", background: "#9B9BFD"}, hover: {border: "#4220FB", background: "#9B9BFD"}}, // darkblue - {border: "#FD5A77", background: "#FFC0CB", highlight: {border: "#FD5A77", background: "#FFD1D9"}, hover: {border: "#FD5A77", background: "#FFD1D9"}}, // pink - {border: "#4AD63A", background: "#C2FABC", highlight: {border: "#4AD63A", background: "#E6FFE3"}, hover: {border: "#4AD63A", background: "#E6FFE3"}} // mint - ]; - - - /** - * Clear all groups - */ - Groups.prototype.clear = function () { - this.groups = {}; - this.groups.length = function() - { - var i = 0; - for ( var p in this ) { - if (this.hasOwnProperty(p)) { - i++; - } - } - return i; - } - }; - - - /** - * get group properties of a groupname. If groupname is not found, a new group - * is added. - * @param {*} groupname Can be a number, string, Date, etc. - * @return {Object} group The created group, containing all group properties - */ - Groups.prototype.get = function (groupname) { - var group = this.groups[groupname]; - if (group == undefined) { - // create new group - var index = this.defaultIndex % Groups.DEFAULT.length; - this.defaultIndex++; - group = {}; - group.color = Groups.DEFAULT[index]; - this.groups[groupname] = group; - } - - return group; - }; - - /** - * Add a custom group style - * @param {String} groupname - * @param {Object} style An object containing borderColor, - * backgroundColor, etc. - * @return {Object} group The created group object - */ - Groups.prototype.add = function (groupname, style) { - this.groups[groupname] = style; - if (style.color) { - style.color = util.parseColor(style.color); - } - return style; - }; - - module.exports = Groups; - - -/***/ }, -/* 39 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * @class Images - * This class loads images and keeps them stored. - */ - function Images() { - this.images = {}; - - this.callback = undefined; - } - - /** - * Set an onload callback function. This will be called each time an image - * is loaded - * @param {function} callback - */ - Images.prototype.setOnloadCallback = function(callback) { - this.callback = callback; - }; - - /** - * - * @param {string} url Url of the image - * @param {string} url Url of an image to use if the url image is not found - * @return {Image} img The image object - */ - Images.prototype.load = function(url, brokenUrl) { - var img = this.images[url]; - if (img == undefined) { - // create the image - var images = this; - img = new Image(); - this.images[url] = img; - img.onload = function() { - if (images.callback) { - images.callback(this); - } - }; - - img.onerror = function () { - this.src = brokenUrl; - if (images.callback) { - images.callback(this); - } - }; - - img.src = url; - } - - return img; - }; - - module.exports = Images; - - -/***/ }, -/* 40 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - - /** - * @class Node - * A node. A node can be connected to other nodes via one or multiple edges. - * @param {object} properties An object containing properties for the node. All - * properties are optional, except for the id. - * {number} id Id of the node. Required - * {string} label Text label for the node - * {number} x Horizontal position of the node - * {number} y Vertical position of the node - * {string} shape Node shape, available: - * "database", "circle", "ellipse", - * "box", "image", "text", "dot", - * "star", "triangle", "triangleDown", - * "square" - * {string} image An image url - * {string} title An title text, can be HTML - * {anytype} group A group name or number - * @param {Network.Images} imagelist A list with images. Only needed - * when the node has an image - * @param {Network.Groups} grouplist A list with groups. Needed for - * retrieving group properties - * @param {Object} constants An object with default values for - * example for the color - * - */ - function Node(properties, imagelist, grouplist, networkConstants) { - var constants = util.selectiveBridgeObject(['nodes'],networkConstants); - this.options = constants.nodes; - - this.selected = false; - this.hover = false; - - this.edges = []; // all edges connected to this node - this.dynamicEdges = []; - this.reroutedEdges = {}; - - this.fontDrawThreshold = 3; - - // set defaults for the properties - this.id = undefined; - this.x = null; - this.y = null; - this.allowedToMoveX = false; - this.allowedToMoveY = false; - this.xFixed = false; - this.yFixed = false; - this.horizontalAlignLeft = true; // these are for the navigation controls - this.verticalAlignTop = true; // these are for the navigation controls - this.baseRadiusValue = networkConstants.nodes.radius; - this.radiusFixed = false; - this.level = -1; - this.preassignedLevel = false; - this.hierarchyEnumerated = false; - this.labelDimensions = {top:0,left:0,width:0,height:0,yLine:0}; // could be cached - - - this.imagelist = imagelist; - this.grouplist = grouplist; - - // physics properties - this.fx = 0.0; // external force x - this.fy = 0.0; // external force y - this.vx = 0.0; // velocity x - this.vy = 0.0; // velocity y - this.damping = networkConstants.physics.damping; // written every time gravity is calculated - this.fixedData = {x:null,y:null}; - - this.setProperties(properties, constants); - - // creating the variables for clustering - this.resetCluster(); - this.dynamicEdgesLength = 0; - this.clusterSession = 0; - this.clusterSizeWidthFactor = networkConstants.clustering.nodeScaling.width; - this.clusterSizeHeightFactor = networkConstants.clustering.nodeScaling.height; - this.clusterSizeRadiusFactor = networkConstants.clustering.nodeScaling.radius; - this.maxNodeSizeIncrements = networkConstants.clustering.maxNodeSizeIncrements; - this.growthIndicator = 0; - - // variables to tell the node about the network. - this.networkScaleInv = 1; - this.networkScale = 1; - this.canvasTopLeft = {"x": -300, "y": -300}; - this.canvasBottomRight = {"x": 300, "y": 300}; - this.parentEdgeId = null; - } - - /** - * (re)setting the clustering variables and objects - */ - Node.prototype.resetCluster = function() { - // clustering variables - this.formationScale = undefined; // this is used to determine when to open the cluster - this.clusterSize = 1; // this signifies the total amount of nodes in this cluster - this.containedNodes = {}; - this.containedEdges = {}; - this.clusterSessions = []; - }; - - /** - * Attach a edge to the node - * @param {Edge} edge - */ - Node.prototype.attachEdge = function(edge) { - if (this.edges.indexOf(edge) == -1) { - this.edges.push(edge); - } - if (this.dynamicEdges.indexOf(edge) == -1) { - this.dynamicEdges.push(edge); - } - this.dynamicEdgesLength = this.dynamicEdges.length; - }; - - /** - * Detach a edge from the node - * @param {Edge} edge - */ - Node.prototype.detachEdge = function(edge) { - var index = this.edges.indexOf(edge); - if (index != -1) { - this.edges.splice(index, 1); - } - index = this.dynamicEdges.indexOf(edge); - if (index != -1) { - this.dynamicEdges.splice(index, 1); - } - this.dynamicEdgesLength = this.dynamicEdges.length; - }; - - - /** - * Set or overwrite properties for the node - * @param {Object} properties an object with properties - * @param {Object} constants and object with default, global properties - */ - Node.prototype.setProperties = function(properties, constants) { - if (!properties) { - return; - } - - var fields = ['borderWidth','borderWidthSelected','shape','image','brokenImage','radius','fontColor', - 'fontSize','fontFace','fontFill','group','mass' - ]; - util.selectiveDeepExtend(fields, this.options, properties); - - // basic properties - if (properties.id !== undefined) {this.id = properties.id;} - if (properties.label !== undefined) {this.label = properties.label; this.originalLabel = properties.label;} - if (properties.title !== undefined) {this.title = properties.title;} - if (properties.x !== undefined) {this.x = properties.x;} - if (properties.y !== undefined) {this.y = properties.y;} - if (properties.value !== undefined) {this.value = properties.value;} - if (properties.level !== undefined) {this.level = properties.level; this.preassignedLevel = true;} - - // navigation controls properties - if (properties.horizontalAlignLeft !== undefined) {this.horizontalAlignLeft = properties.horizontalAlignLeft;} - if (properties.verticalAlignTop !== undefined) {this.verticalAlignTop = properties.verticalAlignTop;} - if (properties.triggerFunction !== undefined) {this.triggerFunction = properties.triggerFunction;} - - if (this.id === undefined) { - throw "Node must have an id"; - } - - // copy group properties - if (typeof this.options.group === 'number' || (typeof this.options.group === 'string' && this.options.group != '')) { - var groupObj = this.grouplist.get(this.options.group); - for (var prop in groupObj) { - if (groupObj.hasOwnProperty(prop)) { - this.options[prop] = groupObj[prop]; - } - } - } - - - // individual shape properties - if (properties.radius !== undefined) {this.baseRadiusValue = this.options.radius;} - if (properties.color !== undefined) {this.options.color = util.parseColor(properties.color);} - - if (this.options.image!== undefined && this.options.image!= "") { - if (this.imagelist) { - this.imageObj = this.imagelist.load(this.options.image, this.options.brokenImage); - } - else { - throw "No imagelist provided"; - } - } - - if (properties.allowedToMoveX !== undefined) { - this.xFixed = !properties.allowedToMoveX; - this.allowedToMoveX = properties.allowedToMoveX; - } - else if (properties.x !== undefined && this.allowedToMoveX == false) { - this.xFixed = true; - } - - - if (properties.allowedToMoveY !== undefined) { - this.yFixed = !properties.allowedToMoveY; - this.allowedToMoveY = properties.allowedToMoveY; - } - else if (properties.y !== undefined && this.allowedToMoveY == false) { - this.yFixed = true; - } - - this.radiusFixed = this.radiusFixed || (properties.radius !== undefined); - - if (this.options.shape == 'image') { - this.options.radiusMin = constants.nodes.widthMin; - this.options.radiusMax = constants.nodes.widthMax; - } - - - - // choose draw method depending on the shape - switch (this.options.shape) { - case 'database': this.draw = this._drawDatabase; this.resize = this._resizeDatabase; break; - case 'box': this.draw = this._drawBox; this.resize = this._resizeBox; break; - case 'circle': this.draw = this._drawCircle; this.resize = this._resizeCircle; break; - case 'ellipse': this.draw = this._drawEllipse; this.resize = this._resizeEllipse; break; - // TODO: add diamond shape - case 'image': this.draw = this._drawImage; this.resize = this._resizeImage; break; - case 'text': this.draw = this._drawText; this.resize = this._resizeText; break; - case 'dot': this.draw = this._drawDot; this.resize = this._resizeShape; break; - case 'square': this.draw = this._drawSquare; this.resize = this._resizeShape; break; - case 'triangle': this.draw = this._drawTriangle; this.resize = this._resizeShape; break; - case 'triangleDown': this.draw = this._drawTriangleDown; this.resize = this._resizeShape; break; - case 'star': this.draw = this._drawStar; this.resize = this._resizeShape; break; - default: this.draw = this._drawEllipse; this.resize = this._resizeEllipse; break; - } - // reset the size of the node, this can be changed - this._reset(); - - }; - - /** - * select this node - */ - Node.prototype.select = function() { - this.selected = true; - this._reset(); - }; - - /** - * unselect this node - */ - Node.prototype.unselect = function() { - this.selected = false; - this._reset(); - }; - - - /** - * Reset the calculated size of the node, forces it to recalculate its size - */ - Node.prototype.clearSizeCache = function() { - this._reset(); - }; - - /** - * Reset the calculated size of the node, forces it to recalculate its size - * @private - */ - Node.prototype._reset = function() { - this.width = undefined; - this.height = undefined; - }; - - /** - * get the title of this node. - * @return {string} title The title of the node, or undefined when no title - * has been set. - */ - Node.prototype.getTitle = function() { - return typeof this.title === "function" ? this.title() : this.title; - }; - - /** - * Calculate the distance to the border of the Node - * @param {CanvasRenderingContext2D} ctx - * @param {Number} angle Angle in radians - * @returns {number} distance Distance to the border in pixels - */ - Node.prototype.distanceToBorder = function (ctx, angle) { - var borderWidth = 1; - - if (!this.width) { - this.resize(ctx); - } - - switch (this.options.shape) { - case 'circle': - case 'dot': - return this.options.radius+ borderWidth; - - case 'ellipse': - var a = this.width / 2; - var b = this.height / 2; - var w = (Math.sin(angle) * a); - var h = (Math.cos(angle) * b); - return a * b / Math.sqrt(w * w + h * h); - - // TODO: implement distanceToBorder for database - // TODO: implement distanceToBorder for triangle - // TODO: implement distanceToBorder for triangleDown - - case 'box': - case 'image': - case 'text': - default: - if (this.width) { - return Math.min( - Math.abs(this.width / 2 / Math.cos(angle)), - Math.abs(this.height / 2 / Math.sin(angle))) + borderWidth; - // TODO: reckon with border radius too in case of box - } - else { - return 0; - } - - } - // TODO: implement calculation of distance to border for all shapes - }; - - /** - * Set forces acting on the node - * @param {number} fx Force in horizontal direction - * @param {number} fy Force in vertical direction - */ - Node.prototype._setForce = function(fx, fy) { - this.fx = fx; - this.fy = fy; - }; - - /** - * Add forces acting on the node - * @param {number} fx Force in horizontal direction - * @param {number} fy Force in vertical direction - * @private - */ - Node.prototype._addForce = function(fx, fy) { - this.fx += fx; - this.fy += fy; - }; - - /** - * Perform one discrete step for the node - * @param {number} interval Time interval in seconds - */ - Node.prototype.discreteStep = function(interval) { - if (!this.xFixed) { - var dx = this.damping * this.vx; // damping force - var ax = (this.fx - dx) / this.options.mass; // acceleration - this.vx += ax * interval; // velocity - this.x += this.vx * interval; // position - } - else { - this.fx = 0; - this.vx = 0; - } - - if (!this.yFixed) { - var dy = this.damping * this.vy; // damping force - var ay = (this.fy - dy) / this.options.mass; // acceleration - this.vy += ay * interval; // velocity - this.y += this.vy * interval; // position - } - else { - this.fy = 0; - this.vy = 0; - } - }; - - - - /** - * Perform one discrete step for the node - * @param {number} interval Time interval in seconds - * @param {number} maxVelocity The speed limit imposed on the velocity - */ - Node.prototype.discreteStepLimited = function(interval, maxVelocity) { - if (!this.xFixed) { - var dx = this.damping * this.vx; // damping force - var ax = (this.fx - dx) / this.options.mass; // acceleration - this.vx += ax * interval; // velocity - this.vx = (Math.abs(this.vx) > maxVelocity) ? ((this.vx > 0) ? maxVelocity : -maxVelocity) : this.vx; - this.x += this.vx * interval; // position - } - else { - this.fx = 0; - this.vx = 0; - } - - if (!this.yFixed) { - var dy = this.damping * this.vy; // damping force - var ay = (this.fy - dy) / this.options.mass; // acceleration - this.vy += ay * interval; // velocity - this.vy = (Math.abs(this.vy) > maxVelocity) ? ((this.vy > 0) ? maxVelocity : -maxVelocity) : this.vy; - this.y += this.vy * interval; // position - } - else { - this.fy = 0; - this.vy = 0; - } - }; - - /** - * Check if this node has a fixed x and y position - * @return {boolean} true if fixed, false if not - */ - Node.prototype.isFixed = function() { - return (this.xFixed && this.yFixed); - }; - - /** - * Check if this node is moving - * @param {number} vmin the minimum velocity considered as "moving" - * @return {boolean} true if moving, false if it has no velocity - */ - Node.prototype.isMoving = function(vmin) { - var velocity = Math.sqrt(Math.pow(this.vx,2) + Math.pow(this.vy,2)); - // this.velocity = Math.sqrt(Math.pow(this.vx,2) + Math.pow(this.vy,2)) - return (velocity > vmin); - }; - - /** - * check if this node is selecte - * @return {boolean} selected True if node is selected, else false - */ - Node.prototype.isSelected = function() { - return this.selected; - }; - - /** - * Retrieve the value of the node. Can be undefined - * @return {Number} value - */ - Node.prototype.getValue = function() { - return this.value; - }; - - /** - * Calculate the distance from the nodes location to the given location (x,y) - * @param {Number} x - * @param {Number} y - * @return {Number} value - */ - Node.prototype.getDistance = function(x, y) { - var dx = this.x - x, - dy = this.y - y; - return Math.sqrt(dx * dx + dy * dy); - }; - - - /** - * Adjust the value range of the node. The node will adjust it's radius - * based on its value. - * @param {Number} min - * @param {Number} max - */ - Node.prototype.setValueRange = function(min, max) { - if (!this.radiusFixed && this.value !== undefined) { - if (max == min) { - this.options.radius= (this.options.radiusMin + this.options.radiusMax) / 2; - } - else { - var scale = (this.options.radiusMax - this.options.radiusMin) / (max - min); - this.options.radius= (this.value - min) * scale + this.options.radiusMin; - } - } - this.baseRadiusValue = this.options.radius; - }; - - /** - * Draw this node in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - */ - Node.prototype.draw = function(ctx) { - throw "Draw method not initialized for node"; - }; - - /** - * Recalculate the size of this node in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - */ - Node.prototype.resize = function(ctx) { - throw "Resize method not initialized for node"; - }; - - /** - * Check if this object is overlapping with the provided object - * @param {Object} obj an object with parameters left, top, right, bottom - * @return {boolean} True if location is located on node - */ - Node.prototype.isOverlappingWith = function(obj) { - return (this.left < obj.right && - this.left + this.width > obj.left && - this.top < obj.bottom && - this.top + this.height > obj.top); - }; - - Node.prototype._resizeImage = function (ctx) { - // TODO: pre calculate the image size - - if (!this.width || !this.height) { // undefined or 0 - var width, height; - if (this.value) { - this.options.radius= this.baseRadiusValue; - var scale = this.imageObj.height / this.imageObj.width; - if (scale !== undefined) { - width = this.options.radius|| this.imageObj.width; - height = this.options.radius* scale || this.imageObj.height; - } - else { - width = 0; - height = 0; - } - } - else { - width = this.imageObj.width; - height = this.imageObj.height; - } - this.width = width; - this.height = height; - - this.growthIndicator = 0; - if (this.width > 0 && this.height > 0) { - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; - this.growthIndicator = this.width - width; - } - } - - }; - - Node.prototype._drawImage = function (ctx) { - this._resizeImage(ctx); - - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; - - var yLabel; - if (this.imageObj.width != 0 ) { - // draw the shade - if (this.clusterSize > 1) { - var lineWidth = ((this.clusterSize > 1) ? 10 : 0.0); - lineWidth *= this.networkScaleInv; - lineWidth = Math.min(0.2 * this.width,lineWidth); - - ctx.globalAlpha = 0.5; - ctx.drawImage(this.imageObj, this.left - lineWidth, this.top - lineWidth, this.width + 2*lineWidth, this.height + 2*lineWidth); - } - - // draw the image - ctx.globalAlpha = 1.0; - ctx.drawImage(this.imageObj, this.left, this.top, this.width, this.height); - yLabel = this.y + this.height / 2; - } - else { - // image still loading... just draw the label for now - yLabel = this.y; - } - - this._label(ctx, this.label, this.x, yLabel, undefined, "top"); - }; - - - Node.prototype._resizeBox = function (ctx) { - if (!this.width) { - var margin = 5; - var textSize = this.getTextSize(ctx); - this.width = textSize.width + 2 * margin; - this.height = textSize.height + 2 * margin; - - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeHeightFactor; - this.growthIndicator = this.width - (textSize.width + 2 * margin); - // this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; - - } - }; - - Node.prototype._drawBox = function (ctx) { - this._resizeBox(ctx); - - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; - - var clusterLineWidth = 2.5; - var borderWidth = this.options.borderWidth; - var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - - ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; - - // draw the outer border - if (this.clusterSize > 1) { - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - - ctx.roundRect(this.left-2*ctx.lineWidth, this.top-2*ctx.lineWidth, this.width+4*ctx.lineWidth, this.height+4*ctx.lineWidth, this.options.radius); - ctx.stroke(); - } - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - - ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.options.color.background; - - ctx.roundRect(this.left, this.top, this.width, this.height, this.options.radius); - ctx.fill(); - ctx.stroke(); - - this._label(ctx, this.label, this.x, this.y); - }; - - - Node.prototype._resizeDatabase = function (ctx) { - if (!this.width) { - var margin = 5; - var textSize = this.getTextSize(ctx); - var size = textSize.width + 2 * margin; - this.width = size; - this.height = size; - - // scaling used for clustering - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; - this.growthIndicator = this.width - size; - } - }; - - Node.prototype._drawDatabase = function (ctx) { - this._resizeDatabase(ctx); - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; - - var clusterLineWidth = 2.5; - var borderWidth = this.options.borderWidth; - var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - - ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; - - // draw the outer border - if (this.clusterSize > 1) { - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - - ctx.database(this.x - this.width/2 - 2*ctx.lineWidth, this.y - this.height*0.5 - 2*ctx.lineWidth, this.width + 4*ctx.lineWidth, this.height + 4*ctx.lineWidth); - ctx.stroke(); - } - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - - ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; - ctx.database(this.x - this.width/2, this.y - this.height*0.5, this.width, this.height); - ctx.fill(); - ctx.stroke(); - - this._label(ctx, this.label, this.x, this.y); - }; - - - Node.prototype._resizeCircle = function (ctx) { - if (!this.width) { - var margin = 5; - var textSize = this.getTextSize(ctx); - var diameter = Math.max(textSize.width, textSize.height) + 2 * margin; - this.options.radius = diameter / 2; - - this.width = diameter; - this.height = diameter; - - // scaling used for clustering - // this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeWidthFactor; - // this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeHeightFactor; - this.options.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; - this.growthIndicator = this.options.radius- 0.5*diameter; - } - }; - - Node.prototype._drawCircle = function (ctx) { - this._resizeCircle(ctx); - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; - - var clusterLineWidth = 2.5; - var borderWidth = this.options.borderWidth; - var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - - ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; - - // draw the outer border - if (this.clusterSize > 1) { - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - - ctx.circle(this.x, this.y, this.options.radius+2*ctx.lineWidth); - ctx.stroke(); - } - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - - ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; - ctx.circle(this.x, this.y, this.options.radius); - ctx.fill(); - ctx.stroke(); - - this._label(ctx, this.label, this.x, this.y); - }; - - Node.prototype._resizeEllipse = function (ctx) { - if (!this.width) { - var textSize = this.getTextSize(ctx); - - this.width = textSize.width * 1.5; - this.height = textSize.height * 2; - if (this.width < this.height) { - this.width = this.height; - } - var defaultSize = this.width; - - // scaling used for clustering - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.options.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; - this.growthIndicator = this.width - defaultSize; - } - }; - - Node.prototype._drawEllipse = function (ctx) { - this._resizeEllipse(ctx); - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; - - var clusterLineWidth = 2.5; - var borderWidth = this.options.borderWidth; - var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - - ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; - - // draw the outer border - if (this.clusterSize > 1) { - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - - ctx.ellipse(this.left-2*ctx.lineWidth, this.top-2*ctx.lineWidth, this.width+4*ctx.lineWidth, this.height+4*ctx.lineWidth); - ctx.stroke(); - } - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - - ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; - - ctx.ellipse(this.left, this.top, this.width, this.height); - ctx.fill(); - ctx.stroke(); - this._label(ctx, this.label, this.x, this.y); - }; - - Node.prototype._drawDot = function (ctx) { - this._drawShape(ctx, 'circle'); - }; - - Node.prototype._drawTriangle = function (ctx) { - this._drawShape(ctx, 'triangle'); - }; - - Node.prototype._drawTriangleDown = function (ctx) { - this._drawShape(ctx, 'triangleDown'); - }; - - Node.prototype._drawSquare = function (ctx) { - this._drawShape(ctx, 'square'); - }; - - Node.prototype._drawStar = function (ctx) { - this._drawShape(ctx, 'star'); - }; - - Node.prototype._resizeShape = function (ctx) { - if (!this.width) { - this.options.radius= this.baseRadiusValue; - var size = 2 * this.options.radius; - this.width = size; - this.height = size; - - // scaling used for clustering - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; - this.growthIndicator = this.width - size; - } - }; - - Node.prototype._drawShape = function (ctx, shape) { - this._resizeShape(ctx); - - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; - - var clusterLineWidth = 2.5; - var borderWidth = this.options.borderWidth; - var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - var radiusMultiplier = 2; - - // choose draw method depending on the shape - switch (shape) { - case 'dot': radiusMultiplier = 2; break; - case 'square': radiusMultiplier = 2; break; - case 'triangle': radiusMultiplier = 3; break; - case 'triangleDown': radiusMultiplier = 3; break; - case 'star': radiusMultiplier = 4; break; - } - - ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; - // draw the outer border - if (this.clusterSize > 1) { - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - - ctx[shape](this.x, this.y, this.options.radius+ radiusMultiplier * ctx.lineWidth); - ctx.stroke(); - } - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - - ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; - ctx[shape](this.x, this.y, this.options.radius); - ctx.fill(); - ctx.stroke(); - - if (this.label) { - this._label(ctx, this.label, this.x, this.y + this.height / 2, undefined, 'top',true); - } - }; - - Node.prototype._resizeText = function (ctx) { - if (!this.width) { - var margin = 5; - var textSize = this.getTextSize(ctx); - this.width = textSize.width + 2 * margin; - this.height = textSize.height + 2 * margin; - - // scaling used for clustering - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; - this.growthIndicator = this.width - (textSize.width + 2 * margin); - } - }; - - Node.prototype._drawText = function (ctx) { - this._resizeText(ctx); - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; - - this._label(ctx, this.label, this.x, this.y); - }; - - - Node.prototype._label = function (ctx, text, x, y, align, baseline, labelUnderNode) { - if (text && Number(this.options.fontSize) * this.networkScale > this.fontDrawThreshold) { - ctx.font = (this.selected ? "bold " : "") + this.options.fontSize + "px " + this.options.fontFace; - - var lines = text.split('\n'); - var lineCount = lines.length; - var fontSize = (Number(this.options.fontSize) + 4); // TODO: why is this +4 ? - var yLine = y + (1 - lineCount) / 2 * fontSize; - if (labelUnderNode == true) { - yLine = y + (1 - lineCount) / (2 * fontSize); - } - - // font fill from edges now for nodes! - var width = ctx.measureText(lines[0]).width; - for (var i = 1; i < lineCount; i++) { - var lineWidth = ctx.measureText(lines[i]).width; - width = lineWidth > width ? lineWidth : width; - } - var height = this.options.fontSize * lineCount; - var left = x - width / 2; - var top = y - height / 2; - if (baseline == "top") { - top += 0.5 * fontSize; - } - this.labelDimensions = {top:top,left:left,width:width,height:height,yLine:yLine}; - - // create the fontfill background - if (this.options.fontFill !== undefined && this.options.fontFill !== null && this.options.fontFill !== "none") { - ctx.fillStyle = this.options.fontFill; - ctx.fillRect(left, top, width, height); - } - - // draw text - ctx.fillStyle = this.options.fontColor || "black"; - ctx.textAlign = align || "center"; - ctx.textBaseline = baseline || "middle"; - for (var i = 0; i < lineCount; i++) { - ctx.fillText(lines[i], x, yLine); - yLine += fontSize; - } - } - }; - - - Node.prototype.getTextSize = function(ctx) { - if (this.label !== undefined) { - ctx.font = (this.selected ? "bold " : "") + this.options.fontSize + "px " + this.options.fontFace; - - var lines = this.label.split('\n'), - height = (Number(this.options.fontSize) + 4) * lines.length, - width = 0; - - for (var i = 0, iMax = lines.length; i < iMax; i++) { - width = Math.max(width, ctx.measureText(lines[i]).width); - } - - return {"width": width, "height": height}; - } - else { - return {"width": 0, "height": 0}; - } - }; - - /** - * this is used to determine if a node is visible at all. this is used to determine when it needs to be drawn. - * there is a safety margin of 0.3 * width; - * - * @returns {boolean} - */ - Node.prototype.inArea = function() { - if (this.width !== undefined) { - return (this.x + this.width *this.networkScaleInv >= this.canvasTopLeft.x && - this.x - this.width *this.networkScaleInv < this.canvasBottomRight.x && - this.y + this.height*this.networkScaleInv >= this.canvasTopLeft.y && - this.y - this.height*this.networkScaleInv < this.canvasBottomRight.y); - } - else { - return true; - } - }; - - /** - * checks if the core of the node is in the display area, this is used for opening clusters around zoom - * @returns {boolean} - */ - Node.prototype.inView = function() { - return (this.x >= this.canvasTopLeft.x && - this.x < this.canvasBottomRight.x && - this.y >= this.canvasTopLeft.y && - this.y < this.canvasBottomRight.y); - }; - - /** - * This allows the zoom level of the network to influence the rendering - * We store the inverted scale and the coordinates of the top left, and bottom right points of the canvas - * - * @param scale - * @param canvasTopLeft - * @param canvasBottomRight - */ - Node.prototype.setScaleAndPos = function(scale,canvasTopLeft,canvasBottomRight) { - this.networkScaleInv = 1.0/scale; - this.networkScale = scale; - this.canvasTopLeft = canvasTopLeft; - this.canvasBottomRight = canvasBottomRight; - }; - - - /** - * This allows the zoom level of the network to influence the rendering - * - * @param scale - */ - Node.prototype.setScale = function(scale) { - this.networkScaleInv = 1.0/scale; - this.networkScale = scale; - }; - - - - /** - * set the velocity at 0. Is called when this node is contained in another during clustering - */ - Node.prototype.clearVelocity = function() { - this.vx = 0; - this.vy = 0; - }; - - - /** - * Basic preservation of (kinectic) energy - * - * @param massBeforeClustering - */ - Node.prototype.updateVelocity = function(massBeforeClustering) { - var energyBefore = this.vx * this.vx * massBeforeClustering; - //this.vx = (this.vx < 0) ? -Math.sqrt(energyBefore/this.options.mass) : Math.sqrt(energyBefore/this.options.mass); - this.vx = Math.sqrt(energyBefore/this.options.mass); - energyBefore = this.vy * this.vy * massBeforeClustering; - //this.vy = (this.vy < 0) ? -Math.sqrt(energyBefore/this.options.mass) : Math.sqrt(energyBefore/this.options.mass); - this.vy = Math.sqrt(energyBefore/this.options.mass); - }; - - module.exports = Node; - - -/***/ }, -/* 41 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Popup is a class to create a popup window with some text - * @param {Element} container The container object. - * @param {Number} [x] - * @param {Number} [y] - * @param {String} [text] - * @param {Object} [style] An object containing borderColor, - * backgroundColor, etc. - */ - function Popup(container, x, y, text, style) { - if (container) { - this.container = container; - } - else { - this.container = document.body; - } - - // x, y and text are optional, see if a style object was passed in their place - if (style === undefined) { - if (typeof x === "object") { - style = x; - x = undefined; - } else if (typeof text === "object") { - style = text; - text = undefined; - } else { - // for backwards compatibility, in case clients other than Network are creating Popup directly - style = { - fontColor: 'black', - fontSize: 14, // px - fontFace: 'verdana', - color: { - border: '#666', - background: '#FFFFC6' - } - } - } - } - - this.x = 0; - this.y = 0; - this.padding = 5; - - if (x !== undefined && y !== undefined ) { - this.setPosition(x, y); - } - if (text !== undefined) { - this.setText(text); - } - - // create the frame - this.frame = document.createElement("div"); - var styleAttr = this.frame.style; - styleAttr.position = "absolute"; - styleAttr.visibility = "hidden"; - styleAttr.border = "1px solid " + style.color.border; - styleAttr.color = style.fontColor; - styleAttr.fontSize = style.fontSize + "px"; - styleAttr.fontFamily = style.fontFace; - styleAttr.padding = this.padding + "px"; - styleAttr.backgroundColor = style.color.background; - styleAttr.borderRadius = "3px"; - styleAttr.MozBorderRadius = "3px"; - styleAttr.WebkitBorderRadius = "3px"; - styleAttr.boxShadow = "3px 3px 10px rgba(128, 128, 128, 0.5)"; - styleAttr.whiteSpace = "nowrap"; - this.container.appendChild(this.frame); - } - - /** - * @param {number} x Horizontal position of the popup window - * @param {number} y Vertical position of the popup window - */ - Popup.prototype.setPosition = function(x, y) { - this.x = parseInt(x); - this.y = parseInt(y); - }; - - /** - * Set the content for the popup window. This can be HTML code or text. - * @param {string | Element} content - */ - Popup.prototype.setText = function(content) { - if (content instanceof Element) { - this.frame.innerHTML = ''; - this.frame.appendChild(content); - } - else { - this.frame.innerHTML = content; // string containing text or HTML - } - }; - - /** - * Show the popup window - * @param {boolean} show Optional. Show or hide the window - */ - Popup.prototype.show = function (show) { - if (show === undefined) { - show = true; - } - - if (show) { - var height = this.frame.clientHeight; - var width = this.frame.clientWidth; - var maxHeight = this.frame.parentNode.clientHeight; - var maxWidth = this.frame.parentNode.clientWidth; - - var top = (this.y - height); - if (top + height + this.padding > maxHeight) { - top = maxHeight - height - this.padding; - } - if (top < this.padding) { - top = this.padding; - } - - var left = this.x; - if (left + width + this.padding > maxWidth) { - left = maxWidth - width - this.padding; - } - if (left < this.padding) { - left = this.padding; - } - - this.frame.style.left = left + "px"; - this.frame.style.top = top + "px"; - this.frame.style.visibility = "visible"; - } - else { - this.hide(); - } - }; - - /** - * Hide the popup window - */ - Popup.prototype.hide = function () { - this.frame.style.visibility = "hidden"; - }; - - module.exports = Popup; - - -/***/ }, -/* 42 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Parse a text source containing data in DOT language into a JSON object. - * The object contains two lists: one with nodes and one with edges. - * - * DOT language reference: http://www.graphviz.org/doc/info/lang.html - * - * @param {String} data Text containing a graph in DOT-notation - * @return {Object} graph An object containing two parameters: - * {Object[]} nodes - * {Object[]} edges - */ - function parseDOT (data) { - dot = data; - return parseGraph(); - } - - // token types enumeration - var TOKENTYPE = { - NULL : 0, - DELIMITER : 1, - IDENTIFIER: 2, - UNKNOWN : 3 - }; - - // map with all delimiters - var DELIMITERS = { - '{': true, - '}': true, - '[': true, - ']': true, - ';': true, - '=': true, - ',': true, - - '->': true, - '--': true - }; - - var dot = ''; // current dot file - var index = 0; // current index in dot file - var c = ''; // current token character in expr - var token = ''; // current token - var tokenType = TOKENTYPE.NULL; // type of the token - - /** - * Get the first character from the dot file. - * The character is stored into the char c. If the end of the dot file is - * reached, the function puts an empty string in c. - */ - function first() { - index = 0; - c = dot.charAt(0); - } - - /** - * Get the next character from the dot file. - * The character is stored into the char c. If the end of the dot file is - * reached, the function puts an empty string in c. - */ - function next() { - index++; - c = dot.charAt(index); - } - - /** - * Preview the next character from the dot file. - * @return {String} cNext - */ - function nextPreview() { - return dot.charAt(index + 1); - } - - /** - * Test whether given character is alphabetic or numeric - * @param {String} c - * @return {Boolean} isAlphaNumeric - */ - var regexAlphaNumeric = /[a-zA-Z_0-9.:#]/; - function isAlphaNumeric(c) { - return regexAlphaNumeric.test(c); - } - - /** - * Merge all properties of object b into object b - * @param {Object} a - * @param {Object} b - * @return {Object} a - */ - function merge (a, b) { - if (!a) { - a = {}; - } - - if (b) { - for (var name in b) { - if (b.hasOwnProperty(name)) { - a[name] = b[name]; - } - } - } - return a; - } - - /** - * Set a value in an object, where the provided parameter name can be a - * path with nested parameters. For example: - * - * var obj = {a: 2}; - * setValue(obj, 'b.c', 3); // obj = {a: 2, b: {c: 3}} - * - * @param {Object} obj - * @param {String} path A parameter name or dot-separated parameter path, - * like "color.highlight.border". - * @param {*} value - */ - function setValue(obj, path, value) { - var keys = path.split('.'); - var o = obj; - while (keys.length) { - var key = keys.shift(); - if (keys.length) { - // this isn't the end point - if (!o[key]) { - o[key] = {}; - } - o = o[key]; - } - else { - // this is the end point - o[key] = value; - } - } - } - - /** - * Add a node to a graph object. If there is already a node with - * the same id, their attributes will be merged. - * @param {Object} graph - * @param {Object} node - */ - function addNode(graph, node) { - var i, len; - var current = null; - - // find root graph (in case of subgraph) - var graphs = [graph]; // list with all graphs from current graph to root graph - var root = graph; - while (root.parent) { - graphs.push(root.parent); - root = root.parent; - } - - // find existing node (at root level) by its id - if (root.nodes) { - for (i = 0, len = root.nodes.length; i < len; i++) { - if (node.id === root.nodes[i].id) { - current = root.nodes[i]; - break; - } - } - } - - if (!current) { - // this is a new node - current = { - id: node.id - }; - if (graph.node) { - // clone default attributes - current.attr = merge(current.attr, graph.node); - } - } - - // add node to this (sub)graph and all its parent graphs - for (i = graphs.length - 1; i >= 0; i--) { - var g = graphs[i]; - - if (!g.nodes) { - g.nodes = []; - } - if (g.nodes.indexOf(current) == -1) { - g.nodes.push(current); - } - } - - // merge attributes - if (node.attr) { - current.attr = merge(current.attr, node.attr); - } - } - - /** - * Add an edge to a graph object - * @param {Object} graph - * @param {Object} edge - */ - function addEdge(graph, edge) { - if (!graph.edges) { - graph.edges = []; - } - graph.edges.push(edge); - if (graph.edge) { - var attr = merge({}, graph.edge); // clone default attributes - edge.attr = merge(attr, edge.attr); // merge attributes - } - } - - /** - * Create an edge to a graph object - * @param {Object} graph - * @param {String | Number | Object} from - * @param {String | Number | Object} to - * @param {String} type - * @param {Object | null} attr - * @return {Object} edge - */ - function createEdge(graph, from, to, type, attr) { - var edge = { - from: from, - to: to, - type: type - }; - - if (graph.edge) { - edge.attr = merge({}, graph.edge); // clone default attributes - } - edge.attr = merge(edge.attr || {}, attr); // merge attributes - - return edge; - } - - /** - * Get next token in the current dot file. - * The token and token type are available as token and tokenType - */ - function getToken() { - tokenType = TOKENTYPE.NULL; - token = ''; - - // skip over whitespaces - while (c == ' ' || c == '\t' || c == '\n' || c == '\r') { // space, tab, enter - next(); - } - - do { - var isComment = false; - - // skip comment - if (c == '#') { - // find the previous non-space character - var i = index - 1; - while (dot.charAt(i) == ' ' || dot.charAt(i) == '\t') { - i--; - } - if (dot.charAt(i) == '\n' || dot.charAt(i) == '') { - // the # is at the start of a line, this is indeed a line comment - while (c != '' && c != '\n') { - next(); - } - isComment = true; - } - } - if (c == '/' && nextPreview() == '/') { - // skip line comment - while (c != '' && c != '\n') { - next(); - } - isComment = true; - } - if (c == '/' && nextPreview() == '*') { - // skip block comment - while (c != '') { - if (c == '*' && nextPreview() == '/') { - // end of block comment found. skip these last two characters - next(); - next(); - break; - } - else { - next(); - } - } - isComment = true; - } - - // skip over whitespaces - while (c == ' ' || c == '\t' || c == '\n' || c == '\r') { // space, tab, enter - next(); - } - } - while (isComment); - - // check for end of dot file - if (c == '') { - // token is still empty - tokenType = TOKENTYPE.DELIMITER; - return; - } - - // check for delimiters consisting of 2 characters - var c2 = c + nextPreview(); - if (DELIMITERS[c2]) { - tokenType = TOKENTYPE.DELIMITER; - token = c2; - next(); - next(); - return; - } - - // check for delimiters consisting of 1 character - if (DELIMITERS[c]) { - tokenType = TOKENTYPE.DELIMITER; - token = c; - next(); - return; - } - - // check for an identifier (number or string) - // TODO: more precise parsing of numbers/strings (and the port separator ':') - if (isAlphaNumeric(c) || c == '-') { - token += c; - next(); - - while (isAlphaNumeric(c)) { - token += c; - next(); - } - if (token == 'false') { - token = false; // convert to boolean - } - else if (token == 'true') { - token = true; // convert to boolean - } - else if (!isNaN(Number(token))) { - token = Number(token); // convert to number - } - tokenType = TOKENTYPE.IDENTIFIER; - return; - } - - // check for a string enclosed by double quotes - if (c == '"') { - next(); - while (c != '' && (c != '"' || (c == '"' && nextPreview() == '"'))) { - token += c; - if (c == '"') { // skip the escape character - next(); - } - next(); - } - if (c != '"') { - throw newSyntaxError('End of string " expected'); - } - next(); - tokenType = TOKENTYPE.IDENTIFIER; - return; - } - - // something unknown is found, wrong characters, a syntax error - tokenType = TOKENTYPE.UNKNOWN; - while (c != '') { - token += c; - next(); - } - throw new SyntaxError('Syntax error in part "' + chop(token, 30) + '"'); - } - - /** - * Parse a graph. - * @returns {Object} graph - */ - function parseGraph() { - var graph = {}; - - first(); - getToken(); - - // optional strict keyword - if (token == 'strict') { - graph.strict = true; - getToken(); - } - - // graph or digraph keyword - if (token == 'graph' || token == 'digraph') { - graph.type = token; - getToken(); - } - - // optional graph id - if (tokenType == TOKENTYPE.IDENTIFIER) { - graph.id = token; - getToken(); - } - - // open angle bracket - if (token != '{') { - throw newSyntaxError('Angle bracket { expected'); - } - getToken(); - - // statements - parseStatements(graph); - - // close angle bracket - if (token != '}') { - throw newSyntaxError('Angle bracket } expected'); - } - getToken(); - - // end of file - if (token !== '') { - throw newSyntaxError('End of file expected'); - } - getToken(); - - // remove temporary default properties - delete graph.node; - delete graph.edge; - delete graph.graph; - - return graph; - } - - /** - * Parse a list with statements. - * @param {Object} graph - */ - function parseStatements (graph) { - while (token !== '' && token != '}') { - parseStatement(graph); - if (token == ';') { - getToken(); - } - } - } - - /** - * Parse a single statement. Can be a an attribute statement, node - * statement, a series of node statements and edge statements, or a - * parameter. - * @param {Object} graph - */ - function parseStatement(graph) { - // parse subgraph - var subgraph = parseSubgraph(graph); - if (subgraph) { - // edge statements - parseEdge(graph, subgraph); - - return; - } - - // parse an attribute statement - var attr = parseAttributeStatement(graph); - if (attr) { - return; - } - - // parse node - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier expected'); - } - var id = token; // id can be a string or a number - getToken(); - - if (token == '=') { - // id statement - getToken(); - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier expected'); - } - graph[id] = token; - getToken(); - // TODO: implement comma separated list with "a_list: ID=ID [','] [a_list] " - } - else { - parseNodeStatement(graph, id); - } - } - - /** - * Parse a subgraph - * @param {Object} graph parent graph object - * @return {Object | null} subgraph - */ - function parseSubgraph (graph) { - var subgraph = null; - - // optional subgraph keyword - if (token == 'subgraph') { - subgraph = {}; - subgraph.type = 'subgraph'; - getToken(); - - // optional graph id - if (tokenType == TOKENTYPE.IDENTIFIER) { - subgraph.id = token; - getToken(); - } - } - - // open angle bracket - if (token == '{') { - getToken(); - - if (!subgraph) { - subgraph = {}; - } - subgraph.parent = graph; - subgraph.node = graph.node; - subgraph.edge = graph.edge; - subgraph.graph = graph.graph; - - // statements - parseStatements(subgraph); - - // close angle bracket - if (token != '}') { - throw newSyntaxError('Angle bracket } expected'); - } - getToken(); - - // remove temporary default properties - delete subgraph.node; - delete subgraph.edge; - delete subgraph.graph; - delete subgraph.parent; - - // register at the parent graph - if (!graph.subgraphs) { - graph.subgraphs = []; - } - graph.subgraphs.push(subgraph); - } - - return subgraph; - } - - /** - * parse an attribute statement like "node [shape=circle fontSize=16]". - * Available keywords are 'node', 'edge', 'graph'. - * The previous list with default attributes will be replaced - * @param {Object} graph - * @returns {String | null} keyword Returns the name of the parsed attribute - * (node, edge, graph), or null if nothing - * is parsed. - */ - function parseAttributeStatement (graph) { - // attribute statements - if (token == 'node') { - getToken(); - - // node attributes - graph.node = parseAttributeList(); - return 'node'; - } - else if (token == 'edge') { - getToken(); - - // edge attributes - graph.edge = parseAttributeList(); - return 'edge'; - } - else if (token == 'graph') { - getToken(); - - // graph attributes - graph.graph = parseAttributeList(); - return 'graph'; - } - - return null; - } - - /** - * parse a node statement - * @param {Object} graph - * @param {String | Number} id - */ - function parseNodeStatement(graph, id) { - // node statement - var node = { - id: id - }; - var attr = parseAttributeList(); - if (attr) { - node.attr = attr; - } - addNode(graph, node); - - // edge statements - parseEdge(graph, id); - } - - /** - * Parse an edge or a series of edges - * @param {Object} graph - * @param {String | Number} from Id of the from node - */ - function parseEdge(graph, from) { - while (token == '->' || token == '--') { - var to; - var type = token; - getToken(); - - var subgraph = parseSubgraph(graph); - if (subgraph) { - to = subgraph; - } - else { - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier or subgraph expected'); - } - to = token; - addNode(graph, { - id: to - }); - getToken(); - } - - // parse edge attributes - var attr = parseAttributeList(); - - // create edge - var edge = createEdge(graph, from, to, type, attr); - addEdge(graph, edge); - - from = to; - } - } - - /** - * Parse a set with attributes, - * for example [label="1.000", shape=solid] - * @return {Object | null} attr - */ - function parseAttributeList() { - var attr = null; - - while (token == '[') { - getToken(); - attr = {}; - while (token !== '' && token != ']') { - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Attribute name expected'); - } - var name = token; - - getToken(); - if (token != '=') { - throw newSyntaxError('Equal sign = expected'); - } - getToken(); - - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Attribute value expected'); - } - var value = token; - setValue(attr, name, value); // name can be a path - - getToken(); - if (token ==',') { - getToken(); - } - } - - if (token != ']') { - throw newSyntaxError('Bracket ] expected'); - } - getToken(); - } - - return attr; - } - - /** - * Create a syntax error with extra information on current token and index. - * @param {String} message - * @returns {SyntaxError} err - */ - function newSyntaxError(message) { - return new SyntaxError(message + ', got "' + chop(token, 30) + '" (char ' + index + ')'); - } - - /** - * Chop off text after a maximum length - * @param {String} text - * @param {Number} maxLength - * @returns {String} - */ - function chop (text, maxLength) { - return (text.length <= maxLength) ? text : (text.substr(0, 27) + '...'); - } - - /** - * Execute a function fn for each pair of elements in two arrays - * @param {Array | *} array1 - * @param {Array | *} array2 - * @param {function} fn - */ - function forEach2(array1, array2, fn) { - if (Array.isArray(array1)) { - array1.forEach(function (elem1) { - if (Array.isArray(array2)) { - array2.forEach(function (elem2) { - fn(elem1, elem2); - }); - } - else { - fn(elem1, array2); - } - }); - } - else { - if (Array.isArray(array2)) { - array2.forEach(function (elem2) { - fn(array1, elem2); - }); - } - else { - fn(array1, array2); - } - } - } - - /** - * Convert a string containing a graph in DOT language into a map containing - * with nodes and edges in the format of graph. - * @param {String} data Text containing a graph in DOT-notation - * @return {Object} graphData - */ - function DOTToGraph (data) { - // parse the DOT file - var dotData = parseDOT(data); - var graphData = { - nodes: [], - edges: [], - options: {} - }; - - // copy the nodes - if (dotData.nodes) { - dotData.nodes.forEach(function (dotNode) { - var graphNode = { - id: dotNode.id, - label: String(dotNode.label || dotNode.id) - }; - merge(graphNode, dotNode.attr); - if (graphNode.image) { - graphNode.shape = 'image'; - } - graphData.nodes.push(graphNode); - }); - } - - // copy the edges - if (dotData.edges) { - /** - * Convert an edge in DOT format to an edge with VisGraph format - * @param {Object} dotEdge - * @returns {Object} graphEdge - */ - var convertEdge = function (dotEdge) { - var graphEdge = { - from: dotEdge.from, - to: dotEdge.to - }; - merge(graphEdge, dotEdge.attr); - graphEdge.style = (dotEdge.type == '->') ? 'arrow' : 'line'; - return graphEdge; - } - - dotData.edges.forEach(function (dotEdge) { - var from, to; - if (dotEdge.from instanceof Object) { - from = dotEdge.from.nodes; - } - else { - from = { - id: dotEdge.from - } - } - - if (dotEdge.to instanceof Object) { - to = dotEdge.to.nodes; - } - else { - to = { - id: dotEdge.to - } - } - - if (dotEdge.from instanceof Object && dotEdge.from.edges) { - dotEdge.from.edges.forEach(function (subEdge) { - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); - } - - forEach2(from, to, function (from, to) { - var subEdge = createEdge(graphData, from.id, to.id, dotEdge.type, dotEdge.attr); - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); - - if (dotEdge.to instanceof Object && dotEdge.to.edges) { - dotEdge.to.edges.forEach(function (subEdge) { - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); - } - }); - } - - // copy the options - if (dotData.attr) { - graphData.options = dotData.attr; - } - - return graphData; - } - - // exports - exports.parseDOT = parseDOT; - exports.DOTToGraph = DOTToGraph; - - -/***/ }, -/* 43 */ -/***/ function(module, exports, __webpack_require__) { - - - function parseGephi(gephiJSON, options) { - var edges = []; - var nodes = []; - this.options = { - edges: { - inheritColor: true - }, - nodes: { - allowedToMove: false, - parseColor: false - } - }; - - if (options !== undefined) { - this.options.nodes['allowedToMove'] = options.allowedToMove | false; - this.options.nodes['parseColor'] = options.parseColor | false; - this.options.edges['inheritColor'] = options.inheritColor | true; - } - - var gEdges = gephiJSON.edges; - var gNodes = gephiJSON.nodes; - for (var i = 0; i < gEdges.length; i++) { - var edge = {}; - var gEdge = gEdges[i]; - edge['id'] = gEdge.id; - edge['from'] = gEdge.source; - edge['to'] = gEdge.target; - edge['attributes'] = gEdge.attributes; - // edge['value'] = gEdge.attributes !== undefined ? gEdge.attributes.Weight : undefined; - // edge['width'] = edge['value'] !== undefined ? undefined : edgegEdge.size; - edge['color'] = gEdge.color; - edge['inheritColor'] = edge['color'] !== undefined ? false : this.options.inheritColor; - edges.push(edge); - } - - for (var i = 0; i < gNodes.length; i++) { - var node = {}; - var gNode = gNodes[i]; - node['id'] = gNode.id; - node['attributes'] = gNode.attributes; - node['x'] = gNode.x; - node['y'] = gNode.y; - node['label'] = gNode.label; - if (this.options.nodes.parseColor == true) { - node['color'] = gNode.color; - } - else { - node['color'] = gNode.color !== undefined ? {background:gNode.color, border:gNode.color} : undefined; - } - node['radius'] = gNode.size; - node['allowedToMoveX'] = this.options.nodes.allowedToMove; - node['allowedToMoveY'] = this.options.nodes.allowedToMove; - nodes.push(node); - } - - return {nodes:nodes, edges:edges}; - } - - exports.parseGephi = parseGephi; - -/***/ }, -/* 44 */ -/***/ function(module, exports, __webpack_require__) { - - // first check if moment.js is already loaded in the browser window, if so, - // use this instance. Else, load via commonjs. - module.exports = (typeof window !== 'undefined') && window['moment'] || __webpack_require__(58); - - -/***/ }, -/* 45 */ -/***/ function(module, exports, __webpack_require__) { - - // Only load hammer.js when in a browser environment - // (loading hammer.js in a node.js environment gives errors) - if (typeof window !== 'undefined') { - module.exports = window['Hammer'] || __webpack_require__(59); - } - else { - module.exports = function () { - throw Error('hammer.js is only available in a browser, not in node.js.'); - } - } - - -/***/ }, -/* 46 */ -/***/ function(module, exports, __webpack_require__) { - - var Emitter = __webpack_require__(56); - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Range = __webpack_require__(17); - var ItemSet = __webpack_require__(27); - var Activator = __webpack_require__(55); - var DateUtil = __webpack_require__(15); - - /** - * Create a timeline visualization - * @param {HTMLElement} container - * @param {vis.DataSet | Array | google.visualization.DataTable} [items] - * @param {Object} [options] See Core.setOptions for the available options. - * @constructor - */ - function Core () {} - - // turn Core into an event emitter - Emitter(Core.prototype); - - /** - * Create the main DOM for the Core: a root panel containing left, right, - * top, bottom, content, and background panel. - * @param {Element} container The container element where the Core will - * be attached. - * @private - */ - Core.prototype._create = function (container) { - this.dom = {}; - - this.dom.root = document.createElement('div'); - this.dom.background = document.createElement('div'); - this.dom.backgroundVertical = document.createElement('div'); - this.dom.backgroundHorizontal = document.createElement('div'); - this.dom.centerContainer = document.createElement('div'); - this.dom.leftContainer = document.createElement('div'); - this.dom.rightContainer = document.createElement('div'); - this.dom.center = document.createElement('div'); - this.dom.left = document.createElement('div'); - this.dom.right = document.createElement('div'); - this.dom.top = document.createElement('div'); - this.dom.bottom = document.createElement('div'); - this.dom.shadowTop = document.createElement('div'); - this.dom.shadowBottom = document.createElement('div'); - this.dom.shadowTopLeft = document.createElement('div'); - this.dom.shadowBottomLeft = document.createElement('div'); - this.dom.shadowTopRight = document.createElement('div'); - this.dom.shadowBottomRight = document.createElement('div'); - - this.dom.root.className = 'vis timeline root'; - this.dom.background.className = 'vispanel background'; - this.dom.backgroundVertical.className = 'vispanel background vertical'; - this.dom.backgroundHorizontal.className = 'vispanel background horizontal'; - this.dom.centerContainer.className = 'vispanel center'; - this.dom.leftContainer.className = 'vispanel left'; - this.dom.rightContainer.className = 'vispanel right'; - this.dom.top.className = 'vispanel top'; - this.dom.bottom.className = 'vispanel bottom'; - this.dom.left.className = 'content'; - this.dom.center.className = 'content'; - this.dom.right.className = 'content'; - this.dom.shadowTop.className = 'shadow top'; - this.dom.shadowBottom.className = 'shadow bottom'; - this.dom.shadowTopLeft.className = 'shadow top'; - this.dom.shadowBottomLeft.className = 'shadow bottom'; - this.dom.shadowTopRight.className = 'shadow top'; - this.dom.shadowBottomRight.className = 'shadow bottom'; - - this.dom.root.appendChild(this.dom.background); - this.dom.root.appendChild(this.dom.backgroundVertical); - this.dom.root.appendChild(this.dom.backgroundHorizontal); - this.dom.root.appendChild(this.dom.centerContainer); - this.dom.root.appendChild(this.dom.leftContainer); - this.dom.root.appendChild(this.dom.rightContainer); - this.dom.root.appendChild(this.dom.top); - this.dom.root.appendChild(this.dom.bottom); - - this.dom.centerContainer.appendChild(this.dom.center); - this.dom.leftContainer.appendChild(this.dom.left); - this.dom.rightContainer.appendChild(this.dom.right); - - this.dom.centerContainer.appendChild(this.dom.shadowTop); - this.dom.centerContainer.appendChild(this.dom.shadowBottom); - this.dom.leftContainer.appendChild(this.dom.shadowTopLeft); - this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft); - this.dom.rightContainer.appendChild(this.dom.shadowTopRight); - this.dom.rightContainer.appendChild(this.dom.shadowBottomRight); - - this.on('rangechange', this.redraw.bind(this)); - this.on('touch', this._onTouch.bind(this)); - this.on('pinch', this._onPinch.bind(this)); - this.on('dragstart', this._onDragStart.bind(this)); - this.on('drag', this._onDrag.bind(this)); - - var me = this; - this.on('change', function (properties) { - if (properties && properties.queue == true) { - // redraw once on next tick - if (!me._redrawTimer) { - me._redrawTimer = setTimeout(function () { - me._redrawTimer = null; - me.redraw(); - }, 0) - } - } - else { - // redraw immediately - me.redraw(); - } - }); - - // create event listeners for all interesting events, these events will be - // emitted via emitter - this.hammer = Hammer(this.dom.root, { - preventDefault: true - }); - this.listeners = {}; - - var events = [ - 'touch', 'pinch', - 'tap', 'doubletap', 'hold', - 'dragstart', 'drag', 'dragend', - 'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox - ]; - events.forEach(function (event) { - var listener = function () { - var args = [event].concat(Array.prototype.slice.call(arguments, 0)); - if (me.isActive()) { - me.emit.apply(me, args); - } - }; - me.hammer.on(event, listener); - me.listeners[event] = listener; - }); - - // size properties of each of the panels - this.props = { - root: {}, - background: {}, - centerContainer: {}, - leftContainer: {}, - rightContainer: {}, - center: {}, - left: {}, - right: {}, - top: {}, - bottom: {}, - border: {}, - scrollTop: 0, - scrollTopMin: 0 - }; - this.touch = {}; // store state information needed for touch events - - this.redrawCount = 0; - - // attach the root panel to the provided container - if (!container) throw new Error('No container provided'); - container.appendChild(this.dom.root); - }; - - /** - * Set options. Options will be passed to all components loaded in the Timeline. - * @param {Object} [options] - * {String} orientation - * Vertical orientation for the Timeline, - * can be 'bottom' (default) or 'top'. - * {String | Number} width - * Width for the timeline, a number in pixels or - * a css string like '1000px' or '75%'. '100%' by default. - * {String | Number} height - * Fixed height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. If undefined, - * The Timeline will automatically size such that - * its contents fit. - * {String | Number} minHeight - * Minimum height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. - * {String | Number} maxHeight - * Maximum height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. - * {Number | Date | String} start - * Start date for the visible window - * {Number | Date | String} end - * End date for the visible window - */ - Core.prototype.setOptions = function (options) { - if (options) { - // copy the known options - var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'orientation', 'clickToUse', 'dataAttributes', 'hiddenDates']; - util.selectiveExtend(fields, this.options, options); - - if ('hiddenDates' in this.options) { - DateUtil.convertHiddenOptions(this.body, this.options.hiddenDates); - } - - if ('clickToUse' in options) { - if (options.clickToUse) { - this.activator = new Activator(this.dom.root); - } - else { - if (this.activator) { - this.activator.destroy(); - delete this.activator; - } - } - } - - // enable/disable autoResize - this._initAutoResize(); - } - - // propagate options to all components - this.components.forEach(function (component) { - component.setOptions(options); - }); - - // TODO: remove deprecation error one day (deprecated since version 0.8.0) - if (options && options.order) { - throw new Error('Option order is deprecated. There is no replacement for this feature.'); - } - - // redraw everything - this.redraw(); - }; - - /** - * Returns true when the Timeline is active. - * @returns {boolean} - */ - Core.prototype.isActive = function () { - return !this.activator || this.activator.active; - }; - - /** - * Destroy the Core, clean up all DOM elements and event listeners. - */ - Core.prototype.destroy = function () { - // unbind datasets - this.clear(); - - // remove all event listeners - this.off(); - - // stop checking for changed size - this._stopAutoResize(); - - // remove from DOM - if (this.dom.root.parentNode) { - this.dom.root.parentNode.removeChild(this.dom.root); - } - this.dom = null; - - // remove Activator - if (this.activator) { - this.activator.destroy(); - delete this.activator; - } - - // cleanup hammer touch events - for (var event in this.listeners) { - if (this.listeners.hasOwnProperty(event)) { - delete this.listeners[event]; - } - } - this.listeners = null; - this.hammer = null; - - // give all components the opportunity to cleanup - this.components.forEach(function (component) { - component.destroy(); - }); - - this.body = null; - }; - - - /** - * Set a custom time bar - * @param {Date} time - */ - Core.prototype.setCustomTime = function (time) { - if (!this.customTime) { - throw new Error('Cannot get custom time: Custom time bar is not enabled'); - } - - this.customTime.setCustomTime(time); - }; - - /** - * Retrieve the current custom time. - * @return {Date} customTime - */ - Core.prototype.getCustomTime = function() { - if (!this.customTime) { - throw new Error('Cannot get custom time: Custom time bar is not enabled'); - } - - return this.customTime.getCustomTime(); - }; - - - /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items - */ - Core.prototype.getVisibleItems = function() { - return this.itemSet && this.itemSet.getVisibleItems() || []; - }; - - - - /** - * Clear the Core. By Default, items, groups and options are cleared. - * Example usage: - * - * timeline.clear(); // clear items, groups, and options - * timeline.clear({options: true}); // clear options only - * - * @param {Object} [what] Optionally specify what to clear. By default: - * {items: true, groups: true, options: true} - */ - Core.prototype.clear = function(what) { - // clear items - if (!what || what.items) { - this.setItems(null); - } - - // clear groups - if (!what || what.groups) { - this.setGroups(null); - } - - // clear options of timeline and of each of the components - if (!what || what.options) { - this.components.forEach(function (component) { - component.setOptions(component.defaultOptions); - }); - - this.setOptions(this.defaultOptions); // this will also do a redraw - } - }; - - /** - * Set Core window such that it fits all items - * @param {Object} [options] Available options: - * `animate: boolean | number` - * If true (default), the range is animated - * smoothly to the new window. - * If a number, the number is taken as duration - * for the animation. Default duration is 500 ms. - */ - Core.prototype.fit = function(options) { - var range = this._getDataRange(); - - // skip range set if there is no start and end date - if (range.start === null && range.end === null) { - return; - } - - var animate = (options && options.animate !== undefined) ? options.animate : true; - this.range.setRange(range.start, range.end, animate); - }; - - /** - * Calculate the data range of the items and applies a 5% window around it. - * @returns {{start: Date | null, end: Date | null}} - * @protected - */ - Core.prototype._getDataRange = function() { - // apply the data range as range - var dataRange = this.getItemRange(); - - // add 5% space on both sides - var start = dataRange.min; - var end = dataRange.max; - if (start != null && end != null) { - var interval = (end.valueOf() - start.valueOf()); - if (interval <= 0) { - // prevent an empty interval - interval = 24 * 60 * 60 * 1000; // 1 day - } - start = new Date(start.valueOf() - interval * 0.05); - end = new Date(end.valueOf() + interval * 0.05); - } - - return { - start: start, - end: end - } - }; - - /** - * Set the visible window. Both parameters are optional, you can change only - * start or only end. Syntax: - * - * TimeLine.setWindow(start, end) - * TimeLine.setWindow(range) - * - * Where start and end can be a Date, number, or string, and range is an - * object with properties start and end. - * - * @param {Date | Number | String | Object} [start] Start date of visible window - * @param {Date | Number | String} [end] End date of visible window - * @param {Object} [options] Available options: - * `animate: boolean | number` - * If true (default), the range is animated - * smoothly to the new window. - * If a number, the number is taken as duration - * for the animation. Default duration is 500 ms. - */ - Core.prototype.setWindow = function(start, end, options) { - var animate = (options && options.animate !== undefined) ? options.animate : true; - if (arguments.length == 1) { - var range = arguments[0]; - this.range.setRange(range.start, range.end, animate); - } - else { - this.range.setRange(start, end, animate); - } - }; - - /** - * Move the window such that given time is centered on screen. - * @param {Date | Number | String} time - * @param {Object} [options] Available options: - * `animate: boolean | number` - * If true (default), the range is animated - * smoothly to the new window. - * If a number, the number is taken as duration - * for the animation. Default duration is 500 ms. - */ - Core.prototype.moveTo = function(time, options) { - var interval = this.range.end - this.range.start; - var t = util.convert(time, 'Date').valueOf(); - - var start = t - interval / 2; - var end = t + interval / 2; - var animate = (options && options.animate !== undefined) ? options.animate : true; - - this.range.setRange(start, end, animate); - }; - - /** - * Get the visible window - * @return {{start: Date, end: Date}} Visible range - */ - Core.prototype.getWindow = function() { - var range = this.range.getRange(); - return { - start: new Date(range.start), - end: new Date(range.end) - }; - }; - - /** - * Force a redraw of the Core. Can be useful to manually redraw when - * option autoResize=false - */ - Core.prototype.redraw = function() { - var resized = false; - var options = this.options; - var props = this.props; - var dom = this.dom; - - if (!dom) return; // when destroyed - - DateUtil.updateHiddenDates(this.body, this.options.hiddenDates); - - // update class names - if (options.orientation == 'top') { - util.addClassName(dom.root, 'top'); - util.removeClassName(dom.root, 'bottom'); - } - else { - util.removeClassName(dom.root, 'top'); - util.addClassName(dom.root, 'bottom'); - } - - // update root width and height options - dom.root.style.maxHeight = util.option.asSize(options.maxHeight, ''); - dom.root.style.minHeight = util.option.asSize(options.minHeight, ''); - dom.root.style.width = util.option.asSize(options.width, ''); - - // calculate border widths - props.border.left = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2; - props.border.right = props.border.left; - props.border.top = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2; - props.border.bottom = props.border.top; - var borderRootHeight= dom.root.offsetHeight - dom.root.clientHeight; - var borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth; - - // workaround for a bug in IE: the clientWidth of an element with - // a height:0px and overflow:hidden is not calculated and always has value 0 - if (dom.centerContainer.clientHeight === 0) { - props.border.left = props.border.top; - props.border.right = props.border.left; - } - if (dom.root.clientHeight === 0) { - borderRootWidth = borderRootHeight; - } - - // calculate the heights. If any of the side panels is empty, we set the height to - // minus the border width, such that the border will be invisible - props.center.height = dom.center.offsetHeight; - props.left.height = dom.left.offsetHeight; - props.right.height = dom.right.offsetHeight; - props.top.height = dom.top.clientHeight || -props.border.top; - props.bottom.height = dom.bottom.clientHeight || -props.border.bottom; - - // TODO: compensate borders when any of the panels is empty. - - // apply auto height - // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM) - var contentHeight = Math.max(props.left.height, props.center.height, props.right.height); - var autoHeight = props.top.height + contentHeight + props.bottom.height + - borderRootHeight + props.border.top + props.border.bottom; - dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px'); - - // calculate heights of the content panels - props.root.height = dom.root.offsetHeight; - props.background.height = props.root.height - borderRootHeight; - var containerHeight = props.root.height - props.top.height - props.bottom.height - - borderRootHeight; - props.centerContainer.height = containerHeight; - props.leftContainer.height = containerHeight; - props.rightContainer.height = props.leftContainer.height; - - // calculate the widths of the panels - props.root.width = dom.root.offsetWidth; - props.background.width = props.root.width - borderRootWidth; - props.left.width = dom.leftContainer.clientWidth || -props.border.left; - props.leftContainer.width = props.left.width; - props.right.width = dom.rightContainer.clientWidth || -props.border.right; - props.rightContainer.width = props.right.width; - var centerWidth = props.root.width - props.left.width - props.right.width - borderRootWidth; - props.center.width = centerWidth; - props.centerContainer.width = centerWidth; - props.top.width = centerWidth; - props.bottom.width = centerWidth; - - // resize the panels - dom.background.style.height = props.background.height + 'px'; - dom.backgroundVertical.style.height = props.background.height + 'px'; - dom.backgroundHorizontal.style.height = props.centerContainer.height + 'px'; - dom.centerContainer.style.height = props.centerContainer.height + 'px'; - dom.leftContainer.style.height = props.leftContainer.height + 'px'; - dom.rightContainer.style.height = props.rightContainer.height + 'px'; - - dom.background.style.width = props.background.width + 'px'; - dom.backgroundVertical.style.width = props.centerContainer.width + 'px'; - dom.backgroundHorizontal.style.width = props.background.width + 'px'; - dom.centerContainer.style.width = props.center.width + 'px'; - dom.top.style.width = props.top.width + 'px'; - dom.bottom.style.width = props.bottom.width + 'px'; - - // reposition the panels - dom.background.style.left = '0'; - dom.background.style.top = '0'; - dom.backgroundVertical.style.left = (props.left.width + props.border.left) + 'px'; - dom.backgroundVertical.style.top = '0'; - dom.backgroundHorizontal.style.left = '0'; - dom.backgroundHorizontal.style.top = props.top.height + 'px'; - dom.centerContainer.style.left = props.left.width + 'px'; - dom.centerContainer.style.top = props.top.height + 'px'; - dom.leftContainer.style.left = '0'; - dom.leftContainer.style.top = props.top.height + 'px'; - dom.rightContainer.style.left = (props.left.width + props.center.width) + 'px'; - dom.rightContainer.style.top = props.top.height + 'px'; - dom.top.style.left = props.left.width + 'px'; - dom.top.style.top = '0'; - dom.bottom.style.left = props.left.width + 'px'; - dom.bottom.style.top = (props.top.height + props.centerContainer.height) + 'px'; - - // update the scrollTop, feasible range for the offset can be changed - // when the height of the Core or of the contents of the center changed - this._updateScrollTop(); - - // reposition the scrollable contents - var offset = this.props.scrollTop; - if (options.orientation == 'bottom') { - offset += Math.max(this.props.centerContainer.height - this.props.center.height - - this.props.border.top - this.props.border.bottom, 0); - } - dom.center.style.left = '0'; - dom.center.style.top = offset + 'px'; - dom.left.style.left = '0'; - dom.left.style.top = offset + 'px'; - dom.right.style.left = '0'; - dom.right.style.top = offset + 'px'; - - // show shadows when vertical scrolling is available - var visibilityTop = this.props.scrollTop == 0 ? 'hidden' : ''; - var visibilityBottom = this.props.scrollTop == this.props.scrollTopMin ? 'hidden' : ''; - dom.shadowTop.style.visibility = visibilityTop; - dom.shadowBottom.style.visibility = visibilityBottom; - dom.shadowTopLeft.style.visibility = visibilityTop; - dom.shadowBottomLeft.style.visibility = visibilityBottom; - dom.shadowTopRight.style.visibility = visibilityTop; - dom.shadowBottomRight.style.visibility = visibilityBottom; - - // redraw all components - this.components.forEach(function (component) { - resized = component.redraw() || resized; - }); - if (resized) { - // keep repainting until all sizes are settled - var MAX_REDRAWS = 3; // maximum number of consecutive redraws - if (this.redrawCount < MAX_REDRAWS) { - this.redrawCount++; - this.redraw(); - } - else { - console.log('WARNING: infinite loop in redraw?') - } - this.redrawCount = 0; - } - - this.emit("finishedRedraw"); - }; - - // TODO: deprecated since version 1.1.0, remove some day - Core.prototype.repaint = function () { - throw new Error('Function repaint is deprecated. Use redraw instead.'); - }; - - /** - * Set a current time. This can be used for example to ensure that a client's - * time is synchronized with a shared server time. - * Only applicable when option `showCurrentTime` is true. - * @param {Date | String | Number} time A Date, unix timestamp, or - * ISO date string. - */ - Core.prototype.setCurrentTime = function(time) { - if (!this.currentTime) { - throw new Error('Option showCurrentTime must be true'); - } - - this.currentTime.setCurrentTime(time); - }; - - /** - * Get the current time. - * Only applicable when option `showCurrentTime` is true. - * @return {Date} Returns the current time. - */ - Core.prototype.getCurrentTime = function() { - if (!this.currentTime) { - throw new Error('Option showCurrentTime must be true'); - } - - return this.currentTime.getCurrentTime(); - }; - - /** - * Convert a position on screen (pixels) to a datetime - * @param {int} x Position on the screen in pixels - * @return {Date} time The datetime the corresponds with given position x - * @private - */ - // TODO: move this function to Range - Core.prototype._toTime = function(x) { - return DateUtil.toTime(this, x, this.props.center.width); - }; - - /** - * Convert a position on the global screen (pixels) to a datetime - * @param {int} x Position on the screen in pixels - * @return {Date} time The datetime the corresponds with given position x - * @private - */ - // TODO: move this function to Range - Core.prototype._toGlobalTime = function(x) { - return DateUtil.toTime(this, x, this.props.root.width); - //var conversion = this.range.conversion(this.props.root.width); - //return new Date(x / conversion.scale + conversion.offset); - }; - - /** - * Convert a datetime (Date object) into a position on the screen - * @param {Date} time A date - * @return {int} x The position on the screen in pixels which corresponds - * with the given date. - * @private - */ - // TODO: move this function to Range - Core.prototype._toScreen = function(time) { - return DateUtil.toScreen(this, time, this.props.center.width); - }; - - - - /** - * Convert a datetime (Date object) into a position on the root - * This is used to get the pixel density estimate for the screen, not the center panel - * @param {Date} time A date - * @return {int} x The position on root in pixels which corresponds - * with the given date. - * @private - */ - // TODO: move this function to Range - Core.prototype._toGlobalScreen = function(time) { - return DateUtil.toScreen(this, time, this.props.root.width); - //var conversion = this.range.conversion(this.props.root.width); - //return (time.valueOf() - conversion.offset) * conversion.scale; - }; - - - /** - * Initialize watching when option autoResize is true - * @private - */ - Core.prototype._initAutoResize = function () { - if (this.options.autoResize == true) { - this._startAutoResize(); - } - else { - this._stopAutoResize(); - } - }; - - /** - * Watch for changes in the size of the container. On resize, the Panel will - * automatically redraw itself. - * @private - */ - Core.prototype._startAutoResize = function () { - var me = this; - - this._stopAutoResize(); - - this._onResize = function() { - if (me.options.autoResize != true) { - // stop watching when the option autoResize is changed to false - me._stopAutoResize(); - return; - } - - if (me.dom.root) { - // check whether the frame is resized - // Note: we compare offsetWidth here, not clientWidth. For some reason, - // IE does not restore the clientWidth from 0 to the actual width after - // changing the timeline's container display style from none to visible - if ((me.dom.root.offsetWidth != me.props.lastWidth) || - (me.dom.root.offsetHeight != me.props.lastHeight)) { - me.props.lastWidth = me.dom.root.offsetWidth; - me.props.lastHeight = me.dom.root.offsetHeight; - - me.emit('change'); - } - } - }; - - // add event listener to window resize - util.addEventListener(window, 'resize', this._onResize); - - this.watchTimer = setInterval(this._onResize, 1000); - }; - - /** - * Stop watching for a resize of the frame. - * @private - */ - Core.prototype._stopAutoResize = function () { - if (this.watchTimer) { - clearInterval(this.watchTimer); - this.watchTimer = undefined; - } - - // remove event listener on window.resize - util.removeEventListener(window, 'resize', this._onResize); - this._onResize = null; - }; - - /** - * Start moving the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onTouch = function (event) { - this.touch.allowDragging = true; - }; - - /** - * Start moving the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onPinch = function (event) { - this.touch.allowDragging = false; - }; - - /** - * Start moving the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onDragStart = function (event) { - this.touch.initialScrollTop = this.props.scrollTop; - }; - - /** - * Move the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onDrag = function (event) { - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.touch.allowDragging) return; - - var delta = event.gesture.deltaY; - - var oldScrollTop = this._getScrollTop(); - var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); - - - if (newScrollTop != oldScrollTop) { - this.redraw(); // TODO: this causes two redraws when dragging, the other is triggered by rangechange already - this.emit("verticalDrag"); - } - }; - - /** - * Apply a scrollTop - * @param {Number} scrollTop - * @returns {Number} scrollTop Returns the applied scrollTop - * @private - */ - Core.prototype._setScrollTop = function (scrollTop) { - this.props.scrollTop = scrollTop; - this._updateScrollTop(); - return this.props.scrollTop; - }; - - /** - * Update the current scrollTop when the height of the containers has been changed - * @returns {Number} scrollTop Returns the applied scrollTop - * @private - */ - Core.prototype._updateScrollTop = function () { - // recalculate the scrollTopMin - var scrollTopMin = Math.min(this.props.centerContainer.height - this.props.center.height, 0); // is negative or zero - if (scrollTopMin != this.props.scrollTopMin) { - // in case of bottom orientation, change the scrollTop such that the contents - // do not move relative to the time axis at the bottom - if (this.options.orientation == 'bottom') { - this.props.scrollTop += (scrollTopMin - this.props.scrollTopMin); - } - this.props.scrollTopMin = scrollTopMin; - } - - // limit the scrollTop to the feasible scroll range - if (this.props.scrollTop > 0) this.props.scrollTop = 0; - if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin; - - return this.props.scrollTop; - }; - - /** - * Get the current scrollTop - * @returns {number} scrollTop - * @private - */ - Core.prototype._getScrollTop = function () { - return this.props.scrollTop; - }; - - module.exports = Core; - - -/***/ }, -/* 47 */ -/***/ function(module, exports, __webpack_require__) { - - var Hammer = __webpack_require__(45); - - /** - * Fake a hammer.js gesture. Event can be a ScrollEvent or MouseMoveEvent - * @param {Element} element - * @param {Event} event - */ - exports.fakeGesture = function(element, event) { - var eventType = null; - - // for hammer.js 1.0.5 - // var gesture = Hammer.event.collectEventData(this, eventType, event); - - // for hammer.js 1.0.6+ - var touches = Hammer.event.getTouchList(event, eventType); - var gesture = Hammer.event.collectEventData(this, eventType, touches, event); - - // on IE in standards mode, no touches are recognized by hammer.js, - // resulting in NaN values for center.pageX and center.pageY - if (isNaN(gesture.center.pageX)) { - gesture.center.pageX = event.pageX; - } - if (isNaN(gesture.center.pageY)) { - gesture.center.pageY = event.pageY; - } - - return gesture; - }; - - -/***/ }, -/* 48 */ -/***/ function(module, exports, __webpack_require__) { - - // English - exports['en'] = { - current: 'current', - time: 'time' - }; - exports['en_EN'] = exports['en']; - exports['en_US'] = exports['en']; - - // Dutch - exports['nl'] = { - custom: 'aangepaste', - time: 'tijd' - }; - exports['nl_NL'] = exports['nl']; - exports['nl_BE'] = exports['nl']; - - -/***/ }, -/* 49 */ -/***/ function(module, exports, __webpack_require__) { - - // English - exports['en'] = { - edit: 'Edit', - del: 'Delete selected', - back: 'Back', - addNode: 'Add Node', - addEdge: 'Add Edge', - editNode: 'Edit Node', - editEdge: 'Edit Edge', - addDescription: 'Click in an empty space to place a new node.', - edgeDescription: 'Click on a node and drag the edge to another node to connect them.', - editEdgeDescription: 'Click on the control points and drag them to a node to connect to it.', - createEdgeError: 'Cannot link edges to a cluster.', - deleteClusterError: 'Clusters cannot be deleted.' - }; - exports['en_EN'] = exports['en']; - exports['en_US'] = exports['en']; - - // Dutch - exports['nl'] = { - edit: 'Wijzigen', - del: 'Selectie verwijderen', - back: 'Terug', - addNode: 'Node toevoegen', - addEdge: 'Link toevoegen', - editNode: 'Node wijzigen', - editEdge: 'Link wijzigen', - addDescription: 'Klik op een leeg gebied om een nieuwe node te maken.', - edgeDescription: 'Klik op een node en sleep de link naar een andere node om ze te verbinden.', - editEdgeDescription: 'Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.', - createEdgeError: 'Kan geen link maken naar een cluster.', - deleteClusterError: 'Clusters kunnen niet worden verwijderd.' - }; - exports['nl_NL'] = exports['nl']; - exports['nl_BE'] = exports['nl']; - - -/***/ }, -/* 50 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Canvas shapes used by Network - */ - if (typeof CanvasRenderingContext2D !== 'undefined') { - - /** - * Draw a circle shape - */ - CanvasRenderingContext2D.prototype.circle = function(x, y, r) { - this.beginPath(); - this.arc(x, y, r, 0, 2*Math.PI, false); - }; - - /** - * Draw a square shape - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r size, width and height of the square - */ - CanvasRenderingContext2D.prototype.square = function(x, y, r) { - this.beginPath(); - this.rect(x - r, y - r, r * 2, r * 2); - }; - - /** - * Draw a triangle shape - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius, half the length of the sides of the triangle - */ - CanvasRenderingContext2D.prototype.triangle = function(x, y, r) { - // http://en.wikipedia.org/wiki/Equilateral_triangle - this.beginPath(); - - var s = r * 2; - var s2 = s / 2; - var ir = Math.sqrt(3) / 6 * s; // radius of inner circle - var h = Math.sqrt(s * s - s2 * s2); // height - - this.moveTo(x, y - (h - ir)); - this.lineTo(x + s2, y + ir); - this.lineTo(x - s2, y + ir); - this.lineTo(x, y - (h - ir)); - this.closePath(); - }; - - /** - * Draw a triangle shape in downward orientation - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius - */ - CanvasRenderingContext2D.prototype.triangleDown = function(x, y, r) { - // http://en.wikipedia.org/wiki/Equilateral_triangle - this.beginPath(); - - var s = r * 2; - var s2 = s / 2; - var ir = Math.sqrt(3) / 6 * s; // radius of inner circle - var h = Math.sqrt(s * s - s2 * s2); // height - - this.moveTo(x, y + (h - ir)); - this.lineTo(x + s2, y - ir); - this.lineTo(x - s2, y - ir); - this.lineTo(x, y + (h - ir)); - this.closePath(); - }; - - /** - * Draw a star shape, a star with 5 points - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius, half the length of the sides of the triangle - */ - CanvasRenderingContext2D.prototype.star = function(x, y, r) { - // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/ - this.beginPath(); - - for (var n = 0; n < 10; n++) { - var radius = (n % 2 === 0) ? r * 1.3 : r * 0.5; - this.lineTo( - x + radius * Math.sin(n * 2 * Math.PI / 10), - y - radius * Math.cos(n * 2 * Math.PI / 10) - ); - } - - this.closePath(); - }; - - /** - * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas - */ - CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) { - var r2d = Math.PI/180; - if( w - ( 2 * r ) < 0 ) { r = ( w / 2 ); } //ensure that the radius isn't too large for x - if( h - ( 2 * r ) < 0 ) { r = ( h / 2 ); } //ensure that the radius isn't too large for y - this.beginPath(); - this.moveTo(x+r,y); - this.lineTo(x+w-r,y); - this.arc(x+w-r,y+r,r,r2d*270,r2d*360,false); - this.lineTo(x+w,y+h-r); - this.arc(x+w-r,y+h-r,r,0,r2d*90,false); - this.lineTo(x+r,y+h); - this.arc(x+r,y+h-r,r,r2d*90,r2d*180,false); - this.lineTo(x,y+r); - this.arc(x+r,y+r,r,r2d*180,r2d*270,false); - }; - - /** - * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - */ - CanvasRenderingContext2D.prototype.ellipse = function(x, y, w, h) { - var kappa = .5522848, - ox = (w / 2) * kappa, // control point offset horizontal - oy = (h / 2) * kappa, // control point offset vertical - xe = x + w, // x-end - ye = y + h, // y-end - xm = x + w / 2, // x-middle - ym = y + h / 2; // y-middle - - this.beginPath(); - this.moveTo(x, ym); - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - }; - - - - /** - * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - */ - CanvasRenderingContext2D.prototype.database = function(x, y, w, h) { - var f = 1/3; - var wEllipse = w; - var hEllipse = h * f; - - var kappa = .5522848, - ox = (wEllipse / 2) * kappa, // control point offset horizontal - oy = (hEllipse / 2) * kappa, // control point offset vertical - xe = x + wEllipse, // x-end - ye = y + hEllipse, // y-end - xm = x + wEllipse / 2, // x-middle - ym = y + hEllipse / 2, // y-middle - ymb = y + (h - hEllipse/2), // y-midlle, bottom ellipse - yeb = y + h; // y-end, bottom ellipse - - this.beginPath(); - this.moveTo(xe, ym); - - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - - this.lineTo(xe, ymb); - - this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb); - this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb); - - this.lineTo(x, ym); - }; - - - /** - * Draw an arrow point (no line) - */ - CanvasRenderingContext2D.prototype.arrow = function(x, y, angle, length) { - // tail - var xt = x - length * Math.cos(angle); - var yt = y - length * Math.sin(angle); - - // inner tail - // TODO: allow to customize different shapes - var xi = x - length * 0.9 * Math.cos(angle); - var yi = y - length * 0.9 * Math.sin(angle); - - // left - var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI); - var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI); - - // right - var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI); - var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI); - - this.beginPath(); - this.moveTo(x, y); - this.lineTo(xl, yl); - this.lineTo(xi, yi); - this.lineTo(xr, yr); - this.closePath(); - }; - - /** - * Sets up the dashedLine functionality for drawing - * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas - * @author David Jordan - * @date 2012-08-08 - */ - CanvasRenderingContext2D.prototype.dashedLine = function(x,y,x2,y2,dashArray){ - if (!dashArray) dashArray=[10,5]; - if (dashLength==0) dashLength = 0.001; // Hack for Safari - var dashCount = dashArray.length; - this.moveTo(x, y); - var dx = (x2-x), dy = (y2-y); - var slope = dy/dx; - var distRemaining = Math.sqrt( dx*dx + dy*dy ); - var dashIndex=0, draw=true; - while (distRemaining>=0.1){ - var dashLength = dashArray[dashIndex++%dashCount]; - if (dashLength > distRemaining) dashLength = distRemaining; - var xStep = Math.sqrt( dashLength*dashLength / (1 + slope*slope) ); - if (dx<0) xStep = -xStep; - x += xStep; - y += slope*xStep; - this[draw ? 'lineTo' : 'moveTo'](x,y); - distRemaining -= dashLength; - draw = !draw; - } - }; - - // TODO: add diamond shape - } - - -/***/ }, -/* 51 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Created by Alex on 11/11/2014. - */ - var DOMutil = __webpack_require__(2); - var Points = __webpack_require__(53); - - function Line(groupId, options) { - this.groupId = groupId; - this.options = options; - } - - Line.prototype.getYRange = function(groupData) { - var yMin = groupData[0].y; - var yMax = groupData[0].y; - for (var j = 0; j < groupData.length; j++) { - yMin = yMin > groupData[j].y ? groupData[j].y : yMin; - yMax = yMax < groupData[j].y ? groupData[j].y : yMax; - } - return {min: yMin, max: yMax, yAxisOrientation: this.options.yAxisOrientation}; - }; - - - /** - * draw a line graph - * - * @param dataset - * @param group - */ - Line.prototype.draw = function (dataset, group, framework) { - if (dataset != null) { - if (dataset.length > 0) { - var path, d; - var svgHeight = Number(framework.svg.style.height.replace('px','')); - path = DOMutil.getSVGElement('path', framework.svgElements, framework.svg); - path.setAttributeNS(null, "class", group.className); - if(group.style !== undefined) { - path.setAttributeNS(null, "style", group.style); - } - - // construct path from dataset - if (group.options.catmullRom.enabled == true) { - d = Line._catmullRom(dataset, group); - } - else { - d = Line._linear(dataset); - } - - // append with points for fill and finalize the path - if (group.options.shaded.enabled == true) { - var fillPath = DOMutil.getSVGElement('path', framework.svgElements, framework.svg); - var dFill; - if (group.options.shaded.orientation == 'top') { - dFill = 'M' + dataset[0].x + ',' + 0 + ' ' + d + 'L' + dataset[dataset.length - 1].x + ',' + 0; - } - else { - dFill = 'M' + dataset[0].x + ',' + svgHeight + ' ' + d + 'L' + dataset[dataset.length - 1].x + ',' + svgHeight; - } - fillPath.setAttributeNS(null, "class", group.className + " fill"); - if(group.options.shaded.style !== undefined) { - fillPath.setAttributeNS(null, "style", group.options.shaded.style); - } - fillPath.setAttributeNS(null, "d", dFill); - } - // copy properties to path for drawing. - path.setAttributeNS(null, 'd', 'M' + d); - - // draw points - if (group.options.drawPoints.enabled == true) { - Points.draw(dataset, group, framework); - } - } - } - }; - - - - /** - * This uses an uniform parametrization of the CatmullRom algorithm: - * 'On the Parameterization of Catmull-Rom Curves' by Cem Yuksel et al. - * @param data - * @returns {string} - * @private - */ - Line._catmullRomUniform = function(data) { - // catmull rom - var p0, p1, p2, p3, bp1, bp2; - var d = Math.round(data[0].x) + ',' + Math.round(data[0].y) + ' '; - var normalization = 1/6; - var length = data.length; - for (var i = 0; i < length - 1; i++) { - - p0 = (i == 0) ? data[0] : data[i-1]; - p1 = data[i]; - p2 = data[i+1]; - p3 = (i + 2 < length) ? data[i+2] : p2; - - - // Catmull-Rom to Cubic Bezier conversion matrix - // 0 1 0 0 - // -1/6 1 1/6 0 - // 0 1/6 1 -1/6 - // 0 0 1 0 - - // bp0 = { x: p1.x, y: p1.y }; - bp1 = { x: ((-p0.x + 6*p1.x + p2.x) *normalization), y: ((-p0.y + 6*p1.y + p2.y) *normalization)}; - bp2 = { x: (( p1.x + 6*p2.x - p3.x) *normalization), y: (( p1.y + 6*p2.y - p3.y) *normalization)}; - // bp0 = { x: p2.x, y: p2.y }; - - d += 'C' + - bp1.x + ',' + - bp1.y + ' ' + - bp2.x + ',' + - bp2.y + ' ' + - p2.x + ',' + - p2.y + ' '; - } - - return d; - }; - - /** - * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm. - * By default, the centripetal parameterization is used because this gives the nicest results. - * These parameterizations are relatively heavy because the distance between 4 points have to be calculated. - * - * One optimization can be used to reuse distances since this is a sliding window approach. - * @param data - * @param group - * @returns {string} - * @private - */ - Line._catmullRom = function(data, group) { - var alpha = group.options.catmullRom.alpha; - if (alpha == 0 || alpha === undefined) { - return this._catmullRomUniform(data); - } - else { - var p0, p1, p2, p3, bp1, bp2, d1,d2,d3, A, B, N, M; - var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA; - var d = Math.round(data[0].x) + ',' + Math.round(data[0].y) + ' '; - var length = data.length; - for (var i = 0; i < length - 1; i++) { - - p0 = (i == 0) ? data[0] : data[i-1]; - p1 = data[i]; - p2 = data[i+1]; - p3 = (i + 2 < length) ? data[i+2] : p2; - - d1 = Math.sqrt(Math.pow(p0.x - p1.x,2) + Math.pow(p0.y - p1.y,2)); - d2 = Math.sqrt(Math.pow(p1.x - p2.x,2) + Math.pow(p1.y - p2.y,2)); - d3 = Math.sqrt(Math.pow(p2.x - p3.x,2) + Math.pow(p2.y - p3.y,2)); - - // Catmull-Rom to Cubic Bezier conversion matrix - - // A = 2d1^2a + 3d1^a * d2^a + d3^2a - // B = 2d3^2a + 3d3^a * d2^a + d2^2a - - // [ 0 1 0 0 ] - // [ -d2^2a /N A/N d1^2a /N 0 ] - // [ 0 d3^2a /M B/M -d2^2a /M ] - // [ 0 0 1 0 ] - - d3powA = Math.pow(d3, alpha); - d3pow2A = Math.pow(d3,2*alpha); - d2powA = Math.pow(d2, alpha); - d2pow2A = Math.pow(d2,2*alpha); - d1powA = Math.pow(d1, alpha); - d1pow2A = Math.pow(d1,2*alpha); - - A = 2*d1pow2A + 3*d1powA * d2powA + d2pow2A; - B = 2*d3pow2A + 3*d3powA * d2powA + d2pow2A; - N = 3*d1powA * (d1powA + d2powA); - if (N > 0) {N = 1 / N;} - M = 3*d3powA * (d3powA + d2powA); - if (M > 0) {M = 1 / M;} - - bp1 = { x: ((-d2pow2A * p0.x + A*p1.x + d1pow2A * p2.x) * N), - y: ((-d2pow2A * p0.y + A*p1.y + d1pow2A * p2.y) * N)}; - - bp2 = { x: (( d3pow2A * p1.x + B*p2.x - d2pow2A * p3.x) * M), - y: (( d3pow2A * p1.y + B*p2.y - d2pow2A * p3.y) * M)}; - - if (bp1.x == 0 && bp1.y == 0) {bp1 = p1;} - if (bp2.x == 0 && bp2.y == 0) {bp2 = p2;} - d += 'C' + - bp1.x + ',' + - bp1.y + ' ' + - bp2.x + ',' + - bp2.y + ' ' + - p2.x + ',' + - p2.y + ' '; - } - - return d; - } - }; - - /** - * this generates the SVG path for a linear drawing between datapoints. - * @param data - * @returns {string} - * @private - */ - Line._linear = function(data) { - // linear - var d = ''; - for (var i = 0; i < data.length; i++) { - if (i == 0) { - d += data[i].x + ',' + data[i].y; - } - else { - d += ' ' + data[i].x + ',' + data[i].y; - } - } - return d; - }; - - module.exports = Line; - - -/***/ }, -/* 52 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Created by Alex on 11/11/2014. - */ - var DOMutil = __webpack_require__(2); - var Points = __webpack_require__(53); - - function Bargraph(groupId, options) { - this.groupId = groupId; - this.options = options; - } - - Bargraph.prototype.getYRange = function(groupData) { - if (this.options.barChart.handleOverlap != 'stack') { - var yMin = groupData[0].y; - var yMax = groupData[0].y; - for (var j = 0; j < groupData.length; j++) { - yMin = yMin > groupData[j].y ? groupData[j].y : yMin; - yMax = yMax < groupData[j].y ? groupData[j].y : yMax; - } - return {min: yMin, max: yMax, yAxisOrientation: this.options.yAxisOrientation}; - } - else { - var barCombinedData = []; - for (var j = 0; j < groupData.length; j++) { - barCombinedData.push({ - x: groupData[j].x, - y: groupData[j].y, - groupId: this.groupId - }); - } - return barCombinedData; - } - }; - - - - /** - * draw a bar graph - * - * @param groupIds - * @param processedGroupData - */ - Bargraph.draw = function (groupIds, processedGroupData, framework) { - var combinedData = []; - var intersections = {}; - var coreDistance; - var key, drawData; - var group; - var i,j; - var barPoints = 0; - - // combine all barchart data - for (i = 0; i < groupIds.length; i++) { - group = framework.groups[groupIds[i]]; - if (group.options.style == 'bar') { - if (group.visible == true && (framework.options.groups.visibility[groupIds[i]] === undefined || framework.options.groups.visibility[groupIds[i]] == true)) { - for (j = 0; j < processedGroupData[groupIds[i]].length; j++) { - combinedData.push({ - x: processedGroupData[groupIds[i]][j].x, - y: processedGroupData[groupIds[i]][j].y, - groupId: groupIds[i] - }); - barPoints += 1; - } - } - } - } - - if (barPoints == 0) {return;} - - // sort by time and by group - combinedData.sort(function (a, b) { - if (a.x == b.x) { - return a.groupId - b.groupId; - } else { - return a.x - b.x; - } - }); - - // get intersections - Bargraph._getDataIntersections(intersections, combinedData); - - // plot barchart - for (i = 0; i < combinedData.length; i++) { - group = framework.groups[combinedData[i].groupId]; - var minWidth = 0.1 * group.options.barChart.width; - - key = combinedData[i].x; - var heightOffset = 0; - if (intersections[key] === undefined) { - if (i+1 < combinedData.length) {coreDistance = Math.abs(combinedData[i+1].x - key);} - if (i > 0) {coreDistance = Math.min(coreDistance,Math.abs(combinedData[i-1].x - key));} - drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth); - } - else { - var nextKey = i + (intersections[key].amount - intersections[key].resolved); - var prevKey = i - (intersections[key].resolved + 1); - if (nextKey < combinedData.length) {coreDistance = Math.abs(combinedData[nextKey].x - key);} - if (prevKey > 0) {coreDistance = Math.min(coreDistance,Math.abs(combinedData[prevKey].x - key));} - drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth); - intersections[key].resolved += 1; - - if (group.options.barChart.handleOverlap == 'stack') { - heightOffset = intersections[key].accumulated; - intersections[key].accumulated += group.zeroPosition - combinedData[i].y; - } - else if (group.options.barChart.handleOverlap == 'sideBySide') { - drawData.width = drawData.width / intersections[key].amount; - drawData.offset += (intersections[key].resolved) * drawData.width - (0.5*drawData.width * (intersections[key].amount+1)); - if (group.options.barChart.align == 'left') {drawData.offset -= 0.5*drawData.width;} - else if (group.options.barChart.align == 'right') {drawData.offset += 0.5*drawData.width;} - } - } - DOMutil.drawBar(combinedData[i].x + drawData.offset, combinedData[i].y - heightOffset, drawData.width, group.zeroPosition - combinedData[i].y, group.className + ' bar', framework.svgElements, framework.svg); - // draw points - if (group.options.drawPoints.enabled == true) { - DOMutil.drawPoint(combinedData[i].x + drawData.offset, combinedData[i].y, group, framework.svgElements, framework.svg); - } - } - }; - - - /** - * Fill the intersections object with counters of how many datapoints share the same x coordinates - * @param intersections - * @param combinedData - * @private - */ - Bargraph._getDataIntersections = function (intersections, combinedData) { - // get intersections - var coreDistance; - for (var i = 0; i < combinedData.length; i++) { - if (i + 1 < combinedData.length) { - coreDistance = Math.abs(combinedData[i + 1].x - combinedData[i].x); - } - if (i > 0) { - coreDistance = Math.min(coreDistance, Math.abs(combinedData[i - 1].x - combinedData[i].x)); - } - if (coreDistance == 0) { - if (intersections[combinedData[i].x] === undefined) { - intersections[combinedData[i].x] = {amount: 0, resolved: 0, accumulated: 0}; - } - intersections[combinedData[i].x].amount += 1; - } - } - }; - - - /** - * Get the width and offset for bargraphs based on the coredistance between datapoints - * - * @param coreDistance - * @param group - * @param minWidth - * @returns {{width: Number, offset: Number}} - * @private - */ - Bargraph._getSafeDrawData = function (coreDistance, group, minWidth) { - var width, offset; - if (coreDistance < group.options.barChart.width && coreDistance > 0) { - width = coreDistance < minWidth ? minWidth : coreDistance; - - offset = 0; // recalculate offset with the new width; - if (group.options.barChart.align == 'left') { - offset -= 0.5 * coreDistance; - } - else if (group.options.barChart.align == 'right') { - offset += 0.5 * coreDistance; - } - } - else { - // default settings - width = group.options.barChart.width; - offset = 0; - if (group.options.barChart.align == 'left') { - offset -= 0.5 * group.options.barChart.width; - } - else if (group.options.barChart.align == 'right') { - offset += 0.5 * group.options.barChart.width; - } - } - - return {width: width, offset: offset}; - }; - - Bargraph.getStackedBarYRange = function(barCombinedData, groupRanges, groupIds, groupLabel, orientation) { - if (barCombinedData.length > 0) { - // sort by time and by group - barCombinedData.sort(function (a, b) { - if (a.x == b.x) { - return a.groupId - b.groupId; - } else { - return a.x - b.x; - } - }); - var intersections = {}; - - Bargraph._getDataIntersections(intersections, barCombinedData); - groupRanges[groupLabel] = Bargraph._getStackedBarYRange(intersections, barCombinedData); - groupRanges[groupLabel].yAxisOrientation = orientation; - groupIds.push(groupLabel); - } - } - - Bargraph._getStackedBarYRange = function (intersections, combinedData) { - var key; - var yMin = combinedData[0].y; - var yMax = combinedData[0].y; - for (var i = 0; i < combinedData.length; i++) { - key = combinedData[i].x; - if (intersections[key] === undefined) { - yMin = yMin > combinedData[i].y ? combinedData[i].y : yMin; - yMax = yMax < combinedData[i].y ? combinedData[i].y : yMax; - } - else { - intersections[key].accumulated += combinedData[i].y; - } - } - for (var xpos in intersections) { - if (intersections.hasOwnProperty(xpos)) { - yMin = yMin > intersections[xpos].accumulated ? intersections[xpos].accumulated : yMin; - yMax = yMax < intersections[xpos].accumulated ? intersections[xpos].accumulated : yMax; - } - } - - return {min: yMin, max: yMax}; - }; - - module.exports = Bargraph; - -/***/ }, -/* 53 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Created by Alex on 11/11/2014. - */ - var DOMutil = __webpack_require__(2); - - function Points(groupId, options) { - this.groupId = groupId; - this.options = options; - } - - - Points.prototype.getYRange = function(groupData) { - var yMin = groupData[0].y; - var yMax = groupData[0].y; - for (var j = 0; j < groupData.length; j++) { - yMin = yMin > groupData[j].y ? groupData[j].y : yMin; - yMax = yMax < groupData[j].y ? groupData[j].y : yMax; - } - return {min: yMin, max: yMax, yAxisOrientation: this.options.yAxisOrientation}; - }; - - Points.prototype.draw = function(dataset, group, framework, offset) { - Points.draw(dataset, group, framework, offset); - } - - /** - * draw the data points - * - * @param {Array} dataset - * @param {Object} JSONcontainer - * @param {Object} svg | SVG DOM element - * @param {GraphGroup} group - * @param {Number} [offset] - */ - Points.draw = function (dataset, group, framework, offset) { - if (offset === undefined) {offset = 0;} - for (var i = 0; i < dataset.length; i++) { - DOMutil.drawPoint(dataset[i].x + offset, dataset[i].y, group, framework.svgElements, framework.svg); - } - }; - - - module.exports = Points; - -/***/ }, -/* 54 */ -/***/ function(module, exports, __webpack_require__) { - - var PhysicsMixin = __webpack_require__(66); - var ClusterMixin = __webpack_require__(60); - var SectorsMixin = __webpack_require__(61); - var SelectionMixin = __webpack_require__(62); - var ManipulationMixin = __webpack_require__(63); - var NavigationMixin = __webpack_require__(64); - var HierarchicalLayoutMixin = __webpack_require__(65); - - /** - * Load a mixin into the network object - * - * @param {Object} sourceVariable | this object has to contain functions. - * @private - */ - exports._loadMixin = function (sourceVariable) { - for (var mixinFunction in sourceVariable) { - if (sourceVariable.hasOwnProperty(mixinFunction)) { - this[mixinFunction] = sourceVariable[mixinFunction]; - } - } - }; - - - /** - * removes a mixin from the network object. - * - * @param {Object} sourceVariable | this object has to contain functions. - * @private - */ - exports._clearMixin = function (sourceVariable) { - for (var mixinFunction in sourceVariable) { - if (sourceVariable.hasOwnProperty(mixinFunction)) { - this[mixinFunction] = undefined; - } - } - }; - - - /** - * Mixin the physics system and initialize the parameters required. - * - * @private - */ - exports._loadPhysicsSystem = function () { - this._loadMixin(PhysicsMixin); - this._loadSelectedForceSolver(); - if (this.constants.configurePhysics == true) { - this._loadPhysicsConfiguration(); - } - }; - - - /** - * Mixin the cluster system and initialize the parameters required. - * - * @private - */ - exports._loadClusterSystem = function () { - this.clusterSession = 0; - this.hubThreshold = 5; - this._loadMixin(ClusterMixin); - }; - - - /** - * Mixin the sector system and initialize the parameters required - * - * @private - */ - exports._loadSectorSystem = function () { - this.sectors = {}; - this.activeSector = ["default"]; - this.sectors["active"] = {}; - this.sectors["active"]["default"] = {"nodes": {}, - "edges": {}, - "nodeIndices": [], - "formationScale": 1.0, - "drawingNode": undefined }; - this.sectors["frozen"] = {}; - this.sectors["support"] = {"nodes": {}, - "edges": {}, - "nodeIndices": [], - "formationScale": 1.0, - "drawingNode": undefined }; - - this.nodeIndices = this.sectors["active"]["default"]["nodeIndices"]; // the node indices list is used to speed up the computation of the repulsion fields - - this._loadMixin(SectorsMixin); - }; - - - /** - * Mixin the selection system and initialize the parameters required - * - * @private - */ - exports._loadSelectionSystem = function () { - this.selectionObj = {nodes: {}, edges: {}}; - - this._loadMixin(SelectionMixin); - }; - - - /** - * Mixin the navigationUI (User Interface) system and initialize the parameters required - * - * @private - */ - exports._loadManipulationSystem = function () { - // reset global variables -- these are used by the selection of nodes and edges. - this.blockConnectingEdgeSelection = false; - this.forceAppendSelection = false; - - if (this.constants.dataManipulation.enabled == true) { - // load the manipulator HTML elements. All styling done in css. - if (this.manipulationDiv === undefined) { - this.manipulationDiv = document.createElement('div'); - this.manipulationDiv.className = 'network-manipulationDiv'; - if (this.editMode == true) { - this.manipulationDiv.style.display = "block"; - } - else { - this.manipulationDiv.style.display = "none"; - } - this.frame.appendChild(this.manipulationDiv); - } - - if (this.editModeDiv === undefined) { - this.editModeDiv = document.createElement('div'); - this.editModeDiv.className = 'network-manipulation-editMode'; - if (this.editMode == true) { - this.editModeDiv.style.display = "none"; - } - else { - this.editModeDiv.style.display = "block"; - } - this.frame.appendChild(this.editModeDiv); - } - - if (this.closeDiv === undefined) { - this.closeDiv = document.createElement('div'); - this.closeDiv.className = 'network-manipulation-closeDiv'; - this.closeDiv.style.display = this.manipulationDiv.style.display; - this.frame.appendChild(this.closeDiv); - } - - // load the manipulation functions - this._loadMixin(ManipulationMixin); - - // create the manipulator toolbar - this._createManipulatorBar(); - } - else { - if (this.manipulationDiv !== undefined) { - // removes all the bindings and overloads - this._createManipulatorBar(); - - // remove the manipulation divs - this.frame.removeChild(this.manipulationDiv); - this.frame.removeChild(this.editModeDiv); - this.frame.removeChild(this.closeDiv); - - this.manipulationDiv = undefined; - this.editModeDiv = undefined; - this.closeDiv = undefined; - // remove the mixin functions - this._clearMixin(ManipulationMixin); - } - } - }; - - - /** - * Mixin the navigation (User Interface) system and initialize the parameters required - * - * @private - */ - exports._loadNavigationControls = function () { - this._loadMixin(NavigationMixin); - // the clean function removes the button divs, this is done to remove the bindings. - this._cleanNavigation(); - if (this.constants.navigation.enabled == true) { - this._loadNavigationElements(); - } - }; - - - /** - * Mixin the hierarchical layout system. - * - * @private - */ - exports._loadHierarchySystem = function () { - this._loadMixin(HierarchicalLayoutMixin); - }; - - -/***/ }, -/* 55 */ -/***/ function(module, exports, __webpack_require__) { - - var keycharm = __webpack_require__(57); - var Emitter = __webpack_require__(56); - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); - - /** - * Turn an element into an clickToUse element. - * When not active, the element has a transparent overlay. When the overlay is - * clicked, the mode is changed to active. - * When active, the element is displayed with a blue border around it, and - * the interactive contents of the element can be used. When clicked outside - * the element, the elements mode is changed to inactive. - * @param {Element} container - * @constructor - */ - function Activator(container) { - this.active = false; - - this.dom = { - container: container - }; - - this.dom.overlay = document.createElement('div'); - this.dom.overlay.className = 'overlay'; - - this.dom.container.appendChild(this.dom.overlay); - - this.hammer = Hammer(this.dom.overlay, {prevent_default: false}); - this.hammer.on('tap', this._onTapOverlay.bind(this)); - - // block all touch events (except tap) - var me = this; - var events = [ - 'touch', 'pinch', - 'doubletap', 'hold', - 'dragstart', 'drag', 'dragend', - 'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox - ]; - events.forEach(function (event) { - me.hammer.on(event, function (event) { - event.stopPropagation(); - }); - }); - - // attach a tap event to the window, in order to deactivate when clicking outside the timeline - this.windowHammer = Hammer(window, {prevent_default: false}); - this.windowHammer.on('tap', function (event) { - // deactivate when clicked outside the container - if (!_hasParent(event.target, container)) { - me.deactivate(); - } - }); - - if (this.keycharm !== undefined) { - this.keycharm.destroy(); - } - this.keycharm = keycharm(); - - // keycharm listener only bounded when active) - this.escListener = this.deactivate.bind(this); - } - - // turn into an event emitter - Emitter(Activator.prototype); - - // The currently active activator - Activator.current = null; - - /** - * Destroy the activator. Cleans up all created DOM and event listeners - */ - Activator.prototype.destroy = function () { - this.deactivate(); - - // remove dom - this.dom.overlay.parentNode.removeChild(this.dom.overlay); - - // cleanup hammer instances - this.hammer = null; - this.windowHammer = null; - // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory) - }; - - /** - * Activate the element - * Overlay is hidden, element is decorated with a blue shadow border - */ - Activator.prototype.activate = function () { - // we allow only one active activator at a time - if (Activator.current) { - Activator.current.deactivate(); - } - Activator.current = this; - - this.active = true; - this.dom.overlay.style.display = 'none'; - util.addClassName(this.dom.container, 'vis-active'); - - this.emit('change'); - this.emit('activate'); - - // ugly hack: bind ESC after emitting the events, as the Network rebinds all - // keyboard events on a 'change' event - this.keycharm.bind('esc', this.escListener); - }; - - /** - * Deactivate the element - * Overlay is displayed on top of the element - */ - Activator.prototype.deactivate = function () { - this.active = false; - this.dom.overlay.style.display = ''; - util.removeClassName(this.dom.container, 'vis-active'); - this.keycharm.unbind('esc', this.escListener); - - this.emit('change'); - this.emit('deactivate'); - }; - - /** - * Handle a tap event: activate the container - * @param event - * @private - */ - Activator.prototype._onTapOverlay = function (event) { - // activate the container - this.activate(); - event.stopPropagation(); - }; - - /** - * Test whether the element has the requested parent element somewhere in - * its chain of parent nodes. - * @param {HTMLElement} element - * @param {HTMLElement} parent - * @returns {boolean} Returns true when the parent is found somewhere in the - * chain of parent nodes. - * @private - */ - function _hasParent(element, parent) { - while (element) { - if (element === parent) { - return true - } - element = element.parentNode; - } - return false; - } - - module.exports = Activator; - - -/***/ }, -/* 56 */ -/***/ function(module, exports, __webpack_require__) { - - - /** - * Expose `Emitter`. - */ - - module.exports = Emitter; - - /** - * Initialize a new `Emitter`. - * - * @api public - */ - - function Emitter(obj) { - if (obj) return mixin(obj); - }; - - /** - * Mixin the emitter properties. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - - function mixin(obj) { - for (var key in Emitter.prototype) { - obj[key] = Emitter.prototype[key]; - } - return obj; - } - - /** - * Listen on the given `event` with `fn`. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public - */ - - Emitter.prototype.on = - Emitter.prototype.addEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; - (this._callbacks[event] = this._callbacks[event] || []) - .push(fn); - return this; - }; - - /** - * Adds an `event` listener that will be invoked a single - * time then automatically removed. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public - */ - - Emitter.prototype.once = function(event, fn){ - var self = this; - this._callbacks = this._callbacks || {}; - - function on() { - self.off(event, on); - fn.apply(this, arguments); - } - - on.fn = fn; - this.on(event, on); - return this; - }; - - /** - * Remove the given callback for `event` or all - * registered callbacks. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public - */ - - Emitter.prototype.off = - Emitter.prototype.removeListener = - Emitter.prototype.removeAllListeners = - Emitter.prototype.removeEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; - - // all - if (0 == arguments.length) { - this._callbacks = {}; - return this; - } - - // specific event - var callbacks = this._callbacks[event]; - if (!callbacks) return this; - - // remove all handlers - if (1 == arguments.length) { - delete this._callbacks[event]; - return this; - } - - // remove specific handler - var cb; - for (var i = 0; i < callbacks.length; i++) { - cb = callbacks[i]; - if (cb === fn || cb.fn === fn) { - callbacks.splice(i, 1); - break; - } - } - return this; - }; - - /** - * Emit `event` with the given args. - * - * @param {String} event - * @param {Mixed} ... - * @return {Emitter} - */ - - Emitter.prototype.emit = function(event){ - this._callbacks = this._callbacks || {}; - var args = [].slice.call(arguments, 1) - , callbacks = this._callbacks[event]; - - if (callbacks) { - callbacks = callbacks.slice(0); - for (var i = 0, len = callbacks.length; i < len; ++i) { - callbacks[i].apply(this, args); - } - } - - return this; - }; - - /** - * Return array of callbacks for `event`. - * - * @param {String} event - * @return {Array} - * @api public - */ - - Emitter.prototype.listeners = function(event){ - this._callbacks = this._callbacks || {}; - return this._callbacks[event] || []; - }; - - /** - * Check if this emitter has `event` handlers. - * - * @param {String} event - * @return {Boolean} - * @api public - */ - - Emitter.prototype.hasListeners = function(event){ - return !! this.listeners(event).length; - }; - - -/***/ }, -/* 57 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict"; - /** - * Created by Alex on 11/6/2014. - */ - - // https://github.com/umdjs/umd/blob/master/returnExports.js#L40-L60 - // if the module has no dependencies, the above pattern can be simplified to - (function (root, factory) { - if (true) { - // AMD. Register as an anonymous module. - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals (root is window) - root.keycharm = factory(); - } - }(this, function () { - - function keycharm(options) { - var preventDefault = options && options.preventDefault || false; - - var _exportFunctions = {}; - var _bound = {keydown:{}, keyup:{}}; - var _keys = {}; - var i; - - // a - z - for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};} - // A - Z - for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};} - // 0 - 9 - for (i = 0; i <= 9; i++) {_keys['' + i] = {code:48 + i, shift: false};} - // F1 - F12 - for (i = 1; i <= 12; i++) {_keys['F' + i] = {code:111 + i, shift: false};} - // num0 - num9 - for (i = 0; i <= 9; i++) {_keys['num' + i] = {code:96 + i, shift: false};} - - // numpad misc - _keys['num*'] = {code:106, shift: false}; - _keys['num+'] = {code:107, shift: false}; - _keys['num-'] = {code:109, shift: false}; - _keys['num/'] = {code:111, shift: false}; - _keys['num.'] = {code:110, shift: false}; - // arrows - _keys['left'] = {code:37, shift: false}; - _keys['up'] = {code:38, shift: false}; - _keys['right'] = {code:39, shift: false}; - _keys['down'] = {code:40, shift: false}; - // extra keys - _keys['space'] = {code:32, shift: false}; - _keys['enter'] = {code:13, shift: false}; - _keys['shift'] = {code:16, shift: undefined}; - _keys['esc'] = {code:27, shift: false}; - _keys['backspace'] = {code:8, shift: false}; - _keys['tab'] = {code:9, shift: false}; - _keys['ctrl'] = {code:17, shift: false}; - _keys['alt'] = {code:18, shift: false}; - _keys['delete'] = {code:46, shift: false}; - _keys['pageup'] = {code:33, shift: false}; - _keys['pagedown'] = {code:34, shift: false}; - // symbols - _keys['='] = {code:187, shift: false}; - _keys['-'] = {code:189, shift: false}; - _keys[']'] = {code:221, shift: false}; - _keys['['] = {code:219, shift: false}; - - - - var down = function(event) {handleEvent(event,'keydown');}; - var up = function(event) {handleEvent(event,'keyup');}; - - // handle the actualy bound key with the event - var handleEvent = function(event,type) { - if (_bound[type][event.keyCode] !== undefined) { - var bound = _bound[type][event.keyCode]; - for (var i = 0; i < bound.length; i++) { - if (bound[i].shift === undefined) { - bound[i].fn(event); - } - else if (bound[i].shift == true && event.shiftKey == true) { - bound[i].fn(event); - } - else if (bound[i].shift == false && event.shiftKey == false) { - bound[i].fn(event); - } - } - - if (preventDefault == true) { - event.preventDefault(); - } - } - }; - - // bind a key to a callback - _exportFunctions.bind = function(key, callback, type) { - if (type === undefined) { - type = 'keydown'; - } - if (_keys[key] === undefined) { - throw new Error("unsupported key: " + key); - } - if (_bound[type][_keys[key].code] === undefined) { - _bound[type][_keys[key].code] = []; - } - _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift}); - }; - - - // bind all keys to a call back (demo purposes) - _exportFunctions.bindAll = function(callback, type) { - if (type === undefined) { - type = 'keydown'; - } - for (var key in _keys) { - if (_keys.hasOwnProperty(key)) { - _exportFunctions.bind(key,callback,type); - } - } - }; - - // get the key label from an event - _exportFunctions.getKey = function(event) { - for (var key in _keys) { - if (_keys.hasOwnProperty(key)) { - if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) { - return key; - } - else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) { - return key; - } - else if (event.keyCode == _keys[key].code && key == 'shift') { - return key; - } - } - } - return "unknown key, currently not supported"; - }; - - // unbind either a specific callback from a key or all of them (by leaving callback undefined) - _exportFunctions.unbind = function(key, callback, type) { - if (type === undefined) { - type = 'keydown'; - } - if (_keys[key] === undefined) { - throw new Error("unsupported key: " + key); - } - if (callback !== undefined) { - var newBindings = []; - var bound = _bound[type][_keys[key].code]; - if (bound !== undefined) { - for (var i = 0; i < bound.length; i++) { - if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) { - newBindings.push(_bound[type][_keys[key].code][i]); - } - } - } - _bound[type][_keys[key].code] = newBindings; - } - else { - _bound[type][_keys[key].code] = []; - } - }; - - // reset all bound variables. - _exportFunctions.reset = function() { - _bound = {keydown:{}, keyup:{}}; - }; - - // unbind all listeners and reset all variables. - _exportFunctions.destroy = function() { - _bound = {keydown:{}, keyup:{}}; - window.removeEventListener('keydown', down, true); - window.removeEventListener('keyup', up, true); - }; - - // create listeners. - window.addEventListener('keydown',down,true); - window.addEventListener('keyup',up,true); - - // return the public functions. - return _exportFunctions; - } - - return keycharm; - })); - - - - -/***/ }, -/* 58 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {//! moment.js - //! version : 2.8.4 - //! authors : Tim Wood, Iskren Chernev, Moment.js contributors - //! license : MIT - //! momentjs.com - - (function (undefined) { - /************************************ - Constants - ************************************/ - - var moment, - VERSION = '2.8.4', - // the global-scope this is NOT the global object in Node.js - globalScope = typeof global !== 'undefined' ? global : this, - oldGlobalMoment, - round = Math.round, - hasOwnProperty = Object.prototype.hasOwnProperty, - i, - - YEAR = 0, - MONTH = 1, - DATE = 2, - HOUR = 3, - MINUTE = 4, - SECOND = 5, - MILLISECOND = 6, - - // internal storage for locale config files - locales = {}, - - // extra moment internal properties (plugins register props here) - momentProperties = [], - - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module && module.exports), - - // ASP.NET json date format regex - aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, - aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, - - // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html - // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere - isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, - - // format tokens - formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g, - localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, - - // parsing token regexes - parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 - parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 - parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999 - parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 - parseTokenDigits = /\d+/, // nonzero number of digits - parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. - parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z - parseTokenT = /T/i, // T (ISO separator) - parseTokenOffsetMs = /[\+\-]?\d+/, // 1234567890123 - parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 - - //strict parsing regexes - parseTokenOneDigit = /\d/, // 0 - 9 - parseTokenTwoDigits = /\d\d/, // 00 - 99 - parseTokenThreeDigits = /\d{3}/, // 000 - 999 - parseTokenFourDigits = /\d{4}/, // 0000 - 9999 - parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999 - parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf - - // iso 8601 regex - // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) - isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, - - isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', - - isoDates = [ - ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], - ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], - ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], - ['GGGG-[W]WW', /\d{4}-W\d{2}/], - ['YYYY-DDD', /\d{4}-\d{3}/] - ], - - // iso time formats and regexes - isoTimes = [ - ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], - ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], - ['HH:mm', /(T| )\d\d:\d\d/], - ['HH', /(T| )\d\d/] - ], - - // timezone chunker '+10:00' > ['10', '00'] or '-1530' > ['-15', '30'] - parseTimezoneChunker = /([\+\-]|\d\d)/gi, - - // getter and setter names - proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), - unitMillisecondFactors = { - 'Milliseconds' : 1, - 'Seconds' : 1e3, - 'Minutes' : 6e4, - 'Hours' : 36e5, - 'Days' : 864e5, - 'Months' : 2592e6, - 'Years' : 31536e6 - }, - - unitAliases = { - ms : 'millisecond', - s : 'second', - m : 'minute', - h : 'hour', - d : 'day', - D : 'date', - w : 'week', - W : 'isoWeek', - M : 'month', - Q : 'quarter', - y : 'year', - DDD : 'dayOfYear', - e : 'weekday', - E : 'isoWeekday', - gg: 'weekYear', - GG: 'isoWeekYear' - }, - - camelFunctions = { - dayofyear : 'dayOfYear', - isoweekday : 'isoWeekday', - isoweek : 'isoWeek', - weekyear : 'weekYear', - isoweekyear : 'isoWeekYear' - }, - - // format function strings - formatFunctions = {}, - - // default relative time thresholds - relativeTimeThresholds = { - s: 45, // seconds to minute - m: 45, // minutes to hour - h: 22, // hours to day - d: 26, // days to month - M: 11 // months to year - }, - - // tokens to ordinalize and pad - ordinalizeTokens = 'DDD w W M D d'.split(' '), - paddedTokens = 'M D H h m s w W'.split(' '), - - formatTokenFunctions = { - M : function () { - return this.month() + 1; - }, - MMM : function (format) { - return this.localeData().monthsShort(this, format); - }, - MMMM : function (format) { - return this.localeData().months(this, format); - }, - D : function () { - return this.date(); - }, - DDD : function () { - return this.dayOfYear(); - }, - d : function () { - return this.day(); - }, - dd : function (format) { - return this.localeData().weekdaysMin(this, format); - }, - ddd : function (format) { - return this.localeData().weekdaysShort(this, format); - }, - dddd : function (format) { - return this.localeData().weekdays(this, format); - }, - w : function () { - return this.week(); - }, - W : function () { - return this.isoWeek(); - }, - YY : function () { - return leftZeroFill(this.year() % 100, 2); - }, - YYYY : function () { - return leftZeroFill(this.year(), 4); - }, - YYYYY : function () { - return leftZeroFill(this.year(), 5); - }, - YYYYYY : function () { - var y = this.year(), sign = y >= 0 ? '+' : '-'; - return sign + leftZeroFill(Math.abs(y), 6); - }, - gg : function () { - return leftZeroFill(this.weekYear() % 100, 2); - }, - gggg : function () { - return leftZeroFill(this.weekYear(), 4); - }, - ggggg : function () { - return leftZeroFill(this.weekYear(), 5); - }, - GG : function () { - return leftZeroFill(this.isoWeekYear() % 100, 2); - }, - GGGG : function () { - return leftZeroFill(this.isoWeekYear(), 4); - }, - GGGGG : function () { - return leftZeroFill(this.isoWeekYear(), 5); - }, - e : function () { - return this.weekday(); - }, - E : function () { - return this.isoWeekday(); - }, - a : function () { - return this.localeData().meridiem(this.hours(), this.minutes(), true); - }, - A : function () { - return this.localeData().meridiem(this.hours(), this.minutes(), false); - }, - H : function () { - return this.hours(); - }, - h : function () { - return this.hours() % 12 || 12; - }, - m : function () { - return this.minutes(); - }, - s : function () { - return this.seconds(); - }, - S : function () { - return toInt(this.milliseconds() / 100); - }, - SS : function () { - return leftZeroFill(toInt(this.milliseconds() / 10), 2); - }, - SSS : function () { - return leftZeroFill(this.milliseconds(), 3); - }, - SSSS : function () { - return leftZeroFill(this.milliseconds(), 3); - }, - Z : function () { - var a = -this.zone(), - b = '+'; - if (a < 0) { - a = -a; - b = '-'; - } - return b + leftZeroFill(toInt(a / 60), 2) + ':' + leftZeroFill(toInt(a) % 60, 2); - }, - ZZ : function () { - var a = -this.zone(), - b = '+'; - if (a < 0) { - a = -a; - b = '-'; - } - return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2); - }, - z : function () { - return this.zoneAbbr(); - }, - zz : function () { - return this.zoneName(); - }, - x : function () { - return this.valueOf(); - }, - X : function () { - return this.unix(); - }, - Q : function () { - return this.quarter(); - } - }, - - deprecations = {}, - - lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; - - // Pick the first defined of two or three arguments. dfl comes from - // default. - function dfl(a, b, c) { - switch (arguments.length) { - case 2: return a != null ? a : b; - case 3: return a != null ? a : b != null ? b : c; - default: throw new Error('Implement me'); - } - } - - function hasOwnProp(a, b) { - return hasOwnProperty.call(a, b); - } - - function defaultParsingFlags() { - // We need to deep clone this object, and es5 standard is not very - // helpful. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso: false - }; - } - - function printMsg(msg) { - if (moment.suppressDeprecationWarnings === false && - typeof console !== 'undefined' && console.warn) { - console.warn('Deprecation warning: ' + msg); - } - } - - function deprecate(msg, fn) { - var firstTime = true; - return extend(function () { - if (firstTime) { - printMsg(msg); - firstTime = false; - } - return fn.apply(this, arguments); - }, fn); - } - - function deprecateSimple(name, msg) { - if (!deprecations[name]) { - printMsg(msg); - deprecations[name] = true; - } - } - - function padToken(func, count) { - return function (a) { - return leftZeroFill(func.call(this, a), count); - }; - } - function ordinalizeToken(func, period) { - return function (a) { - return this.localeData().ordinal(func.call(this, a), period); - }; - } - - while (ordinalizeTokens.length) { - i = ordinalizeTokens.pop(); - formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); - } - while (paddedTokens.length) { - i = paddedTokens.pop(); - formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); - } - formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); - - - /************************************ - Constructors - ************************************/ - - function Locale() { - } - - // Moment prototype object - function Moment(config, skipOverflow) { - if (skipOverflow !== false) { - checkOverflow(config); - } - copyConfig(this, config); - this._d = new Date(+config._d); - } - - // Duration Constructor - function Duration(duration) { - var normalizedInput = normalizeObjectUnits(duration), - years = normalizedInput.year || 0, - quarters = normalizedInput.quarter || 0, - months = normalizedInput.month || 0, - weeks = normalizedInput.week || 0, - days = normalizedInput.day || 0, - hours = normalizedInput.hour || 0, - minutes = normalizedInput.minute || 0, - seconds = normalizedInput.second || 0, - milliseconds = normalizedInput.millisecond || 0; - - // representation for dateAddRemove - this._milliseconds = +milliseconds + - seconds * 1e3 + // 1000 - minutes * 6e4 + // 1000 * 60 - hours * 36e5; // 1000 * 60 * 60 - // Because of dateAddRemove treats 24 hours as different from a - // day when working around DST, we need to store them separately - this._days = +days + - weeks * 7; - // It is impossible translate months into days without knowing - // which months you are are talking about, so we have to store - // it separately. - this._months = +months + - quarters * 3 + - years * 12; - - this._data = {}; - - this._locale = moment.localeData(); - - this._bubble(); - } - - /************************************ - Helpers - ************************************/ - - - function extend(a, b) { - for (var i in b) { - if (hasOwnProp(b, i)) { - a[i] = b[i]; - } - } - - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } - - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; - } - - return a; - } - - function copyConfig(to, from) { - var i, prop, val; - - if (typeof from._isAMomentObject !== 'undefined') { - to._isAMomentObject = from._isAMomentObject; - } - if (typeof from._i !== 'undefined') { - to._i = from._i; - } - if (typeof from._f !== 'undefined') { - to._f = from._f; - } - if (typeof from._l !== 'undefined') { - to._l = from._l; - } - if (typeof from._strict !== 'undefined') { - to._strict = from._strict; - } - if (typeof from._tzm !== 'undefined') { - to._tzm = from._tzm; - } - if (typeof from._isUTC !== 'undefined') { - to._isUTC = from._isUTC; - } - if (typeof from._offset !== 'undefined') { - to._offset = from._offset; - } - if (typeof from._pf !== 'undefined') { - to._pf = from._pf; - } - if (typeof from._locale !== 'undefined') { - to._locale = from._locale; - } - - if (momentProperties.length > 0) { - for (i in momentProperties) { - prop = momentProperties[i]; - val = from[prop]; - if (typeof val !== 'undefined') { - to[prop] = val; - } - } - } - - return to; - } - - function absRound(number) { - if (number < 0) { - return Math.ceil(number); - } else { - return Math.floor(number); - } - } - - // left zero fill a number - // see http://jsperf.com/left-zero-filling for performance comparison - function leftZeroFill(number, targetLength, forceSign) { - var output = '' + Math.abs(number), - sign = number >= 0; - - while (output.length < targetLength) { - output = '0' + output; - } - return (sign ? (forceSign ? '+' : '') : '-') + output; - } - - function positiveMomentsDifference(base, other) { - var res = {milliseconds: 0, months: 0}; - - res.months = other.month() - base.month() + - (other.year() - base.year()) * 12; - if (base.clone().add(res.months, 'M').isAfter(other)) { - --res.months; - } - - res.milliseconds = +other - +(base.clone().add(res.months, 'M')); - - return res; - } - - function momentsDifference(base, other) { - var res; - other = makeAs(other, base); - if (base.isBefore(other)) { - res = positiveMomentsDifference(base, other); - } else { - res = positiveMomentsDifference(other, base); - res.milliseconds = -res.milliseconds; - res.months = -res.months; - } - - return res; - } - - // TODO: remove 'name' arg after deprecation is removed - function createAdder(direction, name) { - return function (val, period) { - var dur, tmp; - //invert the arguments, but complain about it - if (period !== null && !isNaN(+period)) { - deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); - tmp = val; val = period; period = tmp; - } - - val = typeof val === 'string' ? +val : val; - dur = moment.duration(val, period); - addOrSubtractDurationFromMoment(this, dur, direction); - return this; - }; - } - - function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, - days = duration._days, - months = duration._months; - updateOffset = updateOffset == null ? true : updateOffset; - - if (milliseconds) { - mom._d.setTime(+mom._d + milliseconds * isAdding); - } - if (days) { - rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding); - } - if (months) { - rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding); - } - if (updateOffset) { - moment.updateOffset(mom, days || months); - } - } - - // check if is an array - function isArray(input) { - return Object.prototype.toString.call(input) === '[object Array]'; - } - - function isDate(input) { - return Object.prototype.toString.call(input) === '[object Date]' || - input instanceof Date; - } - - // compare two arrays, return the number of differences - function compareArrays(array1, array2, dontConvert) { - var len = Math.min(array1.length, array2.length), - lengthDiff = Math.abs(array1.length - array2.length), - diffs = 0, - i; - for (i = 0; i < len; i++) { - if ((dontConvert && array1[i] !== array2[i]) || - (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { - diffs++; - } - } - return diffs + lengthDiff; - } - - function normalizeUnits(units) { - if (units) { - var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); - units = unitAliases[units] || camelFunctions[lowered] || lowered; - } - return units; - } - - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, - normalizedProp, - prop; - - for (prop in inputObject) { - if (hasOwnProp(inputObject, prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } - } - } - - return normalizedInput; - } - - function makeList(field) { - var count, setter; - - if (field.indexOf('week') === 0) { - count = 7; - setter = 'day'; - } - else if (field.indexOf('month') === 0) { - count = 12; - setter = 'month'; - } - else { - return; - } - - moment[field] = function (format, index) { - var i, getter, - method = moment._locale[field], - results = []; - - if (typeof format === 'number') { - index = format; - format = undefined; - } - - getter = function (i) { - var m = moment().utc().set(setter, i); - return method.call(moment._locale, m, format || ''); - }; - - if (index != null) { - return getter(index); - } - else { - for (i = 0; i < count; i++) { - results.push(getter(i)); - } - return results; - } - }; - } - - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; - - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - if (coercedNumber >= 0) { - value = Math.floor(coercedNumber); - } else { - value = Math.ceil(coercedNumber); - } - } - - return value; - } - - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); - } - - function weeksInYear(year, dow, doy) { - return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; - } - - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; - } - - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } - - function checkOverflow(m) { - var overflow; - if (m._a && m._pf.overflow === -2) { - overflow = - m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH : - m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE : - m._a[HOUR] < 0 || m._a[HOUR] > 24 || - (m._a[HOUR] === 24 && (m._a[MINUTE] !== 0 || - m._a[SECOND] !== 0 || - m._a[MILLISECOND] !== 0)) ? HOUR : - m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE : - m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND : - m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND : - -1; - - if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; - } - - m._pf.overflow = overflow; - } - } - - function isValid(m) { - if (m._isValid == null) { - m._isValid = !isNaN(m._d.getTime()) && - m._pf.overflow < 0 && - !m._pf.empty && - !m._pf.invalidMonth && - !m._pf.nullInput && - !m._pf.invalidFormat && - !m._pf.userInvalidated; - - if (m._strict) { - m._isValid = m._isValid && - m._pf.charsLeftOver === 0 && - m._pf.unusedTokens.length === 0 && - m._pf.bigHour === undefined; - } - } - return m._isValid; - } - - function normalizeLocale(key) { - return key ? key.toLowerCase().replace('_', '-') : key; - } - - // pick the locale from the array - // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each - // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root - function chooseLocale(names) { - var i = 0, j, next, locale, split; - - while (i < names.length) { - split = normalizeLocale(names[i]).split('-'); - j = split.length; - next = normalizeLocale(names[i + 1]); - next = next ? next.split('-') : null; - while (j > 0) { - locale = loadLocale(split.slice(0, j).join('-')); - if (locale) { - return locale; - } - if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { - //the next array item is better than a shallower substring of this one - break; - } - j--; - } - i++; - } - return null; - } - - function loadLocale(name) { - var oldLocale = null; - if (!locales[name] && hasModule) { - try { - oldLocale = moment.locale(); - !(function webpackMissingModule() { var e = new Error("Cannot find module \"./locale\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()); - // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales - moment.locale(oldLocale); - } catch (e) { } - } - return locales[name]; - } - - // Return a moment from input, that is local/utc/zone equivalent to model. - function makeAs(input, model) { - var res, diff; - if (model._isUTC) { - res = model.clone(); - diff = (moment.isMoment(input) || isDate(input) ? - +input : +moment(input)) - (+res); - // Use low-level api, because this fn is low-level api. - res._d.setTime(+res._d + diff); - moment.updateOffset(res, false); - return res; - } else { - return moment(input).local(); - } - } - - /************************************ - Locale - ************************************/ - - - extend(Locale.prototype, { - - set : function (config) { - var prop, i; - for (i in config) { - prop = config[i]; - if (typeof prop === 'function') { - this[i] = prop; - } else { - this['_' + i] = prop; - } - } - // Lenient ordinal parsing accepts just a number in addition to - // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\d{1,2}/.source); - }, - - _months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - months : function (m) { - return this._months[m.month()]; - }, - - _monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - monthsShort : function (m) { - return this._monthsShort[m.month()]; - }, - - monthsParse : function (monthName, format, strict) { - var i, mom, regex; - - if (!this._monthsParse) { - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - } - - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = moment.utc([2000, i]); - if (strict && !this._longMonthsParse[i]) { - this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); - this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); - } - if (!strict && !this._monthsParse[i]) { - regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); - this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { - return i; - } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { - return i; - } else if (!strict && this._monthsParse[i].test(monthName)) { - return i; - } - } - }, - - _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdays : function (m) { - return this._weekdays[m.day()]; - }, - - _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysShort : function (m) { - return this._weekdaysShort[m.day()]; - }, - - _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - weekdaysMin : function (m) { - return this._weekdaysMin[m.day()]; - }, - - weekdaysParse : function (weekdayName) { - var i, mom, regex; - - if (!this._weekdaysParse) { - this._weekdaysParse = []; - } - - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - if (!this._weekdaysParse[i]) { - mom = moment([2000, 1]).day(i); - regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); - this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (this._weekdaysParse[i].test(weekdayName)) { - return i; - } - } - }, - - _longDateFormat : { - LTS : 'h:mm:ss A', - LT : 'h:mm A', - L : 'MM/DD/YYYY', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY LT', - LLLL : 'dddd, MMMM D, YYYY LT' - }, - longDateFormat : function (key) { - var output = this._longDateFormat[key]; - if (!output && this._longDateFormat[key.toUpperCase()]) { - output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); - this._longDateFormat[key] = output; - } - return output; - }, - - isPM : function (input) { - // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays - // Using charAt should be more compatible. - return ((input + '').toLowerCase().charAt(0) === 'p'); - }, - - _meridiemParse : /[ap]\.?m?\.?/i, - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - }, - - _calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - calendar : function (key, mom, now) { - var output = this._calendar[key]; - return typeof output === 'function' ? output.apply(mom, [now]) : output; - }, - - _relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - - relativeTime : function (number, withoutSuffix, string, isFuture) { - var output = this._relativeTime[string]; - return (typeof output === 'function') ? - output(number, withoutSuffix, string, isFuture) : - output.replace(/%d/i, number); - }, - - pastFuture : function (diff, output) { - var format = this._relativeTime[diff > 0 ? 'future' : 'past']; - return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); - }, - - ordinal : function (number) { - return this._ordinal.replace('%d', number); - }, - _ordinal : '%d', - _ordinalParse : /\d{1,2}/, - - preparse : function (string) { - return string; - }, - - postformat : function (string) { - return string; - }, - - week : function (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; - }, - - _week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - }, - - _invalidDate: 'Invalid date', - invalidDate: function () { - return this._invalidDate; - } - }); - - /************************************ - Formatting - ************************************/ - - - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ''); - } - return input.replace(/\\/g, ''); - } - - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; - - for (i = 0, length = array.length; i < length; i++) { - if (formatTokenFunctions[array[i]]) { - array[i] = formatTokenFunctions[array[i]]; - } else { - array[i] = removeFormattingTokens(array[i]); - } - } - - return function (mom) { - var output = ''; - for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; - } - return output; - }; - } - - // format date using native date object - function formatMoment(m, format) { - if (!m.isValid()) { - return m.localeData().invalidDate(); - } - - format = expandFormat(format, m.localeData()); - - if (!formatFunctions[format]) { - formatFunctions[format] = makeFormatFunction(format); - } - - return formatFunctions[format](m); - } - - function expandFormat(format, locale) { - var i = 5; - - function replaceLongDateFormatTokens(input) { - return locale.longDateFormat(input) || input; - } - - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; - } - - return format; - } - - - /************************************ - Parsing - ************************************/ - - - // get the regex to find the next token - function getParseRegexForToken(token, config) { - var a, strict = config._strict; - switch (token) { - case 'Q': - return parseTokenOneDigit; - case 'DDDD': - return parseTokenThreeDigits; - case 'YYYY': - case 'GGGG': - case 'gggg': - return strict ? parseTokenFourDigits : parseTokenOneToFourDigits; - case 'Y': - case 'G': - case 'g': - return parseTokenSignedNumber; - case 'YYYYYY': - case 'YYYYY': - case 'GGGGG': - case 'ggggg': - return strict ? parseTokenSixDigits : parseTokenOneToSixDigits; - case 'S': - if (strict) { - return parseTokenOneDigit; - } - /* falls through */ - case 'SS': - if (strict) { - return parseTokenTwoDigits; - } - /* falls through */ - case 'SSS': - if (strict) { - return parseTokenThreeDigits; - } - /* falls through */ - case 'DDD': - return parseTokenOneToThreeDigits; - case 'MMM': - case 'MMMM': - case 'dd': - case 'ddd': - case 'dddd': - return parseTokenWord; - case 'a': - case 'A': - return config._locale._meridiemParse; - case 'x': - return parseTokenOffsetMs; - case 'X': - return parseTokenTimestampMs; - case 'Z': - case 'ZZ': - return parseTokenTimezone; - case 'T': - return parseTokenT; - case 'SSSS': - return parseTokenDigits; - case 'MM': - case 'DD': - case 'YY': - case 'GG': - case 'gg': - case 'HH': - case 'hh': - case 'mm': - case 'ss': - case 'ww': - case 'WW': - return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits; - case 'M': - case 'D': - case 'd': - case 'H': - case 'h': - case 'm': - case 's': - case 'w': - case 'W': - case 'e': - case 'E': - return parseTokenOneOrTwoDigits; - case 'Do': - return strict ? config._locale._ordinalParse : config._locale._ordinalParseLenient; - default : - a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i')); - return a; - } - } - - function timezoneMinutesFromString(string) { - string = string || ''; - var possibleTzMatches = (string.match(parseTokenTimezone) || []), - tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [], - parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0], - minutes = +(parts[1] * 60) + toInt(parts[2]); - - return parts[0] === '+' ? -minutes : minutes; - } - - // function to convert string input to date - function addTimeToArrayFromToken(token, input, config) { - var a, datePartArray = config._a; - - switch (token) { - // QUARTER - case 'Q': - if (input != null) { - datePartArray[MONTH] = (toInt(input) - 1) * 3; - } - break; - // MONTH - case 'M' : // fall through to MM - case 'MM' : - if (input != null) { - datePartArray[MONTH] = toInt(input) - 1; - } - break; - case 'MMM' : // fall through to MMMM - case 'MMMM' : - a = config._locale.monthsParse(input, token, config._strict); - // if we didn't find a month name, mark the date as invalid. - if (a != null) { - datePartArray[MONTH] = a; - } else { - config._pf.invalidMonth = input; - } - break; - // DAY OF MONTH - case 'D' : // fall through to DD - case 'DD' : - if (input != null) { - datePartArray[DATE] = toInt(input); - } - break; - case 'Do' : - if (input != null) { - datePartArray[DATE] = toInt(parseInt( - input.match(/\d{1,2}/)[0], 10)); - } - break; - // DAY OF YEAR - case 'DDD' : // fall through to DDDD - case 'DDDD' : - if (input != null) { - config._dayOfYear = toInt(input); - } - - break; - // YEAR - case 'YY' : - datePartArray[YEAR] = moment.parseTwoDigitYear(input); - break; - case 'YYYY' : - case 'YYYYY' : - case 'YYYYYY' : - datePartArray[YEAR] = toInt(input); - break; - // AM / PM - case 'a' : // fall through to A - case 'A' : - config._isPm = config._locale.isPM(input); - break; - // HOUR - case 'h' : // fall through to hh - case 'hh' : - config._pf.bigHour = true; - /* falls through */ - case 'H' : // fall through to HH - case 'HH' : - datePartArray[HOUR] = toInt(input); - break; - // MINUTE - case 'm' : // fall through to mm - case 'mm' : - datePartArray[MINUTE] = toInt(input); - break; - // SECOND - case 's' : // fall through to ss - case 'ss' : - datePartArray[SECOND] = toInt(input); - break; - // MILLISECOND - case 'S' : - case 'SS' : - case 'SSS' : - case 'SSSS' : - datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); - break; - // UNIX OFFSET (MILLISECONDS) - case 'x': - config._d = new Date(toInt(input)); - break; - // UNIX TIMESTAMP WITH MS - case 'X': - config._d = new Date(parseFloat(input) * 1000); - break; - // TIMEZONE - case 'Z' : // fall through to ZZ - case 'ZZ' : - config._useUTC = true; - config._tzm = timezoneMinutesFromString(input); - break; - // WEEKDAY - human - case 'dd': - case 'ddd': - case 'dddd': - a = config._locale.weekdaysParse(input); - // if we didn't get a weekday name, mark the date as invalid - if (a != null) { - config._w = config._w || {}; - config._w['d'] = a; - } else { - config._pf.invalidWeekday = input; - } - break; - // WEEK, WEEK DAY - numeric - case 'w': - case 'ww': - case 'W': - case 'WW': - case 'd': - case 'e': - case 'E': - token = token.substr(0, 1); - /* falls through */ - case 'gggg': - case 'GGGG': - case 'GGGGG': - token = token.substr(0, 2); - if (input) { - config._w = config._w || {}; - config._w[token] = toInt(input); - } - break; - case 'gg': - case 'GG': - config._w = config._w || {}; - config._w[token] = moment.parseTwoDigitYear(input); - } - } - - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp; - - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; - - // TODO: We need to take the current isoWeekYear, but that depends on - // how we interpret now (local, utc, fixed offset). So create - // a now version of current config (take local/utc/offset flags, and - // create now). - weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year); - week = dfl(w.W, 1); - weekday = dfl(w.E, 1); - } else { - dow = config._locale._week.dow; - doy = config._locale._week.doy; - - weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); - week = dfl(w.w, 1); - - if (w.d != null) { - // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < dow) { - ++week; - } - } else if (w.e != null) { - // local weekday -- counting starts from begining of week - weekday = w.e + dow; - } else { - // default to begining of week - weekday = dow; - } - } - temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); - - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; - } - - // convert an array to a date. - // the array should mirror the parameters below - // note: all values past the year are optional and will default to the lowest possible value. - // [year, month, day , hour, minute, second, millisecond] - function dateFromConfig(config) { - var i, date, input = [], currentDate, yearToUse; - - if (config._d) { - return; - } - - currentDate = currentDateArray(config); - - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); - } - - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = dfl(config._a[YEAR], currentDate[YEAR]); - - if (config._dayOfYear > daysInYear(yearToUse)) { - config._pf._overflowDayOfYear = true; - } - - date = makeUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } - - // Default to current date. - // * if no year, month, day of month are given, default to today - // * if day of month is given, default month and year - // * if month is given, default only year - // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; - } - - // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; - } - - // Check for 24:00:00.000 - if (config._a[HOUR] === 24 && - config._a[MINUTE] === 0 && - config._a[SECOND] === 0 && - config._a[MILLISECOND] === 0) { - config._nextDay = true; - config._a[HOUR] = 0; - } - - config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input); - // Apply timezone offset from input. The actual zone can be changed - // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm); - } - - if (config._nextDay) { - config._a[HOUR] = 24; - } - } - - function dateFromObject(config) { - var normalizedInput; - - if (config._d) { - return; - } - - normalizedInput = normalizeObjectUnits(config._i); - config._a = [ - normalizedInput.year, - normalizedInput.month, - normalizedInput.day || normalizedInput.date, - normalizedInput.hour, - normalizedInput.minute, - normalizedInput.second, - normalizedInput.millisecond - ]; - - dateFromConfig(config); - } - - function currentDateArray(config) { - var now = new Date(); - if (config._useUTC) { - return [ - now.getUTCFullYear(), - now.getUTCMonth(), - now.getUTCDate() - ]; - } else { - return [now.getFullYear(), now.getMonth(), now.getDate()]; - } - } - - // date from string and format string - function makeDateFromStringAndFormat(config) { - if (config._f === moment.ISO_8601) { - parseISO(config); - return; - } - - config._a = []; - config._pf.empty = true; - - // This array is used to make a Date, either with `new Date` or `Date.UTC` - var string = '' + config._i, - i, parsedInput, tokens, token, skipped, - stringLength = string.length, - totalParsedInputLength = 0; - - tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; - - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; - if (parsedInput) { - skipped = string.substr(0, string.indexOf(parsedInput)); - if (skipped.length > 0) { - config._pf.unusedInput.push(skipped); - } - string = string.slice(string.indexOf(parsedInput) + parsedInput.length); - totalParsedInputLength += parsedInput.length; - } - // don't parse if it's not a known token - if (formatTokenFunctions[token]) { - if (parsedInput) { - config._pf.empty = false; - } - else { - config._pf.unusedTokens.push(token); - } - addTimeToArrayFromToken(token, parsedInput, config); - } - else if (config._strict && !parsedInput) { - config._pf.unusedTokens.push(token); - } - } - - // add remaining unparsed input length to the string - config._pf.charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - config._pf.unusedInput.push(string); - } - - // clear _12h flag if hour is <= 12 - if (config._pf.bigHour === true && config._a[HOUR] <= 12) { - config._pf.bigHour = undefined; - } - // handle am pm - if (config._isPm && config._a[HOUR] < 12) { - config._a[HOUR] += 12; - } - // if is 12 am, change hours to 0 - if (config._isPm === false && config._a[HOUR] === 12) { - config._a[HOUR] = 0; - } - dateFromConfig(config); - checkOverflow(config); - } - - function unescapeFormat(s) { - return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { - return p1 || p2 || p3 || p4; - }); - } - - // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - function regexpEscape(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - } - - // date from string and array of format strings - function makeDateFromStringAndArray(config) { - var tempConfig, - bestMoment, - - scoreToBeat, - i, - currentScore; - - if (config._f.length === 0) { - config._pf.invalidFormat = true; - config._d = new Date(NaN); - return; - } - - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = copyConfig({}, config); - if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; - } - tempConfig._pf = defaultParsingFlags(); - tempConfig._f = config._f[i]; - makeDateFromStringAndFormat(tempConfig); - - if (!isValid(tempConfig)) { - continue; - } - - // if there is any input that was not parsed add a penalty for that format - currentScore += tempConfig._pf.charsLeftOver; - - //or tokens - currentScore += tempConfig._pf.unusedTokens.length * 10; - - tempConfig._pf.score = currentScore; - - if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } - } - - extend(config, bestMoment || tempConfig); - } - - // date from iso format - function parseISO(config) { - var i, l, - string = config._i, - match = isoRegex.exec(string); - - if (match) { - config._pf.iso = true; - for (i = 0, l = isoDates.length; i < l; i++) { - if (isoDates[i][1].exec(string)) { - // match[5] should be 'T' or undefined - config._f = isoDates[i][0] + (match[6] || ' '); - break; - } - } - for (i = 0, l = isoTimes.length; i < l; i++) { - if (isoTimes[i][1].exec(string)) { - config._f += isoTimes[i][0]; - break; - } - } - if (string.match(parseTokenTimezone)) { - config._f += 'Z'; - } - makeDateFromStringAndFormat(config); - } else { - config._isValid = false; - } - } - - // date from iso format or fallback - function makeDateFromString(config) { - parseISO(config); - if (config._isValid === false) { - delete config._isValid; - moment.createFromInputFallback(config); - } - } - - function map(arr, fn) { - var res = [], i; - for (i = 0; i < arr.length; ++i) { - res.push(fn(arr[i], i)); - } - return res; - } - - function makeDateFromInput(config) { - var input = config._i, matched; - if (input === undefined) { - config._d = new Date(); - } else if (isDate(input)) { - config._d = new Date(+input); - } else if ((matched = aspNetJsonRegex.exec(input)) !== null) { - config._d = new Date(+matched[1]); - } else if (typeof input === 'string') { - makeDateFromString(config); - } else if (isArray(input)) { - config._a = map(input.slice(0), function (obj) { - return parseInt(obj, 10); - }); - dateFromConfig(config); - } else if (typeof(input) === 'object') { - dateFromObject(config); - } else if (typeof(input) === 'number') { - // from milliseconds - config._d = new Date(input); - } else { - moment.createFromInputFallback(config); - } - } - - function makeDate(y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply - var date = new Date(y, m, d, h, M, s, ms); - - //the date constructor doesn't accept years < 1970 - if (y < 1970) { - date.setFullYear(y); - } - return date; - } - - function makeUTCDate(y) { - var date = new Date(Date.UTC.apply(null, arguments)); - if (y < 1970) { - date.setUTCFullYear(y); - } - return date; - } - - function parseWeekday(input, locale) { - if (typeof input === 'string') { - if (!isNaN(input)) { - input = parseInt(input, 10); - } - else { - input = locale.weekdaysParse(input); - if (typeof input !== 'number') { - return null; - } - } - } - return input; - } - - /************************************ - Relative Time - ************************************/ - - - // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize - function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { - return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); - } - - function relativeTime(posNegDuration, withoutSuffix, locale) { - var duration = moment.duration(posNegDuration).abs(), - seconds = round(duration.as('s')), - minutes = round(duration.as('m')), - hours = round(duration.as('h')), - days = round(duration.as('d')), - months = round(duration.as('M')), - years = round(duration.as('y')), - - args = seconds < relativeTimeThresholds.s && ['s', seconds] || - minutes === 1 && ['m'] || - minutes < relativeTimeThresholds.m && ['mm', minutes] || - hours === 1 && ['h'] || - hours < relativeTimeThresholds.h && ['hh', hours] || - days === 1 && ['d'] || - days < relativeTimeThresholds.d && ['dd', days] || - months === 1 && ['M'] || - months < relativeTimeThresholds.M && ['MM', months] || - years === 1 && ['y'] || ['yy', years]; - - args[2] = withoutSuffix; - args[3] = +posNegDuration > 0; - args[4] = locale; - return substituteTimeAgo.apply({}, args); - } - - - /************************************ - Week of Year - ************************************/ - - - // firstDayOfWeek 0 = sun, 6 = sat - // the day of the week that starts the week - // (usually sunday or monday) - // firstDayOfWeekOfYear 0 = sun, 6 = sat - // the first week is the week that contains the first - // of this day of the week - // (eg. ISO weeks use thursday (4)) - function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { - var end = firstDayOfWeekOfYear - firstDayOfWeek, - daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), - adjustedMoment; - - - if (daysToDayOfWeek > end) { - daysToDayOfWeek -= 7; - } - - if (daysToDayOfWeek < end - 7) { - daysToDayOfWeek += 7; - } - - adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd'); - return { - week: Math.ceil(adjustedMoment.dayOfYear() / 7), - year: adjustedMoment.year() - }; - } - - //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday - function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { - var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; - - d = d === 0 ? 7 : d; - weekday = weekday != null ? weekday : firstDayOfWeek; - daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0); - dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; - - return { - year: dayOfYear > 0 ? year : year - 1, - dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear - }; - } - - /************************************ - Top Level Functions - ************************************/ - - function makeMoment(config) { - var input = config._i, - format = config._f, - res; - - config._locale = config._locale || moment.localeData(config._l); - - if (input === null || (format === undefined && input === '')) { - return moment.invalid({nullInput: true}); - } - - if (typeof input === 'string') { - config._i = input = config._locale.preparse(input); - } - - if (moment.isMoment(input)) { - return new Moment(input, true); - } else if (format) { - if (isArray(format)) { - makeDateFromStringAndArray(config); - } else { - makeDateFromStringAndFormat(config); - } - } else { - makeDateFromInput(config); - } - - res = new Moment(config); - if (res._nextDay) { - // Adding is smart enough around DST - res.add(1, 'd'); - res._nextDay = undefined; - } - - return res; - } - - moment = function (input, format, locale, strict) { - var c; - - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c = {}; - c._isAMomentObject = true; - c._i = input; - c._f = format; - c._l = locale; - c._strict = strict; - c._isUTC = false; - c._pf = defaultParsingFlags(); - - return makeMoment(c); - }; - - moment.suppressDeprecationWarnings = false; - - moment.createFromInputFallback = deprecate( - 'moment construction falls back to js Date. This is ' + - 'discouraged and will be removed in upcoming major ' + - 'release. Please refer to ' + - 'https://github.com/moment/moment/issues/1407 for more info.', - function (config) { - config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); - } - ); - - // Pick a moment m from moments so that m[fn](other) is true for all - // other. This relies on the function fn to be transitive. - // - // moments should either be an array of moment objects or an array, whose - // first element is an array of moment objects. - function pickBy(fn, moments) { - var res, i; - if (moments.length === 1 && isArray(moments[0])) { - moments = moments[0]; - } - if (!moments.length) { - return moment(); - } - res = moments[0]; - for (i = 1; i < moments.length; ++i) { - if (moments[i][fn](res)) { - res = moments[i]; - } - } - return res; - } - - moment.min = function () { - var args = [].slice.call(arguments, 0); - - return pickBy('isBefore', args); - }; - - moment.max = function () { - var args = [].slice.call(arguments, 0); - - return pickBy('isAfter', args); - }; - - // creating with utc - moment.utc = function (input, format, locale, strict) { - var c; - - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c = {}; - c._isAMomentObject = true; - c._useUTC = true; - c._isUTC = true; - c._l = locale; - c._i = input; - c._f = format; - c._strict = strict; - c._pf = defaultParsingFlags(); - - return makeMoment(c).utc(); - }; - - // creating with unix timestamp (in seconds) - moment.unix = function (input) { - return moment(input * 1000); - }; - - // duration - moment.duration = function (input, key) { - var duration = input, - // matching against regexp is expensive, do it on demand - match = null, - sign, - ret, - parseIso, - diffRes; - - if (moment.isDuration(input)) { - duration = { - ms: input._milliseconds, - d: input._days, - M: input._months - }; - } else if (typeof input === 'number') { - duration = {}; - if (key) { - duration[key] = input; - } else { - duration.milliseconds = input; - } - } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y: 0, - d: toInt(match[DATE]) * sign, - h: toInt(match[HOUR]) * sign, - m: toInt(match[MINUTE]) * sign, - s: toInt(match[SECOND]) * sign, - ms: toInt(match[MILLISECOND]) * sign - }; - } else if (!!(match = isoDurationRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - parseIso = function (inp) { - // We'd normally use ~~inp for this, but unfortunately it also - // converts floats to ints. - // inp may be undefined, so careful calling replace on it. - var res = inp && parseFloat(inp.replace(',', '.')); - // apply sign while we're at it - return (isNaN(res) ? 0 : res) * sign; - }; - duration = { - y: parseIso(match[2]), - M: parseIso(match[3]), - d: parseIso(match[4]), - h: parseIso(match[5]), - m: parseIso(match[6]), - s: parseIso(match[7]), - w: parseIso(match[8]) - }; - } else if (typeof duration === 'object' && - ('from' in duration || 'to' in duration)) { - diffRes = momentsDifference(moment(duration.from), moment(duration.to)); - - duration = {}; - duration.ms = diffRes.milliseconds; - duration.M = diffRes.months; - } - - ret = new Duration(duration); - - if (moment.isDuration(input) && hasOwnProp(input, '_locale')) { - ret._locale = input._locale; - } - - return ret; - }; - - // version number - moment.version = VERSION; - - // default format - moment.defaultFormat = isoFormat; - - // constant that refers to the ISO standard - moment.ISO_8601 = function () {}; - - // Plugins that add properties should also add the key here (null value), - // so we can properly clone ourselves. - moment.momentProperties = momentProperties; - - // This function will be called whenever a moment is mutated. - // It is intended to keep the offset in sync with the timezone. - moment.updateOffset = function () {}; - - // This function allows you to set a threshold for relative time strings - moment.relativeTimeThreshold = function (threshold, limit) { - if (relativeTimeThresholds[threshold] === undefined) { - return false; - } - if (limit === undefined) { - return relativeTimeThresholds[threshold]; - } - relativeTimeThresholds[threshold] = limit; - return true; - }; - - moment.lang = deprecate( - 'moment.lang is deprecated. Use moment.locale instead.', - function (key, value) { - return moment.locale(key, value); - } - ); - - // This function will load locale and then set the global locale. If - // no arguments are passed in, it will simply return the current global - // locale key. - moment.locale = function (key, values) { - var data; - if (key) { - if (typeof(values) !== 'undefined') { - data = moment.defineLocale(key, values); - } - else { - data = moment.localeData(key); - } - - if (data) { - moment.duration._locale = moment._locale = data; - } - } - - return moment._locale._abbr; - }; - - moment.defineLocale = function (name, values) { - if (values !== null) { - values.abbr = name; - if (!locales[name]) { - locales[name] = new Locale(); - } - locales[name].set(values); - - // backwards compat for now: also set the locale - moment.locale(name); - - return locales[name]; - } else { - // useful for testing - delete locales[name]; - return null; - } - }; - - moment.langData = deprecate( - 'moment.langData is deprecated. Use moment.localeData instead.', - function (key) { - return moment.localeData(key); - } - ); - - // returns locale data - moment.localeData = function (key) { - var locale; - - if (key && key._locale && key._locale._abbr) { - key = key._locale._abbr; - } - - if (!key) { - return moment._locale; - } - - if (!isArray(key)) { - //short-circuit everything else - locale = loadLocale(key); - if (locale) { - return locale; - } - key = [key]; - } - - return chooseLocale(key); - }; - - // compare moment object - moment.isMoment = function (obj) { - return obj instanceof Moment || - (obj != null && hasOwnProp(obj, '_isAMomentObject')); - }; - - // for typechecking Duration objects - moment.isDuration = function (obj) { - return obj instanceof Duration; - }; - - for (i = lists.length - 1; i >= 0; --i) { - makeList(lists[i]); - } - - moment.normalizeUnits = function (units) { - return normalizeUnits(units); - }; - - moment.invalid = function (flags) { - var m = moment.utc(NaN); - if (flags != null) { - extend(m._pf, flags); - } - else { - m._pf.userInvalidated = true; - } - - return m; - }; - - moment.parseZone = function () { - return moment.apply(null, arguments).parseZone(); - }; - - moment.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; - - /************************************ - Moment Prototype - ************************************/ - - - extend(moment.fn = Moment.prototype, { - - clone : function () { - return moment(this); - }, - - valueOf : function () { - return +this._d + ((this._offset || 0) * 60000); - }, - - unix : function () { - return Math.floor(+this / 1000); - }, - - toString : function () { - return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); - }, - - toDate : function () { - return this._offset ? new Date(+this) : this._d; - }, - - toISOString : function () { - var m = moment(this).utc(); - if (0 < m.year() && m.year() <= 9999) { - if ('function' === typeof Date.prototype.toISOString) { - // native implementation is ~50x faster, use it when we can - return this.toDate().toISOString(); - } else { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } else { - return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - }, - - toArray : function () { - var m = this; - return [ - m.year(), - m.month(), - m.date(), - m.hours(), - m.minutes(), - m.seconds(), - m.milliseconds() - ]; - }, - - isValid : function () { - return isValid(this); - }, - - isDSTShifted : function () { - if (this._a) { - return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; - } - - return false; - }, - - parsingFlags : function () { - return extend({}, this._pf); - }, - - invalidAt: function () { - return this._pf.overflow; - }, - - utc : function (keepLocalTime) { - return this.zone(0, keepLocalTime); - }, - - local : function (keepLocalTime) { - if (this._isUTC) { - this.zone(0, keepLocalTime); - this._isUTC = false; - - if (keepLocalTime) { - this.add(this._dateTzOffset(), 'm'); - } - } - return this; - }, - - format : function (inputString) { - var output = formatMoment(this, inputString || moment.defaultFormat); - return this.localeData().postformat(output); - }, - - add : createAdder(1, 'add'), - - subtract : createAdder(-1, 'subtract'), - - diff : function (input, units, asFloat) { - var that = makeAs(input, this), - zoneDiff = (this.zone() - that.zone()) * 6e4, - diff, output, daysAdjust; - - units = normalizeUnits(units); - - if (units === 'year' || units === 'month') { - // average number of days in the months in the given dates - diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 - // difference in months - output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); - // adjust by taking difference in days, average number of days - // and dst in the given months. - daysAdjust = (this - moment(this).startOf('month')) - - (that - moment(that).startOf('month')); - // same as above but with zones, to negate all dst - daysAdjust -= ((this.zone() - moment(this).startOf('month').zone()) - - (that.zone() - moment(that).startOf('month').zone())) * 6e4; - output += daysAdjust / diff; - if (units === 'year') { - output = output / 12; - } - } else { - diff = (this - that); - output = units === 'second' ? diff / 1e3 : // 1000 - units === 'minute' ? diff / 6e4 : // 1000 * 60 - units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - diff; - } - return asFloat ? output : absRound(output); - }, - - from : function (time, withoutSuffix) { - return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); - }, - - fromNow : function (withoutSuffix) { - return this.from(moment(), withoutSuffix); - }, - - calendar : function (time) { - // We want to compare the start of today, vs this. - // Getting start-of-today depends on whether we're zone'd or not. - var now = time || moment(), - sod = makeAs(now, this).startOf('day'), - diff = this.diff(sod, 'days', true), - format = diff < -6 ? 'sameElse' : - diff < -1 ? 'lastWeek' : - diff < 0 ? 'lastDay' : - diff < 1 ? 'sameDay' : - diff < 2 ? 'nextDay' : - diff < 7 ? 'nextWeek' : 'sameElse'; - return this.format(this.localeData().calendar(format, this, moment(now))); - }, - - isLeapYear : function () { - return isLeapYear(this.year()); - }, - - isDST : function () { - return (this.zone() < this.clone().month(0).zone() || - this.zone() < this.clone().month(5).zone()); - }, - - day : function (input) { - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); - if (input != null) { - input = parseWeekday(input, this.localeData()); - return this.add(input - day, 'd'); - } else { - return day; - } - }, - - month : makeAccessor('Month', true), - - startOf : function (units) { - units = normalizeUnits(units); - // the following switch intentionally omits break keywords - // to utilize falling through the cases. - switch (units) { - case 'year': - this.month(0); - /* falls through */ - case 'quarter': - case 'month': - this.date(1); - /* falls through */ - case 'week': - case 'isoWeek': - case 'day': - this.hours(0); - /* falls through */ - case 'hour': - this.minutes(0); - /* falls through */ - case 'minute': - this.seconds(0); - /* falls through */ - case 'second': - this.milliseconds(0); - /* falls through */ - } - - // weeks are a special case - if (units === 'week') { - this.weekday(0); - } else if (units === 'isoWeek') { - this.isoWeekday(1); - } - - // quarters are also special - if (units === 'quarter') { - this.month(Math.floor(this.month() / 3) * 3); - } - - return this; - }, - - endOf: function (units) { - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond') { - return this; - } - return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); - }, - - isAfter: function (input, units) { - var inputMs; - units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); - if (units === 'millisecond') { - input = moment.isMoment(input) ? input : moment(input); - return +this > +input; - } else { - inputMs = moment.isMoment(input) ? +input : +moment(input); - return inputMs < +this.clone().startOf(units); - } - }, - - isBefore: function (input, units) { - var inputMs; - units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); - if (units === 'millisecond') { - input = moment.isMoment(input) ? input : moment(input); - return +this < +input; - } else { - inputMs = moment.isMoment(input) ? +input : +moment(input); - return +this.clone().endOf(units) < inputMs; - } - }, - - isSame: function (input, units) { - var inputMs; - units = normalizeUnits(units || 'millisecond'); - if (units === 'millisecond') { - input = moment.isMoment(input) ? input : moment(input); - return +this === +input; - } else { - inputMs = +moment(input); - return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); - } - }, - - min: deprecate( - 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', - function (other) { - other = moment.apply(null, arguments); - return other < this ? this : other; - } - ), - - max: deprecate( - 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', - function (other) { - other = moment.apply(null, arguments); - return other > this ? this : other; - } - ), - - // keepLocalTime = true means only change the timezone, without - // affecting the local hour. So 5:31:26 +0300 --[zone(2, true)]--> - // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist int zone - // +0200, so we adjust the time as needed, to be valid. - // - // Keeping the time actually adds/subtracts (one hour) - // from the actual represented time. That is why we call updateOffset - // a second time. In case it wants us to change the offset again - // _changeInProgress == true case, then we have to adjust, because - // there is no such time in the given timezone. - zone : function (input, keepLocalTime) { - var offset = this._offset || 0, - localAdjust; - if (input != null) { - if (typeof input === 'string') { - input = timezoneMinutesFromString(input); - } - if (Math.abs(input) < 16) { - input = input * 60; - } - if (!this._isUTC && keepLocalTime) { - localAdjust = this._dateTzOffset(); - } - this._offset = input; - this._isUTC = true; - if (localAdjust != null) { - this.subtract(localAdjust, 'm'); - } - if (offset !== input) { - if (!keepLocalTime || this._changeInProgress) { - addOrSubtractDurationFromMoment(this, - moment.duration(offset - input, 'm'), 1, false); - } else if (!this._changeInProgress) { - this._changeInProgress = true; - moment.updateOffset(this, true); - this._changeInProgress = null; - } - } - } else { - return this._isUTC ? offset : this._dateTzOffset(); - } - return this; - }, - - zoneAbbr : function () { - return this._isUTC ? 'UTC' : ''; - }, - - zoneName : function () { - return this._isUTC ? 'Coordinated Universal Time' : ''; - }, - - parseZone : function () { - if (this._tzm) { - this.zone(this._tzm); - } else if (typeof this._i === 'string') { - this.zone(this._i); - } - return this; - }, - - hasAlignedHourOffset : function (input) { - if (!input) { - input = 0; - } - else { - input = moment(input).zone(); - } - - return (this.zone() - input) % 60 === 0; - }, - - daysInMonth : function () { - return daysInMonth(this.year(), this.month()); - }, - - dayOfYear : function (input) { - var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; - return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); - }, - - quarter : function (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); - }, - - weekYear : function (input) { - var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; - return input == null ? year : this.add((input - year), 'y'); - }, - - isoWeekYear : function (input) { - var year = weekOfYear(this, 1, 4).year; - return input == null ? year : this.add((input - year), 'y'); - }, - - week : function (input) { - var week = this.localeData().week(this); - return input == null ? week : this.add((input - week) * 7, 'd'); - }, - - isoWeek : function (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add((input - week) * 7, 'd'); - }, - - weekday : function (input) { - var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; - return input == null ? weekday : this.add(input - weekday, 'd'); - }, - - isoWeekday : function (input) { - // behaves the same as moment#day except - // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) - // as a setter, sunday should belong to the previous week. - return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); - }, - - isoWeeksInYear : function () { - return weeksInYear(this.year(), 1, 4); - }, - - weeksInYear : function () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); - }, - - get : function (units) { - units = normalizeUnits(units); - return this[units](); - }, - - set : function (units, value) { - units = normalizeUnits(units); - if (typeof this[units] === 'function') { - this[units](value); - } - return this; - }, - - // If passed a locale key, it will set the locale for this - // instance. Otherwise, it will return the locale configuration - // variables for this instance. - locale : function (key) { - var newLocaleData; - - if (key === undefined) { - return this._locale._abbr; - } else { - newLocaleData = moment.localeData(key); - if (newLocaleData != null) { - this._locale = newLocaleData; - } - return this; - } - }, - - lang : deprecate( - 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', - function (key) { - if (key === undefined) { - return this.localeData(); - } else { - return this.locale(key); - } - } - ), - - localeData : function () { - return this._locale; - }, - - _dateTzOffset : function () { - // On Firefox.24 Date#getTimezoneOffset returns a floating point. - // https://github.com/moment/moment/pull/1871 - return Math.round(this._d.getTimezoneOffset() / 15) * 15; - } - }); - - function rawMonthSetter(mom, value) { - var dayOfMonth; - - // TODO: Move this out of here! - if (typeof value === 'string') { - value = mom.localeData().monthsParse(value); - // TODO: Another silent failure? - if (typeof value !== 'number') { - return mom; - } - } - - dayOfMonth = Math.min(mom.date(), - daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; - } - - function rawGetter(mom, unit) { - return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); - } - - function rawSetter(mom, unit, value) { - if (unit === 'Month') { - return rawMonthSetter(mom, value); - } else { - return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); - } - } - - function makeAccessor(unit, keepTime) { - return function (value) { - if (value != null) { - rawSetter(this, unit, value); - moment.updateOffset(this, keepTime); - return this; - } else { - return rawGetter(this, unit); - } - }; - } - - moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false); - moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false); - moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false); - // Setting the hour should keep the time, because the user explicitly - // specified which hour he wants. So trying to maintain the same hour (in - // a new timezone) makes sense. Adding/subtracting hours does not follow - // this rule. - moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true); - // moment.fn.month is defined separately - moment.fn.date = makeAccessor('Date', true); - moment.fn.dates = deprecate('dates accessor is deprecated. Use date instead.', makeAccessor('Date', true)); - moment.fn.year = makeAccessor('FullYear', true); - moment.fn.years = deprecate('years accessor is deprecated. Use year instead.', makeAccessor('FullYear', true)); - - // add plural methods - moment.fn.days = moment.fn.day; - moment.fn.months = moment.fn.month; - moment.fn.weeks = moment.fn.week; - moment.fn.isoWeeks = moment.fn.isoWeek; - moment.fn.quarters = moment.fn.quarter; - - // add aliased format methods - moment.fn.toJSON = moment.fn.toISOString; - - /************************************ - Duration Prototype - ************************************/ - - - function daysToYears (days) { - // 400 years have 146097 days (taking into account leap year rules) - return days * 400 / 146097; - } - - function yearsToDays (years) { - // years * 365 + absRound(years / 4) - - // absRound(years / 100) + absRound(years / 400); - return years * 146097 / 400; - } - - extend(moment.duration.fn = Duration.prototype, { - - _bubble : function () { - var milliseconds = this._milliseconds, - days = this._days, - months = this._months, - data = this._data, - seconds, minutes, hours, years = 0; - - // The following code bubbles up values, see the tests for - // examples of what that means. - data.milliseconds = milliseconds % 1000; - - seconds = absRound(milliseconds / 1000); - data.seconds = seconds % 60; - - minutes = absRound(seconds / 60); - data.minutes = minutes % 60; - - hours = absRound(minutes / 60); - data.hours = hours % 24; - - days += absRound(hours / 24); - - // Accurately convert days to years, assume start from year 0. - years = absRound(daysToYears(days)); - days -= absRound(yearsToDays(years)); - - // 30 days to a month - // TODO (iskren): Use anchor date (like 1st Jan) to compute this. - months += absRound(days / 30); - days %= 30; - - // 12 months -> 1 year - years += absRound(months / 12); - months %= 12; - - data.days = days; - data.months = months; - data.years = years; - }, - - abs : function () { - this._milliseconds = Math.abs(this._milliseconds); - this._days = Math.abs(this._days); - this._months = Math.abs(this._months); - - this._data.milliseconds = Math.abs(this._data.milliseconds); - this._data.seconds = Math.abs(this._data.seconds); - this._data.minutes = Math.abs(this._data.minutes); - this._data.hours = Math.abs(this._data.hours); - this._data.months = Math.abs(this._data.months); - this._data.years = Math.abs(this._data.years); - - return this; - }, - - weeks : function () { - return absRound(this.days() / 7); - }, - - valueOf : function () { - return this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6; - }, - - humanize : function (withSuffix) { - var output = relativeTime(this, !withSuffix, this.localeData()); - - if (withSuffix) { - output = this.localeData().pastFuture(+this, output); - } - - return this.localeData().postformat(output); - }, - - add : function (input, val) { - // supports only 2.0-style add(1, 's') or add(moment) - var dur = moment.duration(input, val); - - this._milliseconds += dur._milliseconds; - this._days += dur._days; - this._months += dur._months; - - this._bubble(); - - return this; - }, - - subtract : function (input, val) { - var dur = moment.duration(input, val); - - this._milliseconds -= dur._milliseconds; - this._days -= dur._days; - this._months -= dur._months; - - this._bubble(); - - return this; - }, - - get : function (units) { - units = normalizeUnits(units); - return this[units.toLowerCase() + 's'](); - }, - - as : function (units) { - var days, months; - units = normalizeUnits(units); - - if (units === 'month' || units === 'year') { - days = this._days + this._milliseconds / 864e5; - months = this._months + daysToYears(days) * 12; - return units === 'month' ? months : months / 12; - } else { - // handle milliseconds separately because of floating point math errors (issue #1867) - days = this._days + Math.round(yearsToDays(this._months / 12)); - switch (units) { - case 'week': return days / 7 + this._milliseconds / 6048e5; - case 'day': return days + this._milliseconds / 864e5; - case 'hour': return days * 24 + this._milliseconds / 36e5; - case 'minute': return days * 24 * 60 + this._milliseconds / 6e4; - case 'second': return days * 24 * 60 * 60 + this._milliseconds / 1000; - // Math.floor prevents floating point math errors here - case 'millisecond': return Math.floor(days * 24 * 60 * 60 * 1000) + this._milliseconds; - default: throw new Error('Unknown unit ' + units); - } - } - }, - - lang : moment.fn.lang, - locale : moment.fn.locale, - - toIsoString : deprecate( - 'toIsoString() is deprecated. Please use toISOString() instead ' + - '(notice the capitals)', - function () { - return this.toISOString(); - } - ), - - toISOString : function () { - // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js - var years = Math.abs(this.years()), - months = Math.abs(this.months()), - days = Math.abs(this.days()), - hours = Math.abs(this.hours()), - minutes = Math.abs(this.minutes()), - seconds = Math.abs(this.seconds() + this.milliseconds() / 1000); - - if (!this.asSeconds()) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } - - return (this.asSeconds() < 0 ? '-' : '') + - 'P' + - (years ? years + 'Y' : '') + - (months ? months + 'M' : '') + - (days ? days + 'D' : '') + - ((hours || minutes || seconds) ? 'T' : '') + - (hours ? hours + 'H' : '') + - (minutes ? minutes + 'M' : '') + - (seconds ? seconds + 'S' : ''); - }, - - localeData : function () { - return this._locale; - } - }); - - moment.duration.fn.toString = moment.duration.fn.toISOString; - - function makeDurationGetter(name) { - moment.duration.fn[name] = function () { - return this._data[name]; - }; - } - - for (i in unitMillisecondFactors) { - if (hasOwnProp(unitMillisecondFactors, i)) { - makeDurationGetter(i.toLowerCase()); - } - } - - moment.duration.fn.asMilliseconds = function () { - return this.as('ms'); - }; - moment.duration.fn.asSeconds = function () { - return this.as('s'); - }; - moment.duration.fn.asMinutes = function () { - return this.as('m'); - }; - moment.duration.fn.asHours = function () { - return this.as('h'); - }; - moment.duration.fn.asDays = function () { - return this.as('d'); - }; - moment.duration.fn.asWeeks = function () { - return this.as('weeks'); - }; - moment.duration.fn.asMonths = function () { - return this.as('M'); - }; - moment.duration.fn.asYears = function () { - return this.as('y'); - }; - - /************************************ - Default Locale - ************************************/ - - - // Set default locale, other locale will inherit from English. - moment.locale('en', { - ordinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { - var b = number % 10, - output = (toInt(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); - - /* EMBED_LOCALES */ - - /************************************ - Exposing Moment - ************************************/ - - function makeGlobal(shouldDeprecate) { - /*global ender:false */ - if (typeof ender !== 'undefined') { - return; - } - oldGlobalMoment = globalScope.moment; - if (shouldDeprecate) { - globalScope.moment = deprecate( - 'Accessing Moment through the global scope is ' + - 'deprecated, and will be removed in an upcoming ' + - 'release.', - moment); - } else { - globalScope.moment = moment; - } - } - - // CommonJS module is defined - if (hasModule) { - module.exports = moment; - } else if (true) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) { - if (module.config && module.config() && module.config().noGlobal === true) { - // release the global variable - globalScope.moment = oldGlobalMoment; - } - - return moment; - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - makeGlobal(true); - } else { - makeGlobal(); - } - }).call(this); - - /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(71)(module))) - -/***/ }, -/* 59 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v1.1.3 - 2014-05-20 - * http://eightmedia.github.io/hammer.js - * - * Copyright (c) 2014 Jorik Tangelder ; - * Licensed under the MIT license */ - - (function(window, undefined) { - 'use strict'; - - /** - * @main - * @module hammer - * - * @class Hammer - * @static - */ - - /** - * Hammer, use this to create instances - * ```` - * var hammertime = new Hammer(myElement); - * ```` - * - * @method Hammer - * @param {HTMLElement} element - * @param {Object} [options={}] - * @return {Hammer.Instance} - */ - var Hammer = function Hammer(element, options) { - return new Hammer.Instance(element, options || {}); - }; - - /** - * version, as defined in package.json - * the value will be set at each build - * @property VERSION - * @final - * @type {String} - */ - Hammer.VERSION = '1.1.3'; - - /** - * default settings. - * more settings are defined per gesture at `/gestures`. Each gesture can be disabled/enabled - * by setting it's name (like `swipe`) to false. - * You can set the defaults for all instances by changing this object before creating an instance. - * @example - * ```` - * Hammer.defaults.drag = false; - * Hammer.defaults.behavior.touchAction = 'pan-y'; - * delete Hammer.defaults.behavior.userSelect; - * ```` - * @property defaults - * @type {Object} - */ - Hammer.defaults = { - /** - * this setting object adds styles and attributes to the element to prevent the browser from doing - * its native behavior. The css properties are auto prefixed for the browsers when needed. - * @property defaults.behavior - * @type {Object} - */ - behavior: { - /** - * Disables text selection to improve the dragging gesture. When the value is `none` it also sets - * `onselectstart=false` for IE on the element. Mainly for desktop browsers. - * @property defaults.behavior.userSelect - * @type {String} - * @default 'none' - */ - userSelect: 'none', - - /** - * Specifies whether and how a given region can be manipulated by the user (for instance, by panning or zooming). - * Used by Chrome 35> and IE10>. By default this makes the element blocking any touch event. - * @property defaults.behavior.touchAction - * @type {String} - * @default: 'pan-y' - */ - touchAction: 'pan-y', - - /** - * Disables the default callout shown when you touch and hold a touch target. - * On iOS, when you touch and hold a touch target such as a link, Safari displays - * a callout containing information about the link. This property allows you to disable that callout. - * @property defaults.behavior.touchCallout - * @type {String} - * @default 'none' - */ - touchCallout: 'none', - - /** - * Specifies whether zooming is enabled. Used by IE10> - * @property defaults.behavior.contentZooming - * @type {String} - * @default 'none' - */ - contentZooming: 'none', - - /** - * Specifies that an entire element should be draggable instead of its contents. - * Mainly for desktop browsers. - * @property defaults.behavior.userDrag - * @type {String} - * @default 'none' - */ - userDrag: 'none', - - /** - * Overrides the highlight color shown when the user taps a link or a JavaScript - * clickable element in Safari on iPhone. This property obeys the alpha value, if specified. - * - * If you don't specify an alpha value, Safari on iPhone applies a default alpha value - * to the color. To disable tap highlighting, set the alpha value to 0 (invisible). - * If you set the alpha value to 1.0 (opaque), the element is not visible when tapped. - * @property defaults.behavior.tapHighlightColor - * @type {String} - * @default 'rgba(0,0,0,0)' - */ - tapHighlightColor: 'rgba(0,0,0,0)' - } - }; - - /** - * hammer document where the base events are added at - * @property DOCUMENT - * @type {HTMLElement} - * @default window.document - */ - Hammer.DOCUMENT = document; - - /** - * detect support for pointer events - * @property HAS_POINTEREVENTS - * @type {Boolean} - */ - Hammer.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled; - - /** - * detect support for touch events - * @property HAS_TOUCHEVENTS - * @type {Boolean} - */ - Hammer.HAS_TOUCHEVENTS = ('ontouchstart' in window); - - /** - * detect mobile browsers - * @property IS_MOBILE - * @type {Boolean} - */ - Hammer.IS_MOBILE = /mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent); - - /** - * detect if we want to support mouseevents at all - * @property NO_MOUSEEVENTS - * @type {Boolean} - */ - Hammer.NO_MOUSEEVENTS = (Hammer.HAS_TOUCHEVENTS && Hammer.IS_MOBILE) || Hammer.HAS_POINTEREVENTS; - - /** - * interval in which Hammer recalculates current velocity/direction/angle in ms - * @property CALCULATE_INTERVAL - * @type {Number} - * @default 25 - */ - Hammer.CALCULATE_INTERVAL = 25; - - /** - * eventtypes per touchevent (start, move, end) are filled by `Event.determineEventTypes` on `setup` - * the object contains the DOM event names per type (`EVENT_START`, `EVENT_MOVE`, `EVENT_END`) - * @property EVENT_TYPES - * @private - * @writeOnce - * @type {Object} - */ - var EVENT_TYPES = {}; - - /** - * direction strings, for safe comparisons - * @property DIRECTION_DOWN|LEFT|UP|RIGHT - * @final - * @type {String} - * @default 'down' 'left' 'up' 'right' - */ - var DIRECTION_DOWN = Hammer.DIRECTION_DOWN = 'down'; - var DIRECTION_LEFT = Hammer.DIRECTION_LEFT = 'left'; - var DIRECTION_UP = Hammer.DIRECTION_UP = 'up'; - var DIRECTION_RIGHT = Hammer.DIRECTION_RIGHT = 'right'; - - /** - * pointertype strings, for safe comparisons - * @property POINTER_MOUSE|TOUCH|PEN - * @final - * @type {String} - * @default 'mouse' 'touch' 'pen' - */ - var POINTER_MOUSE = Hammer.POINTER_MOUSE = 'mouse'; - var POINTER_TOUCH = Hammer.POINTER_TOUCH = 'touch'; - var POINTER_PEN = Hammer.POINTER_PEN = 'pen'; - - /** - * eventtypes - * @property EVENT_START|MOVE|END|RELEASE|TOUCH - * @final - * @type {String} - * @default 'start' 'change' 'move' 'end' 'release' 'touch' - */ - var EVENT_START = Hammer.EVENT_START = 'start'; - var EVENT_MOVE = Hammer.EVENT_MOVE = 'move'; - var EVENT_END = Hammer.EVENT_END = 'end'; - var EVENT_RELEASE = Hammer.EVENT_RELEASE = 'release'; - var EVENT_TOUCH = Hammer.EVENT_TOUCH = 'touch'; - - /** - * if the window events are set... - * @property READY - * @writeOnce - * @type {Boolean} - * @default false - */ - Hammer.READY = false; - - /** - * plugins namespace - * @property plugins - * @type {Object} - */ - Hammer.plugins = Hammer.plugins || {}; - - /** - * gestures namespace - * see `/gestures` for the definitions - * @property gestures - * @type {Object} - */ - Hammer.gestures = Hammer.gestures || {}; - - /** - * setup events to detect gestures on the document - * this function is called when creating an new instance - * @private - */ - function setup() { - if(Hammer.READY) { - return; - } - - // find what eventtypes we add listeners to - Event.determineEventTypes(); - - // Register all gestures inside Hammer.gestures - Utils.each(Hammer.gestures, function(gesture) { - Detection.register(gesture); - }); - - // Add touch events on the document - Event.onTouch(Hammer.DOCUMENT, EVENT_MOVE, Detection.detect); - Event.onTouch(Hammer.DOCUMENT, EVENT_END, Detection.detect); - - // Hammer is ready...! - Hammer.READY = true; - } - - /** - * @module hammer - * - * @class Utils - * @static - */ - var Utils = Hammer.utils = { - /** - * extend method, could also be used for cloning when `dest` is an empty object. - * changes the dest object - * @method extend - * @param {Object} dest - * @param {Object} src - * @param {Boolean} [merge=false] do a merge - * @return {Object} dest - */ - extend: function extend(dest, src, merge) { - for(var key in src) { - if(!src.hasOwnProperty(key) || (dest[key] !== undefined && merge)) { - continue; - } - dest[key] = src[key]; - } - return dest; - }, - - /** - * simple addEventListener wrapper - * @method on - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - */ - on: function on(element, type, handler) { - element.addEventListener(type, handler, false); - }, - - /** - * simple removeEventListener wrapper - * @method off - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - */ - off: function off(element, type, handler) { - element.removeEventListener(type, handler, false); - }, - - /** - * forEach over arrays and objects - * @method each - * @param {Object|Array} obj - * @param {Function} iterator - * @param {any} iterator.item - * @param {Number} iterator.index - * @param {Object|Array} iterator.obj the source object - * @param {Object} context value to use as `this` in the iterator - */ - each: function each(obj, iterator, context) { - var i, len; - - // native forEach on arrays - if('forEach' in obj) { - obj.forEach(iterator, context); - // arrays - } else if(obj.length !== undefined) { - for(i = 0, len = obj.length; i < len; i++) { - if(iterator.call(context, obj[i], i, obj) === false) { - return; - } - } - // objects - } else { - for(i in obj) { - if(obj.hasOwnProperty(i) && - iterator.call(context, obj[i], i, obj) === false) { - return; - } - } - } - }, - - /** - * find if a string contains the string using indexOf - * @method inStr - * @param {String} src - * @param {String} find - * @return {Boolean} found - */ - inStr: function inStr(src, find) { - return src.indexOf(find) > -1; - }, - - /** - * find if a array contains the object using indexOf or a simple polyfill - * @method inArray - * @param {String} src - * @param {String} find - * @return {Boolean|Number} false when not found, or the index - */ - inArray: function inArray(src, find) { - if(src.indexOf) { - var index = src.indexOf(find); - return (index === -1) ? false : index; - } else { - for(var i = 0, len = src.length; i < len; i++) { - if(src[i] === find) { - return i; - } - } - return false; - } - }, - - /** - * convert an array-like object (`arguments`, `touchlist`) to an array - * @method toArray - * @param {Object} obj - * @return {Array} - */ - toArray: function toArray(obj) { - return Array.prototype.slice.call(obj, 0); - }, - - /** - * find if a node is in the given parent - * @method hasParent - * @param {HTMLElement} node - * @param {HTMLElement} parent - * @return {Boolean} found - */ - hasParent: function hasParent(node, parent) { - while(node) { - if(node == parent) { - return true; - } - node = node.parentNode; - } - return false; - }, - - /** - * get the center of all the touches - * @method getCenter - * @param {Array} touches - * @return {Object} center contains `pageX`, `pageY`, `clientX` and `clientY` properties - */ - getCenter: function getCenter(touches) { - var pageX = [], - pageY = [], - clientX = [], - clientY = [], - min = Math.min, - max = Math.max; - - // no need to loop when only one touch - if(touches.length === 1) { - return { - pageX: touches[0].pageX, - pageY: touches[0].pageY, - clientX: touches[0].clientX, - clientY: touches[0].clientY - }; - } - - Utils.each(touches, function(touch) { - pageX.push(touch.pageX); - pageY.push(touch.pageY); - clientX.push(touch.clientX); - clientY.push(touch.clientY); - }); - - return { - pageX: (min.apply(Math, pageX) + max.apply(Math, pageX)) / 2, - pageY: (min.apply(Math, pageY) + max.apply(Math, pageY)) / 2, - clientX: (min.apply(Math, clientX) + max.apply(Math, clientX)) / 2, - clientY: (min.apply(Math, clientY) + max.apply(Math, clientY)) / 2 - }; - }, - - /** - * calculate the velocity between two points. unit is in px per ms. - * @method getVelocity - * @param {Number} deltaTime - * @param {Number} deltaX - * @param {Number} deltaY - * @return {Object} velocity `x` and `y` - */ - getVelocity: function getVelocity(deltaTime, deltaX, deltaY) { - return { - x: Math.abs(deltaX / deltaTime) || 0, - y: Math.abs(deltaY / deltaTime) || 0 - }; - }, - - /** - * calculate the angle between two coordinates - * @method getAngle - * @param {Touch} touch1 - * @param {Touch} touch2 - * @return {Number} angle - */ - getAngle: function getAngle(touch1, touch2) { - var x = touch2.clientX - touch1.clientX, - y = touch2.clientY - touch1.clientY; - - return Math.atan2(y, x) * 180 / Math.PI; - }, - - /** - * do a small comparision to get the direction between two touches. - * @method getDirection - * @param {Touch} touch1 - * @param {Touch} touch2 - * @return {String} direction matches `DIRECTION_LEFT|RIGHT|UP|DOWN` - */ - getDirection: function getDirection(touch1, touch2) { - var x = Math.abs(touch1.clientX - touch2.clientX), - y = Math.abs(touch1.clientY - touch2.clientY); - - if(x >= y) { - return touch1.clientX - touch2.clientX > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; - } - return touch1.clientY - touch2.clientY > 0 ? DIRECTION_UP : DIRECTION_DOWN; - }, - - /** - * calculate the distance between two touches - * @method getDistance - * @param {Touch}touch1 - * @param {Touch} touch2 - * @return {Number} distance - */ - getDistance: function getDistance(touch1, touch2) { - var x = touch2.clientX - touch1.clientX, - y = touch2.clientY - touch1.clientY; - - return Math.sqrt((x * x) + (y * y)); - }, - - /** - * calculate the scale factor between two touchLists - * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out - * @method getScale - * @param {Array} start array of touches - * @param {Array} end array of touches - * @return {Number} scale - */ - getScale: function getScale(start, end) { - // need two fingers... - if(start.length >= 2 && end.length >= 2) { - return this.getDistance(end[0], end[1]) / this.getDistance(start[0], start[1]); - } - return 1; - }, - - /** - * calculate the rotation degrees between two touchLists - * @method getRotation - * @param {Array} start array of touches - * @param {Array} end array of touches - * @return {Number} rotation - */ - getRotation: function getRotation(start, end) { - // need two fingers - if(start.length >= 2 && end.length >= 2) { - return this.getAngle(end[1], end[0]) - this.getAngle(start[1], start[0]); - } - return 0; - }, - - /** - * find out if the direction is vertical * - * @method isVertical - * @param {String} direction matches `DIRECTION_UP|DOWN` - * @return {Boolean} is_vertical - */ - isVertical: function isVertical(direction) { - return direction == DIRECTION_UP || direction == DIRECTION_DOWN; - }, - - /** - * set css properties with their prefixes - * @param {HTMLElement} element - * @param {String} prop - * @param {String} value - * @param {Boolean} [toggle=true] - * @return {Boolean} - */ - setPrefixedCss: function setPrefixedCss(element, prop, value, toggle) { - var prefixes = ['', 'Webkit', 'Moz', 'O', 'ms']; - prop = Utils.toCamelCase(prop); - - for(var i = 0; i < prefixes.length; i++) { - var p = prop; - // prefixes - if(prefixes[i]) { - p = prefixes[i] + p.slice(0, 1).toUpperCase() + p.slice(1); - } - - // test the style - if(p in element.style) { - element.style[p] = (toggle == null || toggle) && value || ''; - break; - } - } - }, - - /** - * toggle browser default behavior by setting css properties. - * `userSelect='none'` also sets `element.onselectstart` to false - * `userDrag='none'` also sets `element.ondragstart` to false - * - * @method toggleBehavior - * @param {HtmlElement} element - * @param {Object} props - * @param {Boolean} [toggle=true] - */ - toggleBehavior: function toggleBehavior(element, props, toggle) { - if(!props || !element || !element.style) { - return; - } - - // set the css properties - Utils.each(props, function(value, prop) { - Utils.setPrefixedCss(element, prop, value, toggle); - }); - - var falseFn = toggle && function() { - return false; - }; - - // also the disable onselectstart - if(props.userSelect == 'none') { - element.onselectstart = falseFn; - } - // and disable ondragstart - if(props.userDrag == 'none') { - element.ondragstart = falseFn; - } - }, - - /** - * convert a string with underscores to camelCase - * so prevent_default becomes preventDefault - * @param {String} str - * @return {String} camelCaseStr - */ - toCamelCase: function toCamelCase(str) { - return str.replace(/[_-]([a-z])/g, function(s) { - return s[1].toUpperCase(); - }); - } - }; - - - /** - * @module hammer - */ - /** - * @class Event - * @static - */ - var Event = Hammer.event = { - /** - * when touch events have been fired, this is true - * this is used to stop mouse events - * @property prevent_mouseevents - * @private - * @type {Boolean} - */ - preventMouseEvents: false, - - /** - * if EVENT_START has been fired - * @property started - * @private - * @type {Boolean} - */ - started: false, - - /** - * when the mouse is hold down, this is true - * @property should_detect - * @private - * @type {Boolean} - */ - shouldDetect: false, - - /** - * simple event binder with a hook and support for multiple types - * @method on - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - * @param {Function} [hook] - * @param {Object} hook.type - */ - on: function on(element, type, handler, hook) { - var types = type.split(' '); - Utils.each(types, function(type) { - Utils.on(element, type, handler); - hook && hook(type); - }); - }, - - /** - * simple event unbinder with a hook and support for multiple types - * @method off - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - * @param {Function} [hook] - * @param {Object} hook.type - */ - off: function off(element, type, handler, hook) { - var types = type.split(' '); - Utils.each(types, function(type) { - Utils.off(element, type, handler); - hook && hook(type); - }); - }, - - /** - * the core touch event handler. - * this finds out if we should to detect gestures - * @method onTouch - * @param {HTMLElement} element - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Function} handler - * @return onTouchHandler {Function} the core event handler - */ - onTouch: function onTouch(element, eventType, handler) { - var self = this; - - var onTouchHandler = function onTouchHandler(ev) { - var srcType = ev.type.toLowerCase(), - isPointer = Hammer.HAS_POINTEREVENTS, - isMouse = Utils.inStr(srcType, 'mouse'), - triggerType; - - // if we are in a mouseevent, but there has been a touchevent triggered in this session - // we want to do nothing. simply break out of the event. - if(isMouse && self.preventMouseEvents) { - return; - - // mousebutton must be down - } else if(isMouse && eventType == EVENT_START && ev.button === 0) { - self.preventMouseEvents = false; - self.shouldDetect = true; - } else if(isPointer && eventType == EVENT_START) { - self.shouldDetect = (ev.buttons === 1 || PointerEvent.matchType(POINTER_TOUCH, ev)); - // just a valid start event, but no mouse - } else if(!isMouse && eventType == EVENT_START) { - self.preventMouseEvents = true; - self.shouldDetect = true; - } - - // update the pointer event before entering the detection - if(isPointer && eventType != EVENT_END) { - PointerEvent.updatePointer(eventType, ev); - } - - // we are in a touch/down state, so allowed detection of gestures - if(self.shouldDetect) { - triggerType = self.doDetect.call(self, ev, eventType, element, handler); - } - - // ...and we are done with the detection - // so reset everything to start each detection totally fresh - if(triggerType == EVENT_END) { - self.preventMouseEvents = false; - self.shouldDetect = false; - PointerEvent.reset(); - // update the pointerevent object after the detection - } - - if(isPointer && eventType == EVENT_END) { - PointerEvent.updatePointer(eventType, ev); - } - }; - - this.on(element, EVENT_TYPES[eventType], onTouchHandler); - return onTouchHandler; - }, - - /** - * the core detection method - * this finds out what hammer-touch-events to trigger - * @method doDetect - * @param {Object} ev - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {HTMLElement} element - * @param {Function} handler - * @return {String} triggerType matches `EVENT_START|MOVE|END` - */ - doDetect: function doDetect(ev, eventType, element, handler) { - var touchList = this.getTouchList(ev, eventType); - var touchListLength = touchList.length; - var triggerType = eventType; - var triggerChange = touchList.trigger; // used by fakeMultitouch plugin - var changedLength = touchListLength; - - // at each touchstart-like event we want also want to trigger a TOUCH event... - if(eventType == EVENT_START) { - triggerChange = EVENT_TOUCH; - // ...the same for a touchend-like event - } else if(eventType == EVENT_END) { - triggerChange = EVENT_RELEASE; - - // keep track of how many touches have been removed - changedLength = touchList.length - ((ev.changedTouches) ? ev.changedTouches.length : 1); - } - - // after there are still touches on the screen, - // we just want to trigger a MOVE event. so change the START or END to a MOVE - // but only after detection has been started, the first time we actualy want a START - if(changedLength > 0 && this.started) { - triggerType = EVENT_MOVE; - } - - // detection has been started, we keep track of this, see above - this.started = true; - - // generate some event data, some basic information - var evData = this.collectEventData(element, triggerType, touchList, ev); - - // trigger the triggerType event before the change (TOUCH, RELEASE) events - // but the END event should be at last - if(eventType != EVENT_END) { - handler.call(Detection, evData); - } - - // trigger a change (TOUCH, RELEASE) event, this means the length of the touches changed - if(triggerChange) { - evData.changedLength = changedLength; - evData.eventType = triggerChange; - - handler.call(Detection, evData); - - evData.eventType = triggerType; - delete evData.changedLength; - } - - // trigger the END event - if(triggerType == EVENT_END) { - handler.call(Detection, evData); - - // ...and we are done with the detection - // so reset everything to start each detection totally fresh - this.started = false; - } - - return triggerType; - }, - - /** - * we have different events for each device/browser - * determine what we need and set them in the EVENT_TYPES constant - * the `onTouch` method is bind to these properties. - * @method determineEventTypes - * @return {Object} events - */ - determineEventTypes: function determineEventTypes() { - var types; - if(Hammer.HAS_POINTEREVENTS) { - if(window.PointerEvent) { - types = [ - 'pointerdown', - 'pointermove', - 'pointerup pointercancel lostpointercapture' - ]; - } else { - types = [ - 'MSPointerDown', - 'MSPointerMove', - 'MSPointerUp MSPointerCancel MSLostPointerCapture' - ]; - } - } else if(Hammer.NO_MOUSEEVENTS) { - types = [ - 'touchstart', - 'touchmove', - 'touchend touchcancel' - ]; - } else { - types = [ - 'touchstart mousedown', - 'touchmove mousemove', - 'touchend touchcancel mouseup' - ]; - } - - EVENT_TYPES[EVENT_START] = types[0]; - EVENT_TYPES[EVENT_MOVE] = types[1]; - EVENT_TYPES[EVENT_END] = types[2]; - return EVENT_TYPES; - }, - - /** - * create touchList depending on the event - * @method getTouchList - * @param {Object} ev - * @param {String} eventType - * @return {Array} touches - */ - getTouchList: function getTouchList(ev, eventType) { - // get the fake pointerEvent touchlist - if(Hammer.HAS_POINTEREVENTS) { - return PointerEvent.getTouchList(); - } - - // get the touchlist - if(ev.touches) { - if(eventType == EVENT_MOVE) { - return ev.touches; - } - - var identifiers = []; - var concat = [].concat(Utils.toArray(ev.touches), Utils.toArray(ev.changedTouches)); - var touchList = []; - - Utils.each(concat, function(touch) { - if(Utils.inArray(identifiers, touch.identifier) === false) { - touchList.push(touch); - } - identifiers.push(touch.identifier); - }); - - return touchList; - } - - // make fake touchList from mouse position - ev.identifier = 1; - return [ev]; - }, - - /** - * collect basic event data - * @method collectEventData - * @param {HTMLElement} element - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Array} touches - * @param {Object} ev - * @return {Object} ev - */ - collectEventData: function collectEventData(element, eventType, touches, ev) { - // find out pointerType - var pointerType = POINTER_TOUCH; - if(Utils.inStr(ev.type, 'mouse') || PointerEvent.matchType(POINTER_MOUSE, ev)) { - pointerType = POINTER_MOUSE; - } else if(PointerEvent.matchType(POINTER_PEN, ev)) { - pointerType = POINTER_PEN; - } - - return { - center: Utils.getCenter(touches), - timeStamp: Date.now(), - target: ev.target, - touches: touches, - eventType: eventType, - pointerType: pointerType, - srcEvent: ev, - - /** - * prevent the browser default actions - * mostly used to disable scrolling of the browser - */ - preventDefault: function() { - var srcEvent = this.srcEvent; - srcEvent.preventManipulation && srcEvent.preventManipulation(); - srcEvent.preventDefault && srcEvent.preventDefault(); - }, - - /** - * stop bubbling the event up to its parents - */ - stopPropagation: function() { - this.srcEvent.stopPropagation(); - }, - - /** - * immediately stop gesture detection - * might be useful after a swipe was detected - * @return {*} - */ - stopDetect: function() { - return Detection.stopDetect(); - } - }; - } - }; - - - /** - * @module hammer - * - * @class PointerEvent - * @static - */ - var PointerEvent = Hammer.PointerEvent = { - /** - * holds all pointers, by `identifier` - * @property pointers - * @type {Object} - */ - pointers: {}, - - /** - * get the pointers as an array - * @method getTouchList - * @return {Array} touchlist - */ - getTouchList: function getTouchList() { - var touchlist = []; - // we can use forEach since pointerEvents only is in IE10 - Utils.each(this.pointers, function(pointer) { - touchlist.push(pointer); - }); - return touchlist; - }, - - /** - * update the position of a pointer - * @method updatePointer - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Object} pointerEvent - */ - updatePointer: function updatePointer(eventType, pointerEvent) { - if(eventType == EVENT_END || (eventType != EVENT_END && pointerEvent.buttons !== 1)) { - delete this.pointers[pointerEvent.pointerId]; - } else { - pointerEvent.identifier = pointerEvent.pointerId; - this.pointers[pointerEvent.pointerId] = pointerEvent; - } - }, - - /** - * check if ev matches pointertype - * @method matchType - * @param {String} pointerType matches `POINTER_MOUSE|TOUCH|PEN` - * @param {PointerEvent} ev - */ - matchType: function matchType(pointerType, ev) { - if(!ev.pointerType) { - return false; - } - - var pt = ev.pointerType, - types = {}; - - types[POINTER_MOUSE] = (pt === (ev.MSPOINTER_TYPE_MOUSE || POINTER_MOUSE)); - types[POINTER_TOUCH] = (pt === (ev.MSPOINTER_TYPE_TOUCH || POINTER_TOUCH)); - types[POINTER_PEN] = (pt === (ev.MSPOINTER_TYPE_PEN || POINTER_PEN)); - return types[pointerType]; - }, - - /** - * reset the stored pointers - * @method reset - */ - reset: function resetList() { - this.pointers = {}; - } - }; - - - /** - * @module hammer - * - * @class Detection - * @static - */ - var Detection = Hammer.detection = { - // contains all registred Hammer.gestures in the correct order - gestures: [], - - // data of the current Hammer.gesture detection session - current: null, - - // the previous Hammer.gesture session data - // is a full clone of the previous gesture.current object - previous: null, - - // when this becomes true, no gestures are fired - stopped: false, - - /** - * start Hammer.gesture detection - * @method startDetect - * @param {Hammer.Instance} inst - * @param {Object} eventData - */ - startDetect: function startDetect(inst, eventData) { - // already busy with a Hammer.gesture detection on an element - if(this.current) { - return; - } - - this.stopped = false; - - // holds current session - this.current = { - inst: inst, // reference to HammerInstance we're working for - startEvent: Utils.extend({}, eventData), // start eventData for distances, timing etc - lastEvent: false, // last eventData - lastCalcEvent: false, // last eventData for calculations. - futureCalcEvent: false, // last eventData for calculations. - lastCalcData: {}, // last lastCalcData - name: '' // current gesture we're in/detected, can be 'tap', 'hold' etc - }; - - this.detect(eventData); - }, - - /** - * Hammer.gesture detection - * @method detect - * @param {Object} eventData - * @return {any} - */ - detect: function detect(eventData) { - if(!this.current || this.stopped) { - return; - } - - // extend event data with calculations about scale, distance etc - eventData = this.extendEventData(eventData); - - // hammer instance and instance options - var inst = this.current.inst, - instOptions = inst.options; - - // call Hammer.gesture handlers - Utils.each(this.gestures, function triggerGesture(gesture) { - // only when the instance options have enabled this gesture - if(!this.stopped && inst.enabled && instOptions[gesture.name]) { - gesture.handler.call(gesture, eventData, inst); - } - }, this); - - // store as previous event event - if(this.current) { - this.current.lastEvent = eventData; - } - - if(eventData.eventType == EVENT_END) { - this.stopDetect(); - } - - return eventData; - }, - - /** - * clear the Hammer.gesture vars - * this is called on endDetect, but can also be used when a final Hammer.gesture has been detected - * to stop other Hammer.gestures from being fired - * @method stopDetect - */ - stopDetect: function stopDetect() { - // clone current data to the store as the previous gesture - // used for the double tap gesture, since this is an other gesture detect session - this.previous = Utils.extend({}, this.current); - - // reset the current - this.current = null; - this.stopped = true; - }, - - /** - * calculate velocity, angle and direction - * @method getVelocityData - * @param {Object} ev - * @param {Object} center - * @param {Number} deltaTime - * @param {Number} deltaX - * @param {Number} deltaY - */ - getCalculatedData: function getCalculatedData(ev, center, deltaTime, deltaX, deltaY) { - var cur = this.current, - recalc = false, - calcEv = cur.lastCalcEvent, - calcData = cur.lastCalcData; - - if(calcEv && ev.timeStamp - calcEv.timeStamp > Hammer.CALCULATE_INTERVAL) { - center = calcEv.center; - deltaTime = ev.timeStamp - calcEv.timeStamp; - deltaX = ev.center.clientX - calcEv.center.clientX; - deltaY = ev.center.clientY - calcEv.center.clientY; - recalc = true; - } - - if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { - cur.futureCalcEvent = ev; - } - - if(!cur.lastCalcEvent || recalc) { - calcData.velocity = Utils.getVelocity(deltaTime, deltaX, deltaY); - calcData.angle = Utils.getAngle(center, ev.center); - calcData.direction = Utils.getDirection(center, ev.center); - - cur.lastCalcEvent = cur.futureCalcEvent || ev; - cur.futureCalcEvent = ev; - } - - ev.velocityX = calcData.velocity.x; - ev.velocityY = calcData.velocity.y; - ev.interimAngle = calcData.angle; - ev.interimDirection = calcData.direction; - }, - - /** - * extend eventData for Hammer.gestures - * @method extendEventData - * @param {Object} ev - * @return {Object} ev - */ - extendEventData: function extendEventData(ev) { - var cur = this.current, - startEv = cur.startEvent, - lastEv = cur.lastEvent || startEv; - - // update the start touchlist to calculate the scale/rotation - if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { - startEv.touches = []; - Utils.each(ev.touches, function(touch) { - startEv.touches.push({ - clientX: touch.clientX, - clientY: touch.clientY - }); - }); - } - - var deltaTime = ev.timeStamp - startEv.timeStamp, - deltaX = ev.center.clientX - startEv.center.clientX, - deltaY = ev.center.clientY - startEv.center.clientY; - - this.getCalculatedData(ev, lastEv.center, deltaTime, deltaX, deltaY); - - Utils.extend(ev, { - startEvent: startEv, - - deltaTime: deltaTime, - deltaX: deltaX, - deltaY: deltaY, - - distance: Utils.getDistance(startEv.center, ev.center), - angle: Utils.getAngle(startEv.center, ev.center), - direction: Utils.getDirection(startEv.center, ev.center), - scale: Utils.getScale(startEv.touches, ev.touches), - rotation: Utils.getRotation(startEv.touches, ev.touches) - }); - - return ev; - }, - - /** - * register new gesture - * @method register - * @param {Object} gesture object, see `gestures/` for documentation - * @return {Array} gestures - */ - register: function register(gesture) { - // add an enable gesture options if there is no given - var options = gesture.defaults || {}; - if(options[gesture.name] === undefined) { - options[gesture.name] = true; - } - - // extend Hammer default options with the Hammer.gesture options - Utils.extend(Hammer.defaults, options, true); - - // set its index - gesture.index = gesture.index || 1000; - - // add Hammer.gesture to the list - this.gestures.push(gesture); - - // sort the list by index - this.gestures.sort(function(a, b) { - if(a.index < b.index) { - return -1; - } - if(a.index > b.index) { - return 1; - } - return 0; - }); - - return this.gestures; - } - }; - - - /** - * @module hammer - */ - - /** - * create new hammer instance - * all methods should return the instance itself, so it is chainable. - * - * @class Instance - * @constructor - * @param {HTMLElement} element - * @param {Object} [options={}] options are merged with `Hammer.defaults` - * @return {Hammer.Instance} - */ - Hammer.Instance = function(element, options) { - var self = this; - - // setup HammerJS window events and register all gestures - // this also sets up the default options - setup(); - - /** - * @property element - * @type {HTMLElement} - */ - this.element = element; - - /** - * @property enabled - * @type {Boolean} - * @protected - */ - this.enabled = true; - - /** - * options, merged with the defaults - * options with an _ are converted to camelCase - * @property options - * @type {Object} - */ - Utils.each(options, function(value, name) { - delete options[name]; - options[Utils.toCamelCase(name)] = value; - }); - - this.options = Utils.extend(Utils.extend({}, Hammer.defaults), options || {}); - - // add some css to the element to prevent the browser from doing its native behavoir - if(this.options.behavior) { - Utils.toggleBehavior(this.element, this.options.behavior, true); - } - - /** - * event start handler on the element to start the detection - * @property eventStartHandler - * @type {Object} - */ - this.eventStartHandler = Event.onTouch(element, EVENT_START, function(ev) { - if(self.enabled && ev.eventType == EVENT_START) { - Detection.startDetect(self, ev); - } else if(ev.eventType == EVENT_TOUCH) { - Detection.detect(ev); - } - }); - - /** - * keep a list of user event handlers which needs to be removed when calling 'dispose' - * @property eventHandlers - * @type {Array} - */ - this.eventHandlers = []; - }; - - Hammer.Instance.prototype = { - /** - * bind events to the instance - * @method on - * @chainable - * @param {String} gestures multiple gestures by splitting with a space - * @param {Function} handler - * @param {Object} handler.ev event object - */ - on: function onEvent(gestures, handler) { - var self = this; - Event.on(self.element, gestures, handler, function(type) { - self.eventHandlers.push({ gesture: type, handler: handler }); - }); - return self; - }, - - /** - * unbind events to the instance - * @method off - * @chainable - * @param {String} gestures - * @param {Function} handler - */ - off: function offEvent(gestures, handler) { - var self = this; - - Event.off(self.element, gestures, handler, function(type) { - var index = Utils.inArray({ gesture: type, handler: handler }); - if(index !== false) { - self.eventHandlers.splice(index, 1); - } - }); - return self; - }, - - /** - * trigger gesture event - * @method trigger - * @chainable - * @param {String} gesture - * @param {Object} [eventData] - */ - trigger: function triggerEvent(gesture, eventData) { - // optional - if(!eventData) { - eventData = {}; - } - - // create DOM event - var event = Hammer.DOCUMENT.createEvent('Event'); - event.initEvent(gesture, true, true); - event.gesture = eventData; - - // trigger on the target if it is in the instance element, - // this is for event delegation tricks - var element = this.element; - if(Utils.hasParent(eventData.target, element)) { - element = eventData.target; - } - - element.dispatchEvent(event); - return this; - }, - - /** - * enable of disable hammer.js detection - * @method enable - * @chainable - * @param {Boolean} state - */ - enable: function enable(state) { - this.enabled = state; - return this; - }, - - /** - * dispose this hammer instance - * @method dispose - * @return {Null} - */ - dispose: function dispose() { - var i, eh; - - // undo all changes made by stop_browser_behavior - Utils.toggleBehavior(this.element, this.options.behavior, false); - - // unbind all custom event handlers - for(i = -1; (eh = this.eventHandlers[++i]);) { - Utils.off(this.element, eh.gesture, eh.handler); - } - - this.eventHandlers = []; - - // unbind the start event listener - Event.off(this.element, EVENT_TYPES[EVENT_START], this.eventStartHandler); - - return null; - } - }; - - - /** - * @module gestures - */ - /** - * Move with x fingers (default 1) around on the page. - * Preventing the default browser behavior is a good way to improve feel and working. - * ```` - * hammertime.on("drag", function(ev) { - * console.log(ev); - * ev.gesture.preventDefault(); - * }); - * ```` - * - * @class Drag - * @static - */ - /** - * @event drag - * @param {Object} ev - */ - /** - * @event dragstart - * @param {Object} ev - */ - /** - * @event dragend - * @param {Object} ev - */ - /** - * @event drapleft - * @param {Object} ev - */ - /** - * @event dragright - * @param {Object} ev - */ - /** - * @event dragup - * @param {Object} ev - */ - /** - * @event dragdown - * @param {Object} ev - */ - - /** - * @param {String} name - */ - (function(name) { - var triggered = false; - - function dragGesture(ev, inst) { - var cur = Detection.current; - - // max touches - if(inst.options.dragMaxTouches > 0 && - ev.touches.length > inst.options.dragMaxTouches) { - return; - } - - switch(ev.eventType) { - case EVENT_START: - triggered = false; - break; - - case EVENT_MOVE: - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(ev.distance < inst.options.dragMinDistance && - cur.name != name) { - return; - } - - var startCenter = cur.startEvent.center; - - // we are dragging! - if(cur.name != name) { - cur.name = name; - if(inst.options.dragDistanceCorrection && ev.distance > 0) { - // When a drag is triggered, set the event center to dragMinDistance pixels from the original event center. - // Without this correction, the dragged distance would jumpstart at dragMinDistance pixels instead of at 0. - // It might be useful to save the original start point somewhere - var factor = Math.abs(inst.options.dragMinDistance / ev.distance); - startCenter.pageX += ev.deltaX * factor; - startCenter.pageY += ev.deltaY * factor; - startCenter.clientX += ev.deltaX * factor; - startCenter.clientY += ev.deltaY * factor; - - // recalculate event data using new start point - ev = Detection.extendEventData(ev); - } - } - - // lock drag to axis? - if(cur.lastEvent.dragLockToAxis || - ( inst.options.dragLockToAxis && - inst.options.dragLockMinDistance <= ev.distance - )) { - ev.dragLockToAxis = true; - } - - // keep direction on the axis that the drag gesture started on - var lastDirection = cur.lastEvent.direction; - if(ev.dragLockToAxis && lastDirection !== ev.direction) { - if(Utils.isVertical(lastDirection)) { - ev.direction = (ev.deltaY < 0) ? DIRECTION_UP : DIRECTION_DOWN; - } else { - ev.direction = (ev.deltaX < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; - } - } - - // first time, trigger dragstart event - if(!triggered) { - inst.trigger(name + 'start', ev); - triggered = true; - } - - // trigger events - inst.trigger(name, ev); - inst.trigger(name + ev.direction, ev); - - var isVertical = Utils.isVertical(ev.direction); - - // block the browser events - if((inst.options.dragBlockVertical && isVertical) || - (inst.options.dragBlockHorizontal && !isVertical)) { - ev.preventDefault(); - } - break; - - case EVENT_RELEASE: - if(triggered && ev.changedLength <= inst.options.dragMaxTouches) { - inst.trigger(name + 'end', ev); - triggered = false; - } - break; - - case EVENT_END: - triggered = false; - break; - } - } - - Hammer.gestures.Drag = { - name: name, - index: 50, - handler: dragGesture, - defaults: { - /** - * minimal movement that have to be made before the drag event gets triggered - * @property dragMinDistance - * @type {Number} - * @default 10 - */ - dragMinDistance: 10, - - /** - * Set dragDistanceCorrection to true to make the starting point of the drag - * be calculated from where the drag was triggered, not from where the touch started. - * Useful to avoid a jerk-starting drag, which can make fine-adjustments - * through dragging difficult, and be visually unappealing. - * @property dragDistanceCorrection - * @type {Boolean} - * @default true - */ - dragDistanceCorrection: true, - - /** - * set 0 for unlimited, but this can conflict with transform - * @property dragMaxTouches - * @type {Number} - * @default 1 - */ - dragMaxTouches: 1, - - /** - * prevent default browser behavior when dragging occurs - * be careful with it, it makes the element a blocking element - * when you are using the drag gesture, it is a good practice to set this true - * @property dragBlockHorizontal - * @type {Boolean} - * @default false - */ - dragBlockHorizontal: false, - - /** - * same as `dragBlockHorizontal`, but for vertical movement - * @property dragBlockVertical - * @type {Boolean} - * @default false - */ - dragBlockVertical: false, - - /** - * dragLockToAxis keeps the drag gesture on the axis that it started on, - * It disallows vertical directions if the initial direction was horizontal, and vice versa. - * @property dragLockToAxis - * @type {Boolean} - * @default false - */ - dragLockToAxis: false, - - /** - * drag lock only kicks in when distance > dragLockMinDistance - * This way, locking occurs only when the distance has become large enough to reliably determine the direction - * @property dragLockMinDistance - * @type {Number} - * @default 25 - */ - dragLockMinDistance: 25 - } - }; - })('drag'); - - /** - * @module gestures - */ - /** - * trigger a simple gesture event, so you can do anything in your handler. - * only usable if you know what your doing... - * - * @class Gesture - * @static - */ - /** - * @event gesture - * @param {Object} ev - */ - Hammer.gestures.Gesture = { - name: 'gesture', - index: 1337, - handler: function releaseGesture(ev, inst) { - inst.trigger(this.name, ev); - } - }; - - /** - * @module gestures - */ - /** - * Touch stays at the same place for x time - * - * @class Hold - * @static - */ - /** - * @event hold - * @param {Object} ev - */ - - /** - * @param {String} name - */ - (function(name) { - var timer; - - function holdGesture(ev, inst) { - var options = inst.options, - current = Detection.current; - - switch(ev.eventType) { - case EVENT_START: - clearTimeout(timer); - - // set the gesture so we can check in the timeout if it still is - current.name = name; - - // set timer and if after the timeout it still is hold, - // we trigger the hold event - timer = setTimeout(function() { - if(current && current.name == name) { - inst.trigger(name, ev); - } - }, options.holdTimeout); - break; - - case EVENT_MOVE: - if(ev.distance > options.holdThreshold) { - clearTimeout(timer); - } - break; - - case EVENT_RELEASE: - clearTimeout(timer); - break; - } - } - - Hammer.gestures.Hold = { - name: name, - index: 10, - defaults: { - /** - * @property holdTimeout - * @type {Number} - * @default 500 - */ - holdTimeout: 500, - - /** - * movement allowed while holding - * @property holdThreshold - * @type {Number} - * @default 2 - */ - holdThreshold: 2 - }, - handler: holdGesture - }; - })('hold'); - - /** - * @module gestures - */ - /** - * when a touch is being released from the page - * - * @class Release - * @static - */ - /** - * @event release - * @param {Object} ev - */ - Hammer.gestures.Release = { - name: 'release', - index: Infinity, - handler: function releaseGesture(ev, inst) { - if(ev.eventType == EVENT_RELEASE) { - inst.trigger(this.name, ev); - } - } - }; - - /** - * @module gestures - */ - /** - * triggers swipe events when the end velocity is above the threshold - * for best usage, set `preventDefault` (on the drag gesture) to `true` - * ```` - * hammertime.on("dragleft swipeleft", function(ev) { - * console.log(ev); - * ev.gesture.preventDefault(); - * }); - * ```` - * - * @class Swipe - * @static - */ - /** - * @event swipe - * @param {Object} ev - */ - /** - * @event swipeleft - * @param {Object} ev - */ - /** - * @event swiperight - * @param {Object} ev - */ - /** - * @event swipeup - * @param {Object} ev - */ - /** - * @event swipedown - * @param {Object} ev - */ - Hammer.gestures.Swipe = { - name: 'swipe', - index: 40, - defaults: { - /** - * @property swipeMinTouches - * @type {Number} - * @default 1 - */ - swipeMinTouches: 1, - - /** - * @property swipeMaxTouches - * @type {Number} - * @default 1 - */ - swipeMaxTouches: 1, - - /** - * horizontal swipe velocity - * @property swipeVelocityX - * @type {Number} - * @default 0.6 - */ - swipeVelocityX: 0.6, - - /** - * vertical swipe velocity - * @property swipeVelocityY - * @type {Number} - * @default 0.6 - */ - swipeVelocityY: 0.6 - }, - - handler: function swipeGesture(ev, inst) { - if(ev.eventType == EVENT_RELEASE) { - var touches = ev.touches.length, - options = inst.options; - - // max touches - if(touches < options.swipeMinTouches || - touches > options.swipeMaxTouches) { - return; - } - - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(ev.velocityX > options.swipeVelocityX || - ev.velocityY > options.swipeVelocityY) { - // trigger swipe events - inst.trigger(this.name, ev); - inst.trigger(this.name + ev.direction, ev); - } - } - } - }; - - /** - * @module gestures - */ - /** - * Single tap and a double tap on a place - * - * @class Tap - * @static - */ - /** - * @event tap - * @param {Object} ev - */ - /** - * @event doubletap - * @param {Object} ev - */ - - /** - * @param {String} name - */ - (function(name) { - var hasMoved = false; - - function tapGesture(ev, inst) { - var options = inst.options, - current = Detection.current, - prev = Detection.previous, - sincePrev, - didDoubleTap; - - switch(ev.eventType) { - case EVENT_START: - hasMoved = false; - break; - - case EVENT_MOVE: - hasMoved = hasMoved || (ev.distance > options.tapMaxDistance); - break; - - case EVENT_END: - if(!Utils.inStr(ev.srcEvent.type, 'cancel') && ev.deltaTime < options.tapMaxTime && !hasMoved) { - // previous gesture, for the double tap since these are two different gesture detections - sincePrev = prev && prev.lastEvent && ev.timeStamp - prev.lastEvent.timeStamp; - didDoubleTap = false; - - // check if double tap - if(prev && prev.name == name && - (sincePrev && sincePrev < options.doubleTapInterval) && - ev.distance < options.doubleTapDistance) { - inst.trigger('doubletap', ev); - didDoubleTap = true; - } - - // do a single tap - if(!didDoubleTap || options.tapAlways) { - current.name = name; - inst.trigger(current.name, ev); - } - } - break; - } - } - - Hammer.gestures.Tap = { - name: name, - index: 100, - handler: tapGesture, - defaults: { - /** - * max time of a tap, this is for the slow tappers - * @property tapMaxTime - * @type {Number} - * @default 250 - */ - tapMaxTime: 250, - - /** - * max distance of movement of a tap, this is for the slow tappers - * @property tapMaxDistance - * @type {Number} - * @default 10 - */ - tapMaxDistance: 10, - - /** - * always trigger the `tap` event, even while double-tapping - * @property tapAlways - * @type {Boolean} - * @default true - */ - tapAlways: true, - - /** - * max distance between two taps - * @property doubleTapDistance - * @type {Number} - * @default 20 - */ - doubleTapDistance: 20, - - /** - * max time between two taps - * @property doubleTapInterval - * @type {Number} - * @default 300 - */ - doubleTapInterval: 300 - } - }; - })('tap'); - - /** - * @module gestures - */ - /** - * when a touch is being touched at the page - * - * @class Touch - * @static - */ - /** - * @event touch - * @param {Object} ev - */ - Hammer.gestures.Touch = { - name: 'touch', - index: -Infinity, - defaults: { - /** - * call preventDefault at touchstart, and makes the element blocking by disabling the scrolling of the page, - * but it improves gestures like transforming and dragging. - * be careful with using this, it can be very annoying for users to be stuck on the page - * @property preventDefault - * @type {Boolean} - * @default false - */ - preventDefault: false, - - /** - * disable mouse events, so only touch (or pen!) input triggers events - * @property preventMouse - * @type {Boolean} - * @default false - */ - preventMouse: false - }, - handler: function touchGesture(ev, inst) { - if(inst.options.preventMouse && ev.pointerType == POINTER_MOUSE) { - ev.stopDetect(); - return; - } - - if(inst.options.preventDefault) { - ev.preventDefault(); - } - - if(ev.eventType == EVENT_TOUCH) { - inst.trigger('touch', ev); - } - } - }; - - /** - * @module gestures - */ - /** - * User want to scale or rotate with 2 fingers - * Preventing the default browser behavior is a good way to improve feel and working. This can be done with the - * `preventDefault` option. - * - * @class Transform - * @static - */ - /** - * @event transform - * @param {Object} ev - */ - /** - * @event transformstart - * @param {Object} ev - */ - /** - * @event transformend - * @param {Object} ev - */ - /** - * @event pinchin - * @param {Object} ev - */ - /** - * @event pinchout - * @param {Object} ev - */ - /** - * @event rotate - * @param {Object} ev - */ - - /** - * @param {String} name - */ - (function(name) { - var triggered = false; - - function transformGesture(ev, inst) { - switch(ev.eventType) { - case EVENT_START: - triggered = false; - break; - - case EVENT_MOVE: - // at least multitouch - if(ev.touches.length < 2) { - return; - } - - var scaleThreshold = Math.abs(1 - ev.scale); - var rotationThreshold = Math.abs(ev.rotation); - - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(scaleThreshold < inst.options.transformMinScale && - rotationThreshold < inst.options.transformMinRotation) { - return; - } - - // we are transforming! - Detection.current.name = name; - - // first time, trigger dragstart event - if(!triggered) { - inst.trigger(name + 'start', ev); - triggered = true; - } - - inst.trigger(name, ev); // basic transform event - - // trigger rotate event - if(rotationThreshold > inst.options.transformMinRotation) { - inst.trigger('rotate', ev); - } - - // trigger pinch event - if(scaleThreshold > inst.options.transformMinScale) { - inst.trigger('pinch', ev); - inst.trigger('pinch' + (ev.scale < 1 ? 'in' : 'out'), ev); - } - break; - - case EVENT_RELEASE: - if(triggered && ev.changedLength < 2) { - inst.trigger(name + 'end', ev); - triggered = false; - } - break; - } - } - - Hammer.gestures.Transform = { - name: name, - index: 45, - defaults: { - /** - * minimal scale factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1 - * @property transformMinScale - * @type {Number} - * @default 0.01 - */ - transformMinScale: 0.01, - - /** - * rotation in degrees - * @property transformMinRotation - * @type {Number} - * @default 1 - */ - transformMinRotation: 1 - }, - - handler: transformGesture - }; - })('transform'); - - /** - * @module hammer - */ - - // AMD export - if(true) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - return Hammer; - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - // commonjs export - } else if(typeof module !== 'undefined' && module.exports) { - module.exports = Hammer; - // browser export - } else { - window.Hammer = Hammer; - } - - })(window); - -/***/ }, -/* 60 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Creation of the ClusterMixin var. - * - * This contains all the functions the Network object can use to employ clustering - */ - - /** - * This is only called in the constructor of the network object - * - */ - exports.startWithClustering = function() { - // cluster if the data set is big - this.clusterToFit(this.constants.clustering.initialMaxNodes, true); - - // updates the lables after clustering - this.updateLabels(); - - // this is called here because if clusterin is disabled, the start and stabilize are called in - // the setData function. - if (this.stabilize) { - this._stabilize(); - } - this.start(); - }; - - /** - * This function clusters until the initialMaxNodes has been reached - * - * @param {Number} maxNumberOfNodes - * @param {Boolean} reposition - */ - exports.clusterToFit = function(maxNumberOfNodes, reposition) { - var numberOfNodes = this.nodeIndices.length; - - var maxLevels = 50; - var level = 0; - - // we first cluster the hubs, then we pull in the outliers, repeat - while (numberOfNodes > maxNumberOfNodes && level < maxLevels) { - if (level % 3 == 0) { - this.forceAggregateHubs(true); - this.normalizeClusterLevels(); - } - else { - this.increaseClusterLevel(); // this also includes a cluster normalization - } - - numberOfNodes = this.nodeIndices.length; - level += 1; - } - - // after the clustering we reposition the nodes to reduce the initial chaos - if (level > 0 && reposition == true) { - this.repositionNodes(); - } - this._updateCalculationNodes(); - }; - - /** - * This function can be called to open up a specific cluster. It is only called by - * It will unpack the cluster back one level. - * - * @param node | Node object: cluster to open. - */ - exports.openCluster = function(node) { - var isMovingBeforeClustering = this.moving; - if (node.clusterSize > this.constants.clustering.sectorThreshold && this._nodeInActiveArea(node) && - !(this._sector() == "default" && this.nodeIndices.length == 1)) { - // this loads a new sector, loads the nodes and edges and nodeIndices of it. - this._addSector(node); - var level = 0; - - // we decluster until we reach a decent number of nodes - while ((this.nodeIndices.length < this.constants.clustering.initialMaxNodes) && (level < 10)) { - this.decreaseClusterLevel(); - level += 1; - } - - } - else { - this._expandClusterNode(node,false,true); - - // update the index list, dynamic edges and labels - this._updateNodeIndexList(); - this._updateDynamicEdges(); - this._updateCalculationNodes(); - this.updateLabels(); - } - - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); - } - }; - - - /** - * This calls the updateClustes with default arguments - */ - exports.updateClustersDefault = function() { - if (this.constants.clustering.enabled == true) { - this.updateClusters(0,false,false); - } - }; - - - /** - * This function can be called to increase the cluster level. This means that the nodes with only one edge connection will - * be clustered with their connected node. This can be repeated as many times as needed. - * This can be called externally (by a keybind for instance) to reduce the complexity of big datasets. - */ - exports.increaseClusterLevel = function() { - this.updateClusters(-1,false,true); - }; - - - /** - * This function can be called to decrease the cluster level. This means that the nodes with only one edge connection will - * be unpacked if they are a cluster. This can be repeated as many times as needed. - * This can be called externally (by a key-bind for instance) to look into clusters without zooming. - */ - exports.decreaseClusterLevel = function() { - this.updateClusters(1,false,true); - }; - - - /** - * This is the main clustering function. It clusters and declusters on zoom or forced - * This function clusters on zoom, it can be called with a predefined zoom direction - * If out, check if we can form clusters, if in, check if we can open clusters. - * This function is only called from _zoom() - * - * @param {Number} zoomDirection | -1 / 0 / +1 for zoomOut / determineByZoom / zoomIn - * @param {Boolean} recursive | enabled or disable recursive calling of the opening of clusters - * @param {Boolean} force | enabled or disable forcing - * @param {Boolean} doNotStart | if true do not call start - * - */ - exports.updateClusters = function(zoomDirection,recursive,force,doNotStart) { - var isMovingBeforeClustering = this.moving; - var amountOfNodes = this.nodeIndices.length; - - // on zoom out collapse the sector if the scale is at the level the sector was made - if (this.previousScale > this.scale && zoomDirection == 0) { - this._collapseSector(); - } - - // check if we zoom in or out - if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out - // forming clusters when forced pulls outliers in. When not forced, the edge length of the - // outer nodes determines if it is being clustered - this._formClusters(force); - } - else if (this.previousScale < this.scale || zoomDirection == 1) { // zoom in - if (force == true) { - // _openClusters checks for each node if the formationScale of the cluster is smaller than - // the current scale and if so, declusters. When forced, all clusters are reduced by one step - this._openClusters(recursive,force); - } - else { - // if a cluster takes up a set percentage of the active window - this._openClustersBySize(); - } - } - this._updateNodeIndexList(); - - // if a cluster was NOT formed and the user zoomed out, we try clustering by hubs - if (this.nodeIndices.length == amountOfNodes && (this.previousScale > this.scale || zoomDirection == -1)) { - this._aggregateHubs(force); - this._updateNodeIndexList(); - } - - // we now reduce chains. - if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out - this.handleChains(); - this._updateNodeIndexList(); - } - - this.previousScale = this.scale; - - // rest of the update the index list, dynamic edges and labels - this._updateDynamicEdges(); - this.updateLabels(); - - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length < amountOfNodes) { // this means a clustering operation has taken place - this.clusterSession += 1; - // if clusters have been made, we normalize the cluster level - this.normalizeClusterLevels(); - } - - if (doNotStart == false || doNotStart === undefined) { - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); - } - } - - this._updateCalculationNodes(); - }; - - /** - * This function handles the chains. It is called on every updateClusters(). - */ - exports.handleChains = function() { - // after clustering we check how many chains there are - var chainPercentage = this._getChainFraction(); - if (chainPercentage > this.constants.clustering.chainThreshold) { - this._reduceAmountOfChains(1 - this.constants.clustering.chainThreshold / chainPercentage) - - } - }; - - /** - * this functions starts clustering by hubs - * The minimum hub threshold is set globally - * - * @private - */ - exports._aggregateHubs = function(force) { - this._getHubSize(); - this._formClustersByHub(force,false); - }; - - - /** - * This function is fired by keypress. It forces hubs to form. - * - */ - exports.forceAggregateHubs = function(doNotStart) { - var isMovingBeforeClustering = this.moving; - var amountOfNodes = this.nodeIndices.length; - - this._aggregateHubs(true); - - // update the index list, dynamic edges and labels - this._updateNodeIndexList(); - this._updateDynamicEdges(); - this.updateLabels(); - - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length != amountOfNodes) { - this.clusterSession += 1; - } - - if (doNotStart == false || doNotStart === undefined) { - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); - } - } - }; - - /** - * If a cluster takes up more than a set percentage of the screen, open the cluster - * - * @private - */ - exports._openClustersBySize = function() { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - if (node.inView() == true) { - if ((node.width*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || - (node.height*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { - this.openCluster(node); - } - } - } - } - }; - - - /** - * This function loops over all nodes in the nodeIndices list. For each node it checks if it is a cluster and if it - * has to be opened based on the current zoom level. - * - * @private - */ - exports._openClusters = function(recursive,force) { - for (var i = 0; i < this.nodeIndices.length; i++) { - var node = this.nodes[this.nodeIndices[i]]; - this._expandClusterNode(node,recursive,force); - this._updateCalculationNodes(); - } - }; - - /** - * This function checks if a node has to be opened. This is done by checking the zoom level. - * If the node contains child nodes, this function is recursively called on the child nodes as well. - * This recursive behaviour is optional and can be set by the recursive argument. - * - * @param {Node} parentNode | to check for cluster and expand - * @param {Boolean} recursive | enabled or disable recursive calling - * @param {Boolean} force | enabled or disable forcing - * @param {Boolean} [openAll] | This will recursively force all nodes in the parent to be released - * @private - */ - exports._expandClusterNode = function(parentNode, recursive, force, openAll) { - // first check if node is a cluster - if (parentNode.clusterSize > 1) { - // this means that on a double tap event or a zoom event, the cluster fully unpacks if it is smaller than 20 - if (parentNode.clusterSize < this.constants.clustering.sectorThreshold) { - openAll = true; - } - recursive = openAll ? true : recursive; - - // if the last child has been added on a smaller scale than current scale decluster - if (parentNode.formationScale < this.scale || force == true) { - // we will check if any of the contained child nodes should be removed from the cluster - for (var containedNodeId in parentNode.containedNodes) { - if (parentNode.containedNodes.hasOwnProperty(containedNodeId)) { - var childNode = parentNode.containedNodes[containedNodeId]; - - // force expand will expand the largest cluster size clusters. Since we cluster from outside in, we assume that - // the largest cluster is the one that comes from outside - if (force == true) { - if (childNode.clusterSession == parentNode.clusterSessions[parentNode.clusterSessions.length-1] - || openAll) { - this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); - } - } - else { - if (this._nodeInActiveArea(parentNode)) { - this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); - } - } - } - } - } - } - }; - - /** - * ONLY CALLED FROM _expandClusterNode - * - * This function will expel a child_node from a parent_node. This is to de-cluster the node. This function will remove - * the child node from the parent contained_node object and put it back into the global nodes object. - * The same holds for the edge that was connected to the child node. It is moved back into the global edges object. - * - * @param {Node} parentNode | the parent node - * @param {String} containedNodeId | child_node id as it is contained in the containedNodes object of the parent node - * @param {Boolean} recursive | This will also check if the child needs to be expanded. - * With force and recursive both true, the entire cluster is unpacked - * @param {Boolean} force | This will disregard the zoom level and will expel this child from the parent - * @param {Boolean} openAll | This will recursively force all nodes in the parent to be released - * @private - */ - exports._expelChildFromParent = function(parentNode, containedNodeId, recursive, force, openAll) { - var childNode = parentNode.containedNodes[containedNodeId]; - - // if child node has been added on smaller scale than current, kick out - if (childNode.formationScale < this.scale || force == true) { - // unselect all selected items - this._unselectAll(); - - // put the child node back in the global nodes object - this.nodes[containedNodeId] = childNode; - - // release the contained edges from this childNode back into the global edges - this._releaseContainedEdges(parentNode,childNode); - - // reconnect rerouted edges to the childNode - this._connectEdgeBackToChild(parentNode,childNode); - - // validate all edges in dynamicEdges - this._validateEdges(parentNode); - - // undo the changes from the clustering operation on the parent node - parentNode.options.mass -= childNode.options.mass; - parentNode.clusterSize -= childNode.clusterSize; - parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*(parentNode.clusterSize-1)); - parentNode.dynamicEdgesLength = parentNode.dynamicEdges.length; - - // place the child node near the parent, not at the exact same location to avoid chaos in the system - childNode.x = parentNode.x + parentNode.growthIndicator * (0.5 - Math.random()); - childNode.y = parentNode.y + parentNode.growthIndicator * (0.5 - Math.random()); - - // remove node from the list - delete parentNode.containedNodes[containedNodeId]; - - // check if there are other childs with this clusterSession in the parent. - var othersPresent = false; - for (var childNodeId in parentNode.containedNodes) { - if (parentNode.containedNodes.hasOwnProperty(childNodeId)) { - if (parentNode.containedNodes[childNodeId].clusterSession == childNode.clusterSession) { - othersPresent = true; - break; - } - } - } - // if there are no others, remove the cluster session from the list - if (othersPresent == false) { - parentNode.clusterSessions.pop(); - } - - this._repositionBezierNodes(childNode); - // this._repositionBezierNodes(parentNode); - - // remove the clusterSession from the child node - childNode.clusterSession = 0; - - // recalculate the size of the node on the next time the node is rendered - parentNode.clearSizeCache(); - - // restart the simulation to reorganise all nodes - this.moving = true; - } - - // check if a further expansion step is possible if recursivity is enabled - if (recursive == true) { - this._expandClusterNode(childNode,recursive,force,openAll); - } - }; - - - /** - * position the bezier nodes at the center of the edges - * - * @param node - * @private - */ - exports._repositionBezierNodes = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - node.dynamicEdges[i].positionBezierNode(); - } - }; - - - /** - * This function checks if any nodes at the end of their trees have edges below a threshold length - * This function is called only from updateClusters() - * forceLevelCollapse ignores the length of the edge and collapses one level - * This means that a node with only one edge will be clustered with its connected node - * - * @private - * @param {Boolean} force - */ - exports._formClusters = function(force) { - if (force == false) { - this._formClustersByZoom(); - } - else { - this._forceClustersByZoom(); - } - }; - - - /** - * This function handles the clustering by zooming out, this is based on a minimum edge distance - * - * @private - */ - exports._formClustersByZoom = function() { - var dx,dy,length, - minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; - - // check if any edges are shorter than minLength and start the clustering - // the clustering favours the node with the larger mass - for (var edgeId in this.edges) { - if (this.edges.hasOwnProperty(edgeId)) { - var edge = this.edges[edgeId]; - if (edge.connected) { - if (edge.toId != edge.fromId) { - dx = (edge.to.x - edge.from.x); - dy = (edge.to.y - edge.from.y); - length = Math.sqrt(dx * dx + dy * dy); - - - if (length < minLength) { - // first check which node is larger - var parentNode = edge.from; - var childNode = edge.to; - if (edge.to.options.mass > edge.from.options.mass) { - parentNode = edge.to; - childNode = edge.from; - } - - if (childNode.dynamicEdgesLength == 1) { - this._addToCluster(parentNode,childNode,false); - } - else if (parentNode.dynamicEdgesLength == 1) { - this._addToCluster(childNode,parentNode,false); - } - } - } - } - } - } - }; - - /** - * This function forces the network to cluster all nodes with only one connecting edge to their - * connected node. - * - * @private - */ - exports._forceClustersByZoom = function() { - for (var nodeId in this.nodes) { - // another node could have absorbed this child. - if (this.nodes.hasOwnProperty(nodeId)) { - var childNode = this.nodes[nodeId]; - - // the edges can be swallowed by another decrease - if (childNode.dynamicEdgesLength == 1 && childNode.dynamicEdges.length != 0) { - var edge = childNode.dynamicEdges[0]; - var parentNode = (edge.toId == childNode.id) ? this.nodes[edge.fromId] : this.nodes[edge.toId]; - - // group to the largest node - if (childNode.id != parentNode.id) { - if (parentNode.options.mass > childNode.options.mass) { - this._addToCluster(parentNode,childNode,true); - } - else { - this._addToCluster(childNode,parentNode,true); - } - } - } - } - } - }; - - - /** - * To keep the nodes of roughly equal size we normalize the cluster levels. - * This function clusters a node to its smallest connected neighbour. - * - * @param node - * @private - */ - exports._clusterToSmallestNeighbour = function(node) { - var smallestNeighbour = -1; - var smallestNeighbourNode = null; - for (var i = 0; i < node.dynamicEdges.length; i++) { - if (node.dynamicEdges[i] !== undefined) { - var neighbour = null; - if (node.dynamicEdges[i].fromId != node.id) { - neighbour = node.dynamicEdges[i].from; - } - else if (node.dynamicEdges[i].toId != node.id) { - neighbour = node.dynamicEdges[i].to; - } - - - if (neighbour != null && smallestNeighbour > neighbour.clusterSessions.length) { - smallestNeighbour = neighbour.clusterSessions.length; - smallestNeighbourNode = neighbour; - } - } - } - - if (neighbour != null && this.nodes[neighbour.id] !== undefined) { - this._addToCluster(neighbour, node, true); - } - }; - - - /** - * This function forms clusters from hubs, it loops over all nodes - * - * @param {Boolean} force | Disregard zoom level - * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges - * @private - */ - exports._formClustersByHub = function(force, onlyEqual) { - // we loop over all nodes in the list - for (var nodeId in this.nodes) { - // we check if it is still available since it can be used by the clustering in this loop - if (this.nodes.hasOwnProperty(nodeId)) { - this._formClusterFromHub(this.nodes[nodeId],force,onlyEqual); - } - } - }; - - /** - * This function forms a cluster from a specific preselected hub node - * - * @param {Node} hubNode | the node we will cluster as a hub - * @param {Boolean} force | Disregard zoom level - * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges - * @param {Number} [absorptionSizeOffset] | - * @private - */ - exports._formClusterFromHub = function(hubNode, force, onlyEqual, absorptionSizeOffset) { - if (absorptionSizeOffset === undefined) { - absorptionSizeOffset = 0; - } - // we decide if the node is a hub - if ((hubNode.dynamicEdgesLength >= this.hubThreshold && onlyEqual == false) || - (hubNode.dynamicEdgesLength == this.hubThreshold && onlyEqual == true)) { - // initialize variables - var dx,dy,length; - var minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; - var allowCluster = false; - - // we create a list of edges because the dynamicEdges change over the course of this loop - var edgesIdarray = []; - var amountOfInitialEdges = hubNode.dynamicEdges.length; - for (var j = 0; j < amountOfInitialEdges; j++) { - edgesIdarray.push(hubNode.dynamicEdges[j].id); - } - - // if the hub clustering is not forces, we check if one of the edges connected - // to a cluster is small enough based on the constants.clustering.clusterEdgeThreshold - if (force == false) { - allowCluster = false; - for (j = 0; j < amountOfInitialEdges; j++) { - var edge = this.edges[edgesIdarray[j]]; - if (edge !== undefined) { - if (edge.connected) { - if (edge.toId != edge.fromId) { - dx = (edge.to.x - edge.from.x); - dy = (edge.to.y - edge.from.y); - length = Math.sqrt(dx * dx + dy * dy); - - if (length < minLength) { - allowCluster = true; - break; - } - } - } - } - } - } - - // start the clustering if allowed - if ((!force && allowCluster) || force) { - // we loop over all edges INITIALLY connected to this hub - for (j = 0; j < amountOfInitialEdges; j++) { - edge = this.edges[edgesIdarray[j]]; - // the edge can be clustered by this function in a previous loop - if (edge !== undefined) { - var childNode = this.nodes[(edge.fromId == hubNode.id) ? edge.toId : edge.fromId]; - // we do not want hubs to merge with other hubs nor do we want to cluster itself. - if ((childNode.dynamicEdges.length <= (this.hubThreshold + absorptionSizeOffset)) && - (childNode.id != hubNode.id)) { - this._addToCluster(hubNode,childNode,force); - } - } - } - } - } - }; - - - - /** - * This function adds the child node to the parent node, creating a cluster if it is not already. - * - * @param {Node} parentNode | this is the node that will house the child node - * @param {Node} childNode | this node will be deleted from the global this.nodes and stored in the parent node - * @param {Boolean} force | true will only update the remainingEdges at the very end of the clustering, ensuring single level collapse - * @private - */ - exports._addToCluster = function(parentNode, childNode, force) { - // join child node in the parent node - parentNode.containedNodes[childNode.id] = childNode; - - // manage all the edges connected to the child and parent nodes - for (var i = 0; i < childNode.dynamicEdges.length; i++) { - var edge = childNode.dynamicEdges[i]; - if (edge.toId == parentNode.id || edge.fromId == parentNode.id) { // edge connected to parentNode - this._addToContainedEdges(parentNode,childNode,edge); - } - else { - this._connectEdgeToCluster(parentNode,childNode,edge); - } - } - // a contained node has no dynamic edges. - childNode.dynamicEdges = []; - - // remove circular edges from clusters - this._containCircularEdgesFromNode(parentNode,childNode); - - - // remove the childNode from the global nodes object - delete this.nodes[childNode.id]; - - // update the properties of the child and parent - var massBefore = parentNode.options.mass; - childNode.clusterSession = this.clusterSession; - parentNode.options.mass += childNode.options.mass; - parentNode.clusterSize += childNode.clusterSize; - parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize); - - // keep track of the clustersessions so we can open the cluster up as it has been formed. - if (parentNode.clusterSessions[parentNode.clusterSessions.length - 1] != this.clusterSession) { - parentNode.clusterSessions.push(this.clusterSession); - } - - // forced clusters only open from screen size and double tap - if (force == true) { - // parentNode.formationScale = Math.pow(1 - (1.0/11.0),this.clusterSession+3); - parentNode.formationScale = 0; - } - else { - parentNode.formationScale = this.scale; // The latest child has been added on this scale - } - - // recalculate the size of the node on the next time the node is rendered - parentNode.clearSizeCache(); - - // set the pop-out scale for the childnode - parentNode.containedNodes[childNode.id].formationScale = parentNode.formationScale; - - // nullify the movement velocity of the child, this is to avoid hectic behaviour - childNode.clearVelocity(); - - // the mass has altered, preservation of energy dictates the velocity to be updated - parentNode.updateVelocity(massBefore); - - // restart the simulation to reorganise all nodes - this.moving = true; - }; - - - /** - * This function will apply the changes made to the remainingEdges during the formation of the clusters. - * This is a seperate function to allow for level-wise collapsing of the node barnesHutTree. - * It has to be called if a level is collapsed. It is called by _formClusters(). - * @private - */ - exports._updateDynamicEdges = function() { - for (var i = 0; i < this.nodeIndices.length; i++) { - var node = this.nodes[this.nodeIndices[i]]; - node.dynamicEdgesLength = node.dynamicEdges.length; - - // this corrects for multiple edges pointing at the same other node - var correction = 0; - if (node.dynamicEdgesLength > 1) { - for (var j = 0; j < node.dynamicEdgesLength - 1; j++) { - var edgeToId = node.dynamicEdges[j].toId; - var edgeFromId = node.dynamicEdges[j].fromId; - for (var k = j+1; k < node.dynamicEdgesLength; k++) { - if ((node.dynamicEdges[k].toId == edgeToId && node.dynamicEdges[k].fromId == edgeFromId) || - (node.dynamicEdges[k].fromId == edgeToId && node.dynamicEdges[k].toId == edgeFromId)) { - correction += 1; - } - } - } - } - node.dynamicEdgesLength -= correction; - } - }; - - - /** - * This adds an edge from the childNode to the contained edges of the parent node - * - * @param parentNode | Node object - * @param childNode | Node object - * @param edge | Edge object - * @private - */ - exports._addToContainedEdges = function(parentNode, childNode, edge) { - // create an array object if it does not yet exist for this childNode - if (!(parentNode.containedEdges.hasOwnProperty(childNode.id))) { - parentNode.containedEdges[childNode.id] = [] - } - // add this edge to the list - parentNode.containedEdges[childNode.id].push(edge); - - // remove the edge from the global edges object - delete this.edges[edge.id]; - - // remove the edge from the parent object - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - if (parentNode.dynamicEdges[i].id == edge.id) { - parentNode.dynamicEdges.splice(i,1); - break; - } - } - }; - - /** - * This function connects an edge that was connected to a child node to the parent node. - * It keeps track of which nodes it has been connected to with the originalId array. - * - * @param {Node} parentNode | Node object - * @param {Node} childNode | Node object - * @param {Edge} edge | Edge object - * @private - */ - exports._connectEdgeToCluster = function(parentNode, childNode, edge) { - // handle circular edges - if (edge.toId == edge.fromId) { - this._addToContainedEdges(parentNode, childNode, edge); - } - else { - if (edge.toId == childNode.id) { // edge connected to other node on the "to" side - edge.originalToId.push(childNode.id); - edge.to = parentNode; - edge.toId = parentNode.id; - } - else { // edge connected to other node with the "from" side - - edge.originalFromId.push(childNode.id); - edge.from = parentNode; - edge.fromId = parentNode.id; - } - - this._addToReroutedEdges(parentNode,childNode,edge); - } - }; - - - /** - * If a node is connected to itself, a circular edge is drawn. When clustering we want to contain - * these edges inside of the cluster. - * - * @param parentNode - * @param childNode - * @private - */ - exports._containCircularEdgesFromNode = function(parentNode, childNode) { - // manage all the edges connected to the child and parent nodes - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - var edge = parentNode.dynamicEdges[i]; - // handle circular edges - if (edge.toId == edge.fromId) { - this._addToContainedEdges(parentNode, childNode, edge); - } - } - }; - - - /** - * This adds an edge from the childNode to the rerouted edges of the parent node - * - * @param parentNode | Node object - * @param childNode | Node object - * @param edge | Edge object - * @private - */ - exports._addToReroutedEdges = function(parentNode, childNode, edge) { - // create an array object if it does not yet exist for this childNode - // we store the edge in the rerouted edges so we can restore it when the cluster pops open - if (!(parentNode.reroutedEdges.hasOwnProperty(childNode.id))) { - parentNode.reroutedEdges[childNode.id] = []; - } - parentNode.reroutedEdges[childNode.id].push(edge); - - // this edge becomes part of the dynamicEdges of the cluster node - parentNode.dynamicEdges.push(edge); - }; - - - - /** - * This function connects an edge that was connected to a cluster node back to the child node. - * - * @param parentNode | Node object - * @param childNode | Node object - * @private - */ - exports._connectEdgeBackToChild = function(parentNode, childNode) { - if (parentNode.reroutedEdges.hasOwnProperty(childNode.id)) { - for (var i = 0; i < parentNode.reroutedEdges[childNode.id].length; i++) { - var edge = parentNode.reroutedEdges[childNode.id][i]; - if (edge.originalFromId[edge.originalFromId.length-1] == childNode.id) { - edge.originalFromId.pop(); - edge.fromId = childNode.id; - edge.from = childNode; - } - else { - edge.originalToId.pop(); - edge.toId = childNode.id; - edge.to = childNode; - } - - // append this edge to the list of edges connecting to the childnode - childNode.dynamicEdges.push(edge); - - // remove the edge from the parent object - for (var j = 0; j < parentNode.dynamicEdges.length; j++) { - if (parentNode.dynamicEdges[j].id == edge.id) { - parentNode.dynamicEdges.splice(j,1); - break; - } - } - } - // remove the entry from the rerouted edges - delete parentNode.reroutedEdges[childNode.id]; - } - }; - - - /** - * When loops are clustered, an edge can be both in the rerouted array and the contained array. - * This function is called last to verify that all edges in dynamicEdges are in fact connected to the - * parentNode - * - * @param parentNode | Node object - * @private - */ - exports._validateEdges = function(parentNode) { - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - var edge = parentNode.dynamicEdges[i]; - if (parentNode.id != edge.toId && parentNode.id != edge.fromId) { - parentNode.dynamicEdges.splice(i,1); - } - } - }; - - - /** - * This function released the contained edges back into the global domain and puts them back into the - * dynamic edges of both parent and child. - * - * @param {Node} parentNode | - * @param {Node} childNode | - * @private - */ - exports._releaseContainedEdges = function(parentNode, childNode) { - for (var i = 0; i < parentNode.containedEdges[childNode.id].length; i++) { - var edge = parentNode.containedEdges[childNode.id][i]; - - // put the edge back in the global edges object - this.edges[edge.id] = edge; - - // put the edge back in the dynamic edges of the child and parent - childNode.dynamicEdges.push(edge); - parentNode.dynamicEdges.push(edge); - } - // remove the entry from the contained edges - delete parentNode.containedEdges[childNode.id]; - - }; - - - - - // ------------------- UTILITY FUNCTIONS ---------------------------- // - - - /** - * This updates the node labels for all nodes (for debugging purposes) - */ - exports.updateLabels = function() { - var nodeId; - // update node labels - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - if (node.clusterSize > 1) { - node.label = "[".concat(String(node.clusterSize),"]"); - } - } - } - - // update node labels - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.clusterSize == 1) { - if (node.originalLabel !== undefined) { - node.label = node.originalLabel; - } - else { - node.label = String(node.id); - } - } - } - } - - // /* Debug Override */ - // for (nodeId in this.nodes) { - // if (this.nodes.hasOwnProperty(nodeId)) { - // node = this.nodes[nodeId]; - // node.label = String(node.level); - // } - // } - - }; - - - /** - * We want to keep the cluster level distribution rather small. This means we do not want unclustered nodes - * if the rest of the nodes are already a few cluster levels in. - * To fix this we use this function. It determines the min and max cluster level and sends nodes that have not - * clustered enough to the clusterToSmallestNeighbours function. - */ - exports.normalizeClusterLevels = function() { - var maxLevel = 0; - var minLevel = 1e9; - var clusterLevel = 0; - var nodeId; - - // we loop over all nodes in the list - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - clusterLevel = this.nodes[nodeId].clusterSessions.length; - if (maxLevel < clusterLevel) {maxLevel = clusterLevel;} - if (minLevel > clusterLevel) {minLevel = clusterLevel;} - } - } - - if (maxLevel - minLevel > this.constants.clustering.clusterLevelDifference) { - var amountOfNodes = this.nodeIndices.length; - var targetLevel = maxLevel - this.constants.clustering.clusterLevelDifference; - // we loop over all nodes in the list - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].clusterSessions.length < targetLevel) { - this._clusterToSmallestNeighbour(this.nodes[nodeId]); - } - } - } - this._updateNodeIndexList(); - this._updateDynamicEdges(); - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length != amountOfNodes) { - this.clusterSession += 1; - } - } - }; - - - - /** - * This function determines if the cluster we want to decluster is in the active area - * this means around the zoom center - * - * @param {Node} node - * @returns {boolean} - * @private - */ - exports._nodeInActiveArea = function(node) { - return ( - Math.abs(node.x - this.areaCenter.x) <= this.constants.clustering.activeAreaBoxSize/this.scale - && - Math.abs(node.y - this.areaCenter.y) <= this.constants.clustering.activeAreaBoxSize/this.scale - ) - }; - - - /** - * This is an adaptation of the original repositioning function. This is called if the system is clustered initially - * It puts large clusters away from the center and randomizes the order. - * - */ - exports.repositionNodes = function() { - for (var i = 0; i < this.nodeIndices.length; i++) { - var node = this.nodes[this.nodeIndices[i]]; - if ((node.xFixed == false || node.yFixed == false)) { - var radius = 10 * 0.1*this.nodeIndices.length * Math.min(100,node.options.mass); - var angle = 2 * Math.PI * Math.random(); - if (node.xFixed == false) {node.x = radius * Math.cos(angle);} - if (node.yFixed == false) {node.y = radius * Math.sin(angle);} - this._repositionBezierNodes(node); - } - } - }; - - - /** - * We determine how many connections denote an important hub. - * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%) - * - * @private - */ - exports._getHubSize = function() { - var average = 0; - var averageSquared = 0; - var hubCounter = 0; - var largestHub = 0; - - for (var i = 0; i < this.nodeIndices.length; i++) { - - var node = this.nodes[this.nodeIndices[i]]; - if (node.dynamicEdgesLength > largestHub) { - largestHub = node.dynamicEdgesLength; - } - average += node.dynamicEdgesLength; - averageSquared += Math.pow(node.dynamicEdgesLength,2); - hubCounter += 1; - } - average = average / hubCounter; - averageSquared = averageSquared / hubCounter; - - var variance = averageSquared - Math.pow(average,2); - - var standardDeviation = Math.sqrt(variance); - - this.hubThreshold = Math.floor(average + 2*standardDeviation); - - // always have at least one to cluster - if (this.hubThreshold > largestHub) { - this.hubThreshold = largestHub; - } - - // console.log("average",average,"averageSQ",averageSquared,"var",variance,"std",standardDeviation); - // console.log("hubThreshold:",this.hubThreshold); - }; - - - /** - * We reduce the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods - * with this amount we can cluster specifically on these chains. - * - * @param {Number} fraction | between 0 and 1, the percentage of chains to reduce - * @private - */ - exports._reduceAmountOfChains = function(fraction) { - this.hubThreshold = 2; - var reduceAmount = Math.floor(this.nodeIndices.length * fraction); - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { - if (reduceAmount > 0) { - this._formClusterFromHub(this.nodes[nodeId],true,true,1); - reduceAmount -= 1; - } - } - } - } - }; - - /** - * We get the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods - * with this amount we can cluster specifically on these chains. - * - * @private - */ - exports._getChainFraction = function() { - var chains = 0; - var total = 0; - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { - chains += 1; - } - total += 1; - } - } - return chains/total; - }; - - -/***/ }, -/* 61 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var Node = __webpack_require__(40); - - /** - * Creation of the SectorMixin var. - * - * This contains all the functions the Network object can use to employ the sector system. - * The sector system is always used by Network, though the benefits only apply to the use of clustering. - * If clustering is not used, there is no overhead except for a duplicate object with references to nodes and edges. - */ - - /** - * This function is only called by the setData function of the Network object. - * This loads the global references into the active sector. This initializes the sector. - * - * @private - */ - exports._putDataInSector = function() { - this.sectors["active"][this._sector()].nodes = this.nodes; - this.sectors["active"][this._sector()].edges = this.edges; - this.sectors["active"][this._sector()].nodeIndices = this.nodeIndices; - }; - - - /** - * /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied (active) sector. If a type is defined, do the specific type - * - * @param {String} sectorId - * @param {String} [sectorType] | "active" or "frozen" - * @private - */ - exports._switchToSector = function(sectorId, sectorType) { - if (sectorType === undefined || sectorType == "active") { - this._switchToActiveSector(sectorId); - } - else { - this._switchToFrozenSector(sectorId); - } - }; - - - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied active sector. - * - * @param sectorId - * @private - */ - exports._switchToActiveSector = function(sectorId) { - this.nodeIndices = this.sectors["active"][sectorId]["nodeIndices"]; - this.nodes = this.sectors["active"][sectorId]["nodes"]; - this.edges = this.sectors["active"][sectorId]["edges"]; - }; - - - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied active sector. - * - * @private - */ - exports._switchToSupportSector = function() { - this.nodeIndices = this.sectors["support"]["nodeIndices"]; - this.nodes = this.sectors["support"]["nodes"]; - this.edges = this.sectors["support"]["edges"]; - }; - - - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied frozen sector. - * - * @param sectorId - * @private - */ - exports._switchToFrozenSector = function(sectorId) { - this.nodeIndices = this.sectors["frozen"][sectorId]["nodeIndices"]; - this.nodes = this.sectors["frozen"][sectorId]["nodes"]; - this.edges = this.sectors["frozen"][sectorId]["edges"]; - }; - - - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the currently active sector. - * - * @private - */ - exports._loadLatestSector = function() { - this._switchToSector(this._sector()); - }; - - - /** - * This function returns the currently active sector Id - * - * @returns {String} - * @private - */ - exports._sector = function() { - return this.activeSector[this.activeSector.length-1]; - }; - - - /** - * This function returns the previously active sector Id - * - * @returns {String} - * @private - */ - exports._previousSector = function() { - if (this.activeSector.length > 1) { - return this.activeSector[this.activeSector.length-2]; - } - else { - throw new TypeError('there are not enough sectors in the this.activeSector array.'); - } - }; - - - /** - * We add the active sector at the end of the this.activeSector array - * This ensures it is the currently active sector returned by _sector() and it reaches the top - * of the activeSector stack. When we reverse our steps we move from the end to the beginning of this stack. - * - * @param newId - * @private - */ - exports._setActiveSector = function(newId) { - this.activeSector.push(newId); - }; - - - /** - * We remove the currently active sector id from the active sector stack. This happens when - * we reactivate the previously active sector - * - * @private - */ - exports._forgetLastSector = function() { - this.activeSector.pop(); - }; - - - /** - * This function creates a new active sector with the supplied newId. This newId - * is the expanding node id. - * - * @param {String} newId | Id of the new active sector - * @private - */ - exports._createNewSector = function(newId) { - // create the new sector - this.sectors["active"][newId] = {"nodes":{}, - "edges":{}, - "nodeIndices":[], - "formationScale": this.scale, - "drawingNode": undefined}; - - // create the new sector render node. This gives visual feedback that you are in a new sector. - this.sectors["active"][newId]['drawingNode'] = new Node( - {id:newId, - color: { - background: "#eaefef", - border: "495c5e" - } - },{},{},this.constants); - this.sectors["active"][newId]['drawingNode'].clusterSize = 2; - }; - - - /** - * This function removes the currently active sector. This is called when we create a new - * active sector. - * - * @param {String} sectorId | Id of the active sector that will be removed - * @private - */ - exports._deleteActiveSector = function(sectorId) { - delete this.sectors["active"][sectorId]; - }; - - - /** - * This function removes the currently active sector. This is called when we reactivate - * the previously active sector. - * - * @param {String} sectorId | Id of the active sector that will be removed - * @private - */ - exports._deleteFrozenSector = function(sectorId) { - delete this.sectors["frozen"][sectorId]; - }; - - - /** - * Freezing an active sector means moving it from the "active" object to the "frozen" object. - * We copy the references, then delete the active entree. - * - * @param sectorId - * @private - */ - exports._freezeSector = function(sectorId) { - // we move the set references from the active to the frozen stack. - this.sectors["frozen"][sectorId] = this.sectors["active"][sectorId]; - - // we have moved the sector data into the frozen set, we now remove it from the active set - this._deleteActiveSector(sectorId); - }; - - - /** - * This is the reverse operation of _freezeSector. Activating means moving the sector from the "frozen" - * object to the "active" object. - * - * @param sectorId - * @private - */ - exports._activateSector = function(sectorId) { - // we move the set references from the frozen to the active stack. - this.sectors["active"][sectorId] = this.sectors["frozen"][sectorId]; - - // we have moved the sector data into the active set, we now remove it from the frozen stack - this._deleteFrozenSector(sectorId); - }; - - - /** - * This function merges the data from the currently active sector with a frozen sector. This is used - * in the process of reverting back to the previously active sector. - * The data that is placed in the frozen (the previously active) sector is the node that has been removed from it - * upon the creation of a new active sector. - * - * @param sectorId - * @private - */ - exports._mergeThisWithFrozen = function(sectorId) { - // copy all nodes - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.sectors["frozen"][sectorId]["nodes"][nodeId] = this.nodes[nodeId]; - } - } - - // copy all edges (if not fully clustered, else there are no edges) - for (var edgeId in this.edges) { - if (this.edges.hasOwnProperty(edgeId)) { - this.sectors["frozen"][sectorId]["edges"][edgeId] = this.edges[edgeId]; - } - } - - // merge the nodeIndices - for (var i = 0; i < this.nodeIndices.length; i++) { - this.sectors["frozen"][sectorId]["nodeIndices"].push(this.nodeIndices[i]); - } - }; - - - /** - * This clusters the sector to one cluster. It was a single cluster before this process started so - * we revert to that state. The clusterToFit function with a maximum size of 1 node does this. - * - * @private - */ - exports._collapseThisToSingleCluster = function() { - this.clusterToFit(1,false); - }; - - - /** - * We create a new active sector from the node that we want to open. - * - * @param node - * @private - */ - exports._addSector = function(node) { - // this is the currently active sector - var sector = this._sector(); - - // // this should allow me to select nodes from a frozen set. - // if (this.sectors['active'][sector]["nodes"].hasOwnProperty(node.id)) { - // console.log("the node is part of the active sector"); - // } - // else { - // console.log("I dont know what the fuck happened!!"); - // } - - // when we switch to a new sector, we remove the node that will be expanded from the current nodes list. - delete this.nodes[node.id]; - - var unqiueIdentifier = util.randomUUID(); - - // we fully freeze the currently active sector - this._freezeSector(sector); - - // we create a new active sector. This sector has the Id of the node to ensure uniqueness - this._createNewSector(unqiueIdentifier); - - // we add the active sector to the sectors array to be able to revert these steps later on - this._setActiveSector(unqiueIdentifier); - - // we redirect the global references to the new sector's references. this._sector() now returns unqiueIdentifier - this._switchToSector(this._sector()); - - // finally we add the node we removed from our previous active sector to the new active sector - this.nodes[node.id] = node; - }; - - - /** - * We close the sector that is currently open and revert back to the one before. - * If the active sector is the "default" sector, nothing happens. - * - * @private - */ - exports._collapseSector = function() { - // the currently active sector - var sector = this._sector(); - - // we cannot collapse the default sector - if (sector != "default") { - if ((this.nodeIndices.length == 1) || - (this.sectors["active"][sector]["drawingNode"].width*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || - (this.sectors["active"][sector]["drawingNode"].height*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { - var previousSector = this._previousSector(); - - // we collapse the sector back to a single cluster - this._collapseThisToSingleCluster(); - - // we move the remaining nodes, edges and nodeIndices to the previous sector. - // This previous sector is the one we will reactivate - this._mergeThisWithFrozen(previousSector); - - // the previously active (frozen) sector now has all the data from the currently active sector. - // we can now delete the active sector. - this._deleteActiveSector(sector); - - // we activate the previously active (and currently frozen) sector. - this._activateSector(previousSector); - - // we load the references from the newly active sector into the global references - this._switchToSector(previousSector); - - // we forget the previously active sector because we reverted to the one before - this._forgetLastSector(); - - // finally, we update the node index list. - this._updateNodeIndexList(); - - // we refresh the list with calulation nodes and calculation node indices. - this._updateCalculationNodes(); - } - } - }; - - - /** - * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation(). - * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we dont pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction - * @private - */ - exports._doInAllActiveSectors = function(runFunction,argument) { - var returnValues = []; - if (argument === undefined) { - for (var sector in this.sectors["active"]) { - if (this.sectors["active"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToActiveSector(sector); - returnValues.push( this[runFunction]() ); - } - } - } - else { - for (var sector in this.sectors["active"]) { - if (this.sectors["active"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToActiveSector(sector); - var args = Array.prototype.splice.call(arguments, 1); - if (args.length > 1) { - returnValues.push( this[runFunction](args[0],args[1]) ); - } - else { - returnValues.push( this[runFunction](argument) ); - } - } - } - } - // we revert the global references back to our active sector - this._loadLatestSector(); - return returnValues; - }; - - - /** - * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation(). - * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we dont pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction - * @private - */ - exports._doInSupportSector = function(runFunction,argument) { - var returnValues = false; - if (argument === undefined) { - this._switchToSupportSector(); - returnValues = this[runFunction](); - } - else { - this._switchToSupportSector(); - var args = Array.prototype.splice.call(arguments, 1); - if (args.length > 1) { - returnValues = this[runFunction](args[0],args[1]); - } - else { - returnValues = this[runFunction](argument); - } - } - // we revert the global references back to our active sector - this._loadLatestSector(); - return returnValues; - }; - - - /** - * This runs a function in all frozen sectors. This is used in the _redraw(). - * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we don't pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction - * @private - */ - exports._doInAllFrozenSectors = function(runFunction,argument) { - if (argument === undefined) { - for (var sector in this.sectors["frozen"]) { - if (this.sectors["frozen"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToFrozenSector(sector); - this[runFunction](); - } - } - } - else { - for (var sector in this.sectors["frozen"]) { - if (this.sectors["frozen"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToFrozenSector(sector); - var args = Array.prototype.splice.call(arguments, 1); - if (args.length > 1) { - this[runFunction](args[0],args[1]); - } - else { - this[runFunction](argument); - } - } - } - } - this._loadLatestSector(); - }; - - - /** - * This runs a function in all sectors. This is used in the _redraw(). - * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we don't pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction - * @private - */ - exports._doInAllSectors = function(runFunction,argument) { - var args = Array.prototype.splice.call(arguments, 1); - if (argument === undefined) { - this._doInAllActiveSectors(runFunction); - this._doInAllFrozenSectors(runFunction); - } - else { - if (args.length > 1) { - this._doInAllActiveSectors(runFunction,args[0],args[1]); - this._doInAllFrozenSectors(runFunction,args[0],args[1]); - } - else { - this._doInAllActiveSectors(runFunction,argument); - this._doInAllFrozenSectors(runFunction,argument); - } - } - }; - - - /** - * This clears the nodeIndices list. We cannot use this.nodeIndices = [] because we would break the link with the - * active sector. Thus we clear the nodeIndices in the active sector, then reconnect the this.nodeIndices to it. - * - * @private - */ - exports._clearNodeIndexList = function() { - var sector = this._sector(); - this.sectors["active"][sector]["nodeIndices"] = []; - this.nodeIndices = this.sectors["active"][sector]["nodeIndices"]; - }; - - - /** - * Draw the encompassing sector node - * - * @param ctx - * @param sectorType - * @private - */ - exports._drawSectorNodes = function(ctx,sectorType) { - var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node; - for (var sector in this.sectors[sectorType]) { - if (this.sectors[sectorType].hasOwnProperty(sector)) { - if (this.sectors[sectorType][sector]["drawingNode"] !== undefined) { - - this._switchToSector(sector,sectorType); - - minY = 1e9; maxY = -1e9; minX = 1e9; maxX = -1e9; - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - node.resize(ctx); - if (minX > node.x - 0.5 * node.width) {minX = node.x - 0.5 * node.width;} - if (maxX < node.x + 0.5 * node.width) {maxX = node.x + 0.5 * node.width;} - if (minY > node.y - 0.5 * node.height) {minY = node.y - 0.5 * node.height;} - if (maxY < node.y + 0.5 * node.height) {maxY = node.y + 0.5 * node.height;} - } - } - node = this.sectors[sectorType][sector]["drawingNode"]; - node.x = 0.5 * (maxX + minX); - node.y = 0.5 * (maxY + minY); - node.width = 2 * (node.x - minX); - node.height = 2 * (node.y - minY); - node.options.radius = Math.sqrt(Math.pow(0.5*node.width,2) + Math.pow(0.5*node.height,2)); - node.setScale(this.scale); - node._drawCircle(ctx); - } - } - } - }; - - exports._drawAllSectorNodes = function(ctx) { - this._drawSectorNodes(ctx,"frozen"); - this._drawSectorNodes(ctx,"active"); - this._loadLatestSector(); - }; - - -/***/ }, -/* 62 */ -/***/ function(module, exports, __webpack_require__) { - - var Node = __webpack_require__(40); - - /** - * This function can be called from the _doInAllSectors function - * - * @param object - * @param overlappingNodes - * @private - */ - exports._getNodesOverlappingWith = function(object, overlappingNodes) { - var nodes = this.nodes; - for (var nodeId in nodes) { - if (nodes.hasOwnProperty(nodeId)) { - if (nodes[nodeId].isOverlappingWith(object)) { - overlappingNodes.push(nodeId); - } - } - } - }; - - /** - * retrieve all nodes overlapping with given object - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private - */ - exports._getAllNodesOverlappingWith = function (object) { - var overlappingNodes = []; - this._doInAllActiveSectors("_getNodesOverlappingWith",object,overlappingNodes); - return overlappingNodes; - }; - - - /** - * Return a position object in canvasspace from a single point in screenspace - * - * @param pointer - * @returns {{left: number, top: number, right: number, bottom: number}} - * @private - */ - exports._pointerToPositionObject = function(pointer) { - var x = this._XconvertDOMtoCanvas(pointer.x); - var y = this._YconvertDOMtoCanvas(pointer.y); - - return { - left: x, - top: y, - right: x, - bottom: y - }; - }; - - - /** - * Get the top node at the a specific point (like a click) - * - * @param {{x: Number, y: Number}} pointer - * @return {Node | null} node - * @private - */ - exports._getNodeAt = function (pointer) { - // we first check if this is an navigation controls element - var positionObject = this._pointerToPositionObject(pointer); - var overlappingNodes = this._getAllNodesOverlappingWith(positionObject); - - // if there are overlapping nodes, select the last one, this is the - // one which is drawn on top of the others - if (overlappingNodes.length > 0) { - return this.nodes[overlappingNodes[overlappingNodes.length - 1]]; - } - else { - return null; - } - }; - - - /** - * retrieve all edges overlapping with given object, selector is around center - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private - */ - exports._getEdgesOverlappingWith = function (object, overlappingEdges) { - var edges = this.edges; - for (var edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - if (edges[edgeId].isOverlappingWith(object)) { - overlappingEdges.push(edgeId); - } - } - } - }; - - - /** - * retrieve all nodes overlapping with given object - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private - */ - exports._getAllEdgesOverlappingWith = function (object) { - var overlappingEdges = []; - this._doInAllActiveSectors("_getEdgesOverlappingWith",object,overlappingEdges); - return overlappingEdges; - }; - - /** - * Place holder. To implement change the _getNodeAt to a _getObjectAt. Have the _getObjectAt call - * _getNodeAt and _getEdgesAt, then priortize the selection to user preferences. - * - * @param pointer - * @returns {null} - * @private - */ - exports._getEdgeAt = function(pointer) { - var positionObject = this._pointerToPositionObject(pointer); - var overlappingEdges = this._getAllEdgesOverlappingWith(positionObject); - - if (overlappingEdges.length > 0) { - return this.edges[overlappingEdges[overlappingEdges.length - 1]]; - } - else { - return null; - } - }; - - - /** - * Add object to the selection array. - * - * @param obj - * @private - */ - exports._addToSelection = function(obj) { - if (obj instanceof Node) { - this.selectionObj.nodes[obj.id] = obj; - } - else { - this.selectionObj.edges[obj.id] = obj; - } - }; - - /** - * Add object to the selection array. - * - * @param obj - * @private - */ - exports._addToHover = function(obj) { - if (obj instanceof Node) { - this.hoverObj.nodes[obj.id] = obj; - } - else { - this.hoverObj.edges[obj.id] = obj; - } - }; - - - /** - * Remove a single option from selection. - * - * @param {Object} obj - * @private - */ - exports._removeFromSelection = function(obj) { - if (obj instanceof Node) { - delete this.selectionObj.nodes[obj.id]; - } - else { - delete this.selectionObj.edges[obj.id]; - } - }; - - /** - * Unselect all. The selectionObj is useful for this. - * - * @param {Boolean} [doNotTrigger] | ignore trigger - * @private - */ - exports._unselectAll = function(doNotTrigger) { - if (doNotTrigger === undefined) { - doNotTrigger = false; - } - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - this.selectionObj.nodes[nodeId].unselect(); - } - } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - this.selectionObj.edges[edgeId].unselect(); - } - } - - this.selectionObj = {nodes:{},edges:{}}; - - if (doNotTrigger == false) { - this.emit('select', this.getSelection()); - } - }; - - /** - * Unselect all clusters. The selectionObj is useful for this. - * - * @param {Boolean} [doNotTrigger] | ignore trigger - * @private - */ - exports._unselectClusters = function(doNotTrigger) { - if (doNotTrigger === undefined) { - doNotTrigger = false; - } - - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - if (this.selectionObj.nodes[nodeId].clusterSize > 1) { - this.selectionObj.nodes[nodeId].unselect(); - this._removeFromSelection(this.selectionObj.nodes[nodeId]); - } - } - } - - if (doNotTrigger == false) { - this.emit('select', this.getSelection()); - } - }; - - - /** - * return the number of selected nodes - * - * @returns {number} - * @private - */ - exports._getSelectedNodeCount = function() { - var count = 0; - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - count += 1; - } - } - return count; - }; - - /** - * return the selected node - * - * @returns {number} - * @private - */ - exports._getSelectedNode = function() { - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - return this.selectionObj.nodes[nodeId]; - } - } - return null; - }; - - /** - * return the selected edge - * - * @returns {number} - * @private - */ - exports._getSelectedEdge = function() { - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - return this.selectionObj.edges[edgeId]; - } - } - return null; - }; - - - /** - * return the number of selected edges - * - * @returns {number} - * @private - */ - exports._getSelectedEdgeCount = function() { - var count = 0; - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - count += 1; - } - } - return count; - }; - - - /** - * return the number of selected objects. - * - * @returns {number} - * @private - */ - exports._getSelectedObjectCount = function() { - var count = 0; - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - count += 1; - } - } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - count += 1; - } - } - return count; - }; - - /** - * Check if anything is selected - * - * @returns {boolean} - * @private - */ - exports._selectionIsEmpty = function() { - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - return false; - } - } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - return false; - } - } - return true; - }; - - - /** - * check if one of the selected nodes is a cluster. - * - * @returns {boolean} - * @private - */ - exports._clusterInSelection = function() { - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - if (this.selectionObj.nodes[nodeId].clusterSize > 1) { - return true; - } - } - } - return false; - }; - - /** - * select the edges connected to the node that is being selected - * - * @param {Node} node - * @private - */ - exports._selectConnectedEdges = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - var edge = node.dynamicEdges[i]; - edge.select(); - this._addToSelection(edge); - } - }; - - /** - * select the edges connected to the node that is being selected - * - * @param {Node} node - * @private - */ - exports._hoverConnectedEdges = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - var edge = node.dynamicEdges[i]; - edge.hover = true; - this._addToHover(edge); - } - }; - - - /** - * unselect the edges connected to the node that is being selected - * - * @param {Node} node - * @private - */ - exports._unselectConnectedEdges = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - var edge = node.dynamicEdges[i]; - edge.unselect(); - this._removeFromSelection(edge); - } - }; - - - - - /** - * This is called when someone clicks on a node. either select or deselect it. - * If there is an existing selection and we don't want to append to it, clear the existing selection - * - * @param {Node || Edge} object - * @param {Boolean} append - * @param {Boolean} [doNotTrigger] | ignore trigger - * @private - */ - exports._selectObject = function(object, append, doNotTrigger, highlightEdges, overrideSelectable) { - if (doNotTrigger === undefined) { - doNotTrigger = false; - } - if (highlightEdges === undefined) { - highlightEdges = true; - } - - if (this._selectionIsEmpty() == false && append == false && this.forceAppendSelection == false) { - this._unselectAll(true); - } - - // selectable allows the object to be selected. Override can be used if needed to bypass this. - if (object.selected == false && (this.constants.selectable == true || overrideSelectable)) { - object.select(); - this._addToSelection(object); - if (object instanceof Node && this.blockConnectingEdgeSelection == false && highlightEdges == true) { - this._selectConnectedEdges(object); - } - } - // do not select the object if selectable is false, only add it to selection to allow drag to work - else if (object.selected == false) { - this._addToSelection(object); - doNotTrigger = true; - } - else { - object.unselect(); - this._removeFromSelection(object); - } - - if (doNotTrigger == false) { - this.emit('select', this.getSelection()); - } - }; - - - /** - * This is called when someone clicks on a node. either select or deselect it. - * If there is an existing selection and we don't want to append to it, clear the existing selection - * - * @param {Node || Edge} object - * @private - */ - exports._blurObject = function(object) { - if (object.hover == true) { - object.hover = false; - this.emit("blurNode",{node:object.id}); - } - }; - - /** - * This is called when someone clicks on a node. either select or deselect it. - * If there is an existing selection and we don't want to append to it, clear the existing selection - * - * @param {Node || Edge} object - * @private - */ - exports._hoverObject = function(object) { - if (object.hover == false) { - object.hover = true; - this._addToHover(object); - if (object instanceof Node) { - this.emit("hoverNode",{node:object.id}); - } - } - if (object instanceof Node) { - this._hoverConnectedEdges(object); - } - }; - - - /** - * handles the selection part of the touch, only for navigation controls elements; - * Touch is triggered before tap, also before hold. Hold triggers after a while. - * This is the most responsive solution - * - * @param {Object} pointer - * @private - */ - exports._handleTouch = function(pointer) { - }; - - - /** - * handles the selection part of the tap; - * - * @param {Object} pointer - * @private - */ - exports._handleTap = function(pointer) { - var node = this._getNodeAt(pointer); - if (node != null) { - this._selectObject(node, false); - } - else { - var edge = this._getEdgeAt(pointer); - if (edge != null) { - this._selectObject(edge, false); - } - else { - this._unselectAll(); - } - } - var properties = this.getSelection(); - properties['pointer'] = { - DOM: {x: pointer.x, y: pointer.y}, - canvas: {x: this._XconvertDOMtoCanvas(pointer.x), y: this._YconvertDOMtoCanvas(pointer.y)} - } - this.emit("click", properties); - this._redraw(); - }; - - - /** - * handles the selection part of the double tap and opens a cluster if needed - * - * @param {Object} pointer - * @private - */ - exports._handleDoubleTap = function(pointer) { - var node = this._getNodeAt(pointer); - if (node != null && node !== undefined) { - // we reset the areaCenter here so the opening of the node will occur - this.areaCenter = {"x" : this._XconvertDOMtoCanvas(pointer.x), - "y" : this._YconvertDOMtoCanvas(pointer.y)}; - this.openCluster(node); - } - var properties = this.getSelection(); - properties['pointer'] = { - DOM: {x: pointer.x, y: pointer.y}, - canvas: {x: this._XconvertDOMtoCanvas(pointer.x), y: this._YconvertDOMtoCanvas(pointer.y)} - } - this.emit("doubleClick", properties); - }; - - - /** - * Handle the onHold selection part - * - * @param pointer - * @private - */ - exports._handleOnHold = function(pointer) { - var node = this._getNodeAt(pointer); - if (node != null) { - this._selectObject(node,true); - } - else { - var edge = this._getEdgeAt(pointer); - if (edge != null) { - this._selectObject(edge,true); - } - } - this._redraw(); - }; - - - /** - * handle the onRelease event. These functions are here for the navigation controls module - * and data manipulation module. - * - * @private - */ - exports._handleOnRelease = function(pointer) { - this._manipulationReleaseOverload(pointer); - this._navigationReleaseOverload(pointer); - }; - - exports._manipulationReleaseOverload = function (pointer) {}; - exports._navigationReleaseOverload = function (pointer) {}; - - /** - * - * retrieve the currently selected objects - * @return {{nodes: Array., edges: Array.}} selection - */ - exports.getSelection = function() { - var nodeIds = this.getSelectedNodes(); - var edgeIds = this.getSelectedEdges(); - return {nodes:nodeIds, edges:edgeIds}; - }; - - /** - * - * retrieve the currently selected nodes - * @return {String[]} selection An array with the ids of the - * selected nodes. - */ - exports.getSelectedNodes = function() { - var idArray = []; - if (this.constants.selectable == true) { - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - idArray.push(nodeId); - } - } - } - return idArray - }; - - /** - * - * retrieve the currently selected edges - * @return {Array} selection An array with the ids of the - * selected nodes. - */ - exports.getSelectedEdges = function() { - var idArray = []; - if (this.constants.selectable == true) { - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - idArray.push(edgeId); - } - } - } - return idArray; - }; - - - /** - * select zero or more nodes DEPRICATED - * @param {Number[] | String[]} selection An array with the ids of the - * selected nodes. - */ - exports.setSelection = function() { - console.log("setSelection is deprecated. Please use selectNodes instead.") - }; - - - /** - * select zero or more nodes with the option to highlight edges - * @param {Number[] | String[]} selection An array with the ids of the - * selected nodes. - * @param {boolean} [highlightEdges] - */ - exports.selectNodes = function(selection, highlightEdges) { - var i, iMax, id; - - if (!selection || (selection.length == undefined)) - throw 'Selection must be an array with ids'; - - // first unselect any selected node - this._unselectAll(true); - - for (i = 0, iMax = selection.length; i < iMax; i++) { - id = selection[i]; - - var node = this.nodes[id]; - if (!node) { - throw new RangeError('Node with id "' + id + '" not found'); - } - this._selectObject(node,true,true,highlightEdges,true); - } - this.redraw(); - }; - - - /** - * select zero or more edges - * @param {Number[] | String[]} selection An array with the ids of the - * selected nodes. - */ - exports.selectEdges = function(selection) { - var i, iMax, id; - - if (!selection || (selection.length == undefined)) - throw 'Selection must be an array with ids'; - - // first unselect any selected node - this._unselectAll(true); - - for (i = 0, iMax = selection.length; i < iMax; i++) { - id = selection[i]; - - var edge = this.edges[id]; - if (!edge) { - throw new RangeError('Edge with id "' + id + '" not found'); - } - this._selectObject(edge,true,true,false,true); - } - this.redraw(); - }; - - /** - * Validate the selection: remove ids of nodes which no longer exist - * @private - */ - exports._updateSelection = function () { - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - if (!this.nodes.hasOwnProperty(nodeId)) { - delete this.selectionObj.nodes[nodeId]; - } - } - } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - if (!this.edges.hasOwnProperty(edgeId)) { - delete this.selectionObj.edges[edgeId]; - } - } - } - }; - - -/***/ }, -/* 63 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var Node = __webpack_require__(40); - var Edge = __webpack_require__(37); - - /** - * clears the toolbar div element of children - * - * @private - */ - exports._clearManipulatorBar = function() { - while (this.manipulationDiv.hasChildNodes()) { - this.manipulationDiv.removeChild(this.manipulationDiv.firstChild); - } - this.manipulationDOM = {}; - - this._manipulationReleaseOverload = function () {}; - delete this.sectors['support']['nodes']['targetNode']; - delete this.sectors['support']['nodes']['targetViaNode']; - this.controlNodesActive = false; - }; - - /** - * Manipulation UI temporarily overloads certain functions to extend or replace them. To be able to restore - * these functions to their original functionality, we saved them in this.cachedFunctions. - * This function restores these functions to their original function. - * - * @private - */ - exports._restoreOverloadedFunctions = function() { - for (var functionName in this.cachedFunctions) { - if (this.cachedFunctions.hasOwnProperty(functionName)) { - this[functionName] = this.cachedFunctions[functionName]; - } - } - }; - - /** - * Enable or disable edit-mode. - * - * @private - */ - exports._toggleEditMode = function() { - this.editMode = !this.editMode; - var toolbar = this.manipulationDiv; - var closeDiv = this.closeDiv; - var editModeDiv = this.editModeDiv; - if (this.editMode == true) { - toolbar.style.display="block"; - closeDiv.style.display="block"; - editModeDiv.style.display="none"; - closeDiv.onclick = this._toggleEditMode.bind(this); - } - else { - toolbar.style.display="none"; - closeDiv.style.display="none"; - editModeDiv.style.display="block"; - closeDiv.onclick = null; - } - this._createManipulatorBar() - }; - - /** - * main function, creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar. - * - * @private - */ - exports._createManipulatorBar = function() { - // remove bound functions - if (this.boundFunction) { - this.off('select', this.boundFunction); - } - - var locale = this.constants.locales[this.constants.locale]; - - if (this.edgeBeingEdited !== undefined) { - this.edgeBeingEdited._disableControlNodes(); - this.edgeBeingEdited = undefined; - this.selectedControlNode = null; - this.controlNodesActive = false; - this._redraw(); - } - - // restore overloaded functions - this._restoreOverloadedFunctions(); - - // resume calculation - this.freezeSimulation = false; - - // reset global variables - this.blockConnectingEdgeSelection = false; - this.forceAppendSelection = false; - this.manipulationDOM = {}; - - if (this.editMode == true) { - while (this.manipulationDiv.hasChildNodes()) { - this.manipulationDiv.removeChild(this.manipulationDiv.firstChild); - } - - this.manipulationDOM['addNodeSpan'] = document.createElement('span'); - this.manipulationDOM['addNodeSpan'].className = 'network-manipulationUI add'; - this.manipulationDOM['addNodeLabelSpan'] = document.createElement('span'); - this.manipulationDOM['addNodeLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['addNodeLabelSpan'].innerHTML = locale['addNode']; - this.manipulationDOM['addNodeSpan'].appendChild(this.manipulationDOM['addNodeLabelSpan']); - - this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; - - this.manipulationDOM['addEdgeSpan'] = document.createElement('span'); - this.manipulationDOM['addEdgeSpan'].className = 'network-manipulationUI connect'; - this.manipulationDOM['addEdgeLabelSpan'] = document.createElement('span'); - this.manipulationDOM['addEdgeLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['addEdgeLabelSpan'].innerHTML = locale['addEdge']; - this.manipulationDOM['addEdgeSpan'].appendChild(this.manipulationDOM['addEdgeLabelSpan']); - - this.manipulationDiv.appendChild(this.manipulationDOM['addNodeSpan']); - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); - this.manipulationDiv.appendChild(this.manipulationDOM['addEdgeSpan']); - - if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) { - this.manipulationDOM['seperatorLineDiv2'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv2'].className = 'network-seperatorLine'; - - this.manipulationDOM['editNodeSpan'] = document.createElement('span'); - this.manipulationDOM['editNodeSpan'].className = 'network-manipulationUI edit'; - this.manipulationDOM['editNodeLabelSpan'] = document.createElement('span'); - this.manipulationDOM['editNodeLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['editNodeLabelSpan'].innerHTML = locale['editNode']; - this.manipulationDOM['editNodeSpan'].appendChild(this.manipulationDOM['editNodeLabelSpan']); - - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv2']); - this.manipulationDiv.appendChild(this.manipulationDOM['editNodeSpan']); - } - else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) { - this.manipulationDOM['seperatorLineDiv3'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv3'].className = 'network-seperatorLine'; - - this.manipulationDOM['editEdgeSpan'] = document.createElement('span'); - this.manipulationDOM['editEdgeSpan'].className = 'network-manipulationUI edit'; - this.manipulationDOM['editEdgeLabelSpan'] = document.createElement('span'); - this.manipulationDOM['editEdgeLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['editEdgeLabelSpan'].innerHTML = locale['editEdge']; - this.manipulationDOM['editEdgeSpan'].appendChild(this.manipulationDOM['editEdgeLabelSpan']); - - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv3']); - this.manipulationDiv.appendChild(this.manipulationDOM['editEdgeSpan']); - } - if (this._selectionIsEmpty() == false) { - this.manipulationDOM['seperatorLineDiv4'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv4'].className = 'network-seperatorLine'; - - this.manipulationDOM['deleteSpan'] = document.createElement('span'); - this.manipulationDOM['deleteSpan'].className = 'network-manipulationUI delete'; - this.manipulationDOM['deleteLabelSpan'] = document.createElement('span'); - this.manipulationDOM['deleteLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['deleteLabelSpan'].innerHTML = locale['del']; - this.manipulationDOM['deleteSpan'].appendChild(this.manipulationDOM['deleteLabelSpan']); - - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv4']); - this.manipulationDiv.appendChild(this.manipulationDOM['deleteSpan']); - } - - - // bind the icons - this.manipulationDOM['addNodeSpan'].onclick = this._createAddNodeToolbar.bind(this); - this.manipulationDOM['addEdgeSpan'].onclick = this._createAddEdgeToolbar.bind(this); - if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) { - this.manipulationDOM['editNodeSpan'].onclick = this._editNode.bind(this); - } - else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) { - this.manipulationDOM['editEdgeSpan'].onclick = this._createEditEdgeToolbar.bind(this); - } - if (this._selectionIsEmpty() == false) { - this.manipulationDOM['deleteSpan'].onclick = this._deleteSelected.bind(this); - } - this.closeDiv.onclick = this._toggleEditMode.bind(this); - - this.boundFunction = this._createManipulatorBar.bind(this); - this.on('select', this.boundFunction); - } - else { - while (this.editModeDiv.hasChildNodes()) { - this.editModeDiv.removeChild(this.editModeDiv.firstChild); - } - - this.manipulationDOM['editModeSpan'] = document.createElement('span'); - this.manipulationDOM['editModeSpan'].className = 'network-manipulationUI edit editmode'; - this.manipulationDOM['editModeLabelSpan'] = document.createElement('span'); - this.manipulationDOM['editModeLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['editModeLabelSpan'].innerHTML = locale['edit']; - this.manipulationDOM['editModeSpan'].appendChild(this.manipulationDOM['editModeLabelSpan']); - - this.editModeDiv.appendChild(this.manipulationDOM['editModeSpan']); - - this.manipulationDOM['editModeSpan'].onclick = this._toggleEditMode.bind(this); - } - }; - - - - /** - * Create the toolbar for adding Nodes - * - * @private - */ - exports._createAddNodeToolbar = function() { - // clear the toolbar - this._clearManipulatorBar(); - if (this.boundFunction) { - this.off('select', this.boundFunction); - } - - var locale = this.constants.locales[this.constants.locale]; - - this.manipulationDOM = {}; - this.manipulationDOM['backSpan'] = document.createElement('span'); - this.manipulationDOM['backSpan'].className = 'network-manipulationUI back'; - this.manipulationDOM['backLabelSpan'] = document.createElement('span'); - this.manipulationDOM['backLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['backLabelSpan'].innerHTML = locale['back']; - this.manipulationDOM['backSpan'].appendChild(this.manipulationDOM['backLabelSpan']); - - this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; - - this.manipulationDOM['descriptionSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionSpan'].className = 'network-manipulationUI none'; - this.manipulationDOM['descriptionLabelSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['descriptionLabelSpan'].innerHTML = locale['addDescription']; - this.manipulationDOM['descriptionSpan'].appendChild(this.manipulationDOM['descriptionLabelSpan']); - - this.manipulationDiv.appendChild(this.manipulationDOM['backSpan']); - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); - this.manipulationDiv.appendChild(this.manipulationDOM['descriptionSpan']); - - // bind the icon - this.manipulationDOM['backSpan'].onclick = this._createManipulatorBar.bind(this); - - // we use the boundFunction so we can reference it when we unbind it from the "select" event. - this.boundFunction = this._addNode.bind(this); - this.on('select', this.boundFunction); - }; - - - /** - * create the toolbar to connect nodes - * - * @private - */ - exports._createAddEdgeToolbar = function() { - // clear the toolbar - this._clearManipulatorBar(); - this._unselectAll(true); - this.freezeSimulation = true; - - var locale = this.constants.locales[this.constants.locale]; - - if (this.boundFunction) { - this.off('select', this.boundFunction); - } - - this._unselectAll(); - this.forceAppendSelection = false; - this.blockConnectingEdgeSelection = true; - - this.manipulationDOM = {}; - this.manipulationDOM['backSpan'] = document.createElement('span'); - this.manipulationDOM['backSpan'].className = 'network-manipulationUI back'; - this.manipulationDOM['backLabelSpan'] = document.createElement('span'); - this.manipulationDOM['backLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['backLabelSpan'].innerHTML = locale['back']; - this.manipulationDOM['backSpan'].appendChild(this.manipulationDOM['backLabelSpan']); - - this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; - - this.manipulationDOM['descriptionSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionSpan'].className = 'network-manipulationUI none'; - this.manipulationDOM['descriptionLabelSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['descriptionLabelSpan'].innerHTML = locale['edgeDescription']; - this.manipulationDOM['descriptionSpan'].appendChild(this.manipulationDOM['descriptionLabelSpan']); - - this.manipulationDiv.appendChild(this.manipulationDOM['backSpan']); - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); - this.manipulationDiv.appendChild(this.manipulationDOM['descriptionSpan']); - - // bind the icon - this.manipulationDOM['backSpan'].onclick = this._createManipulatorBar.bind(this); - - // we use the boundFunction so we can reference it when we unbind it from the "select" event. - this.boundFunction = this._handleConnect.bind(this); - this.on('select', this.boundFunction); - - // temporarily overload functions - this.cachedFunctions["_handleTouch"] = this._handleTouch; - this.cachedFunctions["_manipulationReleaseOverload"] = this._manipulationReleaseOverload; - this.cachedFunctions["_handleDragStart"] = this._handleDragStart; - this.cachedFunctions["_handleDragEnd"] = this._handleDragEnd; - this._handleTouch = this._handleConnect; - this._manipulationReleaseOverload = function () {}; - this._handleDragStart = function () {}; - this._handleDragEnd = this._finishConnect; - - // redraw to show the unselect - this._redraw(); - }; - - /** - * create the toolbar to edit edges - * - * @private - */ - exports._createEditEdgeToolbar = function() { - // clear the toolbar - this._clearManipulatorBar(); - this.controlNodesActive = true; - - if (this.boundFunction) { - this.off('select', this.boundFunction); - } - - this.edgeBeingEdited = this._getSelectedEdge(); - this.edgeBeingEdited._enableControlNodes(); - - var locale = this.constants.locales[this.constants.locale]; - - this.manipulationDOM = {}; - this.manipulationDOM['backSpan'] = document.createElement('span'); - this.manipulationDOM['backSpan'].className = 'network-manipulationUI back'; - this.manipulationDOM['backLabelSpan'] = document.createElement('span'); - this.manipulationDOM['backLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['backLabelSpan'].innerHTML = locale['back']; - this.manipulationDOM['backSpan'].appendChild(this.manipulationDOM['backLabelSpan']); - - this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; - - this.manipulationDOM['descriptionSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionSpan'].className = 'network-manipulationUI none'; - this.manipulationDOM['descriptionLabelSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['descriptionLabelSpan'].innerHTML = locale['editEdgeDescription']; - this.manipulationDOM['descriptionSpan'].appendChild(this.manipulationDOM['descriptionLabelSpan']); - - this.manipulationDiv.appendChild(this.manipulationDOM['backSpan']); - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); - this.manipulationDiv.appendChild(this.manipulationDOM['descriptionSpan']); - - // bind the icon - this.manipulationDOM['backSpan'].onclick = this._createManipulatorBar.bind(this); - - // temporarily overload functions - this.cachedFunctions["_handleTouch"] = this._handleTouch; - this.cachedFunctions["_manipulationReleaseOverload"] = this._manipulationReleaseOverload; - this.cachedFunctions["_handleTap"] = this._handleTap; - this.cachedFunctions["_handleDragStart"] = this._handleDragStart; - this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag; - this._handleTouch = this._selectControlNode; - this._handleTap = function () {}; - this._handleOnDrag = this._controlNodeDrag; - this._handleDragStart = function () {} - this._manipulationReleaseOverload = this._releaseControlNode; - - // redraw to show the unselect - this._redraw(); - }; - - - /** - * the function bound to the selection event. It checks if you want to connect a cluster and changes the description - * to walk the user through the process. - * - * @private - */ - exports._selectControlNode = function(pointer) { - this.edgeBeingEdited.controlNodes.from.unselect(); - this.edgeBeingEdited.controlNodes.to.unselect(); - this.selectedControlNode = this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(pointer.x),this._YconvertDOMtoCanvas(pointer.y)); - if (this.selectedControlNode !== null) { - this.selectedControlNode.select(); - this.freezeSimulation = true; - } - this._redraw(); - }; - - - /** - * the function bound to the selection event. It checks if you want to connect a cluster and changes the description - * to walk the user through the process. - * - * @private - */ - exports._controlNodeDrag = function(event) { - var pointer = this._getPointer(event.gesture.center); - if (this.selectedControlNode !== null && this.selectedControlNode !== undefined) { - this.selectedControlNode.x = this._XconvertDOMtoCanvas(pointer.x); - this.selectedControlNode.y = this._YconvertDOMtoCanvas(pointer.y); - } - this._redraw(); - }; - - exports._releaseControlNode = function(pointer) { - var newNode = this._getNodeAt(pointer); - if (newNode !== null) { - if (this.edgeBeingEdited.controlNodes.from.selected == true) { - this._editEdge(newNode.id, this.edgeBeingEdited.to.id); - this.edgeBeingEdited.controlNodes.from.unselect(); - } - if (this.edgeBeingEdited.controlNodes.to.selected == true) { - this._editEdge(this.edgeBeingEdited.from.id, newNode.id); - this.edgeBeingEdited.controlNodes.to.unselect(); - } - } - else { - this.edgeBeingEdited._restoreControlNodes(); - } - this.freezeSimulation = false; - this._redraw(); - }; - - /** - * the function bound to the selection event. It checks if you want to connect a cluster and changes the description - * to walk the user through the process. - * - * @private - */ - exports._handleConnect = function(pointer) { - if (this._getSelectedNodeCount() == 0) { - var node = this._getNodeAt(pointer); - - if (node != null) { - if (node.clusterSize > 1) { - alert(this.constants.locales[this.constants.locale]['createEdgeError']) - } - else { - this._selectObject(node,false); - var supportNodes = this.sectors['support']['nodes']; - - // create a node the temporary line can look at - supportNodes['targetNode'] = new Node({id:'targetNode'},{},{},this.constants); - var targetNode = supportNodes['targetNode']; - targetNode.x = node.x; - targetNode.y = node.y; - - // create a temporary edge - this.edges['connectionEdge'] = new Edge({id:"connectionEdge",from:node.id,to:targetNode.id}, this, this.constants); - var connectionEdge = this.edges['connectionEdge']; - connectionEdge.from = node; - connectionEdge.connected = true; - connectionEdge.options.smoothCurves = {enabled: true, - dynamic: false, - type: "continuous", - roundness: 0.5 - }; - connectionEdge.selected = true; - connectionEdge.to = targetNode; - - this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag; - this._handleOnDrag = function(event) { - var pointer = this._getPointer(event.gesture.center); - var connectionEdge = this.edges['connectionEdge']; - connectionEdge.to.x = this._XconvertDOMtoCanvas(pointer.x); - connectionEdge.to.y = this._YconvertDOMtoCanvas(pointer.y); - }; - - this.moving = true; - this.start(); - } - } - } - }; - - exports._finishConnect = function(event) { - if (this._getSelectedNodeCount() == 1) { - var pointer = this._getPointer(event.gesture.center); - // restore the drag function - this._handleOnDrag = this.cachedFunctions["_handleOnDrag"]; - delete this.cachedFunctions["_handleOnDrag"]; - - // remember the edge id - var connectFromId = this.edges['connectionEdge'].fromId; - - // remove the temporary nodes and edge - delete this.edges['connectionEdge']; - delete this.sectors['support']['nodes']['targetNode']; - delete this.sectors['support']['nodes']['targetViaNode']; - - var node = this._getNodeAt(pointer); - if (node != null) { - if (node.clusterSize > 1) { - alert(this.constants.locales[this.constants.locale]["createEdgeError"]) - } - else { - this._createEdge(connectFromId,node.id); - this._createManipulatorBar(); - } - } - this._unselectAll(); - } - }; - - - /** - * Adds a node on the specified location - */ - exports._addNode = function() { - if (this._selectionIsEmpty() && this.editMode == true) { - var positionObject = this._pointerToPositionObject(this.pointerPosition); - var defaultData = {id:util.randomUUID(),x:positionObject.left,y:positionObject.top,label:"new",allowedToMoveX:true,allowedToMoveY:true}; - if (this.triggerFunctions.add) { - if (this.triggerFunctions.add.length == 2) { - var me = this; - this.triggerFunctions.add(defaultData, function(finalizedData) { - me.nodesData.add(finalizedData); - me._createManipulatorBar(); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for add does not support two arguments (data,callback)'); - this._createManipulatorBar(); - this.moving = true; - this.start(); - } - } - else { - this.nodesData.add(defaultData); - this._createManipulatorBar(); - this.moving = true; - this.start(); - } - } - }; - - - /** - * connect two nodes with a new edge. - * - * @private - */ - exports._createEdge = function(sourceNodeId,targetNodeId) { - if (this.editMode == true) { - var defaultData = {from:sourceNodeId, to:targetNodeId}; - if (this.triggerFunctions.connect) { - if (this.triggerFunctions.connect.length == 2) { - var me = this; - this.triggerFunctions.connect(defaultData, function(finalizedData) { - me.edgesData.add(finalizedData); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for connect does not support two arguments (data,callback)'); - this.moving = true; - this.start(); - } - } - else { - this.edgesData.add(defaultData); - this.moving = true; - this.start(); - } - } - }; - - /** - * connect two nodes with a new edge. - * - * @private - */ - exports._editEdge = function(sourceNodeId,targetNodeId) { - if (this.editMode == true) { - var defaultData = {id: this.edgeBeingEdited.id, from:sourceNodeId, to:targetNodeId}; - if (this.triggerFunctions.editEdge) { - if (this.triggerFunctions.editEdge.length == 2) { - var me = this; - this.triggerFunctions.editEdge(defaultData, function(finalizedData) { - me.edgesData.update(finalizedData); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for edit does not support two arguments (data, callback)'); - this.moving = true; - this.start(); - } - } - else { - this.edgesData.update(defaultData); - this.moving = true; - this.start(); - } - } - }; - - /** - * Create the toolbar to edit the selected node. The label and the color can be changed. Other colors are derived from the chosen color. - * - * @private - */ - exports._editNode = function() { - if (this.triggerFunctions.edit && this.editMode == true) { - var node = this._getSelectedNode(); - var data = {id:node.id, - label: node.label, - group: node.options.group, - shape: node.options.shape, - color: { - background:node.options.color.background, - border:node.options.color.border, - highlight: { - background:node.options.color.highlight.background, - border:node.options.color.highlight.border - } - }}; - if (this.triggerFunctions.edit.length == 2) { - var me = this; - this.triggerFunctions.edit(data, function (finalizedData) { - me.nodesData.update(finalizedData); - me._createManipulatorBar(); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for edit does not support two arguments (data, callback)'); - } - } - else { - throw new Error('No edit function has been bound to this button'); - } - }; - - - - - /** - * delete everything in the selection - * - * @private - */ - exports._deleteSelected = function() { - if (!this._selectionIsEmpty() && this.editMode == true) { - if (!this._clusterInSelection()) { - var selectedNodes = this.getSelectedNodes(); - var selectedEdges = this.getSelectedEdges(); - if (this.triggerFunctions.del) { - var me = this; - var data = {nodes: selectedNodes, edges: selectedEdges}; - if (this.triggerFunctions.del.length = 2) { - this.triggerFunctions.del(data, function (finalizedData) { - me.edgesData.remove(finalizedData.edges); - me.nodesData.remove(finalizedData.nodes); - me._unselectAll(); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for delete does not support two arguments (data, callback)') - } - } - else { - this.edgesData.remove(selectedEdges); - this.nodesData.remove(selectedNodes); - this._unselectAll(); - this.moving = true; - this.start(); - } - } - else { - alert(this.constants.locales[this.constants.locale]["deleteClusterError"]); - } - } - }; - - -/***/ }, -/* 64 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var Hammer = __webpack_require__(45); - - exports._cleanNavigation = function() { - // clean hammer bindings - if (this.navigationHammers.existing.length != 0) { - for (var i = 0; i < this.navigationHammers.existing.length; i++) { - this.navigationHammers.existing[i].dispose(); - } - this.navigationHammers.existing = []; - } - - this._navigationReleaseOverload = function () {}; - - // clean up previous navigation items - if (this.navigationDivs && this.navigationDivs['wrapper'] && this.navigationDivs['wrapper'].parentNode) { - this.navigationDivs['wrapper'].parentNode.removeChild(this.navigationDivs['wrapper']); - } - }; - - /** - * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation - * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent - * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false. - * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas. - * - * @private - */ - exports._loadNavigationElements = function() { - this._cleanNavigation(); - - this.navigationDivs = {}; - var navigationDivs = ['up','down','left','right','zoomIn','zoomOut','zoomExtends']; - var navigationDivActions = ['_moveUp','_moveDown','_moveLeft','_moveRight','_zoomIn','_zoomOut','_zoomExtent']; - - this.navigationDivs['wrapper'] = document.createElement('div'); - this.frame.appendChild(this.navigationDivs['wrapper']); - - for (var i = 0; i < navigationDivs.length; i++) { - this.navigationDivs[navigationDivs[i]] = document.createElement('div'); - this.navigationDivs[navigationDivs[i]].className = 'network-navigation ' + navigationDivs[i]; - this.navigationDivs['wrapper'].appendChild(this.navigationDivs[navigationDivs[i]]); - - var hammer = Hammer(this.navigationDivs[navigationDivs[i]], {prevent_default: true}); - hammer.on('touch', this[navigationDivActions[i]].bind(this)); - this.navigationHammers._new.push(hammer); - } - - this._navigationReleaseOverload = this._stopMovement; - - this.navigationHammers.existing = this.navigationHammers._new; - }; - - - /** - * this stops all movement induced by the navigation buttons - * - * @private - */ - exports._zoomExtent = function(event) { - this.zoomExtent({duration:700}); - event.stopPropagation(); - }; - - /** - * this stops all movement induced by the navigation buttons - * - * @private - */ - exports._stopMovement = function() { - this._xStopMoving(); - this._yStopMoving(); - this._stopZoom(); - }; - - - /** - * move the screen up - * By using the increments, instead of adding a fixed number to the translation, we keep fluent and - * instant movement. The onKeypress event triggers immediately, then pauses, then triggers frequently - * To avoid this behaviour, we do the translation in the start loop. - * - * @private - */ - exports._moveUp = function(event) { - this.yIncrement = this.constants.keyboard.speed.y; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; - - - /** - * move the screen down - * @private - */ - exports._moveDown = function(event) { - this.yIncrement = -this.constants.keyboard.speed.y; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; - - - /** - * move the screen left - * @private - */ - exports._moveLeft = function(event) { - this.xIncrement = this.constants.keyboard.speed.x; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; - - - /** - * move the screen right - * @private - */ - exports._moveRight = function(event) { - this.xIncrement = -this.constants.keyboard.speed.y; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; - - - /** - * Zoom in, using the same method as the movement. - * @private - */ - exports._zoomIn = function(event) { - this.zoomIncrement = this.constants.keyboard.speed.zoom; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; - - - /** - * Zoom out - * @private - */ - exports._zoomOut = function(event) { - this.zoomIncrement = -this.constants.keyboard.speed.zoom; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); - }; - - - /** - * Stop zooming and unhighlight the zoom controls - * @private - */ - exports._stopZoom = function(event) { - this.zoomIncrement = 0; - event && event.preventDefault(); - }; - - - /** - * Stop moving in the Y direction and unHighlight the up and down - * @private - */ - exports._yStopMoving = function(event) { - this.yIncrement = 0; - event && event.preventDefault(); - }; - - - /** - * Stop moving in the X direction and unHighlight left and right. - * @private - */ - exports._xStopMoving = function(event) { - this.xIncrement = 0; - event && event.preventDefault(); - }; - - -/***/ }, -/* 65 */ -/***/ function(module, exports, __webpack_require__) { - - exports._resetLevels = function() { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - if (node.preassignedLevel == false) { - node.level = -1; - node.hierarchyEnumerated = false; - } - } - } - }; - - /** - * This is the main function to layout the nodes in a hierarchical way. - * It checks if the node details are supplied correctly - * - * @private - */ - exports._setupHierarchicalLayout = function() { - if (this.constants.hierarchicalLayout.enabled == true && this.nodeIndices.length > 0) { - if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "DU") { - this.constants.hierarchicalLayout.levelSeparation *= -1; - } - else { - this.constants.hierarchicalLayout.levelSeparation = Math.abs(this.constants.hierarchicalLayout.levelSeparation); - } - - if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "LR") { - if (this.constants.smoothCurves.enabled == true) { - this.constants.smoothCurves.type = "vertical"; - } - } - else { - if (this.constants.smoothCurves.enabled == true) { - this.constants.smoothCurves.type = "horizontal"; - } - } - // get the size of the largest hubs and check if the user has defined a level for a node. - var hubsize = 0; - var node, nodeId; - var definedLevel = false; - var undefinedLevel = false; - - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.level != -1) { - definedLevel = true; - } - else { - undefinedLevel = true; - } - if (hubsize < node.edges.length) { - hubsize = node.edges.length; - } - } - } - - // if the user defined some levels but not all, alert and run without hierarchical layout - if (undefinedLevel == true && definedLevel == true) { - throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes."); - this.zoomExtent(undefined,true,this.constants.clustering.enabled); - if (!this.constants.clustering.enabled) { - this.start(); - } - } - else { - // setup the system to use hierarchical method. - this._changeConstants(); - - // define levels if undefined by the users. Based on hubsize - if (undefinedLevel == true) { - if (this.constants.hierarchicalLayout.layout == "hubsize") { - this._determineLevels(hubsize); - } - else { - this._determineLevelsDirected(); - } - - } - // check the distribution of the nodes per level. - var distribution = this._getDistribution(); - - // place the nodes on the canvas. This also stablilizes the system. - this._placeNodesByHierarchy(distribution); - - // start the simulation. - this.start(); - } - } - }; - - - /** - * This function places the nodes on the canvas based on the hierarchial distribution. - * - * @param {Object} distribution | obtained by the function this._getDistribution() - * @private - */ - exports._placeNodesByHierarchy = function(distribution) { - var nodeId, node; - - // start placing all the level 0 nodes first. Then recursively position their branches. - for (var level in distribution) { - if (distribution.hasOwnProperty(level)) { - - for (nodeId in distribution[level].nodes) { - if (distribution[level].nodes.hasOwnProperty(nodeId)) { - node = distribution[level].nodes[nodeId]; - if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { - if (node.xFixed) { - node.x = distribution[level].minPos; - node.xFixed = false; - - distribution[level].minPos += distribution[level].nodeSpacing; - } - } - else { - if (node.yFixed) { - node.y = distribution[level].minPos; - node.yFixed = false; - - distribution[level].minPos += distribution[level].nodeSpacing; - } - } - this._placeBranchNodes(node.edges,node.id,distribution,node.level); - } - } - } - } - - // stabilize the system after positioning. This function calls zoomExtent. - this._stabilize(); - }; - - - /** - * This function get the distribution of levels based on hubsize - * - * @returns {Object} - * @private - */ - exports._getDistribution = function() { - var distribution = {}; - var nodeId, node, level; - - // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time. - // the fix of X is removed after the x value has been set. - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - node.xFixed = true; - node.yFixed = true; - if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { - node.y = this.constants.hierarchicalLayout.levelSeparation*node.level; - } - else { - node.x = this.constants.hierarchicalLayout.levelSeparation*node.level; - } - if (distribution[node.level] === undefined) { - distribution[node.level] = {amount: 0, nodes: {}, minPos:0, nodeSpacing:0}; - } - distribution[node.level].amount += 1; - distribution[node.level].nodes[nodeId] = node; - } - } - - // determine the largest amount of nodes of all levels - var maxCount = 0; - for (level in distribution) { - if (distribution.hasOwnProperty(level)) { - if (maxCount < distribution[level].amount) { - maxCount = distribution[level].amount; - } - } - } - - // set the initial position and spacing of each nodes accordingly - for (level in distribution) { - if (distribution.hasOwnProperty(level)) { - distribution[level].nodeSpacing = (maxCount + 1) * this.constants.hierarchicalLayout.nodeSpacing; - distribution[level].nodeSpacing /= (distribution[level].amount + 1); - distribution[level].minPos = distribution[level].nodeSpacing - (0.5 * (distribution[level].amount + 1) * distribution[level].nodeSpacing); - } - } - - return distribution; - }; - - - /** - * this function allocates nodes in levels based on the recursive branching from the largest hubs. - * - * @param hubsize - * @private - */ - exports._determineLevels = function(hubsize) { - var nodeId, node; - - // determine hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.edges.length == hubsize) { - node.level = 0; - } - } - } - - // branch from hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.level == 0) { - this._setLevel(1,node.edges,node.id); - } - } - } - }; - - /** - * this function allocates nodes in levels based on the recursive branching from the largest hubs. - * - * @param hubsize - * @private - */ - exports._determineLevelsDirected = function() { - var nodeId, node; - - // set first node to source - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.nodes[nodeId].level = 10000; - break; - } - } - - // branch from hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.level == 10000) { - this._setLevelDirected(10000,node.edges,node.id); - } - } - } - - - // branch from hubs - var minLevel = 10000; - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - minLevel = node.level < minLevel ? node.level : minLevel; - } - } - - // branch from hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - node.level -= minLevel; - } - } - }; - - - /** - * Since hierarchical layout does not support: - * - smooth curves (based on the physics), - * - clustering (based on dynamic node counts) - * - * We disable both features so there will be no problems. - * - * @private - */ - exports._changeConstants = function() { - this.constants.clustering.enabled = false; - this.constants.physics.barnesHut.enabled = false; - this.constants.physics.hierarchicalRepulsion.enabled = true; - this._loadSelectedForceSolver(); - if (this.constants.smoothCurves.enabled == true) { - this.constants.smoothCurves.dynamic = false; - } - this._configureSmoothCurves(); - }; - - - /** - * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes - * on a X position that ensures there will be no overlap. - * - * @param edges - * @param parentId - * @param distribution - * @param parentLevel - * @private - */ - exports._placeBranchNodes = function(edges, parentId, distribution, parentLevel) { - for (var i = 0; i < edges.length; i++) { - var childNode = null; - if (edges[i].toId == parentId) { - childNode = edges[i].from; - } - else { - childNode = edges[i].to; - } - - // if a node is conneceted to another node on the same level (or higher (means lower level))!, this is not handled here. - var nodeMoved = false; - if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { - if (childNode.xFixed && childNode.level > parentLevel) { - childNode.xFixed = false; - childNode.x = distribution[childNode.level].minPos; - nodeMoved = true; - } - } - else { - if (childNode.yFixed && childNode.level > parentLevel) { - childNode.yFixed = false; - childNode.y = distribution[childNode.level].minPos; - nodeMoved = true; - } - } - - if (nodeMoved == true) { - distribution[childNode.level].minPos += distribution[childNode.level].nodeSpacing; - if (childNode.edges.length > 1) { - this._placeBranchNodes(childNode.edges,childNode.id,distribution,childNode.level); - } - } - } - }; - - - /** - * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level. - * - * @param level - * @param edges - * @param parentId - * @private - */ - exports._setLevel = function(level, edges, parentId) { - for (var i = 0; i < edges.length; i++) { - var childNode = null; - if (edges[i].toId == parentId) { - childNode = edges[i].from; - } - else { - childNode = edges[i].to; - } - if (childNode.level == -1 || childNode.level > level) { - childNode.level = level; - if (childNode.edges.length > 1) { - this._setLevel(level+1, childNode.edges, childNode.id); - } - } - } - }; - - - /** - * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level. - * - * @param level - * @param edges - * @param parentId - * @private - */ - exports._setLevelDirected = function(level, edges, parentId) { - this.nodes[parentId].hierarchyEnumerated = true; - for (var i = 0; i < edges.length; i++) { - var childNode = null; - var direction = 1; - if (edges[i].toId == parentId) { - childNode = edges[i].from; - direction = -1; - } - else { - childNode = edges[i].to; - } - if (childNode.level == -1) { - childNode.level = level + direction; - } - } - - for (var i = 0; i < edges.length; i++) { - var childNode = null; - if (edges[i].toId == parentId) {childNode = edges[i].from;} - else {childNode = edges[i].to;} - if (childNode.edges.length > 1 && childNode.hierarchyEnumerated === false) { - this._setLevelDirected(childNode.level, childNode.edges, childNode.id); - } - } - }; - - - /** - * Unfix nodes - * - * @private - */ - exports._restoreNodes = function() { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.nodes[nodeId].xFixed = false; - this.nodes[nodeId].yFixed = false; - } - } - }; - - -/***/ }, -/* 66 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var RepulsionMixin = __webpack_require__(68); - var HierarchialRepulsionMixin = __webpack_require__(69); - var BarnesHutMixin = __webpack_require__(70); - - /** - * Toggling barnes Hut calculation on and off. - * - * @private - */ - exports._toggleBarnesHut = function () { - this.constants.physics.barnesHut.enabled = !this.constants.physics.barnesHut.enabled; - this._loadSelectedForceSolver(); - this.moving = true; - this.start(); - }; - - - /** - * This loads the node force solver based on the barnes hut or repulsion algorithm - * - * @private - */ - exports._loadSelectedForceSolver = function () { - // this overloads the this._calculateNodeForces - if (this.constants.physics.barnesHut.enabled == true) { - this._clearMixin(RepulsionMixin); - this._clearMixin(HierarchialRepulsionMixin); - - this.constants.physics.centralGravity = this.constants.physics.barnesHut.centralGravity; - this.constants.physics.springLength = this.constants.physics.barnesHut.springLength; - this.constants.physics.springConstant = this.constants.physics.barnesHut.springConstant; - this.constants.physics.damping = this.constants.physics.barnesHut.damping; - - this._loadMixin(BarnesHutMixin); - } - else if (this.constants.physics.hierarchicalRepulsion.enabled == true) { - this._clearMixin(BarnesHutMixin); - this._clearMixin(RepulsionMixin); - - this.constants.physics.centralGravity = this.constants.physics.hierarchicalRepulsion.centralGravity; - this.constants.physics.springLength = this.constants.physics.hierarchicalRepulsion.springLength; - this.constants.physics.springConstant = this.constants.physics.hierarchicalRepulsion.springConstant; - this.constants.physics.damping = this.constants.physics.hierarchicalRepulsion.damping; - - this._loadMixin(HierarchialRepulsionMixin); - } - else { - this._clearMixin(BarnesHutMixin); - this._clearMixin(HierarchialRepulsionMixin); - this.barnesHutTree = undefined; - - this.constants.physics.centralGravity = this.constants.physics.repulsion.centralGravity; - this.constants.physics.springLength = this.constants.physics.repulsion.springLength; - this.constants.physics.springConstant = this.constants.physics.repulsion.springConstant; - this.constants.physics.damping = this.constants.physics.repulsion.damping; - - this._loadMixin(RepulsionMixin); - } - }; - - /** - * Before calculating the forces, we check if we need to cluster to keep up performance and we check - * if there is more than one node. If it is just one node, we dont calculate anything. - * - * @private - */ - exports._initializeForceCalculation = function () { - // stop calculation if there is only one node - if (this.nodeIndices.length == 1) { - this.nodes[this.nodeIndices[0]]._setForce(0, 0); - } - else { - // if there are too many nodes on screen, we cluster without repositioning - if (this.nodeIndices.length > this.constants.clustering.clusterThreshold && this.constants.clustering.enabled == true) { - this.clusterToFit(this.constants.clustering.reduceToNodes, false); - } - - // we now start the force calculation - this._calculateForces(); - } - }; - - - /** - * Calculate the external forces acting on the nodes - * Forces are caused by: edges, repulsing forces between nodes, gravity - * @private - */ - exports._calculateForces = function () { - // Gravity is required to keep separated groups from floating off - // the forces are reset to zero in this loop by using _setForce instead - // of _addForce - - this._calculateGravitationalForces(); - this._calculateNodeForces(); - - if (this.constants.physics.springConstant > 0) { - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - this._calculateSpringForcesWithSupport(); - } - else { - if (this.constants.physics.hierarchicalRepulsion.enabled == true) { - this._calculateHierarchicalSpringForces(); - } - else { - this._calculateSpringForces(); - } - } - } - }; - - - /** - * Smooth curves are created by adding invisible nodes in the center of the edges. These nodes are also - * handled in the calculateForces function. We then use a quadratic curve with the center node as control. - * This function joins the datanodes and invisible (called support) nodes into one object. - * We do this so we do not contaminate this.nodes with the support nodes. - * - * @private - */ - exports._updateCalculationNodes = function () { - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - this.calculationNodes = {}; - this.calculationNodeIndices = []; - - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.calculationNodes[nodeId] = this.nodes[nodeId]; - } - } - var supportNodes = this.sectors['support']['nodes']; - for (var supportNodeId in supportNodes) { - if (supportNodes.hasOwnProperty(supportNodeId)) { - if (this.edges.hasOwnProperty(supportNodes[supportNodeId].parentEdgeId)) { - this.calculationNodes[supportNodeId] = supportNodes[supportNodeId]; - } - else { - supportNodes[supportNodeId]._setForce(0, 0); - } - } - } - - for (var idx in this.calculationNodes) { - if (this.calculationNodes.hasOwnProperty(idx)) { - this.calculationNodeIndices.push(idx); - } - } - } - else { - this.calculationNodes = this.nodes; - this.calculationNodeIndices = this.nodeIndices; - } - }; - - - /** - * this function applies the central gravity effect to keep groups from floating off - * - * @private - */ - exports._calculateGravitationalForces = function () { - var dx, dy, distance, node, i; - var nodes = this.calculationNodes; - var gravity = this.constants.physics.centralGravity; - var gravityForce = 0; - - for (i = 0; i < this.calculationNodeIndices.length; i++) { - node = nodes[this.calculationNodeIndices[i]]; - node.damping = this.constants.physics.damping; // possibly add function to alter damping properties of clusters. - // gravity does not apply when we are in a pocket sector - if (this._sector() == "default" && gravity != 0) { - dx = -node.x; - dy = -node.y; - distance = Math.sqrt(dx * dx + dy * dy); - - gravityForce = (distance == 0) ? 0 : (gravity / distance); - node.fx = dx * gravityForce; - node.fy = dy * gravityForce; - } - else { - node.fx = 0; - node.fy = 0; - } - } - }; - - - - - /** - * this function calculates the effects of the springs in the case of unsmooth curves. - * - * @private - */ - exports._calculateSpringForces = function () { - var edgeLength, edge, edgeId; - var dx, dy, fx, fy, springForce, distance; - var edges = this.edges; - - // forces caused by the edges, modelled as springs - for (edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - edge = edges[edgeId]; - if (edge.connected) { - // only calculate forces if nodes are in the same sector - if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { - edgeLength = edge.physics.springLength; - // this implies that the edges between big clusters are longer - edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; - - dx = (edge.from.x - edge.to.x); - dy = (edge.from.y - edge.to.y); - distance = Math.sqrt(dx * dx + dy * dy); - - if (distance == 0) { - distance = 0.01; - } - - // the 1/distance is so the fx and fy can be calculated without sine or cosine. - springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; - - fx = dx * springForce; - fy = dy * springForce; - - edge.from.fx += fx; - edge.from.fy += fy; - edge.to.fx -= fx; - edge.to.fy -= fy; - } - } - } - } - }; - - - - - /** - * This function calculates the springforces on the nodes, accounting for the support nodes. - * - * @private - */ - exports._calculateSpringForcesWithSupport = function () { - var edgeLength, edge, edgeId, combinedClusterSize; - var edges = this.edges; - - // forces caused by the edges, modelled as springs - for (edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - edge = edges[edgeId]; - if (edge.connected) { - // only calculate forces if nodes are in the same sector - if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { - if (edge.via != null) { - var node1 = edge.to; - var node2 = edge.via; - var node3 = edge.from; - - edgeLength = edge.physics.springLength; - - combinedClusterSize = node1.clusterSize + node3.clusterSize - 2; - - // this implies that the edges between big clusters are longer - edgeLength += combinedClusterSize * this.constants.clustering.edgeGrowth; - this._calculateSpringForce(node1, node2, 0.5 * edgeLength); - this._calculateSpringForce(node2, node3, 0.5 * edgeLength); - } - } - } - } - } - }; - - - /** - * This is the code actually performing the calculation for the function above. It is split out to avoid repetition. - * - * @param node1 - * @param node2 - * @param edgeLength - * @private - */ - exports._calculateSpringForce = function (node1, node2, edgeLength) { - var dx, dy, fx, fy, springForce, distance; - - dx = (node1.x - node2.x); - dy = (node1.y - node2.y); - distance = Math.sqrt(dx * dx + dy * dy); - - if (distance == 0) { - distance = 0.01; - } - - // the 1/distance is so the fx and fy can be calculated without sine or cosine. - springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; - - fx = dx * springForce; - fy = dy * springForce; - - node1.fx += fx; - node1.fy += fy; - node2.fx -= fx; - node2.fy -= fy; - }; - - - /** - * Load the HTML for the physics config and bind it - * @private - */ - exports._loadPhysicsConfiguration = function () { - if (this.physicsConfiguration === undefined) { - this.backupConstants = {}; - util.deepExtend(this.backupConstants,this.constants); - - var hierarchicalLayoutDirections = ["LR", "RL", "UD", "DU"]; - this.physicsConfiguration = document.createElement('div'); - this.physicsConfiguration.className = "PhysicsConfiguration"; - this.physicsConfiguration.innerHTML = '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
Simulation Mode:
Barnes HutRepulsionHierarchical
' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
Options:
' - this.containerElement.parentElement.insertBefore(this.physicsConfiguration, this.containerElement); - this.optionsDiv = document.createElement("div"); - this.optionsDiv.style.fontSize = "14px"; - this.optionsDiv.style.fontFamily = "verdana"; - this.containerElement.parentElement.insertBefore(this.optionsDiv, this.containerElement); - - var rangeElement; - rangeElement = document.getElementById('graph_BH_gc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_gc', -1, "physics_barnesHut_gravitationalConstant"); - rangeElement = document.getElementById('graph_BH_cg'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_cg', 1, "physics_centralGravity"); - rangeElement = document.getElementById('graph_BH_sc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sc', 1, "physics_springConstant"); - rangeElement = document.getElementById('graph_BH_sl'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sl', 1, "physics_springLength"); - rangeElement = document.getElementById('graph_BH_damp'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_damp', 1, "physics_damping"); - - rangeElement = document.getElementById('graph_R_nd'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_nd', 1, "physics_repulsion_nodeDistance"); - rangeElement = document.getElementById('graph_R_cg'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_cg', 1, "physics_centralGravity"); - rangeElement = document.getElementById('graph_R_sc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sc', 1, "physics_springConstant"); - rangeElement = document.getElementById('graph_R_sl'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sl', 1, "physics_springLength"); - rangeElement = document.getElementById('graph_R_damp'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_damp', 1, "physics_damping"); - - rangeElement = document.getElementById('graph_H_nd'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance"); - rangeElement = document.getElementById('graph_H_cg'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_cg', 1, "physics_centralGravity"); - rangeElement = document.getElementById('graph_H_sc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sc', 1, "physics_springConstant"); - rangeElement = document.getElementById('graph_H_sl'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sl', 1, "physics_springLength"); - rangeElement = document.getElementById('graph_H_damp'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_damp', 1, "physics_damping"); - rangeElement = document.getElementById('graph_H_direction'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_direction', hierarchicalLayoutDirections, "hierarchicalLayout_direction"); - rangeElement = document.getElementById('graph_H_levsep'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_levsep', 1, "hierarchicalLayout_levelSeparation"); - rangeElement = document.getElementById('graph_H_nspac'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nspac', 1, "hierarchicalLayout_nodeSpacing"); - - var radioButton1 = document.getElementById("graph_physicsMethod1"); - var radioButton2 = document.getElementById("graph_physicsMethod2"); - var radioButton3 = document.getElementById("graph_physicsMethod3"); - radioButton2.checked = true; - if (this.constants.physics.barnesHut.enabled) { - radioButton1.checked = true; - } - if (this.constants.hierarchicalLayout.enabled) { - radioButton3.checked = true; - } - - var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); - var graph_repositionNodes = document.getElementById("graph_repositionNodes"); - var graph_generateOptions = document.getElementById("graph_generateOptions"); - - graph_toggleSmooth.onclick = graphToggleSmoothCurves.bind(this); - graph_repositionNodes.onclick = graphRepositionNodes.bind(this); - graph_generateOptions.onclick = graphGenerateOptions.bind(this); - if (this.constants.smoothCurves == true && this.constants.dynamicSmoothCurves == false) { - graph_toggleSmooth.style.background = "#A4FF56"; - } - else { - graph_toggleSmooth.style.background = "#FF8532"; - } - - - switchConfigurations.apply(this); - - radioButton1.onchange = switchConfigurations.bind(this); - radioButton2.onchange = switchConfigurations.bind(this); - radioButton3.onchange = switchConfigurations.bind(this); - } - }; - - /** - * This overwrites the this.constants. - * - * @param constantsVariableName - * @param value - * @private - */ - exports._overWriteGraphConstants = function (constantsVariableName, value) { - var nameArray = constantsVariableName.split("_"); - if (nameArray.length == 1) { - this.constants[nameArray[0]] = value; - } - else if (nameArray.length == 2) { - this.constants[nameArray[0]][nameArray[1]] = value; - } - else if (nameArray.length == 3) { - this.constants[nameArray[0]][nameArray[1]][nameArray[2]] = value; - } - }; - - - /** - * this function is bound to the toggle smooth curves button. That is also why it is not in the prototype. - */ - function graphToggleSmoothCurves () { - this.constants.smoothCurves.enabled = !this.constants.smoothCurves.enabled; - var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); - if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";} - else {graph_toggleSmooth.style.background = "#FF8532";} - - this._configureSmoothCurves(false); - } - - /** - * this function is used to scramble the nodes - * - */ - function graphRepositionNodes () { - for (var nodeId in this.calculationNodes) { - if (this.calculationNodes.hasOwnProperty(nodeId)) { - this.calculationNodes[nodeId].vx = 0; this.calculationNodes[nodeId].vy = 0; - this.calculationNodes[nodeId].fx = 0; this.calculationNodes[nodeId].fy = 0; - } - } - if (this.constants.hierarchicalLayout.enabled == true) { - this._setupHierarchicalLayout(); - showValueOfRange.call(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance"); - showValueOfRange.call(this, 'graph_H_cg', 1, "physics_centralGravity"); - showValueOfRange.call(this, 'graph_H_sc', 1, "physics_springConstant"); - showValueOfRange.call(this, 'graph_H_sl', 1, "physics_springLength"); - showValueOfRange.call(this, 'graph_H_damp', 1, "physics_damping"); - } - else { - this.repositionNodes(); - } - this.moving = true; - this.start(); - } - - /** - * this is used to generate an options file from the playing with physics system. - */ - function graphGenerateOptions () { - var options = "No options are required, default values used."; - var optionsSpecific = []; - var radioButton1 = document.getElementById("graph_physicsMethod1"); - var radioButton2 = document.getElementById("graph_physicsMethod2"); - if (radioButton1.checked == true) { - if (this.constants.physics.barnesHut.gravitationalConstant != this.backupConstants.physics.barnesHut.gravitationalConstant) {optionsSpecific.push("gravitationalConstant: " + this.constants.physics.barnesHut.gravitationalConstant);} - if (this.constants.physics.centralGravity != this.backupConstants.physics.barnesHut.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} - if (this.constants.physics.springLength != this.backupConstants.physics.barnesHut.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} - if (this.constants.physics.springConstant != this.backupConstants.physics.barnesHut.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} - if (this.constants.physics.damping != this.backupConstants.physics.barnesHut.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} - if (optionsSpecific.length != 0) { - options = "var options = {"; - options += "physics: {barnesHut: {"; - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", " - } - } - options += '}}' - } - if (this.constants.smoothCurves.enabled != this.backupConstants.smoothCurves.enabled) { - if (optionsSpecific.length == 0) {options = "var options = {";} - else {options += ", "} - options += "smoothCurves: " + this.constants.smoothCurves.enabled; - } - if (options != "No options are required, default values used.") { - options += '};' - } - } - else if (radioButton2.checked == true) { - options = "var options = {"; - options += "physics: {barnesHut: {enabled: false}"; - if (this.constants.physics.repulsion.nodeDistance != this.backupConstants.physics.repulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.repulsion.nodeDistance);} - if (this.constants.physics.centralGravity != this.backupConstants.physics.repulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} - if (this.constants.physics.springLength != this.backupConstants.physics.repulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} - if (this.constants.physics.springConstant != this.backupConstants.physics.repulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} - if (this.constants.physics.damping != this.backupConstants.physics.repulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} - if (optionsSpecific.length != 0) { - options += ", repulsion: {"; - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", " - } - } - options += '}}' - } - if (optionsSpecific.length == 0) {options += "}"} - if (this.constants.smoothCurves != this.backupConstants.smoothCurves) { - options += ", smoothCurves: " + this.constants.smoothCurves; - } - options += '};' - } - else { - options = "var options = {"; - if (this.constants.physics.hierarchicalRepulsion.nodeDistance != this.backupConstants.physics.hierarchicalRepulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.hierarchicalRepulsion.nodeDistance);} - if (this.constants.physics.centralGravity != this.backupConstants.physics.hierarchicalRepulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} - if (this.constants.physics.springLength != this.backupConstants.physics.hierarchicalRepulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} - if (this.constants.physics.springConstant != this.backupConstants.physics.hierarchicalRepulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} - if (this.constants.physics.damping != this.backupConstants.physics.hierarchicalRepulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} - if (optionsSpecific.length != 0) { - options += "physics: {hierarchicalRepulsion: {"; - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", "; - } - } - options += '}},'; - } - options += 'hierarchicalLayout: {'; - optionsSpecific = []; - if (this.constants.hierarchicalLayout.direction != this.backupConstants.hierarchicalLayout.direction) {optionsSpecific.push("direction: " + this.constants.hierarchicalLayout.direction);} - if (Math.abs(this.constants.hierarchicalLayout.levelSeparation) != this.backupConstants.hierarchicalLayout.levelSeparation) {optionsSpecific.push("levelSeparation: " + this.constants.hierarchicalLayout.levelSeparation);} - if (this.constants.hierarchicalLayout.nodeSpacing != this.backupConstants.hierarchicalLayout.nodeSpacing) {optionsSpecific.push("nodeSpacing: " + this.constants.hierarchicalLayout.nodeSpacing);} - if (optionsSpecific.length != 0) { - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", " - } - } - options += '}' - } - else { - options += "enabled:true}"; - } - options += '};' - } - - - this.optionsDiv.innerHTML = options; - } - - /** - * this is used to switch between barnesHut, repulsion and hierarchical. - * - */ - function switchConfigurations () { - var ids = ["graph_BH_table", "graph_R_table", "graph_H_table"]; - var radioButton = document.querySelector('input[name="graph_physicsMethod"]:checked').value; - var tableId = "graph_" + radioButton + "_table"; - var table = document.getElementById(tableId); - table.style.display = "block"; - for (var i = 0; i < ids.length; i++) { - if (ids[i] != tableId) { - table = document.getElementById(ids[i]); - table.style.display = "none"; - } - } - this._restoreNodes(); - if (radioButton == "R") { - this.constants.hierarchicalLayout.enabled = false; - this.constants.physics.hierarchicalRepulsion.enabled = false; - this.constants.physics.barnesHut.enabled = false; - } - else if (radioButton == "H") { - if (this.constants.hierarchicalLayout.enabled == false) { - this.constants.hierarchicalLayout.enabled = true; - this.constants.physics.hierarchicalRepulsion.enabled = true; - this.constants.physics.barnesHut.enabled = false; - this.constants.smoothCurves.enabled = false; - this._setupHierarchicalLayout(); - } - } - else { - this.constants.hierarchicalLayout.enabled = false; - this.constants.physics.hierarchicalRepulsion.enabled = false; - this.constants.physics.barnesHut.enabled = true; - } - this._loadSelectedForceSolver(); - var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); - if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";} - else {graph_toggleSmooth.style.background = "#FF8532";} - this.moving = true; - this.start(); - } - - - /** - * this generates the ranges depending on the iniital values. - * - * @param id - * @param map - * @param constantsVariableName - */ - function showValueOfRange (id,map,constantsVariableName) { - var valueId = id + "_value"; - var rangeValue = document.getElementById(id).value; - - if (Array.isArray(map)) { - document.getElementById(valueId).value = map[parseInt(rangeValue)]; - this._overWriteGraphConstants(constantsVariableName,map[parseInt(rangeValue)]); - } - else { - document.getElementById(valueId).value = parseInt(map) * parseFloat(rangeValue); - this._overWriteGraphConstants(constantsVariableName, parseInt(map) * parseFloat(rangeValue)); - } - - if (constantsVariableName == "hierarchicalLayout_direction" || - constantsVariableName == "hierarchicalLayout_levelSeparation" || - constantsVariableName == "hierarchicalLayout_nodeSpacing") { - this._setupHierarchicalLayout(); - } - this.moving = true; - this.start(); - } - - -/***/ }, -/* 67 */ -/***/ function(module, exports, __webpack_require__) { - - function webpackContext(req) { - throw new Error("Cannot find module '" + req + "'."); - } - webpackContext.keys = function() { return []; }; - webpackContext.resolve = webpackContext; - module.exports = webpackContext; - webpackContext.id = 67; - - -/***/ }, -/* 68 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Calculate the forces the nodes apply on each other based on a repulsion field. - * This field is linearly approximated. - * - * @private - */ - exports._calculateNodeForces = function () { - var dx, dy, angle, distance, fx, fy, combinedClusterSize, - repulsingForce, node1, node2, i, j; - - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; - - // approximation constants - var a_base = -2 / 3; - var b = 4 / 3; - - // repulsing forces between nodes - var nodeDistance = this.constants.physics.repulsion.nodeDistance; - var minimumDistance = nodeDistance; - - // we loop from i over all but the last entree in the array - // j loops from i+1 to the last. This way we do not double count any of the indices, nor i == j - for (i = 0; i < nodeIndices.length - 1; i++) { - node1 = nodes[nodeIndices[i]]; - for (j = i + 1; j < nodeIndices.length; j++) { - node2 = nodes[nodeIndices[j]]; - combinedClusterSize = node1.clusterSize + node2.clusterSize - 2; - - dx = node2.x - node1.x; - dy = node2.y - node1.y; - distance = Math.sqrt(dx * dx + dy * dy); - - minimumDistance = (combinedClusterSize == 0) ? nodeDistance : (nodeDistance * (1 + combinedClusterSize * this.constants.clustering.distanceAmplification)); - var a = a_base / minimumDistance; - if (distance < 2 * minimumDistance) { - if (distance < 0.5 * minimumDistance) { - repulsingForce = 1.0; - } - else { - repulsingForce = a * distance + b; // linear approx of 1 / (1 + Math.exp((distance / minimumDistance - 1) * steepness)) - } - - // amplify the repulsion for clusters. - repulsingForce *= (combinedClusterSize == 0) ? 1 : 1 + combinedClusterSize * this.constants.clustering.forceAmplification; - repulsingForce = repulsingForce / distance; - - fx = dx * repulsingForce; - fy = dy * repulsingForce; - - node1.fx -= fx; - node1.fy -= fy; - node2.fx += fx; - node2.fy += fy; - } - } - } - }; - - -/***/ }, -/* 69 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Calculate the forces the nodes apply on eachother based on a repulsion field. - * This field is linearly approximated. - * - * @private - */ - exports._calculateNodeForces = function () { - var dx, dy, distance, fx, fy, - repulsingForce, node1, node2, i, j; - - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; - - // repulsing forces between nodes - var nodeDistance = this.constants.physics.hierarchicalRepulsion.nodeDistance; - - // we loop from i over all but the last entree in the array - // j loops from i+1 to the last. This way we do not double count any of the indices, nor i == j - for (i = 0; i < nodeIndices.length - 1; i++) { - node1 = nodes[nodeIndices[i]]; - for (j = i + 1; j < nodeIndices.length; j++) { - node2 = nodes[nodeIndices[j]]; - - // nodes only affect nodes on their level - if (node1.level == node2.level) { - - dx = node2.x - node1.x; - dy = node2.y - node1.y; - distance = Math.sqrt(dx * dx + dy * dy); - - - var steepness = 0.05; - if (distance < nodeDistance) { - repulsingForce = -Math.pow(steepness*distance,2) + Math.pow(steepness*nodeDistance,2); - } - else { - repulsingForce = 0; - } - // normalize force with - if (distance == 0) { - distance = 0.01; - } - else { - repulsingForce = repulsingForce / distance; - } - fx = dx * repulsingForce; - fy = dy * repulsingForce; - - node1.fx -= fx; - node1.fy -= fy; - node2.fx += fx; - node2.fy += fy; - } - } - } - }; - - - /** - * this function calculates the effects of the springs in the case of unsmooth curves. - * - * @private - */ - exports._calculateHierarchicalSpringForces = function () { - var edgeLength, edge, edgeId; - var dx, dy, fx, fy, springForce, distance; - var edges = this.edges; - - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; - - - for (var i = 0; i < nodeIndices.length; i++) { - var node1 = nodes[nodeIndices[i]]; - node1.springFx = 0; - node1.springFy = 0; - } - - - // forces caused by the edges, modelled as springs - for (edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - edge = edges[edgeId]; - if (edge.connected) { - // only calculate forces if nodes are in the same sector - if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { - edgeLength = edge.physics.springLength; - // this implies that the edges between big clusters are longer - edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; - - dx = (edge.from.x - edge.to.x); - dy = (edge.from.y - edge.to.y); - distance = Math.sqrt(dx * dx + dy * dy); - - if (distance == 0) { - distance = 0.01; - } - - // the 1/distance is so the fx and fy can be calculated without sine or cosine. - springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; - - fx = dx * springForce; - fy = dy * springForce; - - - - if (edge.to.level != edge.from.level) { - edge.to.springFx -= fx; - edge.to.springFy -= fy; - edge.from.springFx += fx; - edge.from.springFy += fy; - } - else { - var factor = 0.5; - edge.to.fx -= factor*fx; - edge.to.fy -= factor*fy; - edge.from.fx += factor*fx; - edge.from.fy += factor*fy; - } - } - } - } - } - - // normalize spring forces - var springForce = 1; - var springFx, springFy; - for (i = 0; i < nodeIndices.length; i++) { - var node = nodes[nodeIndices[i]]; - springFx = Math.min(springForce,Math.max(-springForce,node.springFx)); - springFy = Math.min(springForce,Math.max(-springForce,node.springFy)); - - node.fx += springFx; - node.fy += springFy; - } - - // retain energy balance - var totalFx = 0; - var totalFy = 0; - for (i = 0; i < nodeIndices.length; i++) { - var node = nodes[nodeIndices[i]]; - totalFx += node.fx; - totalFy += node.fy; - } - var correctionFx = totalFx / nodeIndices.length; - var correctionFy = totalFy / nodeIndices.length; - - for (i = 0; i < nodeIndices.length; i++) { - var node = nodes[nodeIndices[i]]; - node.fx -= correctionFx; - node.fy -= correctionFy; - } - - }; - -/***/ }, -/* 70 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * This function calculates the forces the nodes apply on eachother based on a gravitational model. - * The Barnes Hut method is used to speed up this N-body simulation. - * - * @private - */ - exports._calculateNodeForces = function() { - if (this.constants.physics.barnesHut.gravitationalConstant != 0) { - var node; - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; - var nodeCount = nodeIndices.length; - - this._formBarnesHutTree(nodes,nodeIndices); - - var barnesHutTree = this.barnesHutTree; - - // place the nodes one by one recursively - for (var i = 0; i < nodeCount; i++) { - node = nodes[nodeIndices[i]]; - if (node.options.mass > 0) { - // starting with root is irrelevant, it never passes the BarnesHut condition - this._getForceContribution(barnesHutTree.root.children.NW,node); - this._getForceContribution(barnesHutTree.root.children.NE,node); - this._getForceContribution(barnesHutTree.root.children.SW,node); - this._getForceContribution(barnesHutTree.root.children.SE,node); - } - } - } - }; - - - /** - * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass. - * If a region contains a single node, we check if it is not itself, then we apply the force. - * - * @param parentBranch - * @param node - * @private - */ - exports._getForceContribution = function(parentBranch,node) { - // we get no force contribution from an empty region - if (parentBranch.childrenCount > 0) { - var dx,dy,distance; - - // get the distance from the center of mass to the node. - dx = parentBranch.centerOfMass.x - node.x; - dy = parentBranch.centerOfMass.y - node.y; - distance = Math.sqrt(dx * dx + dy * dy); - - // BarnesHut condition - // original condition : s/d < theta = passed === d/s > 1/theta = passed - // calcSize = 1/s --> d * 1/s > 1/theta = passed - if (distance * parentBranch.calcSize > this.constants.physics.barnesHut.theta) { - // duplicate code to reduce function calls to speed up program - if (distance == 0) { - distance = 0.1*Math.random(); - dx = distance; - } - var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); - var fx = dx * gravityForce; - var fy = dy * gravityForce; - node.fx += fx; - node.fy += fy; - } - else { - // Did not pass the condition, go into children if available - if (parentBranch.childrenCount == 4) { - this._getForceContribution(parentBranch.children.NW,node); - this._getForceContribution(parentBranch.children.NE,node); - this._getForceContribution(parentBranch.children.SW,node); - this._getForceContribution(parentBranch.children.SE,node); - } - else { // parentBranch must have only one node, if it was empty we wouldnt be here - if (parentBranch.children.data.id != node.id) { // if it is not self - // duplicate code to reduce function calls to speed up program - if (distance == 0) { - distance = 0.5*Math.random(); - dx = distance; - } - var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); - var fx = dx * gravityForce; - var fy = dy * gravityForce; - node.fx += fx; - node.fy += fy; - } - } - } - } - }; - - /** - * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes. - * - * @param nodes - * @param nodeIndices - * @private - */ - exports._formBarnesHutTree = function(nodes,nodeIndices) { - var node; - var nodeCount = nodeIndices.length; - - var minX = Number.MAX_VALUE, - minY = Number.MAX_VALUE, - maxX =-Number.MAX_VALUE, - maxY =-Number.MAX_VALUE; - - // get the range of the nodes - for (var i = 0; i < nodeCount; i++) { - var x = nodes[nodeIndices[i]].x; - var y = nodes[nodeIndices[i]].y; - if (nodes[nodeIndices[i]].options.mass > 0) { - if (x < minX) { minX = x; } - if (x > maxX) { maxX = x; } - if (y < minY) { minY = y; } - if (y > maxY) { maxY = y; } - } - } - // make the range a square - var sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y - if (sizeDiff > 0) {minY -= 0.5 * sizeDiff; maxY += 0.5 * sizeDiff;} // xSize > ySize - else {minX += 0.5 * sizeDiff; maxX -= 0.5 * sizeDiff;} // xSize < ySize - - - var minimumTreeSize = 1e-5; - var rootSize = Math.max(minimumTreeSize,Math.abs(maxX - minX)); - var halfRootSize = 0.5 * rootSize; - var centerX = 0.5 * (minX + maxX), centerY = 0.5 * (minY + maxY); - - // construct the barnesHutTree - var barnesHutTree = { - root:{ - centerOfMass: {x:0, y:0}, - mass:0, - range: { - minX: centerX-halfRootSize,maxX:centerX+halfRootSize, - minY: centerY-halfRootSize,maxY:centerY+halfRootSize - }, - size: rootSize, - calcSize: 1 / rootSize, - children: { data:null}, - maxWidth: 0, - level: 0, - childrenCount: 4 - } - }; - this._splitBranch(barnesHutTree.root); - - // place the nodes one by one recursively - for (i = 0; i < nodeCount; i++) { - node = nodes[nodeIndices[i]]; - if (node.options.mass > 0) { - this._placeInTree(barnesHutTree.root,node); - } - } - - // make global - this.barnesHutTree = barnesHutTree - }; - - - /** - * this updates the mass of a branch. this is increased by adding a node. - * - * @param parentBranch - * @param node - * @private - */ - exports._updateBranchMass = function(parentBranch, node) { - var totalMass = parentBranch.mass + node.options.mass; - var totalMassInv = 1/totalMass; - - parentBranch.centerOfMass.x = parentBranch.centerOfMass.x * parentBranch.mass + node.x * node.options.mass; - parentBranch.centerOfMass.x *= totalMassInv; - - parentBranch.centerOfMass.y = parentBranch.centerOfMass.y * parentBranch.mass + node.y * node.options.mass; - parentBranch.centerOfMass.y *= totalMassInv; - - parentBranch.mass = totalMass; - var biggestSize = Math.max(Math.max(node.height,node.radius),node.width); - parentBranch.maxWidth = (parentBranch.maxWidth < biggestSize) ? biggestSize : parentBranch.maxWidth; - - }; - - - /** - * determine in which branch the node will be placed. - * - * @param parentBranch - * @param node - * @param skipMassUpdate - * @private - */ - exports._placeInTree = function(parentBranch,node,skipMassUpdate) { - if (skipMassUpdate != true || skipMassUpdate === undefined) { - // update the mass of the branch. - this._updateBranchMass(parentBranch,node); - } - - if (parentBranch.children.NW.range.maxX > node.x) { // in NW or SW - if (parentBranch.children.NW.range.maxY > node.y) { // in NW - this._placeInRegion(parentBranch,node,"NW"); - } - else { // in SW - this._placeInRegion(parentBranch,node,"SW"); - } - } - else { // in NE or SE - if (parentBranch.children.NW.range.maxY > node.y) { // in NE - this._placeInRegion(parentBranch,node,"NE"); - } - else { // in SE - this._placeInRegion(parentBranch,node,"SE"); - } - } - }; - - - /** - * actually place the node in a region (or branch) - * - * @param parentBranch - * @param node - * @param region - * @private - */ - exports._placeInRegion = function(parentBranch,node,region) { - switch (parentBranch.children[region].childrenCount) { - case 0: // place node here - parentBranch.children[region].children.data = node; - parentBranch.children[region].childrenCount = 1; - this._updateBranchMass(parentBranch.children[region],node); - break; - case 1: // convert into children - // if there are two nodes exactly overlapping (on init, on opening of cluster etc.) - // we move one node a pixel and we do not put it in the tree. - if (parentBranch.children[region].children.data.x == node.x && - parentBranch.children[region].children.data.y == node.y) { - node.x += Math.random(); - node.y += Math.random(); - } - else { - this._splitBranch(parentBranch.children[region]); - this._placeInTree(parentBranch.children[region],node); - } - break; - case 4: // place in branch - this._placeInTree(parentBranch.children[region],node); - break; - } - }; - - - /** - * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch - * after the split is complete. - * - * @param parentBranch - * @private - */ - exports._splitBranch = function(parentBranch) { - // if the branch is shaded with a node, replace the node in the new subset. - var containedNode = null; - if (parentBranch.childrenCount == 1) { - containedNode = parentBranch.children.data; - parentBranch.mass = 0; parentBranch.centerOfMass.x = 0; parentBranch.centerOfMass.y = 0; - } - parentBranch.childrenCount = 4; - parentBranch.children.data = null; - this._insertRegion(parentBranch,"NW"); - this._insertRegion(parentBranch,"NE"); - this._insertRegion(parentBranch,"SW"); - this._insertRegion(parentBranch,"SE"); - - if (containedNode != null) { - this._placeInTree(parentBranch,containedNode); - } - }; - - - /** - * This function subdivides the region into four new segments. - * Specifically, this inserts a single new segment. - * It fills the children section of the parentBranch - * - * @param parentBranch - * @param region - * @param parentRange - * @private - */ - exports._insertRegion = function(parentBranch, region) { - var minX,maxX,minY,maxY; - var childSize = 0.5 * parentBranch.size; - switch (region) { - case "NW": - minX = parentBranch.range.minX; - maxX = parentBranch.range.minX + childSize; - minY = parentBranch.range.minY; - maxY = parentBranch.range.minY + childSize; - break; - case "NE": - minX = parentBranch.range.minX + childSize; - maxX = parentBranch.range.maxX; - minY = parentBranch.range.minY; - maxY = parentBranch.range.minY + childSize; - break; - case "SW": - minX = parentBranch.range.minX; - maxX = parentBranch.range.minX + childSize; - minY = parentBranch.range.minY + childSize; - maxY = parentBranch.range.maxY; - break; - case "SE": - minX = parentBranch.range.minX + childSize; - maxX = parentBranch.range.maxX; - minY = parentBranch.range.minY + childSize; - maxY = parentBranch.range.maxY; - break; - } - - - parentBranch.children[region] = { - centerOfMass:{x:0,y:0}, - mass:0, - range:{minX:minX,maxX:maxX,minY:minY,maxY:maxY}, - size: 0.5 * parentBranch.size, - calcSize: 2 * parentBranch.calcSize, - children: {data:null}, - maxWidth: 0, - level: parentBranch.level+1, - childrenCount: 0 - }; - }; - - - /** - * This function is for debugging purposed, it draws the tree. - * - * @param ctx - * @param color - * @private - */ - exports._drawTree = function(ctx,color) { - if (this.barnesHutTree !== undefined) { - - ctx.lineWidth = 1; - - this._drawBranch(this.barnesHutTree.root,ctx,color); - } - }; - - - /** - * This function is for debugging purposes. It draws the branches recursively. - * - * @param branch - * @param ctx - * @param color - * @private - */ - exports._drawBranch = function(branch,ctx,color) { - if (color === undefined) { - color = "#FF0000"; - } - - if (branch.childrenCount == 4) { - this._drawBranch(branch.children.NW,ctx); - this._drawBranch(branch.children.NE,ctx); - this._drawBranch(branch.children.SE,ctx); - this._drawBranch(branch.children.SW,ctx); - } - ctx.strokeStyle = color; - ctx.beginPath(); - ctx.moveTo(branch.range.minX,branch.range.minY); - ctx.lineTo(branch.range.maxX,branch.range.minY); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(branch.range.maxX,branch.range.minY); - ctx.lineTo(branch.range.maxX,branch.range.maxY); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(branch.range.maxX,branch.range.maxY); - ctx.lineTo(branch.range.minX,branch.range.maxY); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(branch.range.minX,branch.range.maxY); - ctx.lineTo(branch.range.minX,branch.range.minY); - ctx.stroke(); - - /* - if (branch.mass > 0) { - ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass); - ctx.stroke(); - } - */ - }; - - -/***/ }, -/* 71 */ -/***/ function(module, exports, __webpack_require__) { - - module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - module.children = []; - module.webpackPolyfill = 1; - } - return module; - } - - -/***/ } -/******/ ]) -}); diff --git a/dist/vis.map b/dist/vis.map deleted file mode 100644 index fa15bdff..00000000 --- a/dist/vis.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DateUtil","DataStep","Range","stack","TimeStep","components","items","Item","BackgroundItem","BoxItem","PointItem","RangeItem","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","BackgroundGroup","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Edge","Groups","Images","Node","Popup","dotparser","gephiParser","Graph","Error","moment","hammer","isNumber","object","Number","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","isDataTable","google","visualization","DataTable","randomUUID","S4","Math","floor","random","toString","extend","a","i","len","arguments","length","other","prop","hasOwnProperty","selectiveExtend","props","Array","isArray","selectiveDeepExtend","b","TypeError","constructor","Object","undefined","deepExtend","selectiveNotDeepExtend","indexOf","equalArray","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","value","getAbsoluteLeft","elem","getBoundingClientRect","left","window","pageXOffset","getAbsoluteTop","top","pageYOffset","addClassName","className","classes","split","push","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","returnValue","getTarget","target","srcElement","nodeType","parentNode","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","GiveDec","Hex","Value","eval","GiveHex","Dec","parseColor","color","isValidRGB","rgb","substr","RGBToHex","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","hexToRGB","hex","replace","toUpperCase","substring","d","e","f","r","g","red","green","blue","RGBToHSV","minRGB","maxRGB","max","hue","saturation","cssUtil","cssText","styles","style","trim","parts","keys","map","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","q","t","isOk","test","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","mergeOptions","mergeTarget","options","enabled","binarySearchCustom","orderedItems","searchFunction","field","field2","maxIterations","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easeInOutQuad","start","end","duration","change","easingFunctions","linear","easeInQuad","easeOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","insertBefore","createElement","drawPoint","x","y","group","point","drawPoints","setAttributeNS","size","drawBar","width","height","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","setOptions","prototype","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","columns","_getColumnNames","row","rows","getNumberOfRows","col","cols","getValue","update","updatedIds","updatedData","addOrUpdate","_updateItem","get","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","_appendRow","result","getIds","getDataSet","mappedItems","filteredItem","name","sort","av","bv","remove","removedId","removedIds","_remove","clear","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","JSON","stringify","dataTable","getNumberOfColumns","getColumnId","getColumnLabel","addRow","setValue","_ids","_onEvent","apply","setData","viewOptions","getArguments","defaultFilter","dataSet","added","updated","removed","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","args","fn","context","entry","clearTimeout","setTimeout","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","passValueFn","xValueLabel","yValueLabel","zValueLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","eye","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","colorAxis","colorGrid","colorDot","colorDotBorder","getMouseX","clientX","targetTouches","getMouseY","clientY","Emitter","_setScale","scale","z","xCenter","yCenter","zCenter","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","az","cx","getCameraLocation","cy","cz","sinTx","sin","getCameraRotation","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","bx","by","ex","ey","ez","getArmLength","xcenter","frame","canvas","clientWidth","ycenter","_setBackgroundColor","backgroundColor","fill","stroke","strokeWidth","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","counter","column","getDistinctValues","distinctValues","getColumnRange","minMax","_dataInitialize","rawData","_onChange","dataFilter","setOnLoadCallback","redraw","withBars","defaultXBarWidth","dataX","defaultYBarWidth","dataY","xRange","defaultXMin","defaultXMax","defaultXStep","yRange","defaultYMin","defaultYMax","defaultYStep","zRange","defaultZMin","defaultZMax","defaultZStep","valueRange","defaultValueMin","defaultValueMax","_getDataPoints","obj","sortNumber","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","hasChildNodes","firstChild","position","overflow","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","setCameraPosition","pos","horizontal","vertical","setArmRotation","distance","setArmLength","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","next","textAlign","textBaseline","fillText","label","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","from","to","prettyStep","text","xText","yText","zText","offset","xOffset","yOffset","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","abs","parseInt","cross","topSideVisible","zAvg","transBottom","dist","sortDepth","aDiff","subtract","bDiff","crossproduct","crossProduct","radius","arc","PI","j","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","diff","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","startMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","round","parameters","emit","mouseX","mouseY","tooltipTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","content","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","dataView","progress","sub","sum","prev","bar","MozBorderRadius","slide","onclick","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","setStep","calculatePrettyStep","log10","log","LN10","step1","pow","step2","step5","toPrecision","getStep","groups","forthArgument","defaultOptions","autoResize","orientation","maxHeight","minHeight","_create","body","domProps","emitter","bind","hiddenDates","snap","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","range","timeAxis","currentTime","customTime","itemSet","itemsData","groupsData","setGroups","setItems","Core","newDataSet","initialLoad","dataRange","_getDataRange","setWindow","animate","fit","setSelection","focus","getSelection","itemData","getItemRange","dataset","minItem","maxStartItem","maxEndItem","linegraph","getLegend","groupId","isGroupVisible","visibility","convertHiddenOptions","repeat","dateItem","updateHiddenDates","centerContainer","totalRange","pixelTime","startDate","endDate","_d","runUntil","clone","day","dayOfYear","year","dayOffset","date","month","console","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","startToFront","endToFront","_applyRange","safeDates","printDates","dates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","newValue","switchedYear","switchedMonth","switchedDay","time","conversion","getHiddenDurationBetween","correctTimeForHidden","hiddenDuration","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","newTime","getHiddenDurationBefore","timeOffset","requiredDuration","previousPoint","snapAwayFromHidden","direction","correctionEnabled","minimumStep","containerHeight","customRange","alignZeros","autoScale","stepIndex","marginStart","marginEnd","deadSpace","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","decimals","slice","exp","cnt","isMajor","now","hours","minutes","seconds","milliseconds","deltaDifference","scaleOffset","moveable","zoomable","zoomMin","zoomMax","touch","animateTimer","_onDragStart","_onDrag","_onDragEnd","_onHold","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","pageX","pageY","hammerUtil","_cancelAnimation","initStart","initEnd","initTime","anyChanged","dragging","done","changed","newStart","newEnd","getRange","totalHidden","previousDelta","allowDragging","gesture","deltaX","deltaY","diffRange","safeStart","safeEnd","fakeGesture","pointer","pointerDate","_pointerToDate","zoom","touches","centerDate","hiddenDurationBefore","hiddenDurationAfter","move","EPSILON","orderByStart","orderByEnd","aTime","bTime","force","iMax","axis","collidingItem","jj","collision","nostack","subgroups","newTop","subgroup","SCALE","DAY","MILLISECOND","SECOND","MINUTE","HOUR","WEEKDAY","MONTH","YEAR","first","setFullYear","getFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth","setScale","newScale","newStep","setAutoScale","enable","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","getLabelMinor","format","getLabelMajor","_isResized","resized","_previousWidth","_previousHeight","showCurrentTime","locales","locale","parent","backgroundVertical","title","currentTimeTimer","setCurrentTime","getCurrentTime","showCustomTime","eventParams","Hammer","drag","prevent_default","setCustomTime","getCustomTime","stopPropagation","svg","linegraphOptions","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","lines","labels","conversionFactor","minWidth","stepPixels","stepPixelsForced","zeroCrossing","lineOffset","master","svgElements","iconsRemoved","amountOfGroups","lineContainer","scrollTop","addGroup","graphOptions","updateGroup","removeGroup","hide","show","display","_redrawGroupIcons","iconHeight","iconOffset","drawIcon","_cleanupIcons","backgroundHorizontal","changeCalled","activeGroups","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineWidth","minorLineHeight","majorLineWidth","majorLineHeight","_redrawLabels","_redrawTitle","amountOfSteps","stepDifference","zeroStepDifference","valueAtZero","marginStartPos","maxLabelSize","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","convertValue","invertedValue","convertedValue","characterHeight","largestWidth","majorCharWidth","minorCharWidth","textMinor","createTextNode","measureCharMinor","textMajor","measureCharMajor","textTitle","measureCharTitle","titleCharWidth","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","Line","Bar","Points","setZeroPosition","catmullRom","parametrization","alpha","SVGcontainer","path","fillPath","fillHeight","outline","shaded","barWidth","bar1Height","bar2Height","icon","yAxisOrientation","getYRange","groupData","draw","framework","subgroupIndex","subgroupOrderer","subgroupOrder","visibleItems","byStart","byEnd","checkRangedItems","inner","foreground","marker","Element","getLabelWidth","restack","_updateVisibleItems","markerHeight","lastMarkerHeight","dirty","displayed","_calculateHeight","offsetTop","offsetLeft","ii","repositionY","resetSubgroups","labelSet","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","removeFromDataSet","removeItem","startArray","endArray","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","repositionX","initialPos","breakCondition","isVisible","align","groupOrder","selectable","editable","updateTime","onAdd","onUpdate","onMove","onRemove","onMoving","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","selection","stackDirty","touchParams","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","Function","markDirty","unselect","select","getVisibleItems","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","lastWidth","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","_order","getGroups","_getType","_removeItem","groupOptions","oldGroupId","oldGroup","_constructByEndArray","itemFromTarget","selected","dragLeftItem","dragRightItem","initialX","itemProps","newProps","initial","groupFromTarget","_updateItemProps","_moveToGroup","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","_getItemRange","_item","itemSetFromTarget","side","iconSize","iconSpacing","textArea","scrollableHeight","drawLegendIcons","getComputedStyle","paddingTop","defaultGroup","sampling","graphHeight","barChart","handleOverlap","dataAxis","legend","abortedGraphUpdate","autoSizeSVG","lastStart","COUNTER","BarGraphFunctions","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","forceGraphUpdate","_updateGraph","rangePerPixelInv","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","MAX_CYCLES","_convertYcoordinates","dataContainer","guess","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","sampledData","barCombinedDataLeft","barCombinedDataRight","getStackedBarYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","axisUsed","datapoints","xValue","yValue","extractedData","svgHeight","majorLines","majorTexts","minorLines","minorTexts","lineTop","lang","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","anchor","deleteButton","_updateContents","template","_updateTitle","removeAttribute","_updateDataAttributes","dataAttributes","attributes","setAttribute","_updateStyle","emptyContent","baseClassName","onTop","itemSubgroup","itemSetHeight","marginLeft","maxWidth","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","dragLeft","dragRight","_initializeMixinLoaders","renderRefreshRate","renderTimestep","renderTime","maxPhysicsTicksPerRender","physicsDiscreteStepsize","initializing","triggerFunctions","edit","editEdge","connect","del","nodes","mass","radiusMin","radiusMax","shape","image","fontColor","fontSize","fontFace","fontFill","level","highlightColor","borderWidthSelected","edges","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","gap","altLength","inheritColor","configurePhysics","physics","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","repulsion","nodeDistance","hierarchicalRepulsion","clustering","initialMaxNodes","clusterThreshold","reduceToNodes","chainThreshold","clusterEdgeThreshold","sectorThreshold","screenSizeThreshold","fontSizeMultiplier","maxFontSize","forceAmplification","distanceAmplification","edgeGrowth","nodeScaling","maxNodeSizeIncrements","activeAreaBoxSize","clusterLevelDifference","navigation","keyboard","speed","dataManipulation","initiallyVisible","hierarchicalLayout","levelSeparation","nodeSpacing","layout","freezeForStabilization","smoothCurves","dynamic","roundness","maxVelocity","minVelocity","stabilize","stabilizationIterations","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","constants","pixelRatio","hoverObj","controlNodesActive","navigationHammers","existing","_new","animationSpeed","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","startedStabilization","stabilized","draggingNodes","calculationNodes","calculationNodeIndices","nodeIndices","canvasTopLeft","canvasBottomRight","pointerPosition","areaCenter","previousScale","nodesData","edgesData","nodesListeners","_addNodes","_updateNodes","_removeNodes","edgesListeners","_addEdges","_updateEdges","_removeEdges","moving","timer","_setupHierarchicalLayout","zoomExtent","startWithClustering","keycharm","MixinLoader","Activator","_getScriptPath","scripts","getElementsByTagName","src","_getRange","node","minY","maxY","minX","maxX","nodeId","_findCenter","animationOptions","initialZoom","disableStart","zoomLevel","numberOfNodes","factor","yDistance","xZoomLevel","yZoomLevel","animation","_updateNodeIndexList","_clearNodeIndexList","idx","dotData","DOTToGraph","gephi","gephiData","parseGephi","_setNodes","_setEdges","_putDataInSector","_resetLevels","_stabilize","onEdit","onEditEdge","onConnect","onDelete","editMode","newColorObj","groupname","clickToUse","activator","_createKeyBinds","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","pinch","_onTap","_onDoubleTap","_onMouseMoveTitle","hammerFrame","_onRelease","reset","isActive","_moveUp","_yStopMoving","_moveDown","_moveLeft","_xStopMoving","_moveRight","_zoomIn","_stopZoom","_zoomOut","_createManipulatorBar","_deleteSelected","_getPointer","pinched","_getScale","_handleTouch","_handleDragStart","_getNodeAt","_getTranslation","isSelected","_selectObject","nodeIds","objectId","selectionObj","xFixed","yFixed","_handleOnDrag","releaseNode","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","_handleDragEnd","_handleTap","_handleDoubleTap","_handleOnHold","_handleOnRelease","_zoom","scaleOld","preScaleDragPointer","DOMtoCanvas","scaleFrac","tx","ty","updateClustersDefault","postScaleDragPointer","canvasToDOM","popupObj","_checkHidePopup","checkShow","_checkShowPopup","popupTimer","edgeId","_getEdgeAt","_hoverObject","_blurObject","lastPopupNode","getTitle","isOverlappingWith","edge","connected","popup","setPosition","setText","emitEvent","oldWidth","oldHeight","oldNodesData","_updateSelection","angle","_updateCalculationNodes","_reconnectEdges","_updateValueRange","updateLabels","changedData","setProperties","properties","oldEdgesData","oldEdge","disconnect","showInternalIds","_createBezierNodes","via","sectors","dynamicEdges","setValueRange","w","save","translate","_doInAllSectors","restore","offsetX","offsetY","_drawNodes","alwaysShow","setScaleAndPos","inArea","sMax","_drawEdges","_drawControlNodes","_freezeDefinedNodes","_physicsTick","_restoreFrozenNodes","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","mainMovingStatus","supportMovingStatus","_doInAllActiveSectors","mainMoving","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","iterations","toggleFreeze","parentEdgeId","internalMultiplier","positionBezierNode","mixin","storePosition","storePositions","dataArray","allowedToMoveX","allowedToMoveY","getPositions","focusOnNode","nodePosition","lockedOnNode","easingFunction","animateView","locked","_transitionRedraw","viewCenter","distanceFromCenter","_classicRedraw","_lockedRedraw","active","getScale","getCenterCoordinates","networkConstants","fromId","toId","widthSelected","labelDimensions","yLine","dirtyLabel","fromBackup","toBackup","originalFromId","originalToId","widthFixed","lengthFixed","controlNodesEnabled","controlNodes","positions","connectedNode","_drawLine","_drawArrow","_drawArrowCenter","_drawDashLine","attachEdge","detachEdge","xFrom","yFrom","xTo","yTo","xObj","yObj","_getDistanceToEdge","_getColor","colorObj","_getLineWidth","_line","midpointX","midpointY","_pointOnLine","_label","resize","_circle","_pointOnCircle","networkScaleInv","_getViaCoordinates","xVia","yVia","quadraticCurveTo","lineCount","measureText","fillRect","mozDash","setLineDash","pattern","lineDashOffset","mozDashOffset","lineCap","dashedLine","percentage","atan2","arrow","edgeSegmentLength","fromBorderDist","distanceToBorder","fromBorderPoint","toBorderDist","toBorderPoint","x1","y1","x2","y2","x3","y3","lastX","lastY","minDistance","_getDistanceToLine","px","py","something","u","nodeIdFrom","nodeIdTo","getControlNodePositions","_enableControlNodes","_disableControlNodes","_getSelectedControlNode","fromDistance","toDistance","_restoreControlNodes","defaultIndex","DEFAULT","load","url","brokenUrl","img","Image","onload","onerror","imagelist","grouplist","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","hierarchyEnumerated","fx","fy","vx","vy","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","brokenImage","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","velocity","getDistance","globalAlpha","drawImage","textSize","getTextSize","clusterLineWidth","selectionLineWidth","roundRect","database","diameter","circle","defaultSize","ellipse","_drawShape","radiusMultiplier","baseline","labelUnderNode","inView","clearVelocity","updateVelocity","massBeforeClustering","energyBefore","styleAttr","fontFamily","WebkitBorderRadius","whiteSpace","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","o","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","graphData","dotNode","graphNode","convertEdge","dotEdge","graphEdge","subEdge","{","}","[","]",";","=",",","->","--","gephiJSON","allowedToMove","gEdges","gNodes","gEdge","source","gNode","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","_redrawTimer","listeners","events","scrollTopMin","redrawCount","_initAutoResize","component","_stopAutoResize","what","getWindow","borderRootHeight","borderRootWidth","autoHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","MAX_REDRAWS","repaint","_startAutoResize","_onResize","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","eventType","getTouchList","collectEventData","custom","back","editNode","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","n","r2d","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","dashArray","dashLength","dashCount","slope","distRemaining","dashIndex","_catmullRom","_linear","dFill","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","Bargraph","barCombinedData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","nextKey","amount","resolved","prevKey","accumulated","groupLabel","_getStackedBarYRange","xpos","PhysicsMixin","ClusterMixin","SectorsMixin","SelectionMixin","ManipulationMixin","NavigationMixin","HierarchicalLayoutMixin","_loadMixin","sourceVariable","mixinFunction","_clearMixin","_loadSelectedForceSolver","_loadPhysicsConfiguration","hubThreshold","activeSector","drawingNode","blockConnectingEdgeSelection","forceAppendSelection","manipulationDiv","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","overlay","_onTapOverlay","windowHammer","_hasParent","deactivate","escListener","activate","unbind","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_exportFunctions","_bound","keydown","keyup","_keys","fromCharCode","code","down","handleEvent","up","keyCode","bound","bindAll","getKey","newBindings","global","dfl","hasOwnProp","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","printMsg","msg","suppressDeprecationWarnings","warn","deprecate","firstTime","deprecateSimple","deprecations","padToken","func","leftZeroFill","ordinalizeToken","period","localeData","ordinal","Locale","Moment","config","skipOverflow","checkOverflow","copyConfig","Duration","normalizedInput","normalizeObjectUnits","years","quarters","quarter","months","weeks","week","days","hour","minute","second","millisecond","_milliseconds","_days","_months","_locale","_bubble","val","_isAMomentObject","_i","_f","_l","_strict","_tzm","_isUTC","_offset","_pf","momentProperties","absRound","number","targetLength","forceSign","output","positiveMomentsDifference","base","res","isAfter","momentsDifference","makeAs","isBefore","createAdder","dur","tmp","addOrSubtractDurationFromMoment","mom","isAdding","updateOffset","setTime","rawSetter","rawGetter","rawMonthSetter","input","compareArrays","dontConvert","lengthDiff","diffs","toInt","normalizeUnits","units","lowered","unitAliases","camelFunctions","inputObject","normalizedProp","makeList","setter","getter","results","utc","set","argumentForCoercion","coercedNumber","isFinite","daysInMonth","UTC","getUTCDate","weeksInYear","dow","doy","weekOfYear","daysInYear","isLeapYear","_a","DATE","_overflowDayOfYear","isValid","_isValid","getTime","bigHour","normalizeLocale","chooseLocale","names","loadLocale","oldLocale","hasModule","model","local","removeFormattingTokens","makeFormatFunction","formattingTokens","formatTokenFunctions","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","getParseRegexForToken","parseTokenOneDigit","parseTokenThreeDigits","parseTokenFourDigits","parseTokenOneToFourDigits","parseTokenSignedNumber","parseTokenSixDigits","parseTokenOneToSixDigits","parseTokenTwoDigits","parseTokenOneToThreeDigits","parseTokenWord","_meridiemParse","parseTokenOffsetMs","parseTokenTimestampMs","parseTokenTimezone","parseTokenT","parseTokenDigits","parseTokenOneOrTwoDigits","_ordinalParse","_ordinalParseLenient","RegExp","regexpEscape","unescapeFormat","timezoneMinutesFromString","string","possibleTzMatches","tzChunk","parseTimezoneChunker","addTimeToArrayFromToken","datePartArray","monthsParse","_dayOfYear","parseTwoDigitYear","_isPm","isPM","_useUTC","weekdaysParse","_w","invalidWeekday","dayOfYearFromWeekInfo","weekYear","weekday","temp","GG","W","E","_week","gg","dayOfYearFromWeeks","dateFromConfig","currentDate","yearToUse","currentDateArray","makeUTCDate","getUTCMonth","_nextDay","makeDate","setUTCMinutes","getUTCMinutes","dateFromObject","getUTCFullYear","makeDateFromStringAndFormat","ISO_8601","parseISO","parsedInput","tokens","skipped","stringLength","totalParsedInputLength","matched","p4","makeDateFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","NaN","score","l","isoRegex","isoDates","isoTimes","makeDateFromString","createFromInputFallback","makeDateFromInput","aspNetJsonRegex","ms","setUTCFullYear","parseWeekday","substituteTimeAgo","withoutSuffix","isFuture","relativeTime","posNegDuration","relativeTimeThresholds","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","daysToAdd","getUTCDay","makeMoment","invalid","preparse","pickBy","moments","dayOfMonth","unit","makeAccessor","keepTime","daysToYears","yearsToDays","makeDurationGetter","makeGlobal","shouldDeprecate","ender","oldGlobalMoment","globalScope","VERSION","aspNetTimeSpanJsonRegex","isoDurationRegex","isoFormat","unitMillisecondFactors","Milliseconds","Seconds","Minutes","Hours","Days","Months","Years","D","Q","DDD","dayofyear","isoweekday","isoweek","weekyear","isoweekyear","ordinalizeTokens","paddedTokens","MMM","monthsShort","MMMM","dd","weekdaysMin","ddd","weekdaysShort","dddd","weekdays","isoWeek","YY","YYYY","YYYYY","YYYYYY","gggg","ggggg","isoWeekYear","GGGG","GGGGG","isoWeekday","meridiem","SS","SSS","SSSS","Z","zone","ZZ","zoneAbbr","zz","zoneName","unix","lists","DDDD","_monthsShort","monthName","regex","_monthsParse","_longMonthsParse","_shortMonthsParse","_weekdays","_weekdaysShort","_weekdaysMin","weekdayName","_weekdaysParse","_longDateFormat","LTS","LT","L","LL","LLL","LLLL","isLower","_calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","_relativeTime","future","past","mm","hh","MM","yy","pastFuture","_ordinal","postformat","_invalidDate","ret","parseIso","diffRes","isDuration","inp","version","defaultFormat","relativeTimeThreshold","threshold","limit","defineLocale","_abbr","abbr","langData","flags","parseZone","isDSTShifted","parsingFlags","invalidAt","keepLocalTime","_dateTzOffset","inputString","asFloat","daysAdjust","that","zoneDiff","startOf","humanize","fromNow","sod","isDST","getDay","endOf","inputMs","isSame","localAdjust","_changeInProgress","hasAlignedHourOffset","isoWeeksInYear","weekInfo","newLocaleData","getTimezoneOffset","isoWeeks","toJSON","withSuffix","toIsoString","asSeconds","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","ordinalParse","require","noGlobal","setup","READY","Event","determineEventTypes","Utils","each","gestures","Detection","register","onTouch","DOCUMENT","EVENT_MOVE","detect","EVENT_END","Instance","defaults","behavior","userSelect","touchAction","touchCallout","contentZooming","userDrag","tapHighlightColor","HAS_POINTEREVENTS","pointerEnabled","msPointerEnabled","HAS_TOUCHEVENTS","IS_MOBILE","NO_MOUSEEVENTS","CALCULATE_INTERVAL","EVENT_TYPES","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_UP","DIRECTION_RIGHT","POINTER_MOUSE","POINTER_TOUCH","POINTER_PEN","EVENT_START","EVENT_RELEASE","EVENT_TOUCH","plugins","utils","dest","handler","iterator","inStr","find","inArray","hasParent","getCenter","getVelocity","deltaTime","getAngle","touch1","touch2","getDirection","getRotation","isVertical","setPrefixedCss","toggle","prefixes","toCamelCase","toggleBehavior","falseFn","onselectstart","ondragstart","str","preventMouseEvents","started","shouldDetect","hook","onTouchHandler","ev","triggerType","srcType","isPointer","isMouse","buttons","PointerEvent","matchType","updatePointer","doDetect","touchList","touchListLength","triggerChange","trigger","changedLength","changedTouches","evData","identifiers","identifier","pointerType","timeStamp","preventManipulation","stopDetect","pointers","touchlist","pointerEvent","pointerId","pt","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","MSPOINTER_TYPE_PEN","detection","stopped","startDetect","inst","eventData","startEvent","lastEvent","lastCalcEvent","futureCalcEvent","lastCalcData","extendEventData","instOptions","getCalculatedData","recalc","calcEv","calcData","velocityX","velocityY","interimAngle","interimDirection","startEv","lastEv","rotation","eventStartHandler","eventHandlers","createEvent","initEvent","dispatchEvent","state","dispose","eh","dragGesture","dragMaxTouches","triggered","dragMinDistance","startCenter","dragDistanceCorrection","dragLockToAxis","dragLockMinDistance","lastDirection","dragBlockVertical","dragBlockHorizontal","Drag","Gesture","holdGesture","holdTimeout","holdThreshold","Hold","Release","Swipe","swipeMinTouches","swipeMaxTouches","swipeVelocityX","swipeVelocityY","tapGesture","sincePrev","didDoubleTap","hasMoved","tapMaxDistance","tapMaxTime","doubleTapInterval","doubleTapDistance","tapAlways","Tap","Touch","preventMouse","transformGesture","scaleThreshold","rotationThreshold","transformMinScale","transformMinRotation","Transform","clusterToFit","maxNumberOfNodes","reposition","maxLevels","forceAggregateHubs","normalizeClusterLevels","increaseClusterLevel","repositionNodes","openCluster","isMovingBeforeClustering","_nodeInActiveArea","_sector","_addSector","decreaseClusterLevel","_expandClusterNode","_updateDynamicEdges","updateClusters","zoomDirection","recursive","doNotStart","amountOfNodes","_collapseSector","_formClusters","_openClusters","_openClustersBySize","_aggregateHubs","handleChains","chainPercentage","_getChainFraction","_reduceAmountOfChains","_getHubSize","_formClustersByHub","openAll","containedNodeId","childNode","_expelChildFromParent","_unselectAll","_releaseContainedEdges","_connectEdgeBackToChild","_validateEdges","othersPresent","childNodeId","_repositionBezierNodes","_formClustersByZoom","_forceClustersByZoom","minLength","_addToCluster","_clusterToSmallestNeighbour","smallestNeighbour","smallestNeighbourNode","neighbour","onlyEqual","_formClusterFromHub","hubNode","absorptionSizeOffset","allowCluster","edgesIdarray","amountOfInitialEdges","_addToContainedEdges","_connectEdgeToCluster","_containCircularEdgesFromNode","massBefore","correction","edgeToId","edgeFromId","k","_addToReroutedEdges","maxLevel","minLevel","clusterLevel","targetLevel","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","fraction","reduceAmount","chains","total","_switchToSector","sectorId","sectorType","_switchToActiveSector","_switchToFrozenSector","_switchToSupportSector","_loadLatestSector","_previousSector","_setActiveSector","newId","_forgetLastSector","_createNewSector","_deleteActiveSector","_deleteFrozenSector","_freezeSector","_activateSector","_mergeThisWithFrozen","_collapseThisToSingleCluster","sector","unqiueIdentifier","previousSector","runFunction","argument","returnValues","_doInAllFrozenSectors","_drawSectorNodes","_drawAllSectorNodes","_getNodesOverlappingWith","overlappingNodes","_getAllNodesOverlappingWith","_pointerToPositionObject","positionObject","_getEdgesOverlappingWith","overlappingEdges","_getAllEdgesOverlappingWith","_addToSelection","_addToHover","_removeFromSelection","doNotTrigger","_unselectClusters","_getSelectedNodeCount","_getSelectedNode","_getSelectedEdge","_getSelectedEdgeCount","_getSelectedObjectCount","_selectionIsEmpty","_clusterInSelection","_selectConnectedEdges","_hoverConnectedEdges","_unselectConnectedEdges","append","highlightEdges","overrideSelectable","DOM","_manipulationReleaseOverload","_navigationReleaseOverload","getSelectedNodes","edgeIds","getSelectedEdges","idArray","selectNodes","RangeError","selectEdges","_clearManipulatorBar","manipulationDOM","_restoreOverloadedFunctions","functionName","_toggleEditMode","toolbar","boundFunction","edgeBeingEdited","selectedControlNode","_createAddNodeToolbar","_createAddEdgeToolbar","_editNode","_createEditEdgeToolbar","_addNode","_handleConnect","_finishConnect","_selectControlNode","_controlNodeDrag","_releaseControlNode","newNode","_editEdge","alert","supportNodes","targetNode","connectionEdge","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","navigationDivs","navigationDivActions","_stopMovement","_zoomExtent","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","_determineLevelsDirected","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","maxCount","_setLevel","_setLevelDirected","parentId","parentLevel","nodeMoved","_restoreNodes","graphToggleSmoothCurves","graph_toggleSmooth","getElementById","graphRepositionNodes","showValueOfRange","graphGenerateOptions","optionsSpecific","radioButton1","radioButton2","checked","backupConstants","optionsDiv","switchConfigurations","radioButton","querySelector","tableId","table","constantsVariableName","valueId","rangeValue","_overWriteGraphConstants","RepulsionMixin","HierarchialRepulsionMixin","BarnesHutMixin","_toggleBarnesHut","barnesHutTree","_initializeForceCalculation","_calculateForces","_calculateGravitationalForces","_calculateNodeForces","_calculateSpringForcesWithSupport","_calculateHierarchicalSpringForces","_calculateSpringForces","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","dynamicSmoothCurves","nameArray","webpackContext","req","resolve","repulsingForce","a_base","minimumDistance","steepness","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","MAX_VALUE","sizeDiff","minimumTreeSize","rootSize","halfRootSize","centerX","centerY","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","_placeInRegion","region","containedNode","_insertRegion","childSize","_drawTree","_drawBranch","branch","webpackPolyfill","paths"],"mappings":"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"} \ No newline at end of file diff --git a/dist/vis.min.css b/dist/vis.min.css deleted file mode 100644 index dfb42f12..00000000 --- a/dist/vis.min.css +++ /dev/null @@ -1 +0,0 @@ -.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}.vis.timeline.root{position:relative;border:1px solid #bfbfbf;overflow:hidden;padding:0;margin:0;box-sizing:border-box}.vis.timeline .vispanel{position:absolute;padding:0;margin:0;box-sizing:border-box}.vis.timeline .vispanel.bottom,.vis.timeline .vispanel.center,.vis.timeline .vispanel.left,.vis.timeline .vispanel.right,.vis.timeline .vispanel.top{border:1px #bfbfbf}.vis.timeline .vispanel.center,.vis.timeline .vispanel.left,.vis.timeline .vispanel.right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis.timeline .vispanel.bottom,.vis.timeline .vispanel.center,.vis.timeline .vispanel.top{border-left-style:solid;border-right-style:solid}.vis.timeline .background{overflow:hidden}.vis.timeline .vispanel>.content{position:relative}.vis.timeline .vispanel .shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px rgba(0,0,0,.8)}.vis.timeline .vispanel .shadow.top{top:-1px;left:0}.vis.timeline .vispanel .shadow.bottom{bottom:-1px;left:0}.vis.timeline .labelset{position:relative;overflow:hidden;box-sizing:border-box}.vis.timeline .labelset .vlabel{position:relative;left:0;top:0;width:100%;color:#4d4d4d;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis.timeline .labelset .vlabel:last-child{border-bottom:none}.vis.timeline .labelset .vlabel .inner{display:inline-block;padding:5px}.vis.timeline .labelset .vlabel .inner.hidden{padding:0}.vis.timeline .itemset{position:relative;padding:0;margin:0;box-sizing:border-box}.vis.timeline .itemset .background,.vis.timeline .itemset .foreground{position:absolute;width:100%;height:100%;overflow:visible}.vis.timeline .axis{position:absolute;width:100%;height:0;left:0;z-index:1}.vis.timeline .foreground .group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis.timeline .foreground .group:last-child{border-bottom:none}.vis.timeline .item{position:absolute;color:#1A1A1A;border-color:#97B0F8;border-width:1px;background-color:#D5DDF6;display:inline-block;padding:5px}.vis.timeline .item.selected{border-color:#FFC200;background-color:#FFF785;z-index:2}.vis.timeline .editable .item.selected{cursor:move}.vis.timeline .item.point.selected{background-color:#FFF785}.vis.timeline .item.box{text-align:center;border-style:solid;border-radius:2px}.vis.timeline .item.point{background:0 0}.vis.timeline .item.dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis.timeline .item.range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis.timeline .item.background{overflow:hidden;border:none;background-color:rgba(213,221,246,.4);box-sizing:border-box;padding:0;margin:0}.vis.timeline .item.range .content{position:relative;display:inline-block;max-width:100%;overflow:hidden}.vis.timeline .item.background .content{position:absolute;display:inline-block;overflow:hidden;max-width:100%;margin:5px}.vis.timeline .item.line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis.timeline .item .content{white-space:nowrap;overflow:hidden}.vis.timeline .item .delete{background:url(img/timeline/delete.png) top center no-repeat;position:absolute;width:24px;height:24px;top:0;right:-24px;cursor:pointer}.vis.timeline .item.range .drag-left{position:absolute;width:24px;height:100%;top:0;left:-4px;cursor:w-resize}.vis.timeline .item.range .drag-right{position:absolute;width:24px;height:100%;top:0;right:-4px;cursor:e-resize}.vis.timeline .timeaxis{position:relative;overflow:hidden}.vis.timeline .timeaxis.foreground{top:0;left:0;width:100%}.vis.timeline .timeaxis.background{position:absolute;top:0;left:0;width:100%;height:100%}.vis.timeline .timeaxis .text{position:absolute;color:#4d4d4d;padding:3px;white-space:nowrap}.vis.timeline .timeaxis .text.measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis.timeline .timeaxis .grid.vertical{position:absolute;width:0;border-right:1px solid}.vis.timeline .timeaxis .grid.minor{border-color:#e5e5e5}.vis.timeline .timeaxis .grid.major{border-color:#bfbfbf}.vis.timeline .currenttime{background-color:#FF7F6E;width:2px;z-index:1}.vis.timeline .customtime{background-color:#6E94FF;width:2px;cursor:move;z-index:1}.vis.timeline .vispanel.background.horizontal .grid.horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis.timeline .vispanel.background.horizontal .grid.minor{border-color:#e5e5e5}.vis.timeline .vispanel.background.horizontal .grid.major{border-color:#bfbfbf}.vis.timeline .dataaxis .yAxis.major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis.timeline .dataaxis .yAxis.major.measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis.timeline .dataaxis .yAxis.minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis.timeline .dataaxis .yAxis.minor.measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis.timeline .dataaxis .yAxis.title{position:absolute;color:#4d4d4d;white-space:nowrap;bottom:20px;text-align:center}.vis.timeline .dataaxis .yAxis.title.measure{padding:0;margin:0;visibility:hidden;width:auto}.vis.timeline .dataaxis .yAxis.title.left{bottom:0;-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.vis.timeline .dataaxis .yAxis.title.right{bottom:0;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-ms-transform-origin:right bottom;-o-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.vis.timeline .legend{background-color:rgba(247,252,255,.65);padding:5px;border-color:#b3b3b3;border-style:solid;border-width:1px;box-shadow:2px 2px 10px rgba(154,154,154,.55)}.vis.timeline .legendText{white-space:nowrap;display:inline-block}.vis.timeline .graphGroup0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis.timeline .graphGroup1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis.timeline .graphGroup2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis.timeline .graphGroup3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis.timeline .graphGroup4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis.timeline .graphGroup5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis.timeline .graphGroup6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis.timeline .graphGroup7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis.timeline .graphGroup8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis.timeline .graphGroup9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis.timeline .fill{fill-opacity:.1;stroke:none}.vis.timeline .bar{fill-opacity:.5;stroke-width:1px}.vis.timeline .point{stroke-width:2px;fill-opacity:1}.vis.timeline .legendBackground{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis.timeline .outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis.timeline .iconFill{fill-opacity:.3;stroke:none}div.network-manipulationDiv{border-width:0;border-bottom:1px;border-style:solid;border-color:#d6d9d8;background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(to bottom,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#fcfcfc', GradientType=0);position:absolute;left:0;top:0;width:100%;height:30px}div.network-manipulation-editMode{position:absolute;left:0;top:0;height:30px;margin-top:20px}div.network-manipulation-closeDiv{position:absolute;right:0;top:0;width:30px;height:30px;background-position:20px 3px;background-repeat:no-repeat;background-image:url(img/network/cross.png);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.network-manipulation-closeDiv:hover{opacity:.6}span.network-manipulationUI{font-family:verdana;font-size:12px;-moz-border-radius:15px;border-radius:15px;display:inline-block;background-position:0 0;background-repeat:no-repeat;height:24px;margin:-14px 0 0 10px;vertical-align:middle;cursor:pointer;padding:0 8px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}span.network-manipulationUI:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}span.network-manipulationUI:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}span.network-manipulationUI.back{background-image:url(img/network/backIcon.png)}span.network-manipulationUI.none:hover{box-shadow:1px 1px 8px transparent;cursor:default}span.network-manipulationUI.none:active{box-shadow:1px 1px 8px transparent}span.network-manipulationUI.none{padding:0}span.network-manipulationUI.notification{margin:2px;font-weight:700}span.network-manipulationUI.add{background-image:url(img/network/addNodeIcon.png)}span.network-manipulationUI.edit{background-image:url(img/network/editIcon.png)}span.network-manipulationUI.edit.editmode{background-color:#fcfcfc;border-style:solid;border-width:1px;border-color:#ccc}span.network-manipulationUI.connect{background-image:url(img/network/connectIcon.png)}span.network-manipulationUI.delete{background-image:url(img/network/deleteIcon.png)}span.network-manipulationLabel{margin:0 0 0 23px;line-height:25px}div.network-seperatorLine{display:inline-block;width:1px;height:20px;background-color:#bdbdbd;margin:5px 7px 0 15px}div.network-navigation_wrapper{position:absolute;left:0;top:0;width:100%;height:100%}div.network-navigation{width:34px;height:34px;-moz-border-radius:17px;border-radius:17px;position:absolute;display:inline-block;background-position:2px 2px;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.network-navigation:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.network-navigation:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.network-navigation.up{background-image:url(img/network/upArrow.png);bottom:50px;left:55px}div.network-navigation.down{background-image:url(img/network/downArrow.png);bottom:10px;left:55px}div.network-navigation.left{background-image:url(img/network/leftArrow.png);bottom:10px;left:15px}div.network-navigation.right{background-image:url(img/network/rightArrow.png);bottom:10px;left:95px}div.network-navigation.zoomIn{background-image:url(img/network/plus.png);bottom:10px;right:15px}div.network-navigation.zoomOut{background-image:url(img/network/minus.png);bottom:10px;right:55px}div.network-navigation.zoomExtends{background-image:url(img/network/zoomExtends.png);bottom:50px;right:15px} \ No newline at end of file diff --git a/dist/vis.min.js b/dist/vis.min.js deleted file mode 100644 index bef67da9..00000000 --- a/dist/vis.min.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * vis.js - * https://github.com/almende/vis - * - * A dynamic, browser-based visualization library. - * - * @version 3.7.2 - * @date 2014-12-09 - * - * @license - * Copyright (C) 2011-2014 Almende B.V, http://almende.com - * - * Vis.js is dual licensed under both - * - * * The Apache 2.0 License - * http://www.apache.org/licenses/LICENSE-2.0 - * - * and - * - * * The MIT License - * http://opensource.org/licenses/MIT - * - * Vis.js may be distributed under either license. - */ -"use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(s){if(i[s])return i[s].exports;var o=i[s]={exports:{},id:s,loaded:!1};return t[s].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){e.util=i(1),e.DOMutil=i(2),e.DataSet=i(3),e.DataView=i(4),e.Queue=i(5),e.Graph3d=i(6),e.graph3d={Camera:i(7),Filter:i(8),Point2d:i(9),Point3d:i(10),Slider:i(11),StepNumber:i(12)},e.Timeline=i(13),e.Graph2d=i(14),e.timeline={DateUtil:i(15),DataStep:i(16),Range:i(17),stack:i(18),TimeStep:i(19),components:{items:{Item:i(31),BackgroundItem:i(32),BoxItem:i(33),PointItem:i(34),RangeItem:i(35)},Component:i(20),CurrentTime:i(21),CustomTime:i(22),DataAxis:i(23),GraphGroup:i(24),Group:i(25),BackgroundGroup:i(26),ItemSet:i(27),Legend:i(28),LineGraph:i(29),TimeAxis:i(30)}},e.Network=i(36),e.network={Edge:i(37),Groups:i(38),Images:i(39),Node:i(40),Popup:i(41),dotparser:i(42),gephiParser:i(43)},e.Graph=function(){throw new Error("Graph is renamed to Network. Please create a graph as new vis.Network(...)")},e.moment=i(44),e.hammer=i(45)},function(module,exports,__webpack_require__){var moment=__webpack_require__(44);exports.isNumber=function(t){return t instanceof Number||"number"==typeof t},exports.isString=function(t){return t instanceof String||"string"==typeof t},exports.isDate=function(t){if(t instanceof Date)return!0;if(exports.isString(t)){var e=ASPDateRegex.exec(t);if(e)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},exports.isDataTable=function(t){return"undefined"!=typeof google&&google.visualization&&google.visualization.DataTable&&t instanceof google.visualization.DataTable},exports.randomUUID=function(){var t=function(){return Math.floor(65536*Math.random()).toString(16)};return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()},exports.extend=function(t){for(var e=1,i=arguments.length;i>e;e++){var s=arguments[e];for(var o in s)s.hasOwnProperty(o)&&(t[o]=s[o])}return t},exports.selectiveExtend=function(t,e){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(var i=2;ii;i++)if(t[i]!=e[i])return!1;return!0},exports.convert=function(t,e){var i;if(void 0===t)return void 0;if(null===t)return null;if(!e)return t;if("string"!=typeof e&&!(e instanceof String))throw new Error("Type must be a string");switch(e){case"boolean":case"Boolean":return Boolean(t);case"number":case"Number":return Number(t.valueOf());case"string":case"String":return String(t);case"Date":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(moment.isMoment(t))return new Date(t.valueOf());if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])):moment(t).toDate();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"Moment":if(exports.isNumber(t))return moment(t);if(t instanceof Date)return moment(t.valueOf());if(moment.isMoment(t))return moment(t);if(exports.isString(t))return i=ASPDateRegex.exec(t),moment(i?Number(i[1]):t);throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"ISODate":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(moment.isMoment(t))return t.toDate().toISOString();if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])).toISOString():new Date(t).toISOString();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ISODate");case"ASPDate":if(exports.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(exports.isString(t)){i=ASPDateRegex.exec(t);var s;return s=i?new Date(Number(i[1])).valueOf():new Date(t).valueOf(),"/Date("+s+")/"}throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+e+'"')}};var ASPDateRegex=/^\/?Date\((\-?\d+)/i;exports.getType=function(t){var e=typeof t;return"object"==e?null==t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Array.isArray(t)?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":e},exports.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left+window.pageXOffset},exports.getAbsoluteTop=function(t){return t.getBoundingClientRect().top+window.pageYOffset},exports.addClassName=function(t,e){var i=t.className.split(" ");-1==i.indexOf(e)&&(i.push(e),t.className=i.join(" "))},exports.removeClassName=function(t,e){var i=t.className.split(" "),s=i.indexOf(e);-1!=s&&(i.splice(s,1),t.className=i.join(" "))},exports.forEach=function(t,e){var i,s;if(Array.isArray(t))for(i=0,s=t.length;s>i;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},exports.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},exports.updateProperty=function(t,e,i){return t[e]!==i?(t[e]=i,!0):!1},exports.addEventListener=function(t,e,i,s){t.addEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,s)):t.attachEvent("on"+e,i)},exports.removeEventListener=function(t,e,i,s){t.removeEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,s)):t.detachEvent("on"+e,i)},exports.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},exports.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},exports.option={},exports.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},exports.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},exports.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},exports.option.asSize=function(t,e){return"function"==typeof t&&(t=t()),exports.isString(t)?t:exports.isNumber(t)?t+"px":e||null},exports.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},exports.GiveDec=function(Hex){var Value;return Value="A"==Hex?10:"B"==Hex?11:"C"==Hex?12:"D"==Hex?13:"E"==Hex?14:"F"==Hex?15:eval(Hex)},exports.GiveHex=function(t){var e;return e=10==t?"A":11==t?"B":12==t?"C":13==t?"D":14==t?"E":15==t?"F":""+t},exports.parseColor=function(t){var e;if(exports.isString(t)){if(exports.isValidRGB(t)){var i=t.substr(4).substr(0,t.length-5).split(",");t=exports.RGBToHex(i[0],i[1],i[2])}if(exports.isValidHex(t)){var s=exports.hexToHSV(t),o={h:s.h,s:.45*s.s,v:Math.min(1,1.05*s.v)},n={h:s.h,s:Math.min(1,1.25*s.v),v:.6*s.v},r=exports.HSVToHex(n.h,n.h,n.v),a=exports.HSVToHex(o.h,o.s,o.v);e={background:t,border:r,highlight:{background:a,border:r},hover:{background:a,border:r}}}else e={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else e={},e.background=t.background||"white",e.border=t.border||e.background,exports.isString(t.highlight)?e.highlight={border:t.highlight,background:t.highlight}:(e.highlight={},e.highlight.background=t.highlight&&t.highlight.background||e.background,e.highlight.border=t.highlight&&t.highlight.border||e.border),exports.isString(t.hover)?e.hover={border:t.hover,background:t.hover}:(e.hover={},e.hover.background=t.hover&&t.hover.background||e.background,e.hover.border=t.hover&&t.hover.border||e.border);return e},exports.hexToRGB=function(t){t=t.replace("#","").toUpperCase();var e=exports.GiveDec(t.substring(0,1)),i=exports.GiveDec(t.substring(1,2)),s=exports.GiveDec(t.substring(2,3)),o=exports.GiveDec(t.substring(3,4)),n=exports.GiveDec(t.substring(4,5)),r=exports.GiveDec(t.substring(5,6)),a=16*e+i,h=16*s+o,i=16*n+r;return{r:a,g:h,b:i}},exports.RGBToHex=function(t,e,i){var s=exports.GiveHex(Math.floor(t/16)),o=exports.GiveHex(t%16),n=exports.GiveHex(Math.floor(e/16)),r=exports.GiveHex(e%16),a=exports.GiveHex(Math.floor(i/16)),h=exports.GiveHex(i%16),d=s+o+n+r+a+h;return"#"+d},exports.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var s=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));if(s==o)return{h:0,s:0,v:s};var n=t==s?e-i:i==s?t-e:i-t,r=t==s?3:i==s?1:5,a=60*(r-n/(o-s))/360,h=(o-s)/o,d=o;return{h:a,s:h,v:d}};var cssUtil={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),s=i[0].trim(),o=i[1].trim();e[s]=o}}),e},join:function(t){return Object.keys(t).map(function(e){return e+": "+t[e]}).join("; ")}};exports.addCssText=function(t,e){var i=cssUtil.split(t.style.cssText),s=cssUtil.split(e),o=exports.extend(i,s);t.style.cssText=cssUtil.join(o)},exports.removeCssText=function(t,e){var i=cssUtil.split(t.style.cssText),s=cssUtil.split(e);for(var o in s)s.hasOwnProperty(o)&&delete i[o];t.style.cssText=cssUtil.join(i)},exports.HSVToRGB=function(t,e,i){var s,o,n,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:s=i,o=l,n=h;break;case 1:s=d,o=i,n=h;break;case 2:s=h,o=i,n=l;break;case 3:s=h,o=d,n=i;break;case 4:s=l,o=h,n=i;break;case 5:s=i,o=h,n=d}return{r:Math.floor(255*s),g:Math.floor(255*o),b:Math.floor(255*n)}},exports.HSVToHex=function(t,e,i){var s=exports.HSVToRGB(t,e,i);return exports.RGBToHex(s.r,s.g,s.b)},exports.hexToHSV=function(t){var e=exports.hexToRGB(t);return exports.RGBToHSV(e.r,e.g,e.b)},exports.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},exports.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},exports.selectiveBridgeObject=function(t,e){if("object"==typeof e){for(var i=Object.create(e),s=0;s=r&&o>n;){var h=Math.floor((r+a)/2),d=t[h],l=void 0===s?d[i]:d[i][s],c=e(l);if(0==c)return h;-1==c?r=h+1:a=h-1,n++}return-1},exports.binarySearchValue=function(t,e,i,s){for(var o,n,r,a,h=1e4,d=0,l=0,c=t.length-1;c>=l&&h>d;){if(a=Math.floor(.5*(c+l)),o=t[Math.max(0,a-1)][i],n=t[a][i],r=t[Math.min(t.length-1,a+1)][i],n==e)return a;if(e>o&&n>e)return"before"==s?Math.max(0,a-1):a;if(e>n&&r>e)return"before"==s?a:Math.min(t.length-1,a+1);e>n?l=a+1:c=a-1,d++}return-1},exports.easeInOutQuad=function(t,e,i,s){var o=i-e;return t/=s/2,1>t?o/2*t*t+e:(t--,-o/2*(t*(t-2)-1)+e)},exports.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return.5>t?2*t*t:-1+(4-2*t)*t},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return.5>t?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return.5>t?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return.5>t?16*t*t*t*t*t:1+16*--t*t*t*t*t}}},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(s)):(s=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(s)),e[t].used.push(s),s},e.getDOMElement=function(t,e,i,s){var o;return e.hasOwnProperty(t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==s?i.insertBefore(o,s):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==s?i.insertBefore(o,s):i.appendChild(o)),e[t].used.push(o),o},e.drawPoint=function(t,i,s,o,n){var r;return"circle"==s.options.drawPoints.style?(r=e.getSVGElement("circle",o,n),r.setAttributeNS(null,"cx",t),r.setAttributeNS(null,"cy",i),r.setAttributeNS(null,"r",.5*s.options.drawPoints.size)):(r=e.getSVGElement("rect",o,n),r.setAttributeNS(null,"x",t-.5*s.options.drawPoints.size),r.setAttributeNS(null,"y",i-.5*s.options.drawPoints.size),r.setAttributeNS(null,"width",s.options.drawPoints.size),r.setAttributeNS(null,"height",s.options.drawPoints.size)),void 0!==s.options.drawPoints.styles&&r.setAttributeNS(null,"style",s.group.options.drawPoints.styles),r.setAttributeNS(null,"class",s.className+" point"),r},e.drawBar=function(t,i,s,o,n,r,a){if(0!=o){0>o&&(o*=-1,i-=o);var h=e.getSVGElement("rect",r,a);h.setAttributeNS(null,"x",t-.5*s),h.setAttributeNS(null,"y",i),h.setAttributeNS(null,"width",s),h.setAttributeNS(null,"height",o),h.setAttributeNS(null,"class",n)}}},function(t,e,i){function s(t,e){if(!t||Array.isArray(t)||o.isDataTable(t)||(e=t,t=null),this._options=e||{},this._data={},this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i in this._options.type)if(this._options.type.hasOwnProperty(i)){var s=this._options.type[i];this._type[i]="Date"==s||"ISODate"==s||"ASPDate"==s?"Date":s}if(this._options.convert)throw new Error('Option "convert" is deprecated. Use "type" instead.');this._subscribers={},t&&this.add(t),this.setOptions(e)}var o=i(1),n=i(5);s.prototype.setOptions=function(t){t&&void 0!==t.queue&&(t.queue===!1?this._queue&&(this._queue.destroy(),delete this._queue):(this._queue||(this._queue=n.extend(this,{replace:["add","update","remove"]})),"object"==typeof t.queue&&this._queue.setOptions(t.queue)))},s.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},s.prototype.subscribe=s.prototype.on,s.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},s.prototype.unsubscribe=s.prototype.off,s.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var s=[];t in this._subscribers&&(s=s.concat(this._subscribers[t])),"*"in this._subscribers&&(s=s.concat(this._subscribers["*"]));for(var o=0;or;r++)i=n._addItem(t[r]),s.push(i);else if(o.isDataTable(t))for(var h=this._getColumnNames(t),d=0,l=t.getNumberOfRows();l>d;d++){for(var c={},p=0,u=h.length;u>p;p++){var m=h[p];c[m]=t.getValue(d,p)}i=n._addItem(c),s.push(i)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");i=n._addItem(t),s.push(i)}return s.length&&this._trigger("add",{items:s},e),s},s.prototype.update=function(t,e){var i=[],s=[],n=[],r=this,a=r._fieldId,h=function(t){var e=t[a];r._data[e]?(e=r._updateItem(t),s.push(e),n.push(t)):(e=r._addItem(t),i.push(e))};if(Array.isArray(t))for(var d=0,l=t.length;l>d;d++)h(t[d]);else if(o.isDataTable(t))for(var c=this._getColumnNames(t),p=0,u=t.getNumberOfRows();u>p;p++){for(var m={},f=0,g=c.length;g>f;f++){var v=c[f];m[v]=t.getValue(p,f)}h(m)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");h(t)}return i.length&&this._trigger("add",{items:i},e),s.length&&this._trigger("update",{items:s,data:n},e),i.concat(s)},s.prototype.get=function(){var t,e,i,s,n=this,r=o.getType(arguments[0]);"String"==r||"Number"==r?(t=arguments[0],i=arguments[1],s=arguments[2]):"Array"==r?(e=arguments[0],i=arguments[1],s=arguments[2]):(i=arguments[0],s=arguments[1]);var a;if(i&&i.returnType){var h=["DataTable","Array","Object"];if(a=-1==h.indexOf(i.returnType)?"Array":i.returnType,s&&a!=o.getType(s))throw new Error('Type of parameter "data" ('+o.getType(s)+") does not correspond with specified options.type ("+i.type+")");if("DataTable"==a&&!o.isDataTable(s))throw new Error('Parameter "data" must be a DataTable when options.type is "DataTable"')}else a=s&&"DataTable"==o.getType(s)?"DataTable":"Array";var d,l,c,p,u=i&&i.type||this._options.type,m=i&&i.filter,f=[];if(void 0!=t)d=n._getItem(t,u),m&&!m(d)&&(d=null);else if(void 0!=e)for(c=0,p=e.length;p>c;c++)d=n._getItem(e[c],u),(!m||m(d))&&f.push(d);else for(l in this._data)this._data.hasOwnProperty(l)&&(d=n._getItem(l,u),(!m||m(d))&&f.push(d));if(i&&i.order&&void 0==t&&this._sort(f,i.order),i&&i.fields){var g=i.fields;if(void 0!=t)d=this._filterFields(d,g);else for(c=0,p=f.length;p>c;c++)f[c]=this._filterFields(f[c],g)}if("DataTable"==a){var v=this._getColumnNames(s);if(void 0!=t)n._appendRow(s,v,d);else for(c=0;cc;c++)s.push(f[c]);return s}return f},s.prototype.getIds=function(t){var e,i,s,o,n,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,l=[];if(a)if(h){n=[];for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&n.push(o));for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&l.push(o[this._fieldId]));else if(h){n=[];for(s in r)r.hasOwnProperty(s)&&n.push(r[s]);for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=r[s],l.push(o[this._fieldId]));return l},s.prototype.getDataSet=function(){return this},s.prototype.forEach=function(t,e){var i,s,o=e&&e.filter,n=e&&e.type||this._options.type,r=this._data;if(e&&e.order)for(var a=this.get(e),h=0,d=a.length;d>h;h++)i=a[h],s=i[this._fieldId],t(i,s);else for(s in r)r.hasOwnProperty(s)&&(i=this._getItem(s,n),(!o||o(i))&&t(i,s))},s.prototype.map=function(t,e){var i,s=e&&e.filter,o=e&&e.type||this._options.type,n=[],r=this._data;for(var a in r)r.hasOwnProperty(a)&&(i=this._getItem(a,o),(!s||s(i))&&n.push(t(i,a)));return e&&e.order&&this._sort(n,e.order),n},s.prototype._filterFields=function(t,e){var i={};for(var s in t)t.hasOwnProperty(s)&&-1!=e.indexOf(s)&&(i[s]=t[s]);return i},s.prototype._sort=function(t,e){if(o.isString(e)){var i=e;t.sort(function(t,e){var s=t[i],o=e[i];return s>o?1:o>s?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},s.prototype.remove=function(t,e){var i,s,o,n=[];if(Array.isArray(t))for(i=0,s=t.length;s>i;i++)o=this._remove(t[i]),null!=o&&n.push(o);else o=this._remove(t),null!=o&&n.push(o);return n.length&&this._trigger("remove",{items:n},e),n},s.prototype._remove=function(t){if(o.isNumber(t)||o.isString(t)){if(this._data[t])return delete this._data[t],t}else if(t instanceof Object){var e=t[this._fieldId];if(e&&this._data[e])return delete this._data[e],e}return null},s.prototype.clear=function(t){var e=Object.keys(this._data);return this._data={},this._trigger("remove",{items:e},t),e},s.prototype.max=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||r>s)&&(i=n,s=r)}return i},s.prototype.min=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||s>r)&&(i=n,s=r)}return i},s.prototype.distinct=function(t){var e,i=this._data,s=[],n=this._options.type&&this._options.type[t]||null,r=0;for(var a in i)if(i.hasOwnProperty(a)){var h=i[a],d=h[t],l=!1;for(e=0;r>e;e++)if(s[e]==d){l=!0;break}l||void 0===d||(s[r]=d,r++)}if(n)for(e=0;ei;i++)e[i]=t.getColumnId(i)||t.getColumnLabel(i);return e},s.prototype._appendRow=function(t,e,i){for(var s=t.addRow(),o=0,n=e.length;n>o;o++){var r=e[o];t.setValue(s,o,i[r])}},t.exports=s},function(t,e,i){function s(t,e){this._data=null,this._ids={},this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var o=i(1),n=i(3);s.prototype.setData=function(t){var e,i,s;if(this._data){this._data.unsubscribe&&this._data.unsubscribe("*",this.listener),e=[];for(var o in this._ids)this._ids.hasOwnProperty(o)&&e.push(o);this._ids={},this._trigger("remove",{items:e})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),i=0,s=e.length;s>i;i++)o=e[i],this._ids[o]=!0;this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},s.prototype.get=function(){var t,e,i,s=this,n=o.getType(arguments[0]);"String"==n||"Number"==n||"Array"==n?(t=arguments[0],e=arguments[1],i=arguments[2]):(e=arguments[0],i=arguments[1]);var r=o.extend({},this._options,e);this._options.filter&&e&&e.filter&&(r.filter=function(t){return s._options.filter(t)&&e.filter(t)});var a=[];return void 0!=t&&a.push(t),a.push(r),a.push(i),this._data&&this._data.get.apply(this._data,a)},s.prototype.getIds=function(t){var e;if(this._data){var i,s=this._options.filter;i=t&&t.filter?s?function(e){return s(e)&&t.filter(e)}:t.filter:s,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},s.prototype.getDataSet=function(){for(var t=this;t instanceof s;)t=t._data;return t||null},s.prototype._onEvent=function(t,e,i){var s,o,n,r,a=e&&e.items,h=this._data,d=[],l=[],c=[];if(a&&h){switch(t){case"add":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r&&(this._ids[n]=!0,d.push(n));break;case"update":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r?this._ids[n]?l.push(n):(this._ids[n]=!0,d.push(n)):this._ids[n]&&(delete this._ids[n],c.push(n));break;case"remove":for(s=0,o=a.length;o>s;s++)n=a[s],this._ids[n]&&(delete this._ids[n],c.push(n))}d.length&&this._trigger("add",{items:d},i),l.length&&this._trigger("update",{items:l},i),c.length&&this._trigger("remove",{items:c},i)}},s.prototype.on=n.prototype.on,s.prototype.off=n.prototype.off,s.prototype._trigger=n.prototype._trigger,s.prototype.subscribe=s.prototype.on,s.prototype.unsubscribe=s.prototype.off,t.exports=s},function(t){function e(t){this.delay=null,this.max=1/0,this._queue=[],this._timeout=null,this._extended=null,this.setOptions(t)}e.prototype.setOptions=function(t){t&&"undefined"!=typeof t.delay&&(this.delay=t.delay),t&&"undefined"!=typeof t.max&&(this.max=t.max),this._flushIfNeeded()},e.extend=function(t,i){var s=new e(i);if(void 0!==t.flush)throw new Error("Target object already has a property flush");t.flush=function(){s.flush()};var o=[{name:"flush",original:void 0}];if(i&&i.replace)for(var n=0;nthis.max&&this.flush(),clearTimeout(this._timeout),this.queue.length>0&&"number"==typeof this.delay){var t=this;this._timeout=setTimeout(function(){t.flush()},this.delay)}},e.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=e},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this.containerElement=t,this.width="400px",this.height="400px",this.margin=10,this.defaultXCenter="55%",this.defaultYCenter="50%",this.xLabel="x",this.yLabel="y",this.zLabel="z";var o=function(t){return t};this.xValueLabel=o,this.yValueLabel=o,this.zValueLabel=o,this.filterLabel="time",this.legendLabel="value",this.style=s.STYLE.DOT,this.showPerspective=!0,this.showGrid=!0,this.keepAspectRatio=!0,this.showShadow=!1,this.showGrayBottom=!1,this.showTooltip=!1,this.verticalRatio=.5,this.animationInterval=1e3,this.animationPreload=!1,this.camera=new p,this.eye=new l(0,0,-1),this.dataTable=null,this.dataPoints=null,this.colX=void 0,this.colY=void 0,this.colZ=void 0,this.colValue=void 0,this.colFilter=void 0,this.xMin=0,this.xStep=void 0,this.xMax=1,this.yMin=0,this.yStep=void 0,this.yMax=1,this.zMin=0,this.zStep=void 0,this.zMax=1,this.valueMin=0,this.valueMax=1,this.xBarWidth=1,this.yBarWidth=1,this.colorAxis="#4D4D4D",this.colorGrid="#D3D3D3",this.colorDot="#7DC1FF",this.colorDotBorder="#3267D2",this.create(),this.setOptions(i),e&&this.setData(e)}function o(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0}function n(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0}var r=i(56),a=i(3),h=i(4),d=i(1),l=i(10),c=i(9),p=i(7),u=i(8),m=i(11),f=i(12);r(s.prototype),s.prototype._setScale=function(){this.scale=new l(1/(this.xMax-this.xMin),1/(this.yMax-this.yMin),1/(this.zMax-this.zMin)),this.keepAspectRatio&&(this.scale.x3&&(this.colFilter=3);else{if(this.style!==s.STYLE.DOTCOLOR&&this.style!==s.STYLE.DOTSIZE&&this.style!==s.STYLE.BARCOLOR&&this.style!==s.STYLE.BARSIZE)throw'Unknown style "'+this.style+'"';this.colX=0,this.colY=1,this.colZ=2,this.colValue=3,t.getNumberOfColumns()>4&&(this.colFilter=4)}},s.prototype.getNumberOfRows=function(t){return t.length},s.prototype.getNumberOfColumns=function(t){var e=0;for(var i in t[0])t[0].hasOwnProperty(i)&&e++;return e},s.prototype.getDistinctValues=function(t,e){for(var i=[],s=0;st[s][e]&&(i.min=t[s][e]),i.maxt;t++){var m=(t-p)/(u-p),g=240*m,v=this._hsv2rgb(g,1,1);c.strokeStyle=v,c.beginPath(),c.moveTo(h,r+t),c.lineTo(a,r+t),c.stroke()}c.strokeStyle=this.colorAxis,c.strokeRect(h,r,i,n)}if(this.style===s.STYLE.DOTSIZE&&(c.strokeStyle=this.colorAxis,c.fillStyle=this.colorDot,c.beginPath(),c.moveTo(h,r),c.lineTo(a,r),c.lineTo(a-i+e,d),c.lineTo(h,d),c.closePath(),c.fill(),c.stroke()),this.style===s.STYLE.DOTCOLOR||this.style===s.STYLE.DOTSIZE){var y=5,b=new f(this.valueMin,this.valueMax,(this.valueMax-this.valueMin)/5,!0);for(b.start(),b.getCurrent()0?this.yMin:this.yMax,o=this._convert3Dto2D(new l(x,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+this.xValueLabel(i.getCurrent())+" ",o.x,o.y),i.next()}for(g.lineWidth=1,s=void 0===this.defaultYStep,i=new f(this.yMin,this.yMax,this.yStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,o=this._convert3Dto2D(new l(n,i.getCurrent(),this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+this.yValueLabel(i.getCurrent())+" ",o.x,o.y),i.next();for(g.lineWidth=1,s=void 0===this.defaultZStep,i=new f(this.zMin,this.zMax,this.zStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new l(n,r,i.getCurrent())),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(t.x-b,t.y),g.stroke(),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(this.zValueLabel(i.getCurrent())+" ",t.x-5,t.y),i.next();g.lineWidth=1,t=this._convert3Dto2D(new l(n,r,this.zMin)),e=this._convert3Dto2D(new l(n,r,this.zMax)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),g.lineWidth=1,p=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),u=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(u.x,u.y),g.stroke(),p=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),u=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(u.x,u.y),g.stroke(),g.lineWidth=1,t=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),t=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke();var w=this.xLabel;w.length>0&&(c=.1/this.scale.y,n=(this.xMin+this.xMax)/2,r=Math.cos(_)>0?this.yMin-c:this.yMax+c,o=this._convert3Dto2D(new l(n,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(w,o.x,o.y));var S=this.yLabel;S.length>0&&(d=.1/this.scale.x,n=Math.sin(_)>0?this.xMin-d:this.xMax+d,r=(this.yMin+this.yMax)/2,o=this._convert3Dto2D(new l(n,r,this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(S,o.x,o.y));var D=this.zLabel;D.length>0&&(h=30,n=Math.cos(_)>0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,o=this._convert3Dto2D(new l(n,r,a)),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(D,o.x-h,o.y))},s.prototype._hsv2rgb=function(t,e,i){var s,o,n,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:s=r,o=h,n=0;break;case 1:s=h,o=r,n=0;break;case 2:s=0,o=r,n=h;break;case 3:s=0,o=h,n=r;break;case 4:s=h,o=0,n=r;break;case 5:s=r,o=0,n=h;break;default:s=0,o=0,n=0}return"RGB("+parseInt(255*s)+","+parseInt(255*o)+","+parseInt(255*n)+")"},s.prototype._redrawDataGrid=function(){var t,e,i,o,n,r,a,h,d,c,p,u,m,f=this.frame.canvas,g=f.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(n=0;n0}else r=!0;r?(m=(t.point.z+e.point.z+i.point.z+o.point.z)/4,c=240*(1-(m-this.zMin)*this.scale.z/this.verticalRatio),p=1,this.showShadow?(u=Math.min(1+S.x/D/2,1),a=this._hsv2rgb(c,p,u),h=a):(u=1,a=this._hsv2rgb(c,p,u),h=this.colorAxis)):(a="gray",h=this.colorAxis),d=.5,g.lineWidth=d,g.fillStyle=a,g.strokeStyle=h,g.beginPath(),g.moveTo(t.screen.x,t.screen.y),g.lineTo(e.screen.x,e.screen.y),g.lineTo(o.screen.x,o.screen.y),g.lineTo(i.screen.x,i.screen.y),g.closePath(),g.fill(),g.stroke()}}else for(n=0;np&&(p=0);var u,m,f;this.style===s.STYLE.DOTCOLOR?(u=240*(1-(d.point.value-this.valueMin)*this.scale.value),m=this._hsv2rgb(u,1,1),f=this._hsv2rgb(u,1,.8)):this.style===s.STYLE.DOTSIZE?(m=this.colorDot,f=this.colorDotBorder):(u=240*(1-(d.point.z-this.zMin)*this.scale.z/this.verticalRatio),m=this._hsv2rgb(u,1,1),f=this._hsv2rgb(u,1,.8)),i.lineWidth=1,i.strokeStyle=f,i.fillStyle=m,i.beginPath(),i.arc(d.screen.x,d.screen.y,p,0,2*Math.PI,!0),i.fill(),i.stroke()}}},s.prototype._redrawDataBar=function(){var t,e,i,o,n=this.frame.canvas,r=n.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(t=0;t0&&(t=this.dataPoints[0],s.lineWidth=1,s.strokeStyle="blue",s.beginPath(),s.moveTo(t.screen.x,t.screen.y)),e=1;e0&&s.stroke()}},s.prototype._onMouseDown=function(t){if(t=t||window.event,this.leftButtonDown&&this._onMouseUp(t),this.leftButtonDown=t.which?1===t.which:1===t.button,this.leftButtonDown||this.touchDown){this.startMouseX=o(t),this.startMouseY=n(t),this.startStart=new Date(this.start),this.startEnd=new Date(this.end),this.startArmRotation=this.camera.getArmRotation(),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},d.addEventListener(document,"mousemove",e.onmousemove),d.addEventListener(document,"mouseup",e.onmouseup),d.preventDefault(t)}},s.prototype._onMouseMove=function(t){t=t||window.event;var e=parseFloat(o(t))-this.startMouseX,i=parseFloat(n(t))-this.startMouseY,s=this.startArmRotation.horizontal+e/200,r=this.startArmRotation.vertical+i/200,a=4,h=Math.sin(a/360*2*Math.PI);Math.abs(Math.sin(s))0?1:0>t?-1:0}var s=e[0],o=e[1],n=e[2],r=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x)),a=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),h=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},s.prototype._dataPointFromXY=function(t,e){var i,o=100,n=null,r=null,a=null,h=new c(t,e);if(this.style===s.STYLE.BAR||this.style===s.STYLE.BARCOLOR||this.style===s.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){n=this.dataPoints[i];var d=n.surfaces;if(d)for(var l=d.length-1;l>=0;l--){var p=d[l],u=p.corners,m=[u[0].screen,u[1].screen,u[2].screen],f=[u[2].screen,u[3].screen,u[0].screen];if(this._insideTriangle(h,m)||this._insideTriangle(h,f))return n}}else for(i=0;ib)&&o>b&&(a=b,r=n)}}return r},s.prototype._showTooltip=function(t){var e,i,s;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,s=this.tooltip.dom.dot):(e=document.createElement("div"),e.style.position="absolute",e.style.padding="10px",e.style.border="1px solid #4d4d4d",e.style.color="#1a1a1a",e.style.background="rgba(255,255,255,0.7)",e.style.borderRadius="2px",e.style.boxShadow="5px 5px 10px rgba(128,128,128,0.5)",i=document.createElement("div"),i.style.position="absolute",i.style.height="40px",i.style.width="0",i.style.borderLeft="1px solid #4d4d4d",s=document.createElement("div"),s.style.position="absolute",s.style.height="0",s.style.width="0",s.style.border="5px solid #4d4d4d",s.style.borderRadius="5px",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:s}}),this._hideTooltip(),this.tooltip.dataPoint=t,e.innerHTML="function"==typeof this.showTooltip?this.showTooltip(t.point):"
x:"+t.point.x+"
y:"+t.point.y+"
z:"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(s);var o=e.offsetWidth,n=e.offsetHeight,r=i.offsetHeight,a=s.offsetWidth,h=s.offsetHeight,d=t.screen.x-o/2;d=Math.min(Math.max(d,10),this.frame.clientWidth-10-o),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=d+"px",e.style.top=t.screen.y-r-n+"px",s.style.left=t.screen.x-a/2+"px",s.style.top=t.screen.y-h/2+"px"},s.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},t.exports=s},function(t,e,i){function s(){this.armLocation=new o,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraLocation=new o,this.cameraRotation=new o(.5*Math.PI,0,0),this.calculateCameraOrientation()}var o=i(10);s.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},s.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),(void 0!==t||void 0!==e)&&this.calculateCameraOrientation()},s.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},s.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.calculateCameraOrientation())},s.prototype.getArmLength=function(){return this.armLength},s.prototype.getCameraLocation=function(){return this.cameraLocation},s.prototype.getCameraRotation=function(){return this.cameraRotation},s.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal},t.exports=s},function(t,e,i){function s(t,e,i){this.data=t,this.column=e,this.graph=i,this.index=void 0,this.value=void 0,this.values=i.getDistinctValues(t.get(),this.column),this.values.sort(function(t,e){return t>e?1:e>t?-1:0}),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,i.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var o=i(4);s.prototype.isLoaded=function(){return this.loaded},s.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},s.prototype.getLabel=function(){return this.graph.filterLabel},s.prototype.getColumn=function(){return this.column},s.prototype.getSelectedValue=function(){return void 0===this.index?void 0:this.values[this.index]},s.prototype.getValues=function(){return this.values},s.prototype.getValue=function(t){if(t>=this.values.length)throw"Error: index out of range";return this.values[t] -},s.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var s=new o(this.data,{filter:function(t){return t[i.column]==i.value}}).get();e=this.graph._getDataPoints(s),this.dataPoints[t]=e}return e},s.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},s.prototype.selectValue=function(t){if(t>=this.values.length)throw"Error: index out of range";this.index=t,this.value=this.values[t]},s.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},s.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},s.prototype.setIndex=function(t){if(!(ts&&(s=0),s>this.values.length-1&&(s=this.values.length-1),s},s.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t/(this.values.length-1)*e,s=i+3;return s},s.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,s=this.leftToIndex(i);this.setIndex(s),o.preventDefault()},s.prototype._onMouseUp=function(){this.frame.style.cursor="auto",o.removeEventListener(document,"mousemove",this.onmousemove),o.removeEventListener(document,"mouseup",this.onmouseup),o.preventDefault()},t.exports=s},function(t){function e(t,e,i,s){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,s)}e.prototype.setRange=function(t,e,i,s){this._start=t?t:0,this._end=e?e:0,this.setStep(i,s)},e.prototype.setStep=function(t,i){void 0===t||0>=t||(void 0!==i&&(this.prettyStep=i),this._step=this.prettyStep===!0?e.calculatePrettyStep(t):t)},e.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),s=2*Math.pow(10,Math.round(e(t/2))),o=5*Math.pow(10,Math.round(e(t/5))),n=i;return Math.abs(s-t)<=Math.abs(n-t)&&(n=s),Math.abs(o-t)<=Math.abs(n-t)&&(n=o),0>=n&&(n=1),n},e.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},e.prototype.getStep=function(){return this._step},e.prototype.start=function(){this._current=this._start-this._start%this._step},e.prototype.next=function(){this._current+=this._step},e.prototype.end=function(){return this._current>this._end},t.exports=e},function(t,e,i){function s(t,e,i,r){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");if(!(Array.isArray(i)||i instanceof n)&&i instanceof Object){var h=r;r=i,i=h}var u=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{snap:null,toScreen:u._toScreen.bind(u),toGlobalScreen:u._toGlobalScreen.bind(u),toTime:u._toTime.bind(u),toGlobalTime:u._toGlobalTime.bind(u)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.itemSet=new p(this.body),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,r&&this.setOptions(r),i&&this.setGroups(i),e?this.setItems(e):this.redraw()}var o=(i(56),i(45),i(1)),n=i(3),r=i(4),a=i(17),h=i(46),d=i(30),l=i(21),c=i(22),p=i(27);s.prototype=new h,s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){if(void 0==this.options.start||void 0==this.options.end)var s=this._getDataRange();var o=void 0!=this.options.start?this.options.start:s.start,a=void 0!=this.options.end?this.options.end:s.end;this.setWindow(o,a,{animate:!1})}else this.fit({animate:!1})},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.itemSet.setGroups(e)},s.prototype.setSelection=function(t,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},s.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},s.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],s=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),o=null,n=null;if(s.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===o||o>e)&&(o=e),(null===n||i>n)&&(n=i)}),null!==o&&null!==n){var r=(o+n)/2,a=Math.max(this.range.end-this.range.start,1.1*(n-o)),h=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(r-a/2,r+a/2,h)}}},s.prototype.getItemRange=function(){var t=this.itemsData.getDataSet(),e=null,i=null;if(t){var s=t.min("start");e=s?o.convert(s.start,"Date").valueOf():null;var n=t.max("start");n&&(i=o.convert(n.start,"Date").valueOf());var r=t.max("end");r&&(i=null==i?o.convert(r.end,"Date").valueOf():Math.max(i,o.convert(r.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},t.exports=s},function(t,e,i){function s(t,e,i,s){if(!(Array.isArray(i)||i instanceof n)&&i instanceof Object){var r=s;s=i,i=r}var h=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{snap:null,toScreen:h._toScreen.bind(h),toGlobalScreen:h._toGlobalScreen.bind(h),toTime:h._toTime.bind(h),toGlobalTime:h._toGlobalTime.bind(h)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.linegraph=new p(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null,s&&this.setOptions(s),i&&this.setGroups(i),e?this.setItems(e):this.redraw()}var o=(i(56),i(45),i(1)),n=i(3),r=i(4),a=i(17),h=i(46),d=i(30),l=i(21),c=i(22),p=i(29);s.prototype=new h,s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){var s=void 0!=this.options.start?this.options.start:null,o=void 0!=this.options.end?this.options.end:null;this.setWindow(s,o,{animate:!1})}else this.fit({animate:!1})},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.linegraph.setGroups(e)},s.prototype.getLegend=function(t,e,i){return void 0===e&&(e=15),void 0===i&&(i=15),void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].getLegend(e,i):"cannot find group:"+t},s.prototype.isGroupVisible=function(t){return void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].visible&&(void 0===this.linegraph.options.groups.visibility[t]||1==this.linegraph.options.groups.visibility[t]):!1},s.prototype.getItemRange=function(){var t=null,e=null;for(var i in this.linegraph.groups)if(this.linegraph.groups.hasOwnProperty(i)&&1==this.linegraph.groups[i].visible)for(var s=0;sr?r:t,e=null==e?r:r>e?r:e}return{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},t.exports=s},function(t,e,i){var s=i(44);e.convertHiddenOptions=function(t,e){if(t.hiddenDates=[],e&&1==Array.isArray(e)){for(var i=0;i=4*a){var p=0,u=n.clone();switch(i[h].repeat){case"daily":d.day()!=l.day()&&(p=1),d.dayOfYear(o.dayOfYear()),d.year(o.year()),d.subtract(7,"days"),l.dayOfYear(o.dayOfYear()),l.year(o.year()),l.subtract(7-p,"days"),u.add(1,"weeks");break;case"weekly":var m=l.diff(d,"days"),f=d.day();d.date(o.date()),d.month(o.month()),d.year(o.year()),l=d.clone(),d.day(f),l.day(f),l.add(m,"days"),d.subtract(1,"weeks"),l.subtract(1,"weeks"),u.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(p=1),d.month(o.month()),d.year(o.year()),d.subtract(1,"months"),l.month(o.month()),l.year(o.year()),l.subtract(1,"months"),l.add(p,"months"),u.add(1,"months");break;case"yearly":d.year()!=l.year()&&(p=1),d.year(o.year()),d.subtract(1,"years"),l.year(o.year()),l.subtract(1,"years"),l.add(p,"years"),u.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",i[h].repeat)}for(;u>d;)switch(t.hiddenDates.push({start:d.valueOf(),end:l.valueOf()}),i[h].repeat){case"daily":d.add(1,"days"),l.add(1,"days");break;case"weekly":d.add(1,"weeks"),l.add(1,"weeks");break;case"monthly":d.add(1,"months"),l.add(1,"months");break;case"yearly":d.add(1,"y"),l.add(1,"y");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",i[h].repeat)}t.hiddenDates.push({start:d.valueOf(),end:l.valueOf()})}}e.removeDuplicates(t);var g=e.isHidden(t.range.start,t.hiddenDates),v=e.isHidden(t.range.end,t.hiddenDates),y=t.range.start,b=t.range.end;1==g.hidden&&(y=1==t.range.startToFront?g.startDate-1:g.endDate+1),1==v.hidden&&(b=1==t.range.endToFront?v.startDate-1:v.endDate+1),(1==g.hidden||1==v.hidden)&&t.range._applyRange(y,b)}},e.removeDuplicates=function(t){for(var e=t.hiddenDates,i=[],s=0;s=e[s].start&&e[o].end<=e[s].end?e[o].remove=!0:e[o].start>=e[s].start&&e[o].start<=e[s].end?(e[s].end=e[o].end,e[o].remove=!0):e[o].end>=e[s].start&&e[o].end<=e[s].end&&(e[s].start=e[o].start,e[o].remove=!0));for(var s=0;s=r&&a>o){i=!0;break}}if(1==i&&o=e&&i>r&&(s+=r-n)}return s},e.correctTimeForHidden=function(t,i,o){return o=s(o).toDate().valueOf(),o-=e.getHiddenDurationBefore(t,i,o)},e.getHiddenDurationBefore=function(t,e,i){var o=0;i=s(i).toDate().valueOf();for(var n=0;n=e.start&&a=a&&(o+=a-r)}return o},e.getAccumulatedHiddenDuration=function(t,e,i){for(var s=0,o=0,n=e.start,r=0;r=e.start&&h=i)break;s+=h-a}}return s},e.snapAwayFromHidden=function(t,i,s,o){var n=e.isHidden(i,t);return 1==n.hidden?0>s?1==o?n.startDate-(n.endDate-i)-1:n.startDate-1:1==o?n.endDate+(i-n.startDate)+1:n.endDate+1:i},e.isHidden=function(t,e){for(var i=0;i=s&&o>t)return{hidden:!0,startDate:s,endDate:o}}return{hidden:!1,startDate:s,endDate:o}}},function(t){function e(t,e,i,s,o,n){this.current=0,this.autoScale=!0,this.stepIndex=0,this.step=1,this.scale=1,this.marginStart,this.marginEnd,this.deadSpace=0,this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.alignZeros=n,this.setRange(t,e,i,s,o)}e.prototype.setRange=function(t,e,i,s,o){this._start=void 0===o.min?t:o.min,this._end=void 0===o.max?e:o.max,this._start==this._end&&(this._start-=.75,this._end+=1),1==this.autoScale&&this.setMinimumStep(i,s),this.setFirst(o)},e.prototype.setMinimumStep=function(t,e){var i=this._end-this._start,s=1.2*i,o=t*(s/e),n=Math.round(Math.log(s)/Math.LN10),r=-1,a=Math.pow(10,n),h=0;0>n&&(h=n);for(var d=!1,l=h;Math.abs(l)<=Math.abs(n);l++){a=Math.pow(10,l);for(var c=0;c=o){d=!0,r=c;break}}if(1==d)break}this.stepIndex=r,this.scale=a,this.step=a*this.minorSteps[r]},e.prototype.setFirst=function(t){void 0===t&&(t={});var e=void 0===t.min?this._start-2*this.scale*this.minorSteps[this.stepIndex]:t.min,i=void 0===t.max?this._end+this.scale*this.minorSteps[this.stepIndex]:t.max;this.marginEnd=void 0===t.max?this.roundToMinor(i):t.max,this.marginStart=void 0===t.min?this.roundToMinor(e):t.min,1==this.alignZeros&&(this.marginEnd-this.marginStart)%this.step!=0&&(this.marginEnd+=this.marginEnd%this.step),this.deadSpace=this.roundToMinor(i)-i+this.roundToMinor(e)-e,this.marginRange=this.marginEnd-this.marginStart,this.current=this.marginEnd},e.prototype.roundToMinor=function(t){var e=t-t%(this.scale*this.minorSteps[this.stepIndex]);return t%(this.scale*this.minorSteps[this.stepIndex])>.5*this.scale*this.minorSteps[this.stepIndex]?e+this.scale*this.minorSteps[this.stepIndex]:e},e.prototype.hasNext=function(){return this.current>=this.marginStart},e.prototype.next=function(){var t=this.current;this.current-=this.step,this.current==t&&(this.current=this._end)},e.prototype.previous=function(){this.current+=this.step,this.marginEnd+=this.step,this.marginRange=this.marginEnd-this.marginStart},e.prototype.getCurrent=function(t){var e=""+Number(this.current).toPrecision(5);if(void 0===t||isNaN(Number(t))){if(-1!=e.indexOf(",")||-1!=e.indexOf("."))for(var i=e.length-1;i>0;i--){if("0"!=e[i]){if("."==e[i]||","==e[i]){e=e.slice(0,i);break}break}e=e.slice(0,i)}}else{var s="",o=e.indexOf("e");if(-1!=o&&(s=e.slice(o),e=e.slice(0,o)),o=Math.max(e.indexOf(","),e.indexOf(".")),-1===o?(0!==t&&(e+="."),o=e.length+t):0!==t&&(o+=t+1),o>e.length)for(var n=o-e.length;n>0;n--)e+="0";else e=e.slice(0,o);e+=s}return e},e.prototype.snap=function(){},e.prototype.isMajor=function(){return this.current%(this.scale*this.majorSteps[this.stepIndex])==0},t.exports=e},function(t,e,i){function s(t,e){var i=h().hours(0).minutes(0).seconds(0).milliseconds(0);this.start=i.clone().add(-3,"days").valueOf(),this.end=i.clone().add(4,"days").valueOf(),this.body=t,this.deltaDifference=0,this.scaleOffset=0,this.startToFront=!1,this.endToFront=!0,this.defaultOptions={start:null,end:null,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10},this.options=r.extend({},this.defaultOptions),this.props={touch:{}},this.animateTimer=null,this.body.emitter.on("dragstart",this._onDragStart.bind(this)),this.body.emitter.on("drag",this._onDrag.bind(this)),this.body.emitter.on("dragend",this._onDragEnd.bind(this)),this.body.emitter.on("hold",this._onHold.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("DOMMouseScroll",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.setOptions(e)}function o(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}function n(t,e){return{x:t.pageX-r.getAbsoluteLeft(e),y:t.pageY-r.getAbsoluteTop(e)}}var r=i(1),a=i(47),h=i(44),d=i(20),l=i(15);s.prototype=new d,s.prototype.setOptions=function(t){if(t){var e=["direction","min","max","zoomMin","zoomMax","moveable","zoomable","activate","hiddenDates"];r.selectiveExtend(e,this.options,t),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},s.prototype.setRange=function(t,e,i){var s=void 0!=t?r.convert(t,"Date").valueOf():null,o=void 0!=e?r.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),i){var n=this,a=this.start,h=this.end,d="number"==typeof i?i:500,c=(new Date).valueOf(),p=!1,u=function(){if(!n.props.touch.dragging){var t=(new Date).valueOf(),e=t-c,i=e>d,f=i||null===s?s:r.easeInOutQuad(e,a,s,d),g=i||null===o?o:r.easeInOutQuad(e,h,o,d);m=n._applyRange(f,g),l.updateHiddenDates(n.body,n.options.hiddenDates),p=p||m,m&&n.body.emitter.emit("rangechange",{start:new Date(n.start),end:new Date(n.end)}),i?p&&n.body.emitter.emit("rangechanged",{start:new Date(n.start),end:new Date(n.end)}):n.animateTimer=setTimeout(u,20)}};return u()}var m=this._applyRange(s,o);if(l.updateHiddenDates(this.body,this.options.hiddenDates),m){var f={start:new Date(this.start),end:new Date(this.end)};this.body.emitter.emit("rangechange",f),this.body.emitter.emit("rangechanged",f)}},s.prototype._cancelAnimation=function(){this.animateTimer&&(clearTimeout(this.animateTimer),this.animateTimer=null)},s.prototype._applyRange=function(t,e){var i,s=null!=t?r.convert(t,"Date").valueOf():this.start,o=null!=e?r.convert(e,"Date").valueOf():this.end,n=null!=this.options.max?r.convert(this.options.max,"Date").valueOf():null,a=null!=this.options.min?r.convert(this.options.min,"Date").valueOf():null;if(isNaN(s)||null===s)throw new Error('Invalid start "'+t+'"');if(isNaN(o)||null===o)throw new Error('Invalid end "'+e+'"');if(s>o&&(o=s),null!==a&&a>s&&(i=a-s,s+=i,o+=i,null!=n&&o>n&&(o=n)),null!==n&&o>n&&(i=o-n,s-=i,o-=i,null!=a&&a>s&&(s=a)),null!==this.options.zoomMin){var h=parseFloat(this.options.zoomMin);0>h&&(h=0),h>o-s&&(this.end-this.start===h?(s=this.start,o=this.end):(i=h-(o-s),s-=i/2,o+=i/2))}if(null!==this.options.zoomMax){var d=parseFloat(this.options.zoomMax);0>d&&(d=0),o-s>d&&(this.end-this.start===d?(s=this.start,o=this.end):(i=o-s-d,s+=i/2,o-=i/2))}var l=this.start!=s||this.end!=o;return s>=this.start&&s<=this.end||o>=this.start&&o<=this.end||this.start>=s&&this.start<=o||this.end>=s&&this.end<=o||this.body.emitter.emit("checkRangedItems"),this.start=s,this.end=o,l},s.prototype.getRange=function(){return{start:this.start,end:this.end}},s.prototype.conversion=function(t,e){return s.conversion(this.start,this.end,t,e)},s.conversion=function(t,e,i,s){return void 0===s&&(s=0),0!=i&&e-t!=0?{offset:t,scale:i/(e-t-s)}:{offset:0,scale:1}},s.prototype._onDragStart=function(){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.dragging=!0,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},s.prototype._onDrag=function(t){if(this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;o(e);var i="horizontal"==e?t.gesture.deltaX:t.gesture.deltaY;i-=this.deltaDifference;var s=this.props.touch.end-this.props.touch.start,n=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);s-=n;var r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height,a=-i/r*s,h=this.props.touch.start+a,d=this.props.touch.end+a,c=l.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0),p=l.snapAwayFromHidden(this.body.hiddenDates,d,this.previousDelta-i,!0);if(c!=h||p!=d)return this.deltaDifference+=i,this.props.touch.start=c,this.props.touch.end=p,void this._onDrag(t);this.previousDelta=i,this._applyRange(h,d),this.body.emitter.emit("rangechange",{start:new Date(this.start),end:new Date(this.end)})}},s.prototype._onDragEnd=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.dragging=!1,this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end)}))},s.prototype._onMouseWheel=function(t){if(this.options.zoomable&&this.options.moveable){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i;i=0>e?1-e/5:1/(1+e/5);var s=a.fakeGesture(this,t),o=n(s.center,this.body.dom.center),r=this._pointerToDate(o);this.zoom(i,r,e)}t.preventDefault()}},s.prototype._onTouch=function(){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null,this.scaleOffset=0,this.deltaDifference=0},s.prototype._onHold=function(){this.props.touch.allowDragging=!1},s.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable&&(this.props.touch.allowDragging=!1,t.gesture.touches.length>1)){this.props.touch.center||(this.props.touch.center=n(t.gesture.center,this.body.dom.center));var e=1/(t.gesture.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),s=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),o=l.getHiddenDurationBefore(this.body.hiddenDates,this,i),r=s-o,a=i-o+(this.props.touch.start-(i-o))*e,h=i+r+(this.props.touch.end-(i+r))*e;this.startToFront=1-e>0?!1:!0,this.endToFront=e-1>0?!1:!0;var d=l.snapAwayFromHidden(this.body.hiddenDates,a,1-e,!0),c=l.snapAwayFromHidden(this.body.hiddenDates,h,e-1,!0);(d!=a||c!=h)&&(this.props.touch.start=d,this.props.touch.end=c,this.scaleOffset=1-t.gesture.scale,a=d,h=c),this.setRange(a,h),this.startToFront=!1,this.endToFront=!0}},s.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(o(i),"horizontal"==i)return this.body.util.toTime(t.x).valueOf();var s=this.body.domProps.center.height;return e=this.conversion(s),t.y/e.scale+e.offset},s.prototype.zoom=function(t,e,i){null==e&&(e=(this.start+this.end)/2);var s=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),o=l.getHiddenDurationBefore(this.body.hiddenDates,this,e),n=s-o,r=e-o+(this.start-(e-o))*t,a=e+n+(this.end-(e+n))*t;this.startToFront=i>0?!1:!0,this.endToFront=-i>0?!1:!0;var h=l.snapAwayFromHidden(this.body.hiddenDates,r,i,!0),d=l.snapAwayFromHidden(this.body.hiddenDates,a,-i,!0);(h!=r||d!=a)&&(r=h,a=d),this.setRange(r,a),this.startToFront=!1,this.endToFront=!0},s.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,s=this.end+e*t;this.start=i,this.end=s},s.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,s=this.start-i,o=this.end-i;this.setRange(s,o)},t.exports=s},function(t,e){var i=.001;e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){var i="end"in t.data?t.data.end:t.data.start,s="end"in e.data?e.data.end:e.data.start;return i-s})},e.stack=function(t,i,s){var o,n;if(s)for(o=0,n=t.length;n>o;o++)t[o].top=null;for(o=0,n=t.length;n>o;o++){var r=t[o];if(r.stack&&null===r.top){r.top=i.axis;do{for(var a=null,h=0,d=t.length;d>h;h++){var l=t[h];if(null!==l.top&&l!==r&&l.stack&&e.collision(r,l,i.item)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical)}while(a)}}},e.nostack=function(t,e,i){var s,o,n;for(s=0,o=t.length;o>s;s++)if(void 0!==t[s].data.subgroup){n=e.axis;for(var r in i)i.hasOwnProperty(r)&&1==i[r].visible&&i[r].indexe.left&&t.top-s.vertical+ie.top}},function(t,e,i){function s(t,e,i,o){this.current=new Date,this._start=new Date,this._end=new Date,this.autoScale=!0,this.scale=s.SCALE.DAY,this.step=1,this.setRange(t,e,i),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,this.hiddenDates=o,void 0===o&&(this.hiddenDates=[])}var o=i(44),n=i(15);s.SCALE={MILLISECOND:1,SECOND:2,MINUTE:3,HOUR:4,DAY:5,WEEKDAY:6,MONTH:7,YEAR:8},s.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?new Date(t.valueOf()):new Date,this._end=void 0!=e?new Date(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},s.prototype.first=function(){this.current=new Date(this._start.valueOf()),this.roundToMinor()},s.prototype.roundToMinor=function(){switch(this.scale){case s.SCALE.YEAR:this.current.setFullYear(this.step*Math.floor(this.current.getFullYear()/this.step)),this.current.setMonth(0);case s.SCALE.MONTH:this.current.setDate(1);case s.SCALE.DAY:case s.SCALE.WEEKDAY:this.current.setHours(0);case s.SCALE.HOUR:this.current.setMinutes(0);case s.SCALE.MINUTE:this.current.setSeconds(0);case s.SCALE.SECOND:this.current.setMilliseconds(0)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.setMilliseconds(this.current.getMilliseconds()-this.current.getMilliseconds()%this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()-this.current.getSeconds()%this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()-this.current.getMinutes()%this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()-this.current.getHours()%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()-1-(this.current.getDate()-1)%this.step+1); -break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()-this.current.getMonth()%this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()-this.current.getFullYear()%this.step)}},s.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},s.prototype.next=function(){var t=this.current.valueOf();if(this.current.getMonth()<6)switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current=new Date(this.current.valueOf()+1e3*this.step);break;case s.SCALE.MINUTE:this.current=new Date(this.current.valueOf()+1e3*this.step*60);break;case s.SCALE.HOUR:this.current=new Date(this.current.valueOf()+1e3*this.step*60*60);var e=this.current.getHours();this.current.setHours(e-e%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}else switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()+this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()+this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()+this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.getMilliseconds()0&&(this.step=e),this.autoScale=!1},s.prototype.setAutoScale=function(t){this.autoScale=t},s.prototype.setMinimumStep=function(t){if(void 0!=t){var e=31104e6,i=2592e6,o=864e5,n=36e5,r=6e4,a=1e3,h=1;1e3*e>t&&(this.scale=s.SCALE.YEAR,this.step=1e3),500*e>t&&(this.scale=s.SCALE.YEAR,this.step=500),100*e>t&&(this.scale=s.SCALE.YEAR,this.step=100),50*e>t&&(this.scale=s.SCALE.YEAR,this.step=50),10*e>t&&(this.scale=s.SCALE.YEAR,this.step=10),5*e>t&&(this.scale=s.SCALE.YEAR,this.step=5),e>t&&(this.scale=s.SCALE.YEAR,this.step=1),3*i>t&&(this.scale=s.SCALE.MONTH,this.step=3),i>t&&(this.scale=s.SCALE.MONTH,this.step=1),5*o>t&&(this.scale=s.SCALE.DAY,this.step=5),2*o>t&&(this.scale=s.SCALE.DAY,this.step=2),o>t&&(this.scale=s.SCALE.DAY,this.step=1),o/2>t&&(this.scale=s.SCALE.WEEKDAY,this.step=1),4*n>t&&(this.scale=s.SCALE.HOUR,this.step=4),n>t&&(this.scale=s.SCALE.HOUR,this.step=1),15*r>t&&(this.scale=s.SCALE.MINUTE,this.step=15),10*r>t&&(this.scale=s.SCALE.MINUTE,this.step=10),5*r>t&&(this.scale=s.SCALE.MINUTE,this.step=5),r>t&&(this.scale=s.SCALE.MINUTE,this.step=1),15*a>t&&(this.scale=s.SCALE.SECOND,this.step=15),10*a>t&&(this.scale=s.SCALE.SECOND,this.step=10),5*a>t&&(this.scale=s.SCALE.SECOND,this.step=5),a>t&&(this.scale=s.SCALE.SECOND,this.step=1),200*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=200),100*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=100),50*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=50),10*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=10),5*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=5),h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=1)}},s.prototype.snap=function(t){var e=new Date(t.valueOf());if(this.scale==s.SCALE.YEAR){var i=e.getFullYear()+Math.round(e.getMonth()/12);e.setFullYear(Math.round(i/this.step)*this.step),e.setMonth(0),e.setDate(0),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MONTH)e.getDate()>15?(e.setDate(1),e.setMonth(e.getMonth()+1)):e.setDate(1),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0);else if(this.scale==s.SCALE.DAY){switch(this.step){case 5:case 2:e.setHours(24*Math.round(e.getHours()/24));break;default:e.setHours(12*Math.round(e.getHours()/12))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.WEEKDAY){switch(this.step){case 5:case 2:e.setHours(12*Math.round(e.getHours()/12));break;default:e.setHours(6*Math.round(e.getHours()/6))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.HOUR){switch(this.step){case 4:e.setMinutes(60*Math.round(e.getMinutes()/60));break;default:e.setMinutes(30*Math.round(e.getMinutes()/30))}e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MINUTE){switch(this.step){case 15:case 10:e.setMinutes(5*Math.round(e.getMinutes()/5)),e.setSeconds(0);break;case 5:e.setSeconds(60*Math.round(e.getSeconds()/60));break;default:e.setSeconds(30*Math.round(e.getSeconds()/30))}e.setMilliseconds(0)}else if(this.scale==s.SCALE.SECOND)switch(this.step){case 15:case 10:e.setSeconds(5*Math.round(e.getSeconds()/5)),e.setMilliseconds(0);break;case 5:e.setMilliseconds(1e3*Math.round(e.getMilliseconds()/1e3));break;default:e.setMilliseconds(500*Math.round(e.getMilliseconds()/500))}else if(this.scale==s.SCALE.MILLISECOND){var o=this.step>5?this.step/2:1;e.setMilliseconds(Math.round(e.getMilliseconds()/o)*o)}return e},s.prototype.isMajor=function(){if(1==this.switchedYear)switch(this.switchedYear=!1,this.scale){case s.SCALE.YEAR:case s.SCALE.MONTH:case s.SCALE.WEEKDAY:case s.SCALE.DAY:case s.SCALE.HOUR:case s.SCALE.MINUTE:case s.SCALE.SECOND:case s.SCALE.MILLISECOND:return!0;default:return!1}else if(1==this.switchedMonth)switch(this.switchedMonth=!1,this.scale){case s.SCALE.WEEKDAY:case s.SCALE.DAY:case s.SCALE.HOUR:case s.SCALE.MINUTE:case s.SCALE.SECOND:case s.SCALE.MILLISECOND:return!0;default:return!1}else if(1==this.switchedDay)switch(this.switchedDay=!1,this.scale){case s.SCALE.MILLISECOND:case s.SCALE.SECOND:case s.SCALE.MINUTE:case s.SCALE.HOUR:return!0;default:return!1}switch(this.scale){case s.SCALE.MILLISECOND:return 0==this.current.getMilliseconds();case s.SCALE.SECOND:return 0==this.current.getSeconds();case s.SCALE.MINUTE:return 0==this.current.getHours()&&0==this.current.getMinutes();case s.SCALE.HOUR:return 0==this.current.getHours();case s.SCALE.WEEKDAY:case s.SCALE.DAY:return 1==this.current.getDate();case s.SCALE.MONTH:return 0==this.current.getMonth();case s.SCALE.YEAR:return!1;default:return!1}},s.prototype.getLabelMinor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("SSS");case s.SCALE.SECOND:return o(t).format("s");case s.SCALE.MINUTE:return o(t).format("HH:mm");case s.SCALE.HOUR:return o(t).format("HH:mm");case s.SCALE.WEEKDAY:return o(t).format("ddd D");case s.SCALE.DAY:return o(t).format("D");case s.SCALE.MONTH:return o(t).format("MMM");case s.SCALE.YEAR:return o(t).format("YYYY");default:return""}},s.prototype.getLabelMajor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("HH:mm:ss");case s.SCALE.SECOND:return o(t).format("D MMMM HH:mm");case s.SCALE.MINUTE:case s.SCALE.HOUR:return o(t).format("ddd D MMMM");case s.SCALE.WEEKDAY:case s.SCALE.DAY:return o(t).format("MMMM YYYY");case s.SCALE.MONTH:return o(t).format("YYYY");case s.SCALE.YEAR:return"";default:return""}},t.exports=s},function(t){function e(){this.options=null,this.props=null}e.prototype.setOptions=function(t){t&&util.extend(this.options,t)},e.prototype.redraw=function(){return!1},e.prototype.destroy=function(){},e.prototype._isResized=function(){var t=this.props._previousWidth!==this.props.width||this.props._previousHeight!==this.props.height;return this.props._previousWidth=this.props.width,this.props._previousHeight=this.props.height,t},t.exports=e},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCurrentTime:!0,locales:a,locale:"en"},this.options=o.extend({},this.defaultOptions),this.offset=0,this._create(),this.setOptions(e)}var o=i(1),n=i(20),r=i(44),a=i(48);s.prototype=new n,s.prototype._create=function(){var t=document.createElement("div");t.className="currenttime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},s.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},s.prototype.setOptions=function(t){t&&o.selectiveExtend(["showCurrentTime","locale","locales"],this.options,t)},s.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=new Date((new Date).valueOf()+this.offset),i=this.body.util.toScreen(e),s=this.options.locales[this.options.locale],o=s.current+" "+s.time+": "+r(e).format("dddd, MMMM Do YYYY, H:mm:ss");o=o.charAt(0).toUpperCase()+o.substring(1),this.bar.style.left=i+"px",this.bar.title=o}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},s.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,s=1/i/10;30>s&&(s=30),s>1e3&&(s=1e3),e.redraw(),e.currentTimeTimer=setTimeout(t,s)}var e=this;t()},s.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},s.prototype.setCurrentTime=function(t){var e=o.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},s.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCustomTime:!1,locales:h,locale:"en"},this.options=n.extend({},this.defaultOptions),this.customTime=new Date,this.eventParams={},this._create(),this.setOptions(e)}var o=i(45),n=i(1),r=i(20),a=i(44),h=i(48);s.prototype=new r,s.prototype.setOptions=function(t){t&&n.selectiveExtend(["showCustomTime","locale","locales"],this.options,t)},s.prototype._create=function(){var t=document.createElement("div");t.className="customtime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t;var e=document.createElement("div");e.style.position="relative",e.style.top="0px",e.style.left="-10px",e.style.height="100%",e.style.width="20px",t.appendChild(e),this.hammer=o(t,{prevent_default:!0}),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this))},s.prototype.destroy=function(){this.options.showCustomTime=!1,this.redraw(),this.hammer.enable(!1),this.hammer=null,this.body=null},s.prototype.redraw=function(){if(this.options.showCustomTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime),i=this.options.locales[this.options.locale],s=i.time+": "+a(this.customTime).format("dddd, MMMM Do YYYY, H:mm:ss");s=s.charAt(0).toUpperCase()+s.substring(1),this.bar.style.left=e+"px",this.bar.title=s}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar);return!1},s.prototype.setCustomTime=function(t){this.customTime=n.convert(t,"Date"),this.redraw()},s.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},s.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation(),t.preventDefault()},s.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=t.gesture.deltaX,i=this.body.util.toScreen(this.eventParams.customTime)+e,s=this.body.util.toTime(i);this.setCustomTime(s),this.body.emitter.emit("timechange",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault()}},s.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault())},t.exports=s},function(t,e,i){function s(t,e,i,s){this.id=o.randomUUID(),this.body=t,this.defaultOptions={orientation:"left",showMinorLabels:!0,showMajorLabels:!0,icons:!0,majorLinesOffset:7,minorLinesOffset:4,labelOffsetX:10,labelOffsetY:2,iconWidth:20,width:"40px",visible:!0,alignZeros:!0,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}},title:{left:{text:void 0},right:{text:void 0}},format:{left:{decimals:void 0},right:{decimals:void 0}}},this.linegraphOptions=s,this.linegraphSVG=i,this.props={},this.DOMelements={lines:{},labels:{},title:{}},this.dom={},this.range={start:0,end:0},this.options=o.extend({},this.defaultOptions),this.conversionFactor=1,this.setOptions(e),this.width=Number((""+this.options.width).replace("px","")),this.minWidth=this.width,this.height=this.linegraphSVG.offsetHeight,this.hidden=!1,this.stepPixels=25,this.stepPixelsForced=25,this.zeroCrossing=-1,this.lineOffset=0,this.master=!0,this.svgElements={},this.iconsRemoved=!1,this.groups={},this.amountOfGroups=0,this._create();var n=this;this.body.emitter.on("verticalDrag",function(){n.dom.lineContainer.style.top=n.body.domProps.scrollTop+"px"})}var o=i(1),n=i(2),r=i(20),a=i(16);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype.setOptions=function(t){if(t){var e=!1;this.options.orientation!=t.orientation&&void 0!==t.orientation&&(e=!0);var i=["orientation","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","width","visible","customRange","title","format","alignZeros"];o.selectiveExtend(i,this.options,t),this.minWidth=Number((""+this.options.width).replace("px","")),1==e&&this.dom.frame&&(this.hide(),this.show())}},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.style.width=this.options.width,this.dom.frame.style.height=this.height,this.dom.lineContainer=document.createElement("div"),this.dom.lineContainer.style.width="100%",this.dom.lineContainer.style.height=this.height,this.dom.lineContainer.style.position="relative",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.height="100%",this.svg.style.width="100%",this.svg.style.display="block",this.dom.frame.appendChild(this.svg)},s.prototype._redrawGroupIcons=function(){n.prepareElements(this.svgElements);var t,e=this.options.iconWidth,i=15,s=4,o=s+.5*i;t="left"==this.options.orientation?s:this.width-e-s;for(var r in this.groups)this.groups.hasOwnProperty(r)&&(1!=this.groups[r].visible||void 0!==this.linegraphOptions.visibility[r]&&1!=this.linegraphOptions.visibility[r]||(this.groups[r].drawIcon(t,o,this.svgElements,this.svg,e,i),o+=i+s));n.cleanupElements(this.svgElements),this.iconsRemoved=!1},s.prototype._cleanupIcons=function(){0==this.iconsRemoved&&(n.prepareElements(this.svgElements),n.cleanupElements(this.svgElements),this.iconsRemoved=!0)},s.prototype.show=function(){this.hidden=!1,this.dom.frame.parentNode||("left"==this.options.orientation?this.body.dom.left.appendChild(this.dom.frame):this.body.dom.right.appendChild(this.dom.frame)),this.dom.lineContainer.parentNode||this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer)},s.prototype.hide=function(){this.hidden=!0,this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.lineContainer.parentNode&&this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer)},s.prototype.setRange=function(t,e){0==this.master&&1==this.options.alignZeros&&-1!=this.zeroCrossing&&t>0&&(t=0),this.range.start=t,this.range.end=e},s.prototype.redraw=function(){var t=!1,e=0;this.dom.lineContainer.style.top=this.body.domProps.scrollTop+"px";for(var i in this.groups)this.groups.hasOwnProperty(i)&&(1!=this.groups[i].visible||void 0!==this.linegraphOptions.visibility[i]&&1!=this.linegraphOptions.visibility[i]||e++);if(0==this.amountOfGroups||0==e)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=1==this.options.visible?Number((""+this.options.width).replace("px","")):0;var s=this.props,o=this.dom.frame;o.className="dataaxis",this._calculateCharSize();var n=this.options.orientation,r=this.options.showMinorLabels,a=this.options.showMajorLabels;s.minorLabelHeight=r?s.minorCharHeight:0,s.majorLabelHeight=a?s.majorCharHeight:0,s.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,s.minorLineHeight=1,s.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,s.majorLineHeight=1,"left"==n?(o.style.top="0",o.style.left="0",o.style.bottom="",o.style.width=this.width+"px",o.style.height=this.height+"px"):(o.style.top="",o.style.bottom="0",o.style.left="0",o.style.width=this.width+"px",o.style.height=this.height+"px"),t=this._redrawLabels(),1==this.options.icons?this._redrawGroupIcons():this._cleanupIcons(),this._redrawTitle(n)}return t},s.prototype._redrawLabels=function(){n.prepareElements(this.DOMelements.lines),n.prepareElements(this.DOMelements.labels);var t=this.options.orientation,e=this.master?this.props.majorCharHeight||10:this.stepPixelsForced,i=new a(this.range.start,this.range.end,e,this.dom.frame.offsetHeight,this.options.customRange[this.options.orientation],0==this.master&&this.options.alignZeros);this.step=i;var s=(this.dom.frame.offsetHeight-i.deadSpace*(this.dom.frame.offsetHeight/i.marginRange))/((i.marginRange-i.deadSpace)/i.step);this.stepPixels=s;var o=this.height/s,r=0;if(0==this.master){s=this.stepPixelsForced,r=Math.round(this.dom.frame.offsetHeight/s-o);for(var h=0;.5*r>h;h++)i.previous();if(o=this.height/s,-1!=this.zeroCrossing&&1==this.options.alignZeros){var d=i.marginEnd/i.step-this.zeroCrossing;if(d>0)for(var h=0;d>h;h++)i.next();else if(0>d)for(var h=0;-d>h;h++)i.previous()}}else o+=.25;this.valueAtZero=i.marginEnd;var l,c=0,p=1;void 0!==this.options.format[t]&&(l=this.options.format[t].decimals),this.maxLabelSize=0;for(var u=0;p=0&&this._redrawLabel(u-2,i.getCurrent(l),t,"yAxis major",this.props.majorCharHeight),this._redrawLine(u,t,"grid horizontal major",this.options.majorLinesOffset,this.props.majorLineWidth)):this._redrawLine(u,t,"grid horizontal minor",this.options.minorLinesOffset,this.props.minorLineWidth),1==this.master&&0==i.current&&(this.zeroCrossing=p),p++}this.conversionFactor=0==this.master?u/(this.valueAtZero-i.current):this.dom.frame.offsetHeight/i.marginRange;var f=0;void 0!==this.options.title[t]&&void 0!==this.options.title[t].text&&(f=this.props.titleCharHeight);var g=1==this.options.icons?Math.max(this.options.iconWidth,f)+this.options.labelOffsetX+15:f+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-g&&1==this.options.visible?(this.width=this.maxLabelSize+g,this.options.width=this.width+"px",n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),this.redraw(),!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+g),this.options.width=this.width+"px",n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),this.redraw(),!0):(n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),!1)},s.prototype.convertValue=function(t){var e=this.valueAtZero-t,i=e*this.conversionFactor;return i},s.prototype._redrawLabel=function(t,e,i,s,o){var r=n.getDOMElement("div",this.DOMelements.labels,this.dom.frame);r.className=s,r.innerHTML=e,"left"==i?(r.style.left="-"+this.options.labelOffsetX+"px",r.style.textAlign="right"):(r.style.right="-"+this.options.labelOffsetX+"px",r.style.textAlign="left"),r.style.top=t-.5*o+this.options.labelOffsetY+"px",e+="";var a=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSized;d++){var c=this.visibleItems[d];c.repositionY(e)}return s},s.prototype._calculateHeight=function(t){var e,i=this.visibleItems;this.resetSubgroups();var s=this;if(i.length){var n=i[0].top,r=i[0].top+i[0].height;if(o.forEach(i,function(t){n=Math.min(n,t.top),r=Math.max(r,t.top+t.height),void 0!==t.data.subgroup&&(s.subgroups[t.data.subgroup].height=Math.max(s.subgroups[t.data.subgroup].height,t.height),s.subgroups[t.data.subgroup].visible=!0)}),n>t.axis){var a=n-t.axis;r-=a,o.forEach(i,function(t){t.top-=a})}e=r+t.item.vertical/2}else e=t.axis+t.item.vertical;return e=Math.max(e,this.props.label.height)},s.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},s.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var s=this.dom.axis;s.parentNode&&s.parentNode.removeChild(s)},s.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),void 0!==t.data.subgroup&&(void 0===this.subgroups[t.data.subgroup]&&(this.subgroups[t.data.subgroup]={height:0,visible:!1,index:this.subgroupIndex,items:[]},this.subgroupIndex++),this.subgroups[t.data.subgroup].items.push(t)),this.orderSubgroups(),-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},s.prototype.orderSubgroups=function(){if(void 0!==this.subgroupOrderer){var t=[];if("string"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push({subgroup:e,sortField:this.subgroups[e].items[0].data[this.subgroupOrderer]});t.sort(function(t,e){return t.sortField-e.sortField})}else if("function"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push(this.subgroups[e].items[0].data);t.sort(this.subgroupOrderer)}if(t.length>0)for(var i=0;it?-1:l>=t?0:1 -};if(e.length>0)for(n=0;nl}),1==this.checkRangedItems)for(this.checkRangedItems=!1,n=0;nl})}for(n=0;n=0&&(n=e[r],!o(n));r--)void 0===s[n.id]&&(s[n.id]=!0,i.push(n));for(r=t+1;rs;s++){var n=this.visibleItems[s];n.repositionY(e)}return i},s.prototype.show=function(){this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={type:null,orientation:"bottom",align:"auto",stack:!0,groupOrder:null,selectable:!0,editable:{updateTime:!1,updateGroup:!1,add:!1,remove:!1},onAdd:function(t,e){e(t)},onUpdate:function(t,e){e(t)},onMove:function(t,e){e(t)},onRemove:function(t,e){e(t)},onMoving:function(t,e){e(t)},margin:{item:{horizontal:10,vertical:10},axis:20},padding:5},this.options=n.extend({},this.defaultOptions),this.itemOptions={type:{start:"Date",end:"Date"}},this.conversion={toScreen:t.util.toScreen,toTime:t.util.toTime},this.dom={},this.props={},this.hammer=null;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.groups={},this.groupIds=[],this.selection=[],this.stackDirty=!0,this.touchParams={},this._create(),this.setOptions(e)}var o=i(45),n=i(1),r=i(3),a=i(4),h=i(20),d=i(25),l=i(26),c=i(33),p=i(34),u=i(35),m=i(32),f="__ungrouped__",g="__background__";s.prototype=new h,s.types={background:m,box:c,range:u,point:p},s.prototype._create=function(){var t=document.createElement("div");t.className="itemset",t["timeline-itemset"]=this,this.dom.frame=t;var e=document.createElement("div");e.className="background",t.appendChild(e),this.dom.background=e;var i=document.createElement("div");i.className="foreground",t.appendChild(i),this.dom.foreground=i;var s=document.createElement("div");s.className="axis",this.dom.axis=s;var n=document.createElement("div");n.className="labelset",this.dom.labelSet=n,this._updateUngrouped();var r=new l(g,null,this);r.show(),this.groups[g]=r,this.hammer=o(this.body.dom.centerContainer,{preventDefault:!0}),this.hammer.on("touch",this._onTouch.bind(this)),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this)),this.hammer.on("tap",this._onSelectItem.bind(this)),this.hammer.on("hold",this._onMultiSelectItem.bind(this)),this.hammer.on("doubletap",this._onAddItem.bind(this)),this.show()},s.prototype.setOptions=function(t){if(t){var e=["type","align","orientation","padding","stack","selectable","groupOrder","dataAttributes","template","hide"];n.selectiveExtend(e,this.options,t),"margin"in t&&("number"==typeof t.margin?(this.options.margin.axis=t.margin,this.options.margin.item.horizontal=t.margin,this.options.margin.item.vertical=t.margin):"object"==typeof t.margin&&(n.selectiveExtend(["axis"],this.options.margin,t.margin),"item"in t.margin&&("number"==typeof t.margin.item?(this.options.margin.item.horizontal=t.margin.item,this.options.margin.item.vertical=t.margin.item):"object"==typeof t.margin.item&&n.selectiveExtend(["horizontal","vertical"],this.options.margin.item,t.margin.item)))),"editable"in t&&("boolean"==typeof t.editable?(this.options.editable.updateTime=t.editable,this.options.editable.updateGroup=t.editable,this.options.editable.add=t.editable,this.options.editable.remove=t.editable):"object"==typeof t.editable&&n.selectiveExtend(["updateTime","updateGroup","add","remove"],this.options.editable,t.editable));var i=function(e){var i=t[e];if(i){if(!(i instanceof Function))throw new Error("option "+e+" must be a function "+e+"(item, callback)");this.options[e]=i}}.bind(this);["onAdd","onUpdate","onRemove","onMove","onMoving"].forEach(i),this.markDirty()}},s.prototype.markDirty=function(){this.groupIds=[],this.stackDirty=!0},s.prototype.destroy=function(){this.hide(),this.setItems(null),this.setGroups(null),this.hammer=null,this.body=null,this.conversion=null},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.axis.parentNode&&this.dom.axis.parentNode.removeChild(this.dom.axis),this.dom.labelSet.parentNode&&this.dom.labelSet.parentNode.removeChild(this.dom.labelSet)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame),this.dom.axis.parentNode||this.body.dom.backgroundVertical.appendChild(this.dom.axis),this.dom.labelSet.parentNode||this.body.dom.left.appendChild(this.dom.labelSet)},s.prototype.setSelection=function(t){var e,i,s,o;for(void 0==t&&(t=[]),Array.isArray(t)||(t=[t]),e=0,i=this.selection.length;i>e;e++)s=this.selection[e],o=this.items[s],o&&o.unselect();for(this.selection=[],e=0,i=t.length;i>e;e++)s=t[e],o=this.items[s],o&&(this.selection.push(s),o.select())},s.prototype.getSelection=function(){return this.selection.concat([])},s.prototype.getVisibleItems=function(){var t=this.body.range.getRange(),e=this.body.util.toScreen(t.start),i=this.body.util.toScreen(t.end),s=[];for(var o in this.groups)if(this.groups.hasOwnProperty(o))for(var n=this.groups[o],r=n.visibleItems,a=0;ae&&s.push(h.id)}return s},s.prototype._deselect=function(t){for(var e=this.selection,i=0,s=e.length;s>i;i++)if(e[i]==t){e.splice(i,1);break}},s.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=n.option.asSize,s=this.options,o=s.orientation,r=!1,a=this.dom.frame,h=s.editable.updateTime||s.editable.updateGroup;this.props.top=this.body.domProps.top.height+this.body.domProps.border.top,this.props.left=this.body.domProps.left.width+this.body.domProps.border.left,a.className="itemset"+(h?" editable":""),r=this._orderGroups()||r;var d=e.end-e.start,l=d!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth;l&&(this.stackDirty=!0),this.lastVisibleInterval=d,this.props.lastWidth=this.props.width;var c=this.stackDirty,p=this._firstGroup(),u={item:t.item,axis:t.axis},m={item:t.item,axis:t.item.vertical/2},f=0,v=t.axis+t.item.vertical;return this.groups[g].redraw(e,m,c),n.forEach(this.groups,function(t){var i=t==p?u:m,s=t.redraw(e,i,c);r=s||r,f+=t.height}),f=Math.max(f,v),this.stackDirty=!1,a.style.height=i(f),this.props.width=a.offsetWidth,this.props.height=f,this.dom.axis.style.top=i("top"==o?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.dom.axis.style.left="0",r=this._isResized()||r},s.prototype._firstGroup=function(){var t="top"==this.options.orientation?0:this.groupIds.length-1,e=this.groupIds[t],i=this.groups[e]||this.groups[f];return i||null},s.prototype._updateUngrouped=function(){{var t,e,i=this.groups[f];this.groups[g]}if(this.groupsData){if(i){i.hide(),delete this.groups[f];for(e in this.items)if(this.items.hasOwnProperty(e)){t=this.items[e],t.parent&&t.parent.remove(t);var s=this._getGroupId(t.data),o=this.groups[s];o&&o.add(t)||t.hide()}}}else if(!i){var n=null,r=null;i=new d(n,r,this),this.groups[f]=i;for(e in this.items)this.items.hasOwnProperty(e)&&(t=this.items[e],i.add(t));i.show()}},s.prototype.getLabelSet=function(){return this.dom.labelSet},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(n.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var o=this.id;n.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,o)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}},s.prototype.getItems=function(){return this.itemsData},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(n.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;n.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("change",{queue:!0})},s.prototype.getGroups=function(){return this.groupsData},s.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},s.prototype._getType=function(t){return t.type||this.options.type||(t.end?"range":"box")},s.prototype._getGroupId=function(t){var e=this._getType(t);return"background"==e&&void 0==t.group?g:this.groupsData?t.group:f},s.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i=e.itemsData.get(t,e.itemOptions),o=e.items[t],n=e._getType(i),r=s.types[n];if(o&&(r&&o instanceof r?e._updateItem(o,i):(e._removeItem(o),o=null)),!o){if(!r)throw new TypeError("rangeoverflow"==n?'Item type "rangeoverflow" is deprecated. Use css styling instead: .vis.timeline .item.range .content {overflow: visible;}':'Unknown item type "'+n+'"');o=new r(i,e.conversion,e.options),o.id=t,e._addItem(o)}}),this._order(),this.stackDirty=!0,this.body.emitter.emit("change",{queue:!0})},s.prototype._onAdd=s.prototype._onUpdate,s.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var s=i.items[t];s&&(e++,i._removeItem(s))}),e&&(this._order(),this.stackDirty=!0,this.body.emitter.emit("change",{queue:!0}))},s.prototype._order=function(){n.forEach(this.groups,function(t){t.order()})},s.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},s.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),s=e.groups[t];if(s)s.setData(i);else{if(t==f||t==g)throw new Error("Illegal group id. "+t+" is a reserved id.");var o=Object.create(e.options);n.extend(o,{height:null}),s=new d(t,i,e),e.groups[t]=s;for(var r in e.items)if(e.items.hasOwnProperty(r)){var a=e.items[r];a.data.group==t&&s.add(a)}s.order(),s.show()}}),this.body.emitter.emit("change",{queue:!0})},s.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("change",{queue:!0})},s.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder}),e=!n.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},s.prototype._addItem=function(t){this.items[t.id]=t;var e=this._getGroupId(t.data),i=this.groups[e];i&&i.add(t)},s.prototype._updateItem=function(t,e){var i=t.data.group;if(t.setData(e),i!=t.data.group){var s=this.groups[i];s&&s.remove(t);var o=this._getGroupId(t.data),n=this.groups[o];n&&n.add(t)}},s.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1),t.parent&&t.parent.remove(t)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0||o.length>0)&&this.body.emitter.emit("select",{items:a})}},s.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.body.util.snap||null,o=s.itemFromTarget(t);if(o){var r=e.itemsData.get(o.id);this.options.onUpdate(r,function(t){t&&e.itemsData.getDataSet().update(t)})}else{var a=n.getAbsoluteLeft(this.dom.frame),h=t.gesture.center.pageX-a,d=this.body.util.toTime(h),l={start:i?i(d):d,content:"new item"};if("range"===this.options.type){var c=this.body.util.toTime(h+this.props.width/5);l.end=i?i(c):c}l[this.itemsData._fieldId]=n.randomUUID();var p=s.groupFromTarget(t);p&&(l.group=p.groupId),this.options.onAdd(l,function(t){t&&e.itemsData.getDataSet().add(t)})}}},s.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e,i=s.itemFromTarget(t);if(i){e=this.getSelection();var o=t.gesture.touches[0]&&t.gesture.touches[0].shiftKey||!1;if(o){e.push(i.id);var n=s._getItemRange(this.itemsData.get(e,this.itemOptions));e=[];for(var r in this.items)if(this.items.hasOwnProperty(r)){var a=this.items[r],h=a.data.start,d=void 0!==a.data.end?a.data.end:h;h>=n.min&&d<=n.max&&e.push(a.id)}}else{var l=e.indexOf(i.id);-1==l?e.push(i.id):e.splice(l,1)}this.setSelection(e),this.body.emitter.emit("select",{items:this.getSelection()})}}},s._getItemRange=function(t){var e=null,i=null;return t.forEach(function(t){(null==i||t.starte)&&(e=t.end):(null==e||t.start>e)&&(e=t.start)}),{min:i,max:e}},s.itemFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},s.groupFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-group"))return e["timeline-group"];e=e.parentNode}return null},s.itemSetFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-itemset"))return e["timeline-itemset"];e=e.parentNode}return null},t.exports=s},function(t,e,i){function s(t,e,i,s){this.body=t,this.defaultOptions={enabled:!0,icons:!0,iconSize:20,iconSpacing:6,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-left"}},this.side=i,this.options=o.extend({},this.defaultOptions),this.linegraphOptions=s,this.svgElements={},this.dom={},this.groups={},this.amountOfGroups=0,this._create(),this.setOptions(e)}var o=i(1),n=i(2),r=i(20);s.prototype=new r,s.prototype.clear=function(){this.groups={},this.amountOfGroups=0},s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.className="legend",this.dom.frame.style.position="absolute",this.dom.frame.style.top="10px",this.dom.frame.style.display="block",this.dom.textArea=document.createElement("div"),this.dom.textArea.className="legendText",this.dom.textArea.style.position="relative",this.dom.textArea.style.top="0px",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.width=this.options.iconSize+5+"px",this.svg.style.height="100%",this.dom.frame.appendChild(this.svg),this.dom.frame.appendChild(this.dom.textArea)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setOptions=function(t){var e=["enabled","orientation","icons","left","right"];o.selectiveDeepExtend(e,this.options,t)},s.prototype.redraw=function(){var t=0;for(var e in this.groups)this.groups.hasOwnProperty(e)&&(1!=this.groups[e].visible||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||t++);if(0==this.options[this.side].visible||0==this.amountOfGroups||0==this.options.enabled||0==t)this.hide();else{if(this.show(),"top-left"==this.options[this.side].position||"bottom-left"==this.options[this.side].position?(this.dom.frame.style.left="4px",this.dom.frame.style.textAlign="left",this.dom.textArea.style.textAlign="left",this.dom.textArea.style.left=this.options.iconSize+15+"px",this.dom.textArea.style.right="",this.svg.style.left="0px",this.svg.style.right=""):(this.dom.frame.style.right="4px",this.dom.frame.style.textAlign="right",this.dom.textArea.style.textAlign="right",this.dom.textArea.style.right=this.options.iconSize+15+"px",this.dom.textArea.style.left="",this.svg.style.right="0px",this.svg.style.left=""),"top-left"==this.options[this.side].position||"top-right"==this.options[this.side].position)this.dom.frame.style.top=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.bottom="";else{var i=this.body.domProps.center.height-this.body.domProps.centerContainer.height;this.dom.frame.style.bottom=4+i+Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.top=""}0==this.options.icons?(this.dom.frame.style.width=this.dom.textArea.offsetWidth+10+"px",this.dom.textArea.style.right="",this.dom.textArea.style.left="",this.svg.style.width="0px"):(this.dom.frame.style.width=this.options.iconSize+15+this.dom.textArea.offsetWidth+10+"px",this.drawLegendIcons());var s="";for(var e in this.groups)this.groups.hasOwnProperty(e)&&(1!=this.groups[e].visible||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||(s+=this.groups[e].content+"
"));this.dom.textArea.innerHTML=s,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},s.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){n.prepareElements(this.svgElements);var t=window.getComputedStyle(this.dom.frame).paddingTop,e=Number(t.replace("px","")),i=e,s=this.options.iconSize,o=.75*this.options.iconSize,r=e+.5*o+3;this.svg.style.width=s+5+e+"px";for(var a in this.groups)this.groups.hasOwnProperty(a)&&(1!=this.groups[a].visible||void 0!==this.linegraphOptions.visibility[a]&&1!=this.linegraphOptions.visibility[a]||(this.groups[a].drawIcon(i,r,this.svgElements,this.svg,s,o),r+=o+this.options.iconSpacing));n.cleanupElements(this.svgElements)}},t.exports=s},function(t,e,i){function s(t,e){this.id=o.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,handleOverlap:"overlap",align:"center"},catmullRom:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:"40px",visible:!0,alignZeros:!0,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}}},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}},groups:{visibility:{}}},this.options=o.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.autoSizeSVG=!1;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.COUNTER=0,this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=o.option.asSize(-i.width),i.redraw.call(i,!0)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups},this.body.emitter.emit("change")}var o=i(1),n=i(2),r=i(3),a=i(4),h=i(20),d=i(23),l=i(24),c=i(28),p=i(52),u="__ungrouped__";s.prototype=new h,s.prototype._create=function(){var t=document.createElement("div");t.className="LineGraph",this.dom.frame=t,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="relative",this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",this.svg.style.display="block",t.appendChild(this.svg),this.options.dataAxis.orientation="left",this.yAxisLeft=new d(this.body,this.options.dataAxis,this.svg,this.options.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new d(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new c(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new c(this.body,this.options.legend,"right",this.options.groups),this.show()},s.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height&&void 0!==this.body.domProps.centerContainer.height?this.autoSizeSVG=!0:void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))0){var d=this.body.util.toGlobalTime(-this.body.domProps.root.width),l=this.body.util.toGlobalTime(2*this.body.domProps.root.width),c={};for(this._getRelevantData(a,c,d,l),this._applySampling(a,c),e=0;eu&&console.log("WARNING: there may be an infinite loop in the _updateGraph emitter cycle."),this.COUNTER=0,this.abortedGraphUpdate=!1,e=0;e0)for(r=0;rs){d.push(h);break}d.push(h)}}else for(a=0;ai&&h.x0)for(var s=0;s0){var n=1,r=o.length,a=this.body.util.toGlobalScreen(o[o.length-1].x)-this.body.util.toGlobalScreen(o[0].x),h=r/a;n=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=[],l=0;r>l;l+=n)d.push(o[l]);e[t[s]]=d}}},s.prototype._getYRanges=function(t,e,i){var s,o,n,r,a=[],h=[];if(t.length>0){for(n=0;n0&&(o=this.groups[t[n]],"stack"==r.barChart.handleOverlap&&"bar"==r.style?"left"==r.yAxisOrientation?a=a.concat(o.getYRange(s)):h=h.concat(o.getYRange(s)):i[t[n]]=o.getYRange(s,t[n]));p.getStackedBarYRange(a,i,t,"__barchartLeft","left"),p.getStackedBarYRange(h,i,t,"__barchartRight","right")}},s.prototype._updateYAxis=function(t,e){var i,s,o=!1,n=!1,r=!1,a=1e9,h=1e9,d=-1e9,l=-1e9;if(t.length>0){for(var c=0;ci?i:a,d=s>d?s:d):(r=!0,h=h>i?i:h,l=s>l?s:l));1==n&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}return o=this._toggleAxisVisiblity(n,this.yAxisLeft)||o,o=this._toggleAxisVisiblity(r,this.yAxisRight)||o,1==r&&1==n?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!n,0==this.yAxisRight.master?(this.yAxisLeft.lineOffset=1==r?this.yAxisRight.width:0,o=this.yAxisLeft.redraw()||o,this.yAxisRight.stepPixelsForced=this.yAxisLeft.stepPixels,this.yAxisRight.zeroCrossing=this.yAxisLeft.zeroCrossing,o=this.yAxisRight.redraw()||o):o=this.yAxisRight.redraw()||o,-1!=t.indexOf("__barchartLeft")&&t.splice(t.indexOf("__barchartLeft"),1),-1!=t.indexOf("__barchartRight")&&t.splice(t.indexOf("__barchartRight"),1),o},s.prototype._toggleAxisVisiblity=function(t,e){var i=!1;return 0==t?e.dom.frame.parentNode&&0==e.hidden&&(e.hide(),i=!0):e.dom.frame.parentNode||1!=e.hidden||(e.show(),i=!0),i},s.prototype._convertXcoordinates=function(t){for(var e,i,s=[],o=this.body.util.toScreen,n=0;nc;){c++;var p=h.getCurrent(),u=this.body.util.toScreen(p),m=h.isMajor();this.options.showMinorLabels&&this._repaintMinorText(u,h.getLabelMinor(),t),m&&this.options.showMajorLabels?(u>0&&(void 0==l&&(l=u),this._repaintMajorText(u,h.getLabelMajor(),t)),this._repaintMajorLine(u,t)):this._repaintMinorLine(u,t),h.next()}if(this.options.showMajorLabels){var f=this.body.util.toTime(0),g=h.getLabelMajor(f),v=g.length*(this.props.majorCharWidth||10)+10;(void 0==l||l>v)&&this._repaintMajorText(0,g,t)}o.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},s.prototype._repaintMinorText=function(t,e,i){var s=this.dom.redundant.minorTexts.shift();if(!s){var o=document.createTextNode("");s=document.createElement("div"),s.appendChild(o),s.className="text minor",this.dom.foreground.appendChild(s)}this.dom.minorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?this.props.majorLabelHeight+"px":"0",s.style.left=t+"px"},s.prototype._repaintMajorText=function(t,e,i){var s=this.dom.redundant.majorTexts.shift();if(!s){var o=document.createTextNode(e);s=document.createElement("div"),s.className="text major",s.appendChild(o),this.dom.foreground.appendChild(s)}this.dom.majorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?"0":this.props.minorLabelHeight+"px",s.style.left=t+"px"},s.prototype._repaintMinorLine=function(t,e){var i=this.dom.redundant.minorLines.shift();i||(i=document.createElement("div"),i.className="grid vertical minor",this.dom.background.appendChild(i)),this.dom.minorLines.push(i);var s=this.props;i.style.top="top"==e?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",i.style.height=s.minorLineHeight+"px",i.style.left=t-s.minorLineWidth/2+"px"},s.prototype._repaintMajorLine=function(t,e){var i=this.dom.redundant.majorLines.shift();i||(i=document.createElement("DIV"),i.className="grid vertical major",this.dom.background.appendChild(i)),this.dom.majorLines.push(i);var s=this.props;i.style.top="top"==e?"0":this.body.domProps.top.height+"px",i.style.left=t-s.majorLineWidth/2+"px",i.style.height=s.majorLineHeight+"px"},s.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="text minor measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="text major measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth},s.prototype.snap=function(t){return this.step.snap(t)},t.exports=s},function(t,e,i){function s(t,e,i){this.id=null,this.parent=null,this.data=t,this.dom=null,this.conversion=e||{},this.options=i||{},this.selected=!1,this.displayed=!1,this.dirty=!0,this.top=null,this.left=null,this.width=null,this.height=null}var o=i(45),n=i(1);s.prototype.stack=!0,s.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.setData=function(t){this.data=t,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},s.prototype.isVisible=function(){return!1},s.prototype.show=function(){return!1},s.prototype.hide=function(){return!1},s.prototype.redraw=function(){},s.prototype.repositionX=function(){},s.prototype.repositionY=function(){},s.prototype._repaintDeleteButton=function(t){if(this.selected&&this.options.editable.remove&&!this.dom.deleteButton){var e=this,i=document.createElement("div");i.className="delete",i.title="Delete this item",o(i,{preventDefault:!0}).on("tap",function(t){e.parent.removeFromDataSet(e),t.stopPropagation()}),t.appendChild(i),this.dom.deleteButton=i}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},s.prototype._updateContents=function(t){var e;if(this.options.template){var i=this.parent.itemSet.itemsData.get(this.id);e=this.options.template(i)}else e=this.data.content;if(e!==this.content){if(e instanceof Element)t.innerHTML="",t.appendChild(e);else if(void 0!=e)t.innerHTML=e;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.content=e}},s.prototype._updateTitle=function(t){null!=this.data.title?t.title=this.data.title||"":t.removeAttribute("title")},s.prototype._updateDataAttributes=function(t){if(this.options.dataAttributes&&this.options.dataAttributes.length>0){var e=[];if(Array.isArray(this.options.dataAttributes))e=this.options.dataAttributes;else{if("all"!=this.options.dataAttributes)return;e=Object.keys(this.data)}for(var i=0;it.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),this.dirty=!0),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.background;if(!e)throw new Error("Cannot redraw item: parent has no background container element");e.appendChild(t.box)}if(this.displayed=!0,this.dirty){this._updateContents(this.dom.content),this._updateTitle(this.dom.content),this._updateDataAttributes(this.dom.content),this._updateStyle(this.dom.box);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");t.box.className=this.baseClassName+i,this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.props.content.width=this.dom.content.offsetWidth,this.height=0,this.dirty=!1}},s.prototype.show=r.prototype.show,s.prototype.hide=r.prototype.hide,s.prototype.repositionX=r.prototype.repositionX,s.prototype.repositionY=function(t){var e="top"===this.options.orientation;this.dom.content.style.top=e?"":"0",this.dom.content.style.bottom=e?"0":"";var i;if(void 0!==this.data.subgroup){var s=this.data.subgroup,o=this.parent.subgroups,r=o[s].index;if(1==e){i=this.parent.subgroups[s].height+t.item.vertical,i+=0==r?t.axis-.5*t.item.vertical:0;var a=this.parent.top;for(var h in o)o.hasOwnProperty(h)&&1==o[h].visible&&o[h].indexr&&(a+=o[h].height+t.item.vertical);i=this.parent.subgroups[s].height+t.item.vertical,this.dom.box.style.top=a+"px",this.dom.box.style.bottom=""}}else this.parent instanceof n?(i=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.top=e?"0":"",this.dom.box.style.bottom=e?"":"0"):(i=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=i+"px"},t.exports=s},function(t,e,i){function s(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);o.call(this,t,e,i)}{var o=i(31);i(1)}s.prototype=new o(null,null,null),s.prototype.isVisible=function(t){var e=(t.end-t.start)/4;return this.data.start>t.start-e&&this.data.startt.start-e&&this.data.startt.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),t.box["timeline-item"]=this,this.dirty=!0),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.foreground;if(!e)throw new Error("Cannot redraw item: parent has no foreground container element");e.appendChild(t.box)}if(this.displayed=!0,this.dirty){this._updateContents(this.dom.content),this._updateTitle(this.dom.box),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");t.box.className=this.baseClassName+i,this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.dom.content.style.maxWidth="none",this.props.content.width=this.dom.content.offsetWidth,this.height=this.dom.box.offsetHeight,this.dom.content.style.maxWidth="",this.dirty=!1}this._repaintDeleteButton(t.box),this._repaintDragLeft(),this._repaintDragRight()},s.prototype.show=function(){this.displayed||this.redraw()},s.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.top=null,this.left=null,this.displayed=!1}},s.prototype.repositionX=function(){var t,e,i=this.parent.width,s=this.conversion.toScreen(this.data.start),o=this.conversion.toScreen(this.data.end);-i>s&&(s=-i),o>2*i&&(o=2*i);var n=Math.max(o-s,1);switch(this.overflow?(this.left=s,this.width=n+this.props.content.width,e=this.props.content.width):(this.left=s,this.width=n,e=Math.min(o-s-2*this.options.padding,this.props.content.width)),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=n+"px",this.options.align){case"left":this.dom.content.style.left="0";break;case"right":this.dom.content.style.left=Math.max(n-e-2*this.options.padding,0)+"px";break;case"center":this.dom.content.style.left=Math.max((n-e-2*this.options.padding)/2,0)+"px";break;default:t=this.overflow?o>0?Math.max(-s,0):-e:0>s?Math.min(-s,o-s-e-2*this.options.padding):0,this.dom.content.style.left=t+"px"}},s.prototype.repositionY=function(){var t=this.options.orientation,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},s.prototype._repaintDragLeft=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="drag-left",t.dragLeftItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragLeft=t}else!this.selected&&this.dom.dragLeft&&(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},s.prototype._repaintDragRight=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="drag-right",t.dragRightItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragRight=t}else!this.selected&&this.dom.dragRight&&(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this._initializeMixinLoaders(),this.containerElement=t,this.renderRefreshRate=60,this.renderTimestep=1e3/this.renderRefreshRate,this.renderTime=.5*this.renderTimestep,this.maxPhysicsTicksPerRender=3,this.physicsDiscreteStepsize=.5,this.initializing=!0,this.triggerFunctions={add:null,edit:null,editEdge:null,connect:null,del:null},this.defaultOptions={nodes:{mass:1,radiusMin:10,radiusMax:30,radius:10,shape:"ellipse",image:void 0,widthMin:16,widthMax:64,fontColor:"black",fontSize:14,fontFace:"verdana",fontFill:void 0,level:-1,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},borderColor:"#2B7CE9",backgroundColor:"#97C2FC",highlightColor:"#D2E5FF",group:void 0,borderWidth:1,borderWidthSelected:void 0},edges:{widthMin:1,widthMax:15,width:1,widthSelectionMultiplier:2,hoverWidth:1.5,style:"line",color:{color:"#848484",highlight:"#848484",hover:"#848484"},fontColor:"#343434",fontSize:14,fontFace:"arial",fontFill:"white",arrowScaleFactor:1,dash:{length:10,gap:5,altLength:void 0},inheritColor:"from"},configurePhysics:!1,physics:{barnesHut:{enabled:!0,theta:1/.6,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09},repulsion:{centralGravity:0,springLength:200,springConstant:.05,nodeDistance:100,damping:.09},hierarchicalRepulsion:{enabled:!1,centralGravity:0,springLength:100,springConstant:.01,nodeDistance:150,damping:.09},damping:null,centralGravity:null,springLength:null,springConstant:null},clustering:{enabled:!1,initialMaxNodes:100,clusterThreshold:500,reduceToNodes:300,chainThreshold:.4,clusterEdgeThreshold:20,sectorThreshold:100,screenSizeThreshold:.2,fontSizeMultiplier:4,maxFontSize:1e3,forceAmplification:.1,distanceAmplification:.1,edgeGrowth:20,nodeScaling:{width:1,height:1,radius:1},maxNodeSizeIncrements:600,activeAreaBoxSize:80,clusterLevelDifference:2},navigation:{enabled:!1},keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02}},dataManipulation:{enabled:!1,initiallyVisible:!1},hierarchicalLayout:{enabled:!1,levelSeparation:150,nodeSpacing:100,direction:"UD",layout:"hubsize"},freezeForStabilization:!1,smoothCurves:{enabled:!0,dynamic:!0,type:"continuous",roundness:.5},maxVelocity:30,minVelocity:.1,stabilize:!0,stabilizationIterations:1e3,locale:"en",locales:_,tooltip:{delay:300,fontColor:"black",fontSize:14,fontFace:"verdana",color:{border:"#666",background:"#FFFFC6"}},dragNetwork:!0,dragNodes:!0,zoomable:!0,hover:!1,hideEdgesOnDrag:!1,hideNodesOnDrag:!1,width:"100%",height:"100%",selectable:!0},this.constants=a.extend({},this.defaultOptions),this.pixelRatio=1,this.hoverObj={nodes:{},edges:{}},this.controlNodesActive=!1,this.navigationHammers={existing:[],_new:[]},this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=null,this.lockedOnNodeOffset=null,this.touchTime=0;var o=this;this.groups=new u,this.images=new m,this.images.setOnloadCallback(function(){o._redraw()}),this.xIncrement=0,this.yIncrement=0,this.zoomIncrement=0,this._loadPhysicsSystem(),this._create(),this._loadSectorSystem(),this._loadClusterSystem(),this._loadSelectionSystem(),this._loadHierarchySystem(),this._setTranslation(this.frame.clientWidth/2,this.frame.clientHeight/2),this._setScale(1),this.setOptions(i),this.freezeSimulation=!1,this.cachedFunctions={},this.startedStabilization=!1,this.stabilized=!1,this.stabilizationIterations=null,this.draggingNodes=!1,this.calculationNodes={},this.calculationNodeIndices=[],this.nodeIndices=[],this.nodes={},this.edges={},this.canvasTopLeft={x:0,y:0},this.canvasBottomRight={x:0,y:0},this.pointerPosition={x:0,y:0},this.areaCenter={},this.scale=1,this.previousScale=this.scale,this.nodesData=null,this.edgesData=null,this.nodesListeners={add:function(t,e){o._addNodes(e.items),o.start()},update:function(t,e){o._updateNodes(e.items,e.data),o.start()},remove:function(t,e){o._removeNodes(e.items),o.start()}},this.edgesListeners={add:function(t,e){o._addEdges(e.items),o.start()},update:function(t,e){o._updateEdges(e.items),o.start()},remove:function(t,e){o._removeEdges(e.items),o.start()}},this.moving=!0,this.timer=void 0,this.setData(e,this.constants.clustering.enabled||this.constants.hierarchicalLayout.enabled),this.initializing=!1,1==this.constants.hierarchicalLayout.enabled?this._setupHierarchicalLayout():0==this.constants.stabilize&&this.zoomExtent(void 0,!0,this.constants.clustering.enabled),this.constants.clustering.enabled&&this.startWithClustering()}var o=i(56),n=i(45),r=i(57),a=i(1),h=i(47),d=i(3),l=i(4),c=i(42),p=i(43),u=i(38),m=i(39),f=i(40),g=i(37),v=i(41),y=i(54),b=i(55),_=i(49);i(50),o(s.prototype),s.prototype._getScriptPath=function(){for(var t=document.getElementsByTagName("script"),e=0;et.x&&(s=t.x),ot.y&&(e=t.y),i=this.constants.clustering.initialMaxNodes?49.07548/(n+142.05338)+91444e-8:12.662/(n+7.4147)+.0964822:1==this.constants.clustering.enabled&&n>=this.constants.clustering.initialMaxNodes?77.5271985/(n+187.266146)+476710517e-13:30.5062972/(n+19.93597763)+.08413486;var r=Math.min(this.frame.canvas.clientWidth/600,this.frame.canvas.clientHeight/600);s*=r}else{var a=1.1*Math.abs(o.maxX-o.minX),h=1.1*Math.abs(o.maxY-o.minY),d=this.frame.canvas.clientWidth/a,l=this.frame.canvas.clientHeight/h;s=l>=d?d:l}s>1&&(s=1);var c=this._findCenter(o);if(0==i){var p={position:c,scale:s,animation:t};this.moveTo(p),this.moving=!0,this.start()}else c.x*=s,c.y*=s,c.x-=.5*this.frame.canvas.clientWidth,c.y-=.5*this.frame.canvas.clientHeight,this._setScale(s),this._setTranslation(-c.x,-c.y)},s.prototype._updateNodeIndexList=function(){this._clearNodeIndexList();for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodeIndices.push(t)},s.prototype.setData=function(t,e){if(void 0===e&&(e=!1),this.initializing=!0,t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){if(t&&t.dot){var i=c.DOTToGraph(t.dot);return void this.setData(i)}}else if(t&&t.gephi){if(t&&t.gephi){var s=p.parseGephi(t.gephi);return void this.setData(s)}}else this._setNodes(t&&t.nodes),this._setEdges(t&&t.edges);this._putDataInSector(),0==e&&(1==this.constants.hierarchicalLayout.enabled?(this._resetLevels(),this._setupHierarchicalLayout()):this.constants.stabilize&&this._stabilize(),this.start()),this.initializing=!1},s.prototype.setOptions=function(t){if(t){var e,i=["nodes","edges","smoothCurves","hierarchicalLayout","clustering","navigation","keyboard","dataManipulation","onAdd","onEdit","onEditEdge","onConnect","onDelete","clickToUse"];if(a.selectiveNotDeepExtend(i,this.constants,t),a.selectiveNotDeepExtend(["color"],this.constants.nodes,t.nodes),a.selectiveNotDeepExtend(["color","length"],this.constants.edges,t.edges),t.physics&&(a.mergeOptions(this.constants.physics,t.physics,"barnesHut"),a.mergeOptions(this.constants.physics,t.physics,"repulsion"),t.physics.hierarchicalRepulsion)){this.constants.hierarchicalLayout.enabled=!0,this.constants.physics.hierarchicalRepulsion.enabled=!0,this.constants.physics.barnesHut.enabled=!1; -for(e in t.physics.hierarchicalRepulsion)t.physics.hierarchicalRepulsion.hasOwnProperty(e)&&(this.constants.physics.hierarchicalRepulsion[e]=t.physics.hierarchicalRepulsion[e])}if(t.onAdd&&(this.triggerFunctions.add=t.onAdd),t.onEdit&&(this.triggerFunctions.edit=t.onEdit),t.onEditEdge&&(this.triggerFunctions.editEdge=t.onEditEdge),t.onConnect&&(this.triggerFunctions.connect=t.onConnect),t.onDelete&&(this.triggerFunctions.del=t.onDelete),a.mergeOptions(this.constants,t,"smoothCurves"),a.mergeOptions(this.constants,t,"hierarchicalLayout"),a.mergeOptions(this.constants,t,"clustering"),a.mergeOptions(this.constants,t,"navigation"),a.mergeOptions(this.constants,t,"keyboard"),a.mergeOptions(this.constants,t,"dataManipulation"),t.dataManipulation&&(this.editMode=this.constants.dataManipulation.initiallyVisible),t.edges&&(void 0!==t.edges.color&&(a.isString(t.edges.color)?(this.constants.edges.color={},this.constants.edges.color.color=t.edges.color,this.constants.edges.color.highlight=t.edges.color,this.constants.edges.color.hover=t.edges.color):(void 0!==t.edges.color.color&&(this.constants.edges.color.color=t.edges.color.color),void 0!==t.edges.color.highlight&&(this.constants.edges.color.highlight=t.edges.color.highlight),void 0!==t.edges.color.hover&&(this.constants.edges.color.hover=t.edges.color.hover))),t.edges.fontColor||void 0!==t.edges.color&&(a.isString(t.edges.color)?this.constants.edges.fontColor=t.edges.color:void 0!==t.edges.color.color&&(this.constants.edges.fontColor=t.edges.color.color))),t.nodes&&t.nodes.color){var s=a.parseColor(t.nodes.color);this.constants.nodes.color.background=s.background,this.constants.nodes.color.border=s.border,this.constants.nodes.color.highlight.background=s.highlight.background,this.constants.nodes.color.highlight.border=s.highlight.border,this.constants.nodes.color.hover.background=s.hover.background,this.constants.nodes.color.hover.border=s.hover.border}if(t.groups)for(var o in t.groups)if(t.groups.hasOwnProperty(o)){var n=t.groups[o];this.groups.add(o,n)}if(t.tooltip){for(e in t.tooltip)t.tooltip.hasOwnProperty(e)&&(this.constants.tooltip[e]=t.tooltip[e]);t.tooltip.color&&(this.constants.tooltip.color=a.parseColor(t.tooltip.color))}if("clickToUse"in t&&(t.clickToUse?(this.activator=new b(this.frame),this.activator.on("change",this._createKeyBinds.bind(this))):this.activator&&(this.activator.destroy(),delete this.activator)),t.labels)throw new Error('Option "labels" is deprecated. Use options "locale" and "locales" instead.')}this._loadPhysicsSystem(),this._loadNavigationControls(),this._loadManipulationSystem(),this._configureSmoothCurves(),this._createKeyBinds(),this.setSize(this.constants.width,this.constants.height),this.moving=!0,this.start()},s.prototype._create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis network-frame",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext){var t=this.frame.canvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.frame.canvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(e)}var i=this;this.drag={},this.pinch={},this.hammer=n(this.frame.canvas,{prevent_default:!0}),this.hammer.on("tap",i._onTap.bind(i)),this.hammer.on("doubletap",i._onDoubleTap.bind(i)),this.hammer.on("hold",i._onHold.bind(i)),this.hammer.on("pinch",i._onPinch.bind(i)),this.hammer.on("touch",i._onTouch.bind(i)),this.hammer.on("dragstart",i._onDragStart.bind(i)),this.hammer.on("drag",i._onDrag.bind(i)),this.hammer.on("dragend",i._onDragEnd.bind(i)),this.hammer.on("mousewheel",i._onMouseWheel.bind(i)),this.hammer.on("DOMMouseScroll",i._onMouseWheel.bind(i)),this.hammer.on("mousemove",i._onMouseMoveTitle.bind(i)),this.hammerFrame=n(this.frame,{prevent_default:!0}),this.hammerFrame.on("release",i._onRelease.bind(i)),this.containerElement.appendChild(this.frame)},s.prototype._createKeyBinds=function(){var t=this;void 0!==this.keycharm&&this.keycharm.destroy(),this.keycharm=r(),this.keycharm.reset(),this.constants.keyboard.enabled&&this.isActive()&&(this.keycharm.bind("up",this._moveUp.bind(t),"keydown"),this.keycharm.bind("up",this._yStopMoving.bind(t),"keyup"),this.keycharm.bind("down",this._moveDown.bind(t),"keydown"),this.keycharm.bind("down",this._yStopMoving.bind(t),"keyup"),this.keycharm.bind("left",this._moveLeft.bind(t),"keydown"),this.keycharm.bind("left",this._xStopMoving.bind(t),"keyup"),this.keycharm.bind("right",this._moveRight.bind(t),"keydown"),this.keycharm.bind("right",this._xStopMoving.bind(t),"keyup"),this.keycharm.bind("=",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("=",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("num+",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("num+",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("num-",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("num-",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("-",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("-",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("[",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("[",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("]",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("]",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("pageup",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("pageup",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("pagedown",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("pagedown",this._stopZoom.bind(t),"keyup")),1==this.constants.dataManipulation.enabled&&(this.keycharm.bind("esc",this._createManipulatorBar.bind(t)),this.keycharm.bind("delete",this._deleteSelected.bind(t)))},s.prototype._getPointer=function(t){return{x:t.pageX-a.getAbsoluteLeft(this.frame.canvas),y:t.pageY-a.getAbsoluteTop(this.frame.canvas)}},s.prototype._onTouch=function(t){(new Date).valueOf()-this.touchTime>100&&(this.drag.pointer=this._getPointer(t.gesture.center),this.drag.pinched=!1,this.pinch.scale=this._getScale(),this.touchTime=(new Date).valueOf(),this._handleTouch(this.drag.pointer))},s.prototype._onDragStart=function(){this._handleDragStart()},s.prototype._handleDragStart=function(){var t=this.drag,e=this._getNodeAt(t.pointer);if(t.dragging=!0,t.selection=[],t.translation=this._getTranslation(),t.nodeId=null,this.draggingNodes=!1,null!=e&&1==this.constants.dragNodes){this.draggingNodes=!0,t.nodeId=e.id,e.isSelected()||this._selectObject(e,!1),this.emit("dragStart",{nodeIds:this.getSelection().nodes});for(var i in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(i)){var s=this.selectionObj.nodes[i],o={id:s.id,node:s,x:s.x,y:s.y,xFixed:s.xFixed,yFixed:s.yFixed};s.xFixed=!0,s.yFixed=!0,t.selection.push(o)}}},s.prototype._onDrag=function(t){this._handleOnDrag(t)},s.prototype._handleOnDrag=function(t){if(!this.drag.pinched){this.releaseNode();var e=this._getPointer(t.gesture.center),i=this,s=this.drag,o=s.selection;if(o&&o.length&&1==this.constants.dragNodes){var n=e.x-s.pointer.x,r=e.y-s.pointer.y;o.forEach(function(t){var e=t.node;t.xFixed||(e.x=i._XconvertDOMtoCanvas(i._XconvertCanvasToDOM(t.x)+n)),t.yFixed||(e.y=i._YconvertDOMtoCanvas(i._YconvertCanvasToDOM(t.y)+r))}),this.moving||(this.moving=!0,this.start())}else if(1==this.constants.dragNetwork){var a=e.x-this.drag.pointer.x,h=e.y-this.drag.pointer.y;this._setTranslation(this.drag.translation.x+a,this.drag.translation.y+h),this._redraw()}}},s.prototype._onDragEnd=function(t){this._handleDragEnd(t)},s.prototype._handleDragEnd=function(){this.drag.dragging=!1;var t=this.drag.selection;t&&t.length?(t.forEach(function(t){t.node.xFixed=t.xFixed,t.node.yFixed=t.yFixed}),this.moving=!0,this.start()):this._redraw(),0==this.draggingNodes?this.emit("dragEnd",{nodeIds:[]}):this.emit("dragEnd",{nodeIds:this.getSelection().nodes})},s.prototype._onTap=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleTap(e)},s.prototype._onDoubleTap=function(t){var e=this._getPointer(t.gesture.center);this._handleDoubleTap(e)},s.prototype._onHold=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleOnHold(e)},s.prototype._onRelease=function(t){var e=this._getPointer(t.gesture.center);this._handleOnRelease(e)},s.prototype._onPinch=function(t){var e=this._getPointer(t.gesture.center);this.drag.pinched=!0,"scale"in this.pinch||(this.pinch.scale=1);var i=this.pinch.scale*t.gesture.scale;this._zoom(i,e)},s.prototype._zoom=function(t,e){if(1==this.constants.zoomable){var i=this._getScale();1e-5>t&&(t=1e-5),t>10&&(t=10);var s=null;void 0!==this.drag&&1==this.drag.dragging&&(s=this.DOMtoCanvas(this.drag.pointer));var o=this._getTranslation(),n=t/i,r=(1-n)*e.x+o.x*n,a=(1-n)*e.y+o.y*n;if(this.areaCenter={x:this._XconvertDOMtoCanvas(e.x),y:this._YconvertDOMtoCanvas(e.y)},this._setScale(t),this._setTranslation(r,a),this.updateClustersDefault(),null!=s){var h=this.canvasToDOM(s);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}return this._redraw(),t>i?this.emit("zoom",{direction:"+"}):this.emit("zoom",{direction:"-"}),t}},s.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i=this._getScale(),s=e/10;0>e&&(s/=1-s),i*=1+s;var o=h.fakeGesture(this,t),n=this._getPointer(o.center);this._zoom(i,n)}t.preventDefault()},s.prototype._onMouseMoveTitle=function(t){var e=h.fakeGesture(this,t),i=this._getPointer(e.center);this.popupObj&&this._checkHidePopup(i);var s=this,o=function(){s._checkShowPopup(i)};if(this.popupTimer&&clearInterval(this.popupTimer),this.drag.dragging||(this.popupTimer=setTimeout(o,this.constants.tooltip.delay)),1==this.constants.hover){for(var n in this.hoverObj.edges)this.hoverObj.edges.hasOwnProperty(n)&&(this.hoverObj.edges[n].hover=!1,delete this.hoverObj.edges[n]);var r=this._getNodeAt(i);null==r&&(r=this._getEdgeAt(i)),null!=r&&this._hoverObject(r);for(var a in this.hoverObj.nodes)this.hoverObj.nodes.hasOwnProperty(a)&&(r instanceof f&&r.id!=a||r instanceof g||null==r)&&(this._blurObject(this.hoverObj.nodes[a]),delete this.hoverObj.nodes[a]);this.redraw()}},s.prototype._checkShowPopup=function(t){var e,i={left:this._XconvertDOMtoCanvas(t.x),top:this._YconvertDOMtoCanvas(t.y),right:this._XconvertDOMtoCanvas(t.x),bottom:this._YconvertDOMtoCanvas(t.y)},s=this.popupObj;if(void 0==this.popupObj){var o=this.nodes;for(e in o)if(o.hasOwnProperty(e)){var n=o[e];if(void 0!==n.getTitle()&&n.isOverlappingWith(i)){this.popupObj=n;break}}}if(void 0===this.popupObj){var r=this.edges;for(e in r)if(r.hasOwnProperty(e)){var a=r[e];if(a.connected&&void 0!==a.getTitle()&&a.isOverlappingWith(i)){this.popupObj=a;break}}}if(this.popupObj){if(this.popupObj!=s){var h=this;h.popup||(h.popup=new v(h.frame,h.constants.tooltip)),h.popup.setPosition(t.x-3,t.y-3),h.popup.setText(h.popupObj.getTitle()),h.popup.show()}}else this.popup&&this.popup.hide()},s.prototype._checkHidePopup=function(t){this.popupObj&&this._getNodeAt(t)||(this.popupObj=void 0,this.popup&&this.popup.hide())},s.prototype.setSize=function(t,e){var i=!1,s=this.frame.canvas.width,o=this.frame.canvas.height;t!=this.constants.width||e!=this.constants.height||this.frame.style.width!=t||this.frame.style.height!=e?(this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth*this.pixelRatio,this.frame.canvas.height=this.frame.canvas.clientHeight*this.pixelRatio,this.constants.width=t,this.constants.height=e,i=!0):(this.frame.canvas.width!=this.frame.canvas.clientWidth*this.pixelRatio&&(this.frame.canvas.width=this.frame.canvas.clientWidth*this.pixelRatio,i=!0),this.frame.canvas.height!=this.frame.canvas.clientHeight*this.pixelRatio&&(this.frame.canvas.height=this.frame.canvas.clientHeight*this.pixelRatio,i=!0)),1==i&&this.emit("resize",{width:this.frame.canvas.width*this.pixelRatio,height:this.frame.canvas.height*this.pixelRatio,oldWidth:s*this.pixelRatio,oldHeight:o*this.pixelRatio})},s.prototype._setNodes=function(t){var e=this.nodesData;if(t instanceof d||t instanceof l)this.nodesData=t;else if(Array.isArray(t))this.nodesData=new d,this.nodesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.nodesData=new d}if(e&&a.forEach(this.nodesListeners,function(t,i){e.off(i,t)}),this.nodes={},this.nodesData){var i=this;a.forEach(this.nodesListeners,function(t,e){i.nodesData.on(e,t)});var s=this.nodesData.getIds();this._addNodes(s)}this._updateSelection()},s.prototype._addNodes=function(t){for(var e,i=0,s=t.length;s>i;i++){e=t[i];var o=this.nodesData.get(e),n=new f(o,this.images,this.groups,this.constants);if(this.nodes[e]=n,!(0!=n.xFixed&&0!=n.yFixed||null!==n.x&&null!==n.y)){var r=1*t.length+10,a=2*Math.PI*Math.random();0==n.xFixed&&(n.x=r*Math.cos(a)),0==n.yFixed&&(n.y=r*Math.sin(a))}this.moving=!0}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateValueRange(this.nodes),this.updateLabels()},s.prototype._updateNodes=function(t,e){for(var i=this.nodes,s=0,o=t.length;o>s;s++){var n=t[s],r=i[n],a=e[s];r?r.setProperties(a,this.constants):(r=new f(properties,this.images,this.groups,this.constants),i[n]=r)}this.moving=!0,1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateNodeIndexList(),this._updateValueRange(i)},s.prototype._removeNodes=function(t){for(var e=this.nodes,i=0,s=t.length;s>i;i++){var o=t[i];delete e[o]}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateSelection(),this._updateValueRange(e)},s.prototype._setEdges=function(t){var e=this.edgesData;if(t instanceof d||t instanceof l)this.edgesData=t;else if(Array.isArray(t))this.edgesData=new d,this.edgesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.edgesData=new d}if(e&&a.forEach(this.edgesListeners,function(t,i){e.off(i,t)}),this.edges={},this.edgesData){var i=this;a.forEach(this.edgesListeners,function(t,e){i.edgesData.on(e,t)});var s=this.edgesData.getIds();this._addEdges(s)}this._reconnectEdges()},s.prototype._addEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n];r&&r.disconnect();var a=i.get(n,{showInternalIds:!0});e[n]=new g(a,this,this.constants)}this.moving=!0,this._updateValueRange(e),this._createBezierNodes(),this._updateCalculationNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout())},s.prototype._updateEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=i.get(n),a=e[n];a?(a.disconnect(),a.setProperties(r,this.constants),a.connect()):(a=new g(r,this,this.constants),this.edges[n]=a)}this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this.moving=!0,this._updateValueRange(e)},s.prototype._removeEdges=function(t){for(var e=this.edges,i=0,s=t.length;s>i;i++){var o=t[i],n=e[o];n&&(null!=n.via&&delete this.sectors.support.nodes[n.via.id],n.disconnect(),delete e[o])}this.moving=!0,this._updateValueRange(e),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._reconnectEdges=function(){var t,e=this.nodes,i=this.edges;for(t in e)e.hasOwnProperty(t)&&(e[t].edges=[],e[t].dynamicEdges=[]);for(t in i)if(i.hasOwnProperty(t)){var s=i[t];s.from=null,s.to=null,s.connect()}},s.prototype._updateValueRange=function(t){var e,i=void 0,s=void 0;for(e in t)if(t.hasOwnProperty(e)){var o=t[e].getValue();void 0!==o&&(i=void 0===i?o:Math.min(o,i),s=void 0===s?o:Math.max(o,s))}if(void 0!==i&&void 0!==s)for(e in t)t.hasOwnProperty(e)&&t[e].setValueRange(i,s)},s.prototype.redraw=function(){this.setSize(this.constants.width,this.constants.height),this._redraw()},s.prototype._redraw=function(){var t=this.frame.canvas.getContext("2d");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e=this.frame.canvas.width*this.pixelRatio,i=this.frame.canvas.height*this.pixelRatio;t.clearRect(0,0,e,i),t.save(),t.translate(this.translation.x,this.translation.y),t.scale(this.scale,this.scale),this.canvasTopLeft={x:this._XconvertDOMtoCanvas(0),y:this._YconvertDOMtoCanvas(0)},this.canvasBottomRight={x:this._XconvertDOMtoCanvas(this.frame.canvas.clientWidth*this.pixelRatio),y:this._YconvertDOMtoCanvas(this.frame.canvas.clientHeight*this.pixelRatio)},this._doInAllSectors("_drawAllSectorNodes",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideEdgesOnDrag)&&this._doInAllSectors("_drawEdges",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideNodesOnDrag)&&this._doInAllSectors("_drawNodes",t,!1),1==this.controlNodesActive&&this._doInAllSectors("_drawControlNodes",t),t.restore()},s.prototype._setTranslation=function(t,e){void 0===this.translation&&(this.translation={x:0,y:0}),void 0!==t&&(this.translation.x=t),void 0!==e&&(this.translation.y=e),this.emit("viewChanged")},s.prototype._getTranslation=function(){return{x:this.translation.x,y:this.translation.y}},s.prototype._setScale=function(t){this.scale=t},s.prototype._getScale=function(){return this.scale},s.prototype._XconvertDOMtoCanvas=function(t){return(t-this.translation.x)/this.scale},s.prototype._XconvertCanvasToDOM=function(t){return t*this.scale+this.translation.x},s.prototype._YconvertDOMtoCanvas=function(t){return(t-this.translation.y)/this.scale},s.prototype._YconvertCanvasToDOM=function(t){return t*this.scale+this.translation.y},s.prototype.canvasToDOM=function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}},s.prototype.DOMtoCanvas=function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}},s.prototype._drawNodes=function(t,e){void 0===e&&(e=!1);var i=this.nodes,s=[];for(var o in i)i.hasOwnProperty(o)&&(i[o].setScaleAndPos(this.scale,this.canvasTopLeft,this.canvasBottomRight),i[o].isSelected()?s.push(o):(i[o].inArea()||e)&&i[o].draw(t));for(var n=0,r=s.length;r>n;n++)(i[s[n]].inArea()||e)&&i[s[n]].draw(t)},s.prototype._drawEdges=function(t){var e=this.edges;for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];s.setScale(this.scale),s.connected&&e[i].draw(t)}},s.prototype._drawControlNodes=function(t){var e=this.edges;for(var i in e)e.hasOwnProperty(i)&&e[i]._drawControlNodes(t)},s.prototype._stabilize=function(){1==this.constants.freezeForStabilization&&this._freezeDefinedNodes();for(var t=0;this.moving&&t0)for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStepLimited(e,this.constants.maxVelocity),s=!0);else for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStep(e),s=!0);if(1==s){var o=this.constants.minVelocity/Math.max(this.scale,.05);return o>.5*this.constants.maxVelocity?!0:this._isMoving(o)}return!1},s.prototype._physicsTick=function(){if(!this.freezeSimulation&&1==this.moving){var t=!1,e=!1;this._doInAllActiveSectors("_initializeForceCalculation");var i=this._doInAllActiveSectors("_discreteStepNodes");1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic&&(e=this._doInSupportSector("_discreteStepNodes"));for(var s=0;s0){var i=this,s={iterations:i.stabilizationIterations};i.stabilizationIterations=0,i.startedStabilization=!1,setTimeout(function(){i.emit("stabilized",s)},0)}},s.prototype._handleNavigation=function(){if(0!=this.xIncrement||0!=this.yIncrement){var t=this._getTranslation();this._setTranslation(t.x+this.xIncrement,t.y+this.yIncrement)}if(0!=this.zoomIncrement){var e={x:this.frame.canvas.clientWidth/2,y:this.frame.canvas.clientHeight/2};this._zoom(this.scale*(1+this.zoomIncrement),e)}},s.prototype.toggleFreeze=function(){0==this.freezeSimulation?this.freezeSimulation=!0:(this.freezeSimulation=!1,this.start())},s.prototype._configureSmoothCurves=function(t){if(void 0===t&&(t=!0),1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this._createBezierNodes();for(var e in this.sectors.support.nodes)this.sectors.support.nodes.hasOwnProperty(e)&&void 0===this.edges[this.sectors.support.nodes[e].parentEdgeId]&&delete this.sectors.support.nodes[e]}else{this.sectors.support.nodes={};for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.edges[i].via=null)}this._updateCalculationNodes(),t||(this.moving=!0,this.start())},s.prototype._createBezierNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic)for(var t in this.edges)if(this.edges.hasOwnProperty(t)){var e=this.edges[t];if(null==e.via){var i="edgeId:".concat(e.id);this.sectors.support.nodes[i]=new f({id:i,mass:1,shape:"circle",image:"",internalMultiplier:1},{},{},this.constants),e.via=this.sectors.support.nodes[i],e.via.parentEdgeId=e.id,e.positionBezierNode()}}},s.prototype._initializeMixinLoaders=function(){for(var t in y)y.hasOwnProperty(t)&&(s.prototype[t]=y[t])},s.prototype.storePosition=function(){console.log("storePosition is depricated: use .storePositions() from now on."),this.storePositions()},s.prototype.storePositions=function(){var t=[];for(var e in this.nodes)if(this.nodes.hasOwnProperty(e)){var i=this.nodes[e],s=!this.nodes.xFixed,o=!this.nodes.yFixed;(this.nodesData._data[e].x!=Math.round(i.x)||this.nodesData._data[e].y!=Math.round(i.y))&&t.push({id:e,x:Math.round(i.x),y:Math.round(i.y),allowedToMoveX:s,allowedToMoveY:o})}this.nodesData.update(t)},s.prototype.getPositions=function(t){var e={};if(void 0!==t){if(1==Array.isArray(t)){for(var i=0;i=1&&(this.easingTime=0,this._redraw=null!=this.lockedOnNodeId?this._lockedRedraw:this._classicRedraw,this.emit("animationFinished"))},s.prototype._classicRedraw=function(){},s.prototype.isActive=function(){return!this.activator||this.activator.active},s.prototype.setScale=function(){return this._setScale()},s.prototype.getScale=function(){return this._getScale()},s.prototype.getCenterCoordinates=function(){return this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight})},t.exports=s},function(t,e,i){function s(t,e,i){if(!e)throw"No network provided";var s=["edges","physics"],n=o.selectiveBridgeObject(s,i);this.options=n.edges,this.physics=n.physics,this.options.smoothCurves=i.smoothCurves,this.network=e,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.title=void 0,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,this.value=void 0,this.selected=!1,this.hover=!1,this.labelDimensions={top:0,left:0,width:0,height:0,yLine:0},this.dirtyLabel=!0,this.from=null,this.to=null,this.via=null,this.fromBackup=null,this.toBackup=null,this.originalFromId=[],this.originalToId=[],this.connected=!1,this.widthFixed=!1,this.lengthFixed=!1,this.setProperties(t),this.controlNodesEnabled=!1,this.controlNodes={from:null,to:null,positions:{}},this.connectedNode=null}var o=i(1),n=i(40);s.prototype.setProperties=function(t){if(t){var e=["style","fontSize","fontFace","fontColor","fontFill","width","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","inheritColor"];switch(o.selectiveDeepExtend(e,this.options,t),void 0!==t.from&&(this.fromId=t.from),void 0!==t.to&&(this.toId=t.to),void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.dirtyLabel=!0),void 0!==t.title&&(this.title=t.title),void 0!==t.value&&(this.value=t.value),void 0!==t.length&&(this.physics.springLength=t.length),void 0!==t.color&&(this.options.inheritColor=!1,o.isString(t.color)?(this.options.color.color=t.color,this.options.color.highlight=t.color):(void 0!==t.color.color&&(this.options.color.color=t.color.color),void 0!==t.color.highlight&&(this.options.color.highlight=t.color.highlight),void 0!==t.color.hover&&(this.options.color.hover=t.color.hover))),this.connect(),this.widthFixed=this.widthFixed||void 0!==t.width,this.lengthFixed=this.lengthFixed||void 0!==t.length,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,this.options.style){case"line":this.draw=this._drawLine;break;case"arrow":this.draw=this._drawArrow;break;case"arrow-center":this.draw=this._drawArrowCenter;break;case"dash-line":this.draw=this._drawDashLine;break;default:this.draw=this._drawLine}}},s.prototype.connect=function(){this.disconnect(),this.from=this.network.nodes[this.fromId]||null,this.to=this.network.nodes[this.toId]||null,this.connected=this.from&&this.to,this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this))},s.prototype.disconnect=function(){this.from&&(this.from.detachEdge(this),this.from=null),this.to&&(this.to.detachEdge(this),this.to=null),this.connected=!1},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.getValue=function(){return this.value},s.prototype.setValueRange=function(t,e){if(!this.widthFixed&&void 0!==this.value){var i=(this.options.widthMax-this.options.widthMin)/(e-t);this.options.width=(this.value-t)*i+this.options.widthMin,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier}},s.prototype.draw=function(){throw"Method draw not initialized in edge"},s.prototype.isOverlappingWith=function(t){if(this.connected){var e=10,i=this.from.x,s=this.from.y,o=this.to.x,n=this.to.y,r=t.left,a=t.top,h=this._getDistanceToEdge(i,s,o,n,r,a);return e>h}return!1},s.prototype._getColor=function(){var t=this.options.color;return"to"==this.options.inheritColor?t={highlight:this.to.options.color.highlight.border,hover:this.to.options.color.hover.border,color:this.to.options.color.border}:("from"==this.options.inheritColor||1==this.options.inheritColor)&&(t={highlight:this.from.options.color.highlight.border,hover:this.from.options.color.hover.border,color:this.from.options.color.border}),1==this.selected?t.highlight:1==this.hover?t.hover:t.color -},s.prototype._drawLine=function(t){if(t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth(),this.from!=this.to){var e,i=this._line(t);if(this.label){if(1==this.options.smoothCurves.enabled&&null!=i){var s=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),o=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:s,y:o}}else e=this._pointOnLine(.5);this._label(t,this.label,e.x,e.y)}}else{var n,r,a=this.physics.springLength/4,h=this.from;h.width||h.resize(t),h.width>h.height?(n=h.x+h.width/2,r=h.y-a):(n=h.x+a,r=h.y-h.height/2),this._circle(t,n,r,a),e=this._pointOnCircle(n,r,a,.5),this._label(t,this.label,e.x,e.y)}},s.prototype._getLineWidth=function(){return 1==this.selected?Math.max(Math.min(this.widthSelected,this.options.widthMax),.3*this.networkScaleInv):1==this.hover?Math.max(Math.min(this.options.hoverWidth,this.options.widthMax),.3*this.networkScaleInv):Math.max(this.options.width,.3*this.networkScaleInv)},s.prototype._getViaCoordinates=function(){var t=null,e=null,i=this.options.smoothCurves.roundness,s=this.options.smoothCurves.type,o=Math.abs(this.from.x-this.to.x),n=Math.abs(this.from.y-this.to.y);return"discrete"==s||"diagonalCross"==s?Math.abs(this.from.x-this.to.x)this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n)),"discrete"==s&&(t=i*n>o?this.from.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o)),"discrete"==s&&(e=i*o>n?this.from.y:e)):"straightCross"==s?Math.abs(this.from.x-this.to.x)Math.abs(this.from.y-this.to.y)&&(t=this.from.xthis.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n,t=this.to.x>t?this.to.x:t):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n,t=this.to.x>t?this.to.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xe?this.to.y:e):this.from.x>this.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o,e=this.to.y>e?this.to.y:e):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o,e=this.to.yd;d++){var l=t.measureText(n[d]).width;h=l>h?l:h}var c=this.options.fontSize*r,p=i-h/2,u=s-c/2;this.labelDimensions={top:u,left:p,width:h,height:c,yLine:o}}void 0!==this.options.fontFill&&null!==this.options.fontFill&&"none"!==this.options.fontFill&&(t.fillStyle=this.options.fontFill,t.fillRect(this.labelDimensions.left,this.labelDimensions.top,this.labelDimensions.width,this.labelDimensions.height)),t.fillStyle=this.options.fontColor||"black",t.textAlign="center",t.textBaseline="middle",o=this.labelDimensions.yLine;for(var d=0;r>d;d++)t.fillText(n[d],i,o),o+=a}},s.prototype._drawDashLine=function(t){t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth();var e=null;if(void 0!==t.mozDash||void 0!==t.setLineDash){var i=[0];i=void 0!==this.options.dash.length&&void 0!==this.options.dash.gap?[this.options.dash.length,this.options.dash.gap]:[5,5],"undefined"!=typeof t.setLineDash?(t.setLineDash(i),t.lineDashOffset=0):(t.mozDash=i,t.mozDashOffset=0),e=this._line(t),"undefined"!=typeof t.setLineDash?(t.setLineDash([0]),t.lineDashOffset=0):(t.mozDash=[0],t.mozDashOffset=0)}else t.beginPath(),t.lineCap="round",void 0!==this.options.dash.altLength?t.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y,[this.options.dash.length,this.options.dash.gap,this.options.dash.altLength,this.options.dash.gap]):void 0!==this.options.dash.length&&void 0!==this.options.dash.gap?t.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y,[this.options.dash.length,this.options.dash.gap]):(t.moveTo(this.from.x,this.from.y),t.lineTo(this.to.x,this.to.y)),t.stroke();if(this.label){var s;if(1==this.options.smoothCurves.enabled&&null!=e){var o=.5*(.5*(this.from.x+e.x)+.5*(this.to.x+e.x)),n=.5*(.5*(this.from.y+e.y)+.5*(this.to.y+e.y));s={x:o,y:n}}else s=this._pointOnLine(.5);this._label(t,this.label,s.x,s.y)}},s.prototype._pointOnLine=function(t){return{x:(1-t)*this.from.x+t*this.to.x,y:(1-t)*this.from.y+t*this.to.y}},s.prototype._pointOnCircle=function(t,e,i,s){var o=2*(s-3/8)*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}},s.prototype._drawArrowCenter=function(t){var e;if(t.strokeStyle=this._getColor(),t.fillStyle=t.strokeStyle,t.lineWidth=this._getLineWidth(),this.from!=this.to){var i=this._line(t),s=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),o=(10+5*this.options.width)*this.options.arrowScaleFactor;if(1==this.options.smoothCurves.enabled&&null!=i){var n=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),r=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:n,y:r}}else e=this._pointOnLine(.5);t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&this._label(t,this.label,e.x,e.y)}else{var a,h,d=.25*Math.max(100,this.physics.springLength),l=this.from;l.width||l.resize(t),l.width>l.height?(a=l.x+.5*l.width,h=l.y-d):(a=l.x+d,h=l.y-.5*l.height),this._circle(t,a,h,d);var s=.2*Math.PI,o=(10+5*this.options.width)*this.options.arrowScaleFactor;e=this._pointOnCircle(a,h,d,.5),t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&(e=this._pointOnCircle(a,h,d,.5),this._label(t,this.label,e.x,e.y))}},s.prototype._drawArrow=function(t){t.strokeStyle=this._getColor(),t.fillStyle=t.strokeStyle,t.lineWidth=this._getLineWidth();var e,i;if(this.from!=this.to){e=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x);var s,o=this.to.x-this.from.x,n=this.to.y-this.from.y,r=Math.sqrt(o*o+n*n),a=this.from.distanceToBorder(t,e+Math.PI),h=(r-a)/r,d=h*this.from.x+(1-h)*this.to.x,l=h*this.from.y+(1-h)*this.to.y;1==this.options.smoothCurves.dynamic&&1==this.options.smoothCurves.enabled?s=this.via:1==this.options.smoothCurves.enabled&&(s=this._getViaCoordinates()),1==this.options.smoothCurves.enabled&&null!=s.x&&(e=Math.atan2(this.to.y-s.y,this.to.x-s.x),o=this.to.x-s.x,n=this.to.y-s.y,r=Math.sqrt(o*o+n*n));var c,p,u=this.to.distanceToBorder(t,e),m=(r-u)/r;if(1==this.options.smoothCurves.enabled&&null!=s.x?(c=(1-m)*s.x+m*this.to.x,p=(1-m)*s.y+m*this.to.y):(c=(1-m)*this.from.x+m*this.to.x,p=(1-m)*this.from.y+m*this.to.y),t.beginPath(),t.moveTo(d,l),1==this.options.smoothCurves.enabled&&null!=s.x?t.quadraticCurveTo(s.x,s.y,c,p):t.lineTo(c,p),t.stroke(),i=(10+5*this.options.width)*this.options.arrowScaleFactor,t.arrow(c,p,e,i),t.fill(),t.stroke(),this.label){var f;if(1==this.options.smoothCurves.enabled&&null!=s){var g=.5*(.5*(this.from.x+s.x)+.5*(this.to.x+s.x)),v=.5*(.5*(this.from.y+s.y)+.5*(this.to.y+s.y));f={x:g,y:v}}else f=this._pointOnLine(.5);this._label(t,this.label,f.x,f.y)}}else{var y,b,_,x=this.from,w=.25*Math.max(100,this.physics.springLength);x.width||x.resize(t),x.width>x.height?(y=x.x+.5*x.width,b=x.y-w,_={x:y,y:x.y,angle:.9*Math.PI}):(y=x.x+w,b=x.y-.5*x.height,_={x:x.x,y:b,angle:.6*Math.PI}),t.beginPath(),t.arc(y,b,w,0,2*Math.PI,!1),t.stroke();var i=(10+5*this.options.width)*this.options.arrowScaleFactor;t.arrow(_.x,_.y,_.angle,i),t.fill(),t.stroke(),this.label&&(f=this._pointOnCircle(y,b,w,.5),this._label(t,this.label,f.x,f.y))}},s.prototype._getDistanceToEdge=function(t,e,i,s,o,n){var r=0;if(this.from!=this.to)if(1==this.options.smoothCurves.enabled){var a,h;if(1==this.options.smoothCurves.enabled&&1==this.options.smoothCurves.dynamic)a=this.via.x,h=this.via.y;else{var d=this._getViaCoordinates();a=d.x,h=d.y}var l,c,p,u,m,f,g,v=1e9;for(c=0;10>c;c++)p=.1*c,u=Math.pow(1-p,2)*t+2*p*(1-p)*a+Math.pow(p,2)*i,m=Math.pow(1-p,2)*e+2*p*(1-p)*h+Math.pow(p,2)*s,c>0&&(l=this._getDistanceToLine(f,g,u,m,o,n),v=v>l?l:v),f=u,g=m;r=v}else r=this._getDistanceToLine(t,e,i,s,o,n);else{var u,m,y,b,_=.25*this.physics.springLength,x=this.from;x.width>x.height?(u=x.x+.5*x.width,m=x.y-_):(u=x.x+_,m=x.y-.5*x.height),y=u-o,b=m-n,r=Math.abs(Math.sqrt(y*y+b*b)-_)}return this.labelDimensions.lefto&&this.labelDimensions.topn?0:r},s.prototype._getDistanceToLine=function(t,e,i,s,o,n){var r=i-t,a=s-e,h=r*r+a*a,d=((o-t)*r+(n-e)*a)/h;d>1?d=1:0>d&&(d=0);var l=t+d*r,c=e+d*a,p=l-o,u=c-n;return Math.sqrt(p*p+u*u)},s.prototype.setScale=function(t){this.networkScaleInv=1/t},s.prototype.select=function(){this.selected=!0},s.prototype.unselect=function(){this.selected=!1},s.prototype.positionBezierNode=function(){null!==this.via&&null!==this.from&&null!==this.to&&(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y))},s.prototype._drawControlNodes=function(t){if(1==this.controlNodesEnabled){if(null===this.controlNodes.from&&null===this.controlNodes.to){var e="edgeIdFrom:".concat(this.id),i="edgeIdTo:".concat(this.id),s={nodes:{group:"",radius:8},physics:{damping:0},clustering:{maxNodeSizeIncrements:0,nodeScaling:{width:0,height:0,radius:0}}};this.controlNodes.from=new n({id:e,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s),this.controlNodes.to=new n({id:i,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s)}0==this.controlNodes.from.selected&&0==this.controlNodes.to.selected&&(this.controlNodes.positions=this.getControlNodePositions(t),this.controlNodes.from.x=this.controlNodes.positions.from.x,this.controlNodes.from.y=this.controlNodes.positions.from.y,this.controlNodes.to.x=this.controlNodes.positions.to.x,this.controlNodes.to.y=this.controlNodes.positions.to.y),this.controlNodes.from.draw(t),this.controlNodes.to.draw(t)}else this.controlNodes={from:null,to:null,positions:{}}},s.prototype._enableControlNodes=function(){this.fromBackup=this.from,this.toBackup=this.to,this.controlNodesEnabled=!0},s.prototype._disableControlNodes=function(){this.fromId=this.from.id,this.toId=this.to.id,this.fromId!=this.fromBackup.id?this.fromBackup.detachEdge(this):this.toId!=this.toBackup.id&&this.toBackup.detachEdge(this),this.fromBackup=null,this.toBackup=null,this.controlNodesEnabled=!1},s.prototype._getSelectedControlNode=function(t,e){var i=this.controlNodes.positions,s=Math.sqrt(Math.pow(t-i.from.x,2)+Math.pow(e-i.from.y,2)),o=Math.sqrt(Math.pow(t-i.to.x,2)+Math.pow(e-i.to.y,2));return 15>s?(this.connectedNode=this.from,this.from=this.controlNodes.from,this.controlNodes.from):15>o?(this.connectedNode=this.to,this.to=this.controlNodes.to,this.controlNodes.to):null},s.prototype._restoreControlNodes=function(){1==this.controlNodes.from.selected?(this.from=this.connectedNode,this.connectedNode=null,this.controlNodes.from.unselect()):1==this.controlNodes.to.selected&&(this.to=this.connectedNode,this.connectedNode=null,this.controlNodes.to.unselect())},s.prototype.getControlNodePositions=function(t){var e,i=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),s=this.to.x-this.from.x,o=this.to.y-this.from.y,n=Math.sqrt(s*s+o*o),r=this.from.distanceToBorder(t,i+Math.PI),a=(n-r)/n,h=a*this.from.x+(1-a)*this.to.x,d=a*this.from.y+(1-a)*this.to.y;1==this.options.smoothCurves.dynamic&&1==this.options.smoothCurves.enabled?e=this.via:1==this.options.smoothCurves.enabled&&(e=this._getViaCoordinates()),1==this.options.smoothCurves.enabled&&null!=e.x&&(i=Math.atan2(this.to.y-e.y,this.to.x-e.x),s=this.to.x-e.x,o=this.to.y-e.y,n=Math.sqrt(s*s+o*o));var l,c,p=this.to.distanceToBorder(t,i),u=(n-p)/n;return 1==this.options.smoothCurves.enabled&&null!=e.x?(l=(1-u)*e.x+u*this.to.x,c=(1-u)*e.y+u*this.to.y):(l=(1-u)*this.from.x+u*this.to.x,c=(1-u)*this.from.y+u*this.to.y),{from:{x:h,y:d},to:{x:l,y:c}}},t.exports=s},function(t,e,i){function s(){this.clear(),this.defaultIndex=0}var o=i(1);s.DEFAULT=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}}],s.prototype.clear=function(){this.groups={},this.groups.length=function(){var t=0;for(var e in this)this.hasOwnProperty(e)&&t++;return t}},s.prototype.get=function(t){var e=this.groups[t];if(void 0==e){var i=this.defaultIndex%s.DEFAULT.length;this.defaultIndex++,e={},e.color=s.DEFAULT[i],this.groups[t]=e}return e},s.prototype.add=function(t,e){return this.groups[t]=e,e.color&&(e.color=o.parseColor(e.color)),e},t.exports=s},function(t){function e(){this.images={},this.callback=void 0}e.prototype.setOnloadCallback=function(t){this.callback=t},e.prototype.load=function(t,e){var i=this.images[t];if(void 0==i){var s=this;i=new Image,this.images[t]=i,i.onload=function(){s.callback&&s.callback(this)},i.onerror=function(){this.src=e,s.callback&&s.callback(this)},i.src=t}return i},t.exports=e},function(t,e,i){function s(t,e,i,s){var n=o.selectiveBridgeObject(["nodes"],s);this.options=n.nodes,this.selected=!1,this.hover=!1,this.edges=[],this.dynamicEdges=[],this.reroutedEdges={},this.fontDrawThreshold=3,this.id=void 0,this.x=null,this.y=null,this.allowedToMoveX=!1,this.allowedToMoveY=!1,this.xFixed=!1,this.yFixed=!1,this.horizontalAlignLeft=!0,this.verticalAlignTop=!0,this.baseRadiusValue=s.nodes.radius,this.radiusFixed=!1,this.level=-1,this.preassignedLevel=!1,this.hierarchyEnumerated=!1,this.labelDimensions={top:0,left:0,width:0,height:0,yLine:0},this.imagelist=e,this.grouplist=i,this.fx=0,this.fy=0,this.vx=0,this.vy=0,this.damping=s.physics.damping,this.fixedData={x:null,y:null},this.setProperties(t,n),this.resetCluster(),this.dynamicEdgesLength=0,this.clusterSession=0,this.clusterSizeWidthFactor=s.clustering.nodeScaling.width,this.clusterSizeHeightFactor=s.clustering.nodeScaling.height,this.clusterSizeRadiusFactor=s.clustering.nodeScaling.radius,this.maxNodeSizeIncrements=s.clustering.maxNodeSizeIncrements,this.growthIndicator=0,this.networkScaleInv=1,this.networkScale=1,this.canvasTopLeft={x:-300,y:-300},this.canvasBottomRight={x:300,y:300},this.parentEdgeId=null}var o=i(1);s.prototype.resetCluster=function(){this.formationScale=void 0,this.clusterSize=1,this.containedNodes={},this.containedEdges={},this.clusterSessions=[]},s.prototype.attachEdge=function(t){-1==this.edges.indexOf(t)&&this.edges.push(t),-1==this.dynamicEdges.indexOf(t)&&this.dynamicEdges.push(t),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.detachEdge=function(t){var e=this.edges.indexOf(t);-1!=e&&this.edges.splice(e,1),e=this.dynamicEdges.indexOf(t),-1!=e&&this.dynamicEdges.splice(e,1),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.setProperties=function(t,e){if(t){var i=["borderWidth","borderWidthSelected","shape","image","brokenImage","radius","fontColor","fontSize","fontFace","fontFill","group","mass"];if(o.selectiveDeepExtend(i,this.options,t),void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.originalLabel=t.label),void 0!==t.title&&(this.title=t.title),void 0!==t.x&&(this.x=t.x),void 0!==t.y&&(this.y=t.y),void 0!==t.value&&(this.value=t.value),void 0!==t.level&&(this.level=t.level,this.preassignedLevel=!0),void 0!==t.horizontalAlignLeft&&(this.horizontalAlignLeft=t.horizontalAlignLeft),void 0!==t.verticalAlignTop&&(this.verticalAlignTop=t.verticalAlignTop),void 0!==t.triggerFunction&&(this.triggerFunction=t.triggerFunction),void 0===this.id)throw"Node must have an id";if("number"==typeof this.options.group||"string"==typeof this.options.group&&""!=this.options.group){var s=this.grouplist.get(this.options.group);for(var n in s)s.hasOwnProperty(n)&&(this.options[n]=s[n])}if(void 0!==t.radius&&(this.baseRadiusValue=this.options.radius),void 0!==t.color&&(this.options.color=o.parseColor(t.color)),void 0!==this.options.image&&""!=this.options.image){if(!this.imagelist)throw"No imagelist provided";this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage)}switch(void 0!==t.allowedToMoveX?(this.xFixed=!t.allowedToMoveX,this.allowedToMoveX=t.allowedToMoveX):void 0!==t.x&&0==this.allowedToMoveX&&(this.xFixed=!0),void 0!==t.allowedToMoveY?(this.yFixed=!t.allowedToMoveY,this.allowedToMoveY=t.allowedToMoveY):void 0!==t.y&&0==this.allowedToMoveY&&(this.yFixed=!0),this.radiusFixed=this.radiusFixed||void 0!==t.radius,"image"==this.options.shape&&(this.options.radiusMin=e.nodes.widthMin,this.options.radiusMax=e.nodes.widthMax),this.options.shape){case"database":this.draw=this._drawDatabase,this.resize=this._resizeDatabase;break;case"box":this.draw=this._drawBox,this.resize=this._resizeBox;break;case"circle":this.draw=this._drawCircle,this.resize=this._resizeCircle;break;case"ellipse":this.draw=this._drawEllipse,this.resize=this._resizeEllipse;break;case"image":this.draw=this._drawImage,this.resize=this._resizeImage;break;case"text":this.draw=this._drawText,this.resize=this._resizeText;break;case"dot":this.draw=this._drawDot,this.resize=this._resizeShape;break;case"square":this.draw=this._drawSquare,this.resize=this._resizeShape;break;case"triangle":this.draw=this._drawTriangle,this.resize=this._resizeShape;break;case"triangleDown":this.draw=this._drawTriangleDown,this.resize=this._resizeShape;break;case"star":this.draw=this._drawStar,this.resize=this._resizeShape;break;default:this.draw=this._drawEllipse,this.resize=this._resizeEllipse}this._reset()}},s.prototype.select=function(){this.selected=!0,this._reset()},s.prototype.unselect=function(){this.selected=!1,this._reset()},s.prototype.clearSizeCache=function(){this._reset()},s.prototype._reset=function(){this.width=void 0,this.height=void 0},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.distanceToBorder=function(t,e){var i=1;switch(this.width||this.resize(t),this.options.shape){case"circle":case"dot":return this.options.radius+i;case"ellipse":var s=this.width/2,o=this.height/2,n=Math.sin(e)*s,r=Math.cos(e)*o;return s*o/Math.sqrt(n*n+r*r);case"box":case"image":case"text":default:return this.width?Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i:0}},s.prototype._setForce=function(t,e){this.fx=t,this.fy=e},s.prototype._addForce=function(t,e){this.fx+=t,this.fy+=e},s.prototype.discreteStep=function(t){if(this.xFixed)this.fx=0,this.vx=0;else{var e=this.damping*this.vx,i=(this.fx-e)/this.options.mass;this.vx+=i*t,this.x+=this.vx*t}if(this.yFixed)this.fy=0,this.vy=0;else{var s=this.damping*this.vy,o=(this.fy-s)/this.options.mass;this.vy+=o*t,this.y+=this.vy*t}},s.prototype.discreteStepLimited=function(t,e){if(this.xFixed)this.fx=0,this.vx=0;else{var i=this.damping*this.vx,s=(this.fx-i)/this.options.mass;this.vx+=s*t,this.vx=Math.abs(this.vx)>e?this.vx>0?e:-e:this.vx,this.x+=this.vx*t}if(this.yFixed)this.fy=0,this.vy=0;else{var o=this.damping*this.vy,n=(this.fy-o)/this.options.mass;this.vy+=n*t,this.vy=Math.abs(this.vy)>e?this.vy>0?e:-e:this.vy,this.y+=this.vy*t}},s.prototype.isFixed=function(){return this.xFixed&&this.yFixed},s.prototype.isMoving=function(t){var e=Math.sqrt(Math.pow(this.vx,2)+Math.pow(this.vy,2));return e>t},s.prototype.isSelected=function(){return this.selected},s.prototype.getValue=function(){return this.value},s.prototype.getDistance=function(t,e){var i=this.x-t,s=this.y-e;return Math.sqrt(i*i+s*s)},s.prototype.setValueRange=function(t,e){if(!this.radiusFixed&&void 0!==this.value)if(e==t)this.options.radius=(this.options.radiusMin+this.options.radiusMax)/2;else{var i=(this.options.radiusMax-this.options.radiusMin)/(e-t);this.options.radius=(this.value-t)*i+this.options.radiusMin}this.baseRadiusValue=this.options.radius},s.prototype.draw=function(){throw"Draw method not initialized for node"},s.prototype.resize=function(){throw"Resize method not initialized for node"},s.prototype.isOverlappingWith=function(t){return this.leftt.left&&this.topt.top},s.prototype._resizeImage=function(){if(!this.width||!this.height){var t,e;if(this.value){this.options.radius=this.baseRadiusValue;var i=this.imageObj.height/this.imageObj.width;void 0!==i?(t=this.options.radius||this.imageObj.width,e=this.options.radius*i||this.imageObj.height):(t=0,e=0)}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.growthIndicator=0,this.width>0&&this.height>0&&(this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t)}},s.prototype._drawImage=function(t){this._resizeImage(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e;if(0!=this.imageObj.width){if(this.clusterSize>1){var i=this.clusterSize>1?10:0;i*=this.networkScaleInv,i=Math.min(.2*this.width,i),t.globalAlpha=.5,t.drawImage(this.imageObj,this.left-i,this.top-i,this.width+2*i,this.height+2*i)}t.globalAlpha=1,t.drawImage(this.imageObj,this.left,this.top,this.width,this.height),e=this.y+this.height/2}else e=this.y;this._label(t,this.label,this.x,e,void 0,"top")},s.prototype._resizeBox=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawBox=function(t){this._resizeBox(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.roundRect(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth,this.options.radius),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.options.color.background,t.roundRect(this.left,this.top,this.width,this.height,this.options.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeDatabase=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=i.width+2*e;this.width=s,this.height=s,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-s}},s.prototype._drawDatabase=function(t){this._resizeDatabase(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.database(this.x-this.width/2-2*t.lineWidth,this.y-.5*this.height-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.database(this.x-this.width/2,this.y-.5*this.height,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeCircle=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=Math.max(i.width,i.height)+2*e;this.options.radius=s/2,this.width=s,this.height=s,this.options.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.options.radius-.5*s}},s.prototype._drawCircle=function(t){this._resizeCircle(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.circle(this.x,this.y,this.options.radius+2*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.circle(this.x,this.y,this.options.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeEllipse=function(t){if(!this.width){var e=this.getTextSize(t);this.width=1.5*e.width,this.height=2*e.height,this.width1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.ellipse(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.ellipse(this.left,this.top,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._drawDot=function(t){this._drawShape(t,"circle")},s.prototype._drawTriangle=function(t){this._drawShape(t,"triangle")},s.prototype._drawTriangleDown=function(t){this._drawShape(t,"triangleDown")},s.prototype._drawSquare=function(t){this._drawShape(t,"square")},s.prototype._drawStar=function(t){this._drawShape(t,"star")},s.prototype._resizeShape=function(){if(!this.width){this.options.radius=this.baseRadiusValue;var t=2*this.options.radius;this.width=t,this.height=t,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t}},s.prototype._drawShape=function(t,e){this._resizeShape(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var i=2.5,s=this.options.borderWidth,o=this.options.borderWidthSelected||2*this.options.borderWidth,n=2;switch(e){case"dot":n=2;break;case"square":n=2;break;case"triangle":n=3;break;case"triangleDown":n=3;break;case"star":n=4}t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t[e](this.x,this.y,this.options.radius+n*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t[e](this.x,this.y,this.options.radius),t.fill(),t.stroke(),this.label&&this._label(t,this.label,this.x,this.y+this.height/2,void 0,"top",!0)},s.prototype._resizeText=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-(i.width+2*e) -}},s.prototype._drawText=function(t){this._resizeText(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2,this._label(t,this.label,this.x,this.y)},s.prototype._label=function(t,e,i,s,o,n,r){if(e&&Number(this.options.fontSize)*this.networkScale>this.fontDrawThreshold){t.font=(this.selected?"bold ":"")+this.options.fontSize+"px "+this.options.fontFace;var a=e.split("\n"),h=a.length,d=Number(this.options.fontSize)+4,l=s+(1-h)/2*d;1==r&&(l=s+(1-h)/(2*d));for(var c=t.measureText(a[0]).width,p=1;h>p;p++){var u=t.measureText(a[p]).width;c=u>c?u:c}var m=this.options.fontSize*h,f=i-c/2,g=s-m/2;"top"==n&&(g+=.5*d),this.labelDimensions={top:g,left:f,width:c,height:m,yLine:l},void 0!==this.options.fontFill&&null!==this.options.fontFill&&"none"!==this.options.fontFill&&(t.fillStyle=this.options.fontFill,t.fillRect(f,g,c,m)),t.fillStyle=this.options.fontColor||"black",t.textAlign=o||"center",t.textBaseline=n||"middle";for(var p=0;h>p;p++)t.fillText(a[p],i,l),l+=d}},s.prototype.getTextSize=function(t){if(void 0!==this.label){t.font=(this.selected?"bold ":"")+this.options.fontSize+"px "+this.options.fontFace;for(var e=this.label.split("\n"),i=(Number(this.options.fontSize)+4)*e.length,s=0,o=0,n=e.length;n>o;o++)s=Math.max(s,t.measureText(e[o]).width);return{width:s,height:i}}return{width:0,height:0}},s.prototype.inArea=function(){return void 0!==this.width?this.x+this.width*this.networkScaleInv>=this.canvasTopLeft.x&&this.x-this.width*this.networkScaleInv=this.canvasTopLeft.y&&this.y-this.height*this.networkScaleInv=this.canvasTopLeft.x&&this.x=this.canvasTopLeft.y&&this.ys&&(n=s-e-this.padding),no&&(r=o-i-this.padding),ri;i++)if(e.id===r.nodes[i].id){o=r.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=a(o.attr,t.node))),i=n.length-1;i>=0;i--){var h=n[i];h.nodes||(h.nodes=[]),-1==h.nodes.indexOf(o)&&h.nodes.push(o)}e.attr&&(o.attr=a(o.attr,e.attr))}function l(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=a({},t.edge);e.attr=a(i,e.attr)}}function c(t,e,i,s,o){var n={from:e,to:i,type:s};return t.edge&&(n.attr=a({},t.edge)),n.attr=a(n.attr||{},o),n}function p(){for(k=M.NULL,L="";" "==O||" "==O||"\n"==O||"\r"==O;)o();do{var t=!1;if("#"==O){for(var e=T-1;" "==E.charAt(e)||" "==E.charAt(e);)e--;if("\n"==E.charAt(e)||""==E.charAt(e)){for(;""!=O&&"\n"!=O;)o();t=!0}}if("/"==O&&"/"==n()){for(;""!=O&&"\n"!=O;)o();t=!0}if("/"==O&&"*"==n()){for(;""!=O;){if("*"==O&&"/"==n()){o(),o();break}o()}t=!0}for(;" "==O||" "==O||"\n"==O||"\r"==O;)o()}while(t);if(""==O)return void(k=M.DELIMITER);var i=O+n();if(C[i])return k=M.DELIMITER,L=i,o(),void o();if(C[O])return k=M.DELIMITER,L=O,void o();if(r(O)||"-"==O){for(L+=O,o();r(O);)L+=O,o();return"false"==L?L=!1:"true"==L?L=!0:isNaN(Number(L))||(L=Number(L)),void(k=M.IDENTIFIER)}if('"'==O){for(o();""!=O&&('"'!=O||'"'==O&&'"'==n());)L+=O,'"'==O&&o(),o();if('"'!=O)throw x('End of string " expected');return o(),void(k=M.IDENTIFIER)}for(k=M.UNKNOWN;""!=O;)L+=O,o();throw new SyntaxError('Syntax error in part "'+w(L,30)+'"')}function u(){var t={};if(s(),p(),"strict"==L&&(t.strict=!0,p()),("graph"==L||"digraph"==L)&&(t.type=L,p()),k==M.IDENTIFIER&&(t.id=L,p()),"{"!=L)throw x("Angle bracket { expected");if(p(),m(t),"}"!=L)throw x("Angle bracket } expected");if(p(),""!==L)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function m(t){for(;""!==L&&"}"!=L;)f(t),";"==L&&p()}function f(t){var e=g(t);if(e)return void b(t,e);var i=v(t);if(!i){if(k!=M.IDENTIFIER)throw x("Identifier expected");var s=L;if(p(),"="==L){if(p(),k!=M.IDENTIFIER)throw x("Identifier expected");t[s]=L,p()}else y(t,s)}}function g(t){var e=null;if("subgraph"==L&&(e={},e.type="subgraph",p(),k==M.IDENTIFIER&&(e.id=L,p())),"{"==L){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,m(e),"}"!=L)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function v(t){return"node"==L?(p(),t.node=_(),"node"):"edge"==L?(p(),t.edge=_(),"edge"):"graph"==L?(p(),t.graph=_(),"graph"):null}function y(t,e){var i={id:e},s=_();s&&(i.attr=s),d(t,i),b(t,e)}function b(t,e){for(;"->"==L||"--"==L;){var i,s=L;p();var o=g(t);if(o)i=o;else{if(k!=M.IDENTIFIER)throw x("Identifier or subgraph expected");i=L,d(t,{id:i}),p()}var n=_(),r=c(t,e,i,s,n);l(t,r),e=i}}function _(){for(var t=null;"["==L;){for(p(),t={};""!==L&&"]"!=L;){if(k!=M.IDENTIFIER)throw x("Attribute name expected");var e=L;if(p(),"="!=L)throw x("Equal sign = expected");if(p(),k!=M.IDENTIFIER)throw x("Attribute value expected");var i=L;h(t,e,i),p(),","==L&&p()}if("]"!=L)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+w(L,30)+'" (char '+T+")")}function w(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function S(t,e,i){Array.isArray(t)?t.forEach(function(t){Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}):Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}function D(t){var e=i(t),s={nodes:[],edges:[],options:{}};if(e.nodes&&e.nodes.forEach(function(t){var e={id:t.id,label:String(t.label||t.id)};a(e,t.attr),e.image&&(e.shape="image"),s.nodes.push(e)}),e.edges){var o=function(t){var e={from:t.from,to:t.to};return a(e,t.attr),e.style="->"==t.type?"arrow":"line",e};e.edges.forEach(function(t){var e,i;e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges&&t.from.edges.forEach(function(t){var e=o(t);s.edges.push(e)}),S(e,i,function(e,i){var n=c(s,e.id,i.id,t.type,t.attr),r=o(n);s.edges.push(r)}),t.to instanceof Object&&t.to.edges&&t.to.edges.forEach(function(t){var e=o(t);s.edges.push(e)})})}return e.attr&&(s.options=e.attr),s}var M={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},C={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},E="",T=0,O="",L="",k=M.NULL,N=/[a-zA-Z_0-9.:#]/;e.parseDOT=i,e.DOTToGraph=D},function(t,e){function i(t,e){var i=[],s=[];this.options={edges:{inheritColor:!0},nodes:{allowedToMove:!1,parseColor:!1}},void 0!==e&&(this.options.nodes.allowedToMove=e.allowedToMove|!1,this.options.nodes.parseColor=e.parseColor|!1,this.options.edges.inheritColor=e.inheritColor|!0);for(var o=t.edges,n=t.nodes,r=0;r=s&&(s=864e5),e=new Date(e.valueOf()-.05*s),i=new Date(i.valueOf()+.05*s)}return{start:e,end:i}},s.prototype.setWindow=function(t,e,i){var s=i&&void 0!==i.animate?i.animate:!0;if(1==arguments.length){var o=arguments[0];this.range.setRange(o.start,o.end,s)}else this.range.setRange(t,e,s)},s.prototype.moveTo=function(t,e){var i=this.range.end-this.range.start,s=r.convert(t,"Date").valueOf(),o=s-i/2,n=s+i/2,a=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(o,n,a)},s.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},s.prototype.redraw=function(){var t=!1,e=this.options,i=this.props,s=this.dom;if(s){h.updateHiddenDates(this.body,this.options.hiddenDates),"top"==e.orientation?(r.addClassName(s.root,"top"),r.removeClassName(s.root,"bottom")):(r.removeClassName(s.root,"top"),r.addClassName(s.root,"bottom")),s.root.style.maxHeight=r.option.asSize(e.maxHeight,""),s.root.style.minHeight=r.option.asSize(e.minHeight,""),s.root.style.width=r.option.asSize(e.width,""),i.border.left=(s.centerContainer.offsetWidth-s.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(s.centerContainer.offsetHeight-s.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var o=s.root.offsetHeight-s.root.clientHeight,n=s.root.offsetWidth-s.root.clientWidth;0===s.centerContainer.clientHeight&&(i.border.left=i.border.top,i.border.right=i.border.left),0===s.root.clientHeight&&(n=o),i.center.height=s.center.offsetHeight,i.left.height=s.left.offsetHeight,i.right.height=s.right.offsetHeight,i.top.height=s.top.clientHeight||-i.border.top,i.bottom.height=s.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),d=i.top.height+a+i.bottom.height+o+i.border.top+i.border.bottom;s.root.style.height=r.option.asSize(e.height,d+"px"),i.root.height=s.root.offsetHeight,i.background.height=i.root.height-o;var l=i.root.height-i.top.height-i.bottom.height-o;i.centerContainer.height=l,i.leftContainer.height=l,i.rightContainer.height=i.leftContainer.height,i.root.width=s.root.offsetWidth,i.background.width=i.root.width-n,i.left.width=s.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=s.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var c=i.root.width-i.left.width-i.right.width-n;i.center.width=c,i.centerContainer.width=c,i.top.width=c,i.bottom.width=c,s.background.style.height=i.background.height+"px",s.backgroundVertical.style.height=i.background.height+"px",s.backgroundHorizontal.style.height=i.centerContainer.height+"px",s.centerContainer.style.height=i.centerContainer.height+"px",s.leftContainer.style.height=i.leftContainer.height+"px",s.rightContainer.style.height=i.rightContainer.height+"px",s.background.style.width=i.background.width+"px",s.backgroundVertical.style.width=i.centerContainer.width+"px",s.backgroundHorizontal.style.width=i.background.width+"px",s.centerContainer.style.width=i.center.width+"px",s.top.style.width=i.top.width+"px",s.bottom.style.width=i.bottom.width+"px",s.background.style.left="0",s.background.style.top="0",s.backgroundVertical.style.left=i.left.width+i.border.left+"px",s.backgroundVertical.style.top="0",s.backgroundHorizontal.style.left="0",s.backgroundHorizontal.style.top=i.top.height+"px",s.centerContainer.style.left=i.left.width+"px",s.centerContainer.style.top=i.top.height+"px",s.leftContainer.style.left="0",s.leftContainer.style.top=i.top.height+"px",s.rightContainer.style.left=i.left.width+i.center.width+"px",s.rightContainer.style.top=i.top.height+"px",s.top.style.left=i.left.width+"px",s.top.style.top="0",s.bottom.style.left=i.left.width+"px",s.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var p=this.props.scrollTop;"bottom"==e.orientation&&(p+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),s.center.style.left="0",s.center.style.top=p+"px",s.left.style.left="0",s.left.style.top=p+"px",s.right.style.left="0",s.right.style.top=p+"px";var u=0==this.props.scrollTop?"hidden":"",m=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";if(s.shadowTop.style.visibility=u,s.shadowBottom.style.visibility=m,s.shadowTopLeft.style.visibility=u,s.shadowBottomLeft.style.visibility=m,s.shadowTopRight.style.visibility=u,s.shadowBottomRight.style.visibility=m,this.components.forEach(function(e){t=e.redraw()||t}),t){var f=3;this.redrawCount0&&(this.props.scrollTop=0),this.props.scrollTops;s++){var o=s%2===0?1.3*i:.5*i;this.lineTo(t+o*Math.sin(2*s*Math.PI/10),e-o*Math.cos(2*s*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,s,o){var n=Math.PI/180;0>i-2*o&&(o=i/2),0>s-2*o&&(o=s/2),this.beginPath(),this.moveTo(t+o,e),this.lineTo(t+i-o,e),this.arc(t+i-o,e+o,o,270*n,360*n,!1),this.lineTo(t+i,e+s-o),this.arc(t+i-o,e+s-o,o,0,90*n,!1),this.lineTo(t+o,e+s),this.arc(t+o,e+s-o,o,90*n,180*n,!1),this.lineTo(t,e+o),this.arc(t+o,e+o,o,180*n,270*n,!1)},CanvasRenderingContext2D.prototype.ellipse=function(t,e,i,s){var o=.5522848,n=i/2*o,r=s/2*o,a=t+i,h=e+s,d=t+i/2,l=e+s/2;this.beginPath(),this.moveTo(t,l),this.bezierCurveTo(t,l-r,d-n,e,d,e),this.bezierCurveTo(d+n,e,a,l-r,a,l),this.bezierCurveTo(a,l+r,d+n,h,d,h),this.bezierCurveTo(d-n,h,t,l+r,t,l)},CanvasRenderingContext2D.prototype.database=function(t,e,i,s){var o=1/3,n=i,r=s*o,a=.5522848,h=n/2*a,d=r/2*a,l=t+n,c=e+r,p=t+n/2,u=e+r/2,m=e+(s-r/2),f=e+s;this.beginPath(),this.moveTo(l,u),this.bezierCurveTo(l,u+d,p+h,c,p,c),this.bezierCurveTo(p-h,c,t,u+d,t,u),this.bezierCurveTo(t,u-d,p-h,e,p,e),this.bezierCurveTo(p+h,e,l,u-d,l,u),this.lineTo(l,m),this.bezierCurveTo(l,m+d,p+h,f,p,f),this.bezierCurveTo(p-h,f,t,m+d,t,m),this.lineTo(t,u)},CanvasRenderingContext2D.prototype.arrow=function(t,e,i,s){var o=t-s*Math.cos(i),n=e-s*Math.sin(i),r=t-.9*s*Math.cos(i),a=e-.9*s*Math.sin(i),h=o+s/3*Math.cos(i+.5*Math.PI),d=n+s/3*Math.sin(i+.5*Math.PI),l=o+s/3*Math.cos(i-.5*Math.PI),c=n+s/3*Math.sin(i-.5*Math.PI);this.beginPath(),this.moveTo(t,e),this.lineTo(h,d),this.lineTo(r,a),this.lineTo(l,c),this.closePath()},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,s,o){o||(o=[10,5]),0==p&&(p=.001);var n=o.length;this.moveTo(t,e);for(var r=i-t,a=s-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,c=!0;d>=.1;){var p=o[l++%n];p>d&&(p=d);var u=Math.sqrt(p*p/(1+h*h));0>r&&(u=-u),t+=u,e+=h*u,this[c?"lineTo":"moveTo"](t,e),d-=p,c=!c}})},function(t,e,i){function s(t,e){this.groupId=t,this.options=e}var o=i(2),n=i(53);s.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,s=0;st[s].y?t[s].y:e,i=i0){var r,a,h=Number(i.svg.style.height.replace("px",""));if(r=o.getSVGElement("path",i.svgElements,i.svg),r.setAttributeNS(null,"class",e.className),void 0!==e.style&&r.setAttributeNS(null,"style",e.style),a=1==e.options.catmullRom.enabled?s._catmullRom(t,e):s._linear(t),1==e.options.shaded.enabled){var d,l=o.getSVGElement("path",i.svgElements,i.svg);d="top"==e.options.shaded.orientation?"M"+t[0].x+",0 "+a+"L"+t[t.length-1].x+",0":"M"+t[0].x+","+h+" "+a+"L"+t[t.length-1].x+","+h,l.setAttributeNS(null,"class",e.className+" fill"),void 0!==e.options.shaded.style&&l.setAttributeNS(null,"style",e.options.shaded.style),l.setAttributeNS(null,"d",d)}r.setAttributeNS(null,"d","M"+a),1==e.options.drawPoints.enabled&&n.draw(t,e,i)}},s._catmullRomUniform=function(t){for(var e,i,s,o,n,r,a=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",h=1/6,d=t.length,l=0;d-1>l;l++)e=0==l?t[0]:t[l-1],i=t[l],s=t[l+1],o=d>l+2?t[l+2]:s,n={x:(-e.x+6*i.x+s.x)*h,y:(-e.y+6*i.y+s.y)*h},r={x:(i.x+6*s.x-o.x)*h,y:(i.y+6*s.y-o.y)*h},a+="C"+n.x+","+n.y+" "+r.x+","+r.y+" "+s.x+","+s.y+" ";return a},s._catmullRom=function(t,e){var i=e.options.catmullRom.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);for(var s,o,n,r,a,h,d,l,c,p,u,m,f,g,v,y,b,_,x,w=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",S=t.length,D=0;S-1>D;D++)s=0==D?t[0]:t[D-1],o=t[D],n=t[D+1],r=S>D+2?t[D+2]:n,d=Math.sqrt(Math.pow(s.x-o.x,2)+Math.pow(s.y-o.y,2)),l=Math.sqrt(Math.pow(o.x-n.x,2)+Math.pow(o.y-n.y,2)),c=Math.sqrt(Math.pow(n.x-r.x,2)+Math.pow(n.y-r.y,2)),g=Math.pow(c,i),y=Math.pow(c,2*i),v=Math.pow(l,i),b=Math.pow(l,2*i),x=Math.pow(d,i),_=Math.pow(d,2*i),p=2*_+3*x*v+b,u=2*y+3*g*v+b,m=3*x*(x+v),m>0&&(m=1/m),f=3*g*(g+v),f>0&&(f=1/f),a={x:(-b*s.x+p*o.x+_*n.x)*m,y:(-b*s.y+p*o.y+_*n.y)*m},h={x:(y*o.x+u*n.x-b*r.x)*f,y:(y*o.y+u*n.y-b*r.y)*f},0==a.x&&0==a.y&&(a=o),0==h.x&&0==h.y&&(h=n),w+="C"+a.x+","+a.y+" "+h.x+","+h.y+" "+n.x+","+n.y+" ";return w},s._linear=function(t){for(var e="",i=0;it[s].y?t[s].y:e,i=i0&&(n=Math.min(n,Math.abs(c[d-1].x-r))),a=s._getSafeDrawData(n,h,m);else{var g=d+(p[r].amount-p[r].resolved),v=d-(p[r].resolved+1);g0&&(n=Math.min(n,Math.abs(c[v].x-r))),a=s._getSafeDrawData(n,h,m),p[r].resolved+=1,"stack"==h.options.barChart.handleOverlap?(f=p[r].accumulated,p[r].accumulated+=h.zeroPosition-c[d].y):"sideBySide"==h.options.barChart.handleOverlap&&(a.width=a.width/p[r].amount,a.offset+=p[r].resolved*a.width-.5*a.width*(p[r].amount+1),"left"==h.options.barChart.align?a.offset-=.5*a.width:"right"==h.options.barChart.align&&(a.offset+=.5*a.width))}o.drawBar(c[d].x+a.offset,c[d].y-f,a.width,h.zeroPosition-c[d].y,h.className+" bar",i.svgElements,i.svg),1==h.options.drawPoints.enabled&&o.drawPoint(c[d].x+a.offset,c[d].y,h,i.svgElements,i.svg)}},s._getDataIntersections=function(t,e){for(var i,s=0;s0&&(i=Math.min(i,Math.abs(e[s-1].x-e[s].x))),0==i&&(void 0===t[e[s].x]&&(t[e[s].x]={amount:0,resolved:0,accumulated:0}),t[e[s].x].amount+=1)},s._getSafeDrawData=function(t,e,i){var s,o;return t0?(s=i>t?i:t,o=0,"left"==e.options.barChart.align?o-=.5*t:"right"==e.options.barChart.align&&(o+=.5*t)):(s=e.options.barChart.width,o=0,"left"==e.options.barChart.align?o-=.5*e.options.barChart.width:"right"==e.options.barChart.align&&(o+=.5*e.options.barChart.width)),{width:s,offset:o}},s.getStackedBarYRange=function(t,e,i,o,n){if(t.length>0){t.sort(function(t,e){return t.x==e.x?t.groupId-e.groupId:t.x-e.x});var r={};s._getDataIntersections(r,t),e[o]=s._getStackedBarYRange(r,t),e[o].yAxisOrientation=n,i.push(o) -}},s._getStackedBarYRange=function(t,e){for(var i,s=e[0].y,o=e[0].y,n=0;ne[n].y?e[n].y:s,o=ot[r].accumulated?t[r].accumulated:s,o=ot[s].y?t[s].y:e,i=is;++s)i[s].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e){var i,s,o;!function(n,r){s=[],i=r,o="function"==typeof i?i.apply(e,s):i,!(void 0!==o&&(t.exports=o))}(this,function(){function t(t){var e,i=t&&t.preventDefault||!1,s={},o={keydown:{},keyup:{}},n={};for(e=97;122>=e;e++)n[String.fromCharCode(e)]={code:65+(e-97),shift:!1};for(e=65;90>=e;e++)n[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;9>=e;e++)n[""+e]={code:48+e,shift:!1};for(e=1;12>=e;e++)n["F"+e]={code:111+e,shift:!1};for(e=0;9>=e;e++)n["num"+e]={code:96+e,shift:!1};n["num*"]={code:106,shift:!1},n["num+"]={code:107,shift:!1},n["num-"]={code:109,shift:!1},n["num/"]={code:111,shift:!1},n["num."]={code:110,shift:!1},n.left={code:37,shift:!1},n.up={code:38,shift:!1},n.right={code:39,shift:!1},n.down={code:40,shift:!1},n.space={code:32,shift:!1},n.enter={code:13,shift:!1},n.shift={code:16,shift:void 0},n.esc={code:27,shift:!1},n.backspace={code:8,shift:!1},n.tab={code:9,shift:!1},n.ctrl={code:17,shift:!1},n.alt={code:18,shift:!1},n["delete"]={code:46,shift:!1},n.pageup={code:33,shift:!1},n.pagedown={code:34,shift:!1},n["="]={code:187,shift:!1},n["-"]={code:189,shift:!1},n["]"]={code:221,shift:!1},n["["]={code:219,shift:!1};var r=function(t){h(t,"keydown")},a=function(t){h(t,"keyup")},h=function(t,e){if(void 0!==o[e][t.keyCode]){for(var s=o[e][t.keyCode],n=0;n0)for(i in He)s=He[i],o=e[s],"undefined"!=typeof o&&(t[s]=o);return t}function b(t){return 0>t?Math.ceil(t):Math.floor(t)}function _(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&k(t[s])!==k(e[s]))&&r++;return r+n}function T(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=mi[t]||fi[e]||e}return t}function O(t){var e,i,s={};for(i in t)a(t,i)&&(e=T(i),e&&(s[e]=t[i]));return s}function L(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}De[t]=function(s,o){var r,a,h=De._locale[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=De().utc().set(i,t);return h.call(De._locale,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function k(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function N(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function I(t,e,i){return pe(De([t,11,31+e-i]),e,i).week}function A(t){return z(t)?366:365}function z(t){return t%4===0&&t%100!==0||t%400===0}function P(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[Ne]<0||t._a[Ne]>11?Ne:t._a[Ie]<1||t._a[Ie]>N(t._a[ke],t._a[Ne])?Ie:t._a[Ae]<0||t._a[Ae]>24||24===t._a[Ae]&&(0!==t._a[ze]||0!==t._a[Pe]||0!==t._a[Re])?Ae:t._a[ze]<0||t._a[ze]>59?ze:t._a[Pe]<0||t._a[Pe]>59?Pe:t._a[Re]<0||t._a[Re]>999?Re:-1,t._pf._overflowDayOfYear&&(ke>e||e>Ie)&&(e=Ie),t._pf.overflow=e)}function R(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length&&t._pf.bigHour===n)),t._isValid}function F(t){return t?t.toLowerCase().replace("_","-"):t}function H(t){for(var e,i,s,o,n=0;n0;){if(s=Y(o.slice(0,e).join("-")))return s;if(i&&i.length>=e&&E(o,i,!0)>=e-1)break;e--}n++}return null}function Y(t){var e=null;if(!Fe[t]&&Ye)try{e=De.locale(),!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),De.locale(e)}catch(i){}return Fe[t]}function B(t,e){var i,s;return e._isUTC?(i=e.clone(),s=(De.isMoment(t)||C(t)?+t:+De(t))-+i,i._d.setTime(+i._d+s),De.updateOffset(i,!1),i):De(t).local()}function W(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function G(t){var e,i,s=t.match(je);for(e=0,i=s.length;i>e;e++)s[e]=_i[s[e]]?_i[s[e]]:W(s[e]);return function(o){var n="";for(e=0;i>e;e++)n+=s[e]instanceof Function?s[e].call(o,t):s[e];return n}}function j(t,e){return t.isValid()?(e=U(e,t.localeData()),gi[e]||(gi[e]=G(e)),gi[e](t)):t.localeData().invalidDate()}function U(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(Ue.lastIndex=0;s>=0&&Ue.test(t);)t=t.replace(Ue,i),Ue.lastIndex=0,s-=1;return t}function V(t,e){var i,s=e._strict;switch(t){case"Q":return ii;case"DDDD":return oi;case"YYYY":case"GGGG":case"gggg":return s?ni:qe;case"Y":case"G":case"g":return ai;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?ri:Ze;case"S":if(s)return ii;case"SS":if(s)return si;case"SSS":if(s)return oi;case"DDD":return Xe;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Qe;case"a":case"A":return e._locale._meridiemParse;case"x":return ti;case"X":return ei;case"Z":case"ZZ":return $e;case"T":return Je;case"SSSS":return Ke;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?si:Ve;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Ve;case"Do":return s?e._locale._ordinalParse:e._locale._ordinalParseLenient;default:return i=new RegExp(ee(te(t.replace("\\","")),"i"))}}function X(t){t=t||"";var e=t.match($e)||[],i=e[e.length-1]||[],s=(i+"").match(pi)||["-",0,0],o=+(60*s[1])+k(s[2]);return"+"===s[0]?-o:o}function q(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[Ne]=3*(k(e)-1));break;case"M":case"MM":null!=e&&(o[Ne]=k(e)-1);break;case"MMM":case"MMMM":s=i._locale.monthsParse(e,t,i._strict),null!=s?o[Ne]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Ie]=k(e));break;case"Do":null!=e&&(o[Ie]=k(parseInt(e.match(/\d{1,2}/)[0],10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=k(e));break;case"YY":o[ke]=De.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[ke]=k(e);break;case"a":case"A":i._isPm=i._locale.isPM(e);break;case"h":case"hh":i._pf.bigHour=!0;case"H":case"HH":o[Ae]=k(e);break;case"m":case"mm":o[ze]=k(e);break;case"s":case"ss":o[Pe]=k(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Re]=k(1e3*("0."+e));break;case"x":i._d=new Date(k(e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=X(e);break;case"dd":case"ddd":case"dddd":s=i._locale.weekdaysParse(e),null!=s?(i._w=i._w||{},i._w.d=s):i._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(i._w=i._w||{},i._w[t]=k(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=De.parseTwoDigitYear(e)}}function Z(t){var e,i,s,o,n,a,h;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(n=1,a=4,i=r(e.GG,t._a[ke],pe(De(),1,4).year),s=r(e.W,1),o=r(e.E,1)):(n=t._locale._week.dow,a=t._locale._week.doy,i=r(e.gg,t._a[ke],pe(De(),n,a).year),s=r(e.w,1),null!=e.d?(o=e.d,n>o&&++s):o=null!=e.e?e.e+n:n),h=ue(i,s,o,a,n),t._a[ke]=h.year,t._dayOfYear=h.dayOfYear}function K(t){var e,i,s,o,n=[];if(!t._d){for(s=$(t),t._w&&null==t._a[Ie]&&null==t._a[Ne]&&Z(t),t._dayOfYear&&(o=r(t._a[ke],s[ke]),t._dayOfYear>A(o)&&(t._pf._overflowDayOfYear=!0),i=he(o,0,t._dayOfYear),t._a[Ne]=i.getUTCMonth(),t._a[Ie]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=n[e]=s[e];for(;7>e;e++)t._a[e]=n[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[Ae]&&0===t._a[ze]&&0===t._a[Pe]&&0===t._a[Re]&&(t._nextDay=!0,t._a[Ae]=0),t._d=(t._useUTC?he:ae).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm),t._nextDay&&(t._a[Ae]=24)}}function Q(t){var e;t._d||(e=O(t._i),t._a=[e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],K(t))}function $(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function J(t){if(t._f===De.ISO_8601)return void se(t);t._a=[],t._pf.empty=!0;var e,i,s,o,r,a=""+t._i,h=a.length,d=0;for(s=U(t._f,t._locale).match(je)||[],e=0;e0&&t._pf.unusedInput.push(r),a=a.slice(a.indexOf(i)+i.length),d+=i.length),_i[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),q(o,i,t)):t._strict&&!i&&t._pf.unusedTokens.push(o);t._pf.charsLeftOver=h-d,a.length>0&&t._pf.unusedInput.push(a),t._pf.bigHour===!0&&t._a[Ae]<=12&&(t._pf.bigHour=n),t._isPm&&t._a[Ae]<12&&(t._a[Ae]+=12),t._isPm===!1&&12===t._a[Ae]&&(t._a[Ae]=0),K(t),P(t)}function te(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function ee(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ie(t){var e,i,s,o,n;if(0===t._f.length)return t._pf.invalidFormat=!0,void(t._d=new Date(0/0));for(o=0;on)&&(s=n,i=e));v(t,i||e)}function se(t){var e,i,s=t._i,o=hi.exec(s);if(o){for(t._pf.iso=!0,e=0,i=li.length;i>e;e++)if(li[e][1].exec(s)){t._f=li[e][0]+(o[6]||" ");break}for(e=0,i=ci.length;i>e;e++)if(ci[e][1].exec(s)){t._f+=ci[e][0];break}s.match($e)&&(t._f+="Z"),J(t)}else t._isValid=!1}function oe(t){se(t),t._isValid===!1&&(delete t._isValid,De.createFromInputFallback(t))}function ne(t,e){var i,s=[];for(i=0;it&&a.setFullYear(t),a}function he(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function de(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function le(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function ce(t,e,i){var s=De.duration(t).abs(),o=Oe(s.as("s")),n=Oe(s.as("m")),r=Oe(s.as("h")),a=Oe(s.as("d")),h=Oe(s.as("M")),d=Oe(s.as("y")),l=o0,l[4]=i,le.apply({},l)}function pe(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=De(t).add(n,"d"),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function ue(t,e,i,s,o){var n,r,a=he(t,0,1).getUTCDay();return a=0===a?7:a,i=null!=i?i:o,n=o-a+(a>s?7:0)-(o>a?7:0),r=7*(e-1)+(i-o)+n+1,{year:r>0?t:t-1,dayOfYear:r>0?r:A(t-1)+r}}function me(t){var e,i=t._i,s=t._f;return t._locale=t._locale||De.localeData(t._l),null===i||s===n&&""===i?De.invalid({nullInput:!0}):("string"==typeof i&&(t._i=i=t._locale.preparse(i)),De.isMoment(i)?new f(i,!0):(s?M(s)?ie(t):J(t):re(t),e=new f(t),e._nextDay&&(e.add(1,"d"),e._nextDay=n),e))}function fe(t,e){var i,s;if(1===e.length&&M(e[0])&&(e=e[0]),!e.length)return De();for(i=e[0],s=1;s=0?"+":"-";return e+_(Math.abs(t),6)},gg:function(){return _(this.weekYear()%100,2)},gggg:function(){return _(this.weekYear(),4)},ggggg:function(){return _(this.weekYear(),5)},GG:function(){return _(this.isoWeekYear()%100,2)},GGGG:function(){return _(this.isoWeekYear(),4)},GGGGG:function(){return _(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return k(this.milliseconds()/100)},SS:function(){return _(k(this.milliseconds()/10),2)},SSS:function(){return _(this.milliseconds(),3)},SSSS:function(){return _(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+":"+_(k(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+_(k(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},x:function(){return this.valueOf()},X:function(){return this.unix()},Q:function(){return this.quarter()}},xi={},wi=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];yi.length;)Ce=yi.pop(),_i[Ce+"o"]=u(_i[Ce],Ce);for(;bi.length;)Ce=bi.pop(),_i[Ce+Ce]=p(_i[Ce],2);_i.DDDD=p(_i.DDD,3),v(m.prototype,{set:function(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t,e,i){var s,o,n;for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;12>s;s++){if(o=De.utc([2e3,s]),i&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),i||this._monthsParse[s]||(n="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[s]=new RegExp(n.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[s].test(t))return s;if(i&&"MMM"===e&&this._shortMonthsParse[s].test(t))return s;if(!i&&this._monthsParse[s].test(t))return s}},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,i,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(i=De([2e3,1]).day(e),s="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e,i){var s=this._calendar[t];return"function"==typeof s?s.apply(e,[i]):s},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,i,s){var o=this._relativeTime[i];return"function"==typeof o?o(t,e,i,s):o.replace(/%d/i,t)},pastFuture:function(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",_ordinalParse:/\d{1,2}/,preparse:function(t){return t},postformat:function(t){return t},week:function(t){return pe(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),De=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._i=t,o._f=e,o._l=i,o._strict=s,o._isUTC=!1,o._pf=h(),me(o)},De.suppressDeprecationWarnings=!1,De.createFromInputFallback=l("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),De.min=function(){var t=[].slice.call(arguments,0);return fe("isBefore",t)},De.max=function(){var t=[].slice.call(arguments,0);return fe("isAfter",t)},De.utc=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._useUTC=!0,o._isUTC=!0,o._l=i,o._i=t,o._f=e,o._strict=s,o._pf=h(),me(o).utc()},De.unix=function(t){return De(1e3*t)},De.duration=function(t,e){var i,s,o,n,r=t,h=null;return De.isDuration(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(r={},e?r[e]=t:r.milliseconds=t):(h=We.exec(t))?(i="-"===h[1]?-1:1,r={y:0,d:k(h[Ie])*i,h:k(h[Ae])*i,m:k(h[ze])*i,s:k(h[Pe])*i,ms:k(h[Re])*i}):(h=Ge.exec(t))?(i="-"===h[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},r={y:o(h[2]),M:o(h[3]),d:o(h[4]),h:o(h[5]),m:o(h[6]),s:o(h[7]),w:o(h[8])}):"object"==typeof r&&("from"in r||"to"in r)&&(n=w(De(r.from),De(r.to)),r={},r.ms=n.milliseconds,r.M=n.months),s=new g(r),De.isDuration(t)&&a(t,"_locale")&&(s._locale=t._locale),s},De.version=Ee,De.defaultFormat=di,De.ISO_8601=function(){},De.momentProperties=He,De.updateOffset=function(){},De.relativeTimeThreshold=function(t,e){return vi[t]===n?!1:e===n?vi[t]:(vi[t]=e,!0)},De.lang=l("moment.lang is deprecated. Use moment.locale instead.",function(t,e){return De.locale(t,e)}),De.locale=function(t,e){var i;return t&&(i="undefined"!=typeof e?De.defineLocale(t,e):De.localeData(t),i&&(De.duration._locale=De._locale=i)),De._locale._abbr},De.defineLocale=function(t,e){return null!==e?(e.abbr=t,Fe[t]||(Fe[t]=new m),Fe[t].set(e),De.locale(t),Fe[t]):(delete Fe[t],null)},De.langData=l("moment.langData is deprecated. Use moment.localeData instead.",function(t){return De.localeData(t)}),De.localeData=function(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return De._locale;if(!M(t)){if(e=Y(t))return e;t=[t]}return H(t)},De.isMoment=function(t){return t instanceof f||null!=t&&a(t,"_isAMomentObject")},De.isDuration=function(t){return t instanceof g};for(Ce=wi.length-1;Ce>=0;--Ce)L(wi[Ce]);De.normalizeUnits=function(t){return T(t)},De.invalid=function(t){var e=De.utc(0/0);return null!=t?v(e._pf,t):e._pf.userInvalidated=!0,e -},De.parseZone=function(){return De.apply(null,arguments).parseZone()},De.parseTwoDigitYear=function(t){return k(t)+(k(t)>68?1900:2e3)},v(De.fn=f.prototype,{clone:function(){return De(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=De(this).utc();return 00:!1},parsingFlags:function(){return v({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(t){return this.zone(0,t)},local:function(t){return this._isUTC&&(this.zone(0,t),this._isUTC=!1,t&&this.add(this._dateTzOffset(),"m")),this},format:function(t){var e=j(this,t||De.defaultFormat);return this.localeData().postformat(e)},add:S(1,"add"),subtract:S(-1,"subtract"),diff:function(t,e,i){var s,o,n,r=B(t,this),a=6e4*(this.zone()-r.zone());return e=T(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+r.daysInMonth()),o=12*(this.year()-r.year())+(this.month()-r.month()),n=this-De(this).startOf("month")-(r-De(r).startOf("month")),n-=6e4*(this.zone()-De(this).startOf("month").zone()-(r.zone()-De(r).startOf("month").zone())),o+=n/s,"year"===e&&(o/=12)):(s=this-r,o="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-a)/864e5:"week"===e?(s-a)/6048e5:s),i?o:b(o)},from:function(t,e){return De.duration({to:this,from:t}).locale(this.locale()).humanize(!e)},fromNow:function(t){return this.from(De(),t)},calendar:function(t){var e=t||De(),i=B(e,this).startOf("day"),s=this.diff(i,"days",!0),o=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse";return this.format(this.localeData().calendar(o,this,De(e)))},isLeapYear:function(){return z(this.year())},isDST:function(){return this.zone()+t):(i=De.isMoment(t)?+t:+De(t),i<+this.clone().startOf(e))},isBefore:function(t,e){var i;return e=T("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=De.isMoment(t)?t:De(t),+t>+this):(i=De.isMoment(t)?+t:+De(t),+this.clone().endOf(e)t?this:t}),max:l("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=De.apply(null,arguments),t>this?this:t}),zone:function(t,e){var i,s=this._offset||0;return null==t?this._isUTC?s:this._dateTzOffset():("string"==typeof t&&(t=X(t)),Math.abs(t)<16&&(t=60*t),!this._isUTC&&e&&(i=this._dateTzOffset()),this._offset=t,this._isUTC=!0,null!=i&&this.subtract(i,"m"),s!==t&&(!e||this._changeInProgress?D(this,De.duration(s-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,De.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(t){return t=t?De(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return N(this.year(),this.month())},dayOfYear:function(t){var e=Oe((De(this).startOf("day")-De(this).startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=pe(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==t?e:this.add(t-e,"y")},isoWeekYear:function(t){var e=pe(this,1,4).year;return null==t?e:this.add(t-e,"y")},week:function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},isoWeek:function(t){var e=pe(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},weekday:function(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return I(this.year(),1,4)},weeksInYear:function(){var t=this.localeData()._week;return I(this.year(),t.dow,t.doy)},get:function(t){return t=T(t),this[t]()},set:function(t,e){return t=T(t),"function"==typeof this[t]&&this[t](e),this},locale:function(t){var e;return t===n?this._locale._abbr:(e=De.localeData(t),null!=e&&(this._locale=e),this)},lang:l("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return t===n?this.localeData():this.locale(t)}),localeData:function(){return this._locale},_dateTzOffset:function(){return 15*Math.round(this._d.getTimezoneOffset()/15)}}),De.fn.millisecond=De.fn.milliseconds=be("Milliseconds",!1),De.fn.second=De.fn.seconds=be("Seconds",!1),De.fn.minute=De.fn.minutes=be("Minutes",!1),De.fn.hour=De.fn.hours=be("Hours",!0),De.fn.date=be("Date",!0),De.fn.dates=l("dates accessor is deprecated. Use date instead.",be("Date",!0)),De.fn.year=be("FullYear",!0),De.fn.years=l("years accessor is deprecated. Use year instead.",be("FullYear",!0)),De.fn.days=De.fn.day,De.fn.months=De.fn.month,De.fn.weeks=De.fn.week,De.fn.isoWeeks=De.fn.isoWeek,De.fn.quarters=De.fn.quarter,De.fn.toJSON=De.fn.toISOString,v(De.duration.fn=g.prototype,{_bubble:function(){var t,e,i,s=this._milliseconds,o=this._days,n=this._months,r=this._data,a=0;r.milliseconds=s%1e3,t=b(s/1e3),r.seconds=t%60,e=b(t/60),r.minutes=e%60,i=b(e/60),r.hours=i%24,o+=b(i/24),a=b(_e(o)),o-=b(xe(a)),n+=b(o/30),o%=30,a+=b(n/12),n%=12,r.days=o,r.months=n,r.years=a},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return b(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12)},humanize:function(t){var e=ce(this,!t,this.localeData());return t&&(e=this.localeData().pastFuture(+this,e)),this.localeData().postformat(e)},add:function(t,e){var i=De.duration(t,e);return this._milliseconds+=i._milliseconds,this._days+=i._days,this._months+=i._months,this._bubble(),this},subtract:function(t,e){var i=De.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=T(t),this[t.toLowerCase()+"s"]()},as:function(t){var e,i;if(t=T(t),"month"===t||"year"===t)return e=this._days+this._milliseconds/864e5,i=this._months+12*_e(e),"month"===t?i:i/12;switch(e=this._days+Math.round(xe(this._months/12)),t){case"week":return e/7+this._milliseconds/6048e5;case"day":return e+this._milliseconds/864e5;case"hour":return 24*e+this._milliseconds/36e5;case"minute":return 24*e*60+this._milliseconds/6e4;case"second":return 24*e*60*60+this._milliseconds/1e3;case"millisecond":return Math.floor(24*e*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+t)}},lang:De.fn.lang,locale:De.fn.locale,toIsoString:l("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),i=Math.abs(this.days()),s=Math.abs(this.hours()),o=Math.abs(this.minutes()),n=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(i?i+"D":"")+(s||o||n?"T":"")+(s?s+"H":"")+(o?o+"M":"")+(n?n+"S":""):"P0D"},localeData:function(){return this._locale}}),De.duration.fn.toString=De.duration.fn.toISOString;for(Ce in ui)a(ui,Ce)&&we(Ce.toLowerCase());De.duration.fn.asMilliseconds=function(){return this.as("ms")},De.duration.fn.asSeconds=function(){return this.as("s")},De.duration.fn.asMinutes=function(){return this.as("m")},De.duration.fn.asHours=function(){return this.as("h")},De.duration.fn.asDays=function(){return this.as("d")},De.duration.fn.asWeeks=function(){return this.as("weeks")},De.duration.fn.asMonths=function(){return this.as("M")},De.duration.fn.asYears=function(){return this.as("y")},De.locale("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===k(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),Ye?o.exports=De:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(Te.moment=Me),De}.call(e,i,e,o),!(s!==n&&(o.exports=s)),Se(!0))}).call(this)}).call(e,function(){return this}(),i(71)(t))},function(t,e,i){var s;!function(o,n){function r(){a.READY||(w.determineEventTypes(),x.each(a.gestures,function(t){D.register(t)}),w.onTouch(a.DOCUMENT,v,D.detect),w.onTouch(a.DOCUMENT,y,D.detect),a.READY=!0)}var a=function M(t,e){return new M.Instance(t,e||{})};a.VERSION="1.1.3",a.defaults={behavior:{userSelect:"none",touchAction:"pan-y",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},a.DOCUMENT=document,a.HAS_POINTEREVENTS=navigator.pointerEnabled||navigator.msPointerEnabled,a.HAS_TOUCHEVENTS="ontouchstart"in o,a.IS_MOBILE=/mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent),a.NO_MOUSEEVENTS=a.HAS_TOUCHEVENTS&&a.IS_MOBILE||a.HAS_POINTEREVENTS,a.CALCULATE_INTERVAL=25;var h={},d=a.DIRECTION_DOWN="down",l=a.DIRECTION_LEFT="left",c=a.DIRECTION_UP="up",p=a.DIRECTION_RIGHT="right",u=a.POINTER_MOUSE="mouse",m=a.POINTER_TOUCH="touch",f=a.POINTER_PEN="pen",g=a.EVENT_START="start",v=a.EVENT_MOVE="move",y=a.EVENT_END="end",b=a.EVENT_RELEASE="release",_=a.EVENT_TOUCH="touch";a.READY=!1,a.plugins=a.plugins||{},a.gestures=a.gestures||{};var x=a.utils={extend:function(t,e,i){for(var s in e)!e.hasOwnProperty(s)||t[s]!==n&&i||(t[s]=e[s]);return t},on:function(t,e,i){t.addEventListener(e,i,!1)},off:function(t,e,i){t.removeEventListener(e,i,!1)},each:function(t,e,i){var s,o;if("forEach"in t)t.forEach(e,i);else if(t.length!==n){for(s=0,o=t.length;o>s;s++)if(e.call(i,t[s],s,t)===!1)return}else for(s in t)if(t.hasOwnProperty(s)&&e.call(i,t[s],s,t)===!1)return},inStr:function(t,e){return t.indexOf(e)>-1},inArray:function(t,e){if(t.indexOf){var i=t.indexOf(e);return-1===i?!1:i}for(var s=0,o=t.length;o>s;s++)if(t[s]===e)return s;return!1},toArray:function(t){return Array.prototype.slice.call(t,0)},hasParent:function(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1},getCenter:function(t){var e=[],i=[],s=[],o=[],n=Math.min,r=Math.max;return 1===t.length?{pageX:t[0].pageX,pageY:t[0].pageY,clientX:t[0].clientX,clientY:t[0].clientY}:(x.each(t,function(t){e.push(t.pageX),i.push(t.pageY),s.push(t.clientX),o.push(t.clientY)}),{pageX:(n.apply(Math,e)+r.apply(Math,e))/2,pageY:(n.apply(Math,i)+r.apply(Math,i))/2,clientX:(n.apply(Math,s)+r.apply(Math,s))/2,clientY:(n.apply(Math,o)+r.apply(Math,o))/2})},getVelocity:function(t,e,i){return{x:Math.abs(e/t)||0,y:Math.abs(i/t)||0}},getAngle:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return 180*Math.atan2(s,i)/Math.PI},getDirection:function(t,e){var i=Math.abs(t.clientX-e.clientX),s=Math.abs(t.clientY-e.clientY);return i>=s?t.clientX-e.clientX>0?l:p:t.clientY-e.clientY>0?c:d},getDistance:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return Math.sqrt(i*i+s*s)},getScale:function(t,e){return t.length>=2&&e.length>=2?this.getDistance(e[0],e[1])/this.getDistance(t[0],t[1]):1},getRotation:function(t,e){return t.length>=2&&e.length>=2?this.getAngle(e[1],e[0])-this.getAngle(t[1],t[0]):0},isVertical:function(t){return t==c||t==d},setPrefixedCss:function(t,e,i,s){var o=["","Webkit","Moz","O","ms"];e=x.toCamelCase(e);for(var n=0;n0&&this.started&&(r=v),this.started=!0;var d=this.collectEventData(i,r,o,t);return e!=y&&s.call(D,d),a&&(d.changedLength=h,d.eventType=a,s.call(D,d),d.eventType=r,delete d.changedLength),r==y&&(s.call(D,d),this.started=!1),r},determineEventTypes:function(){var t;return t=a.HAS_POINTEREVENTS?o.PointerEvent?["pointerdown","pointermove","pointerup pointercancel lostpointercapture"]:["MSPointerDown","MSPointerMove","MSPointerUp MSPointerCancel MSLostPointerCapture"]:a.NO_MOUSEEVENTS?["touchstart","touchmove","touchend touchcancel"]:["touchstart mousedown","touchmove mousemove","touchend touchcancel mouseup"],h[g]=t[0],h[v]=t[1],h[y]=t[2],h},getTouchList:function(t,e){if(a.HAS_POINTEREVENTS)return S.getTouchList();if(t.touches){if(e==v)return t.touches;var i=[],s=[].concat(x.toArray(t.touches),x.toArray(t.changedTouches)),o=[];return x.each(s,function(t){x.inArray(i,t.identifier)===!1&&o.push(t),i.push(t.identifier)}),o}return t.identifier=1,[t]},collectEventData:function(t,e,i,s){var o=m;return x.inStr(s.type,"mouse")||S.matchType(u,s)?o=u:S.matchType(f,s)&&(o=f),{center:x.getCenter(i),timeStamp:Date.now(),target:s.target,touches:i,eventType:e,pointerType:o,srcEvent:s,preventDefault:function(){var t=this.srcEvent;t.preventManipulation&&t.preventManipulation(),t.preventDefault&&t.preventDefault()},stopPropagation:function(){this.srcEvent.stopPropagation()},stopDetect:function(){return D.stopDetect()}}}},S=a.PointerEvent={pointers:{},getTouchList:function(){var t=[];return x.each(this.pointers,function(e){t.push(e)}),t},updatePointer:function(t,e){t==y||t!=y&&1!==e.buttons?delete this.pointers[e.pointerId]:(e.identifier=e.pointerId,this.pointers[e.pointerId]=e)},matchType:function(t,e){if(!e.pointerType)return!1;var i=e.pointerType,s={};return s[u]=i===(e.MSPOINTER_TYPE_MOUSE||u),s[m]=i===(e.MSPOINTER_TYPE_TOUCH||m),s[f]=i===(e.MSPOINTER_TYPE_PEN||f),s[t]},reset:function(){this.pointers={}}},D=a.detection={gestures:[],current:null,previous:null,stopped:!1,startDetect:function(t,e){this.current||(this.stopped=!1,this.current={inst:t,startEvent:x.extend({},e),lastEvent:!1,lastCalcEvent:!1,futureCalcEvent:!1,lastCalcData:{},name:""},this.detect(e))},detect:function(t){if(this.current&&!this.stopped){t=this.extendEventData(t);var e=this.current.inst,i=e.options;return x.each(this.gestures,function(s){!this.stopped&&e.enabled&&i[s.name]&&s.handler.call(s,t,e)},this),this.current&&(this.current.lastEvent=t),t.eventType==y&&this.stopDetect(),t}},stopDetect:function(){this.previous=x.extend({},this.current),this.current=null,this.stopped=!0},getCalculatedData:function(t,e,i,s,o){var n=this.current,r=!1,h=n.lastCalcEvent,d=n.lastCalcData;h&&t.timeStamp-h.timeStamp>a.CALCULATE_INTERVAL&&(e=h.center,i=t.timeStamp-h.timeStamp,s=t.center.clientX-h.center.clientX,o=t.center.clientY-h.center.clientY,r=!0),(t.eventType==_||t.eventType==b)&&(n.futureCalcEvent=t),(!n.lastCalcEvent||r)&&(d.velocity=x.getVelocity(i,s,o),d.angle=x.getAngle(e,t.center),d.direction=x.getDirection(e,t.center),n.lastCalcEvent=n.futureCalcEvent||t,n.futureCalcEvent=t),t.velocityX=d.velocity.x,t.velocityY=d.velocity.y,t.interimAngle=d.angle,t.interimDirection=d.direction},extendEventData:function(t){var e=this.current,i=e.startEvent,s=e.lastEvent||i;(t.eventType==_||t.eventType==b)&&(i.touches=[],x.each(t.touches,function(t){i.touches.push({clientX:t.clientX,clientY:t.clientY})}));var o=t.timeStamp-i.timeStamp,n=t.center.clientX-i.center.clientX,r=t.center.clientY-i.center.clientY;return this.getCalculatedData(t,s.center,o,n,r),x.extend(t,{startEvent:i,deltaTime:o,deltaX:n,deltaY:r,distance:x.getDistance(i.center,t.center),angle:x.getAngle(i.center,t.center),direction:x.getDirection(i.center,t.center),scale:x.getScale(i.touches,t.touches),rotation:x.getRotation(i.touches,t.touches)}),t},register:function(t){var e=t.defaults||{};return e[t.name]===n&&(e[t.name]=!0),x.extend(a.defaults,e,!0),t.index=t.index||1e3,this.gestures.push(t),this.gestures.sort(function(t,e){return t.indexe.index?1:0}),this.gestures}};a.Instance=function(t,e){var i=this;r(),this.element=t,this.enabled=!0,x.each(e,function(t,i){delete e[i],e[x.toCamelCase(i)]=t}),this.options=x.extend(x.extend({},a.defaults),e||{}),this.options.behavior&&x.toggleBehavior(this.element,this.options.behavior,!0),this.eventStartHandler=w.onTouch(t,g,function(t){i.enabled&&t.eventType==g?D.startDetect(i,t):t.eventType==_&&D.detect(t)}),this.eventHandlers=[]},a.Instance.prototype={on:function(t,e){var i=this;return w.on(i.element,t,e,function(t){i.eventHandlers.push({gesture:t,handler:e})}),i},off:function(t,e){var i=this;return w.off(i.element,t,e,function(t){var s=x.inArray({gesture:t,handler:e});s!==!1&&i.eventHandlers.splice(s,1)}),i},trigger:function(t,e){e||(e={});var i=a.DOCUMENT.createEvent("Event");i.initEvent(t,!0,!0),i.gesture=e;var s=this.element;return x.hasParent(e.target,s)&&(s=e.target),s.dispatchEvent(i),this},enable:function(t){return this.enabled=t,this},dispose:function(){var t,e;for(x.toggleBehavior(this.element,this.options.behavior,!1),t=-1;e=this.eventHandlers[++t];)x.off(this.element,e.gesture,e.handler);return this.eventHandlers=[],w.off(this.element,h[g],this.eventStartHandler),null}},function(t){function e(e,s){var o=D.current;if(!(s.options.dragMaxTouches>0&&e.touches.length>s.options.dragMaxTouches))switch(e.eventType){case g:i=!1;break;case v:if(e.distance0)){var r=Math.abs(s.options.dragMinDistance/e.distance);n.pageX+=e.deltaX*r,n.pageY+=e.deltaY*r,n.clientX+=e.deltaX*r,n.clientY+=e.deltaY*r,e=D.extendEventData(e)}(o.lastEvent.dragLockToAxis||s.options.dragLockToAxis&&s.options.dragLockMinDistance<=e.distance)&&(e.dragLockToAxis=!0);var a=o.lastEvent.direction;e.dragLockToAxis&&a!==e.direction&&(e.direction=x.isVertical(a)?e.deltaY<0?c:d:e.deltaX<0?l:p),i||(s.trigger(t+"start",e),i=!0),s.trigger(t,e),s.trigger(t+e.direction,e);var h=x.isVertical(e.direction);(s.options.dragBlockVertical&&h||s.options.dragBlockHorizontal&&!h)&&e.preventDefault();break;case b:i&&e.changedLength<=s.options.dragMaxTouches&&(s.trigger(t+"end",e),i=!1);break;case y:i=!1}}var i=!1;a.gestures.Drag={name:t,index:50,handler:e,defaults:{dragMinDistance:10,dragDistanceCorrection:!0,dragMaxTouches:1,dragBlockHorizontal:!1,dragBlockVertical:!1,dragLockToAxis:!1,dragLockMinDistance:25}}}("drag"),a.gestures.Gesture={name:"gesture",index:1337,handler:function(t,e){e.trigger(this.name,t)}},function(t){function e(e,s){var o=s.options,n=D.current;switch(e.eventType){case g:clearTimeout(i),n.name=t,i=setTimeout(function(){n&&n.name==t&&s.trigger(t,e)},o.holdTimeout);break;case v:e.distance>o.holdThreshold&&clearTimeout(i);break;case b:clearTimeout(i)}}var i;a.gestures.Hold={name:t,index:10,defaults:{holdTimeout:500,holdThreshold:2},handler:e}}("hold"),a.gestures.Release={name:"release",index:1/0,handler:function(t,e){t.eventType==b&&e.trigger(this.name,t)}},a.gestures.Swipe={name:"swipe",index:40,defaults:{swipeMinTouches:1,swipeMaxTouches:1,swipeVelocityX:.6,swipeVelocityY:.6},handler:function(t,e){if(t.eventType==b){var i=t.touches.length,s=e.options;if(is.swipeMaxTouches)return;(t.velocityX>s.swipeVelocityX||t.velocityY>s.swipeVelocityY)&&(e.trigger(this.name,t),e.trigger(this.name+t.direction,t))}}},function(t){function e(e,s){var o,n,r=s.options,a=D.current,h=D.previous;switch(e.eventType){case g:i=!1;break;case v:i=i||e.distance>r.tapMaxDistance;break;case y:!x.inStr(e.srcEvent.type,"cancel")&&e.deltaTimes.options.transformMinRotation&&s.trigger("rotate",e),o>s.options.transformMinScale&&(s.trigger("pinch",e),s.trigger("pinch"+(e.scale<1?"in":"out"),e));break;case b:i&&e.changedLength<2&&(s.trigger(t+"end",e),i=!1)}}var i=!1;a.gestures.Transform={name:t,index:45,defaults:{transformMinScale:.01,transformMinRotation:1},handler:e}}("transform"),s=function(){return a}.call(e,i,e,t),!(s!==n&&(t.exports=s))}(window)},function(t,e){e.startWithClustering=function(){this.clusterToFit(this.constants.clustering.initialMaxNodes,!0),this.updateLabels(),this.stabilize&&this._stabilize(),this.start()},e.clusterToFit=function(t,e){for(var i=this.nodeIndices.length,s=50,o=0;i>t&&s>o;)o%3==0?(this.forceAggregateHubs(!0),this.normalizeClusterLevels()):this.increaseClusterLevel(),i=this.nodeIndices.length,o+=1;o>0&&1==e&&this.repositionNodes(),this._updateCalculationNodes()},e.openCluster=function(t){var e=this.moving;if(t.clusterSize>this.constants.clustering.sectorThreshold&&this._nodeInActiveArea(t)&&("default"!=this._sector()||1!=this.nodeIndices.length)){this._addSector(t);for(var i=0;this.nodeIndices.lengthi;)this.decreaseClusterLevel(),i+=1}else this._expandClusterNode(t,!1,!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this._updateCalculationNodes(),this.updateLabels();this.moving!=e&&this.start()},e.updateClustersDefault=function(){1==this.constants.clustering.enabled&&this.updateClusters(0,!1,!1)},e.increaseClusterLevel=function(){this.updateClusters(-1,!1,!0)},e.decreaseClusterLevel=function(){this.updateClusters(1,!1,!0)},e.updateClusters=function(t,e,i,s){var o=this.moving,n=this.nodeIndices.length;this.previousScale>this.scale&&0==t&&this._collapseSector(),this.previousScale>this.scale||-1==t?this._formClusters(i):(this.previousScalethis.scale||-1==t)&&(this._aggregateHubs(i),this._updateNodeIndexList()),(this.previousScale>this.scale||-1==t)&&(this.handleChains(),this._updateNodeIndexList()),this.previousScale=this.scale,this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.lengththis.constants.clustering.chainThreshold&&this._reduceAmountOfChains(1-this.constants.clustering.chainThreshold/t)},e._aggregateHubs=function(t){this._getHubSize(),this._formClustersByHub(t,!1)},e.forceAggregateHubs=function(t){var e=this.moving,i=this.nodeIndices.length;this._aggregateHubs(!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.length!=i&&(this.clusterSession+=1),(0==t||void 0===t)&&this.moving!=e&&this.start()},e._openClustersBySize=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];1==e.inView()&&(e.width*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientWidth||e.height*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientHeight)&&this.openCluster(e)}},e._openClusters=function(t,e){for(var i=0;i1&&(t.clusterSizei)){var r=n.from,a=n.to;n.to.options.mass>n.from.options.mass&&(r=n.to,a=n.from),1==a.dynamicEdgesLength?this._addToCluster(r,a,!1):1==r.dynamicEdgesLength&&this._addToCluster(a,r,!1)}}},e._forceClustersByZoom=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];if(1==e.dynamicEdgesLength&&0!=e.dynamicEdges.length){var i=e.dynamicEdges[0],s=i.toId==e.id?this.nodes[i.fromId]:this.nodes[i.toId];e.id!=s.id&&(s.options.mass>e.options.mass?this._addToCluster(s,e,!0):this._addToCluster(e,s,!0))}}},e._clusterToSmallestNeighbour=function(t){for(var e=-1,i=null,s=0;so.clusterSessions.length&&(e=o.clusterSessions.length,i=o)}null!=o&&void 0!==this.nodes[o.id]&&this._addToCluster(o,t,!0)},e._formClustersByHub=function(t,e){for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&this._formClusterFromHub(this.nodes[i],t,e)},e._formClusterFromHub=function(t,e,i,s){if(void 0===s&&(s=0),t.dynamicEdgesLength>=this.hubThreshold&&0==i||t.dynamicEdgesLength==this.hubThreshold&&1==i){for(var o,n,r,a=this.constants.clustering.clusterEdgeThreshold/this.scale,h=!1,d=[],l=t.dynamicEdges.length,c=0;l>c;c++)d.push(t.dynamicEdges[c].id);if(0==e)for(h=!1,c=0;l>c;c++){var p=this.edges[d[c]];if(void 0!==p&&p.connected&&p.toId!=p.fromId&&(o=p.to.x-p.from.x,n=p.to.y-p.from.y,r=Math.sqrt(o*o+n*n),a>r)){h=!0;break}}if(!e&&h||e)for(c=0;l>c;c++)if(p=this.edges[d[c]],void 0!==p){var u=this.nodes[p.fromId==t.id?p.toId:p.fromId];u.dynamicEdges.length<=this.hubThreshold+s&&u.id!=t.id&&this._addToCluster(t,u,e)}}},e._addToCluster=function(t,e,i){t.containedNodes[e.id]=e;for(var s=0;s1)for(var s=0;s1&&(e.label="[".concat(String(e.clusterSize),"]"))}for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(e=this.nodes[t],1==e.clusterSize&&(e.label=void 0!==e.originalLabel?e.originalLabel:String(e.id)))},e.normalizeClusterLevels=function(){var t,e=0,i=1e9,s=0;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(s=this.nodes[t].clusterSessions.length,s>e&&(e=s),i>s&&(i=s));if(e-i>this.constants.clustering.clusterLevelDifference){var o=this.nodeIndices.length,n=e-this.constants.clustering.clusterLevelDifference;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodes[t].clusterSessions.lengths&&(s=n.dynamicEdgesLength),t+=n.dynamicEdgesLength,e+=Math.pow(n.dynamicEdgesLength,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r);this.hubThreshold=Math.floor(t+2*a),this.hubThreshold>s&&(this.hubThreshold=s)},e._reduceAmountOfChains=function(t){this.hubThreshold=2;var e=Math.floor(this.nodeIndices.length*t);for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&e>0&&(this._formClusterFromHub(this.nodes[i],!0,!0,1),e-=1)},e._getChainFraction=function(){var t=0,e=0;for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&(2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&(t+=1),e+=1);return t/e}},function(t,e,i){var s=i(1),o=i(40);e._putDataInSector=function(){this.sectors.active[this._sector()].nodes=this.nodes,this.sectors.active[this._sector()].edges=this.edges,this.sectors.active[this._sector()].nodeIndices=this.nodeIndices},e._switchToSector=function(t,e){void 0===e||"active"==e?this._switchToActiveSector(t):this._switchToFrozenSector(t)},e._switchToActiveSector=function(t){this.nodeIndices=this.sectors.active[t].nodeIndices,this.nodes=this.sectors.active[t].nodes,this.edges=this.sectors.active[t].edges},e._switchToSupportSector=function(){this.nodeIndices=this.sectors.support.nodeIndices,this.nodes=this.sectors.support.nodes,this.edges=this.sectors.support.edges},e._switchToFrozenSector=function(t){this.nodeIndices=this.sectors.frozen[t].nodeIndices,this.nodes=this.sectors.frozen[t].nodes,this.edges=this.sectors.frozen[t].edges},e._loadLatestSector=function(){this._switchToSector(this._sector())},e._sector=function(){return this.activeSector[this.activeSector.length-1]},e._previousSector=function(){if(this.activeSector.length>1)return this.activeSector[this.activeSector.length-2];throw new TypeError("there are not enough sectors in the this.activeSector array.")},e._setActiveSector=function(t){this.activeSector.push(t)},e._forgetLastSector=function(){this.activeSector.pop()},e._createNewSector=function(t){this.sectors.active[t]={nodes:{},edges:{},nodeIndices:[],formationScale:this.scale,drawingNode:void 0},this.sectors.active[t].drawingNode=new o({id:t,color:{background:"#eaefef",border:"495c5e"}},{},{},this.constants),this.sectors.active[t].drawingNode.clusterSize=2},e._deleteActiveSector=function(t){delete this.sectors.active[t]},e._deleteFrozenSector=function(t){delete this.sectors.frozen[t]},e._freezeSector=function(t){this.sectors.frozen[t]=this.sectors.active[t],this._deleteActiveSector(t)},e._activateSector=function(t){this.sectors.active[t]=this.sectors.frozen[t],this._deleteFrozenSector(t)},e._mergeThisWithFrozen=function(t){for(var e in this.nodes)this.nodes.hasOwnProperty(e)&&(this.sectors.frozen[t].nodes[e]=this.nodes[e]);for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.sectors.frozen[t].edges[i]=this.edges[i]);for(var s=0;s1?this[t](o[0],o[1]):this[t](e))}return this._loadLatestSector(),i},e._doInSupportSector=function(t,e){var i=!1;if(void 0===e)this._switchToSupportSector(),i=this[t]();else{this._switchToSupportSector();var s=Array.prototype.splice.call(arguments,1);i=s.length>1?this[t](s[0],s[1]):this[t](e)}return this._loadLatestSector(),i},e._doInAllFrozenSectors=function(t,e){if(void 0===e)for(var i in this.sectors.frozen)this.sectors.frozen.hasOwnProperty(i)&&(this._switchToFrozenSector(i),this[t]());else for(var i in this.sectors.frozen)if(this.sectors.frozen.hasOwnProperty(i)){this._switchToFrozenSector(i);var s=Array.prototype.splice.call(arguments,1);s.length>1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInAllSectors=function(t,e){var i=Array.prototype.splice.call(arguments,1);void 0===e?(this._doInAllActiveSectors(t),this._doInAllFrozenSectors(t)):i.length>1?(this._doInAllActiveSectors(t,i[0],i[1]),this._doInAllFrozenSectors(t,i[0],i[1])):(this._doInAllActiveSectors(t,e),this._doInAllFrozenSectors(t,e))},e._clearNodeIndexList=function(){var t=this._sector();this.sectors.active[t].nodeIndices=[],this.nodeIndices=this.sectors.active[t].nodeIndices},e._drawSectorNodes=function(t,e){var i,s=1e9,o=-1e9,n=1e9,r=-1e9;for(var a in this.sectors[e])if(this.sectors[e].hasOwnProperty(a)&&void 0!==this.sectors[e][a].drawingNode){this._switchToSector(a,e),s=1e9,o=-1e9,n=1e9,r=-1e9;for(var h in this.nodes)this.nodes.hasOwnProperty(h)&&(i=this.nodes[h],i.resize(t),n>i.x-.5*i.width&&(n=i.x-.5*i.width),ri.y-.5*i.height&&(s=i.y-.5*i.height),o0?this.nodes[i[i.length-1]]:null},e._getEdgesOverlappingWith=function(t,e){var i=this.edges;for(var s in i)i.hasOwnProperty(s)&&i[s].isOverlappingWith(t)&&e.push(s)},e._getAllEdgesOverlappingWith=function(t){var e=[];return this._doInAllActiveSectors("_getEdgesOverlappingWith",t,e),e},e._getEdgeAt=function(t){var e=this._pointerToPositionObject(t),i=this._getAllEdgesOverlappingWith(e);return i.length>0?this.edges[i[i.length-1]]:null},e._addToSelection=function(t){t instanceof s?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t},e._addToHover=function(t){t instanceof s?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t},e._removeFromSelection=function(t){t instanceof s?delete this.selectionObj.nodes[t.id]:delete this.selectionObj.edges[t.id]},e._unselectAll=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].unselect();for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&this.selectionObj.edges[i].unselect();this.selectionObj={nodes:{},edges:{}},0==t&&this.emit("select",this.getSelection())},e._unselectClusters=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].clusterSize>1&&(this.selectionObj.nodes[e].unselect(),this._removeFromSelection(this.selectionObj.nodes[e]));0==t&&this.emit("select",this.getSelection())},e._getSelectedNodeCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedNode=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t];return null},e._getSelectedEdge=function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return null},e._getSelectedEdgeCount=function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedObjectCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t},e._selectionIsEmpty=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0},e._clusterInSelection=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1},e._selectConnectedEdges=function(t){for(var e=0;ei;i++){o=t[i];var n=this.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this._selectObject(n,!0,!0,e,!0)}this.redraw()},e.selectEdges=function(t){var e,i,s;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),e=0,i=t.length;i>e;e++){s=t[e];var o=this.edges[s];if(!o)throw new RangeError('Edge with id "'+s+'" not found');this._selectObject(o,!0,!0,!1,!0)}this.redraw()},e._updateSelection=function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},function(t,e,i){var s=i(1),o=i(40),n=i(37);e._clearManipulatorBar=function(){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM={},this._manipulationReleaseOverload=function(){},delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode,this.controlNodesActive=!1},e._restoreOverloadedFunctions=function(){for(var t in this.cachedFunctions)this.cachedFunctions.hasOwnProperty(t)&&(this[t]=this.cachedFunctions[t])},e._toggleEditMode=function(){this.editMode=!this.editMode;var t=this.manipulationDiv,e=this.closeDiv,i=this.editModeDiv;1==this.editMode?(t.style.display="block",e.style.display="block",i.style.display="none",e.onclick=this._toggleEditMode.bind(this)):(t.style.display="none",e.style.display="none",i.style.display="block",e.onclick=null),this._createManipulatorBar()},e._createManipulatorBar=function(){this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];if(void 0!==this.edgeBeingEdited&&(this.edgeBeingEdited._disableControlNodes(),this.edgeBeingEdited=void 0,this.selectedControlNode=null,this.controlNodesActive=!1,this._redraw()),this._restoreOverloadedFunctions(),this.freezeSimulation=!1,this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,this.manipulationDOM={},1==this.editMode){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM.addNodeSpan=document.createElement("span"),this.manipulationDOM.addNodeSpan.className="network-manipulationUI add",this.manipulationDOM.addNodeLabelSpan=document.createElement("span"),this.manipulationDOM.addNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addNodeLabelSpan.innerHTML=t.addNode,this.manipulationDOM.addNodeSpan.appendChild(this.manipulationDOM.addNodeLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.addEdgeSpan=document.createElement("span"),this.manipulationDOM.addEdgeSpan.className="network-manipulationUI connect",this.manipulationDOM.addEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.addEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addEdgeLabelSpan.innerHTML=t.addEdge,this.manipulationDOM.addEdgeSpan.appendChild(this.manipulationDOM.addEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.addNodeSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.addEdgeSpan),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?(this.manipulationDOM.seperatorLineDiv2=document.createElement("div"),this.manipulationDOM.seperatorLineDiv2.className="network-seperatorLine",this.manipulationDOM.editNodeSpan=document.createElement("span"),this.manipulationDOM.editNodeSpan.className="network-manipulationUI edit",this.manipulationDOM.editNodeLabelSpan=document.createElement("span"),this.manipulationDOM.editNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editNodeLabelSpan.innerHTML=t.editNode,this.manipulationDOM.editNodeSpan.appendChild(this.manipulationDOM.editNodeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv2),this.manipulationDiv.appendChild(this.manipulationDOM.editNodeSpan)):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.seperatorLineDiv3=document.createElement("div"),this.manipulationDOM.seperatorLineDiv3.className="network-seperatorLine",this.manipulationDOM.editEdgeSpan=document.createElement("span"),this.manipulationDOM.editEdgeSpan.className="network-manipulationUI edit",this.manipulationDOM.editEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.editEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editEdgeLabelSpan.innerHTML=t.editEdge,this.manipulationDOM.editEdgeSpan.appendChild(this.manipulationDOM.editEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv3),this.manipulationDiv.appendChild(this.manipulationDOM.editEdgeSpan)),0==this._selectionIsEmpty()&&(this.manipulationDOM.seperatorLineDiv4=document.createElement("div"),this.manipulationDOM.seperatorLineDiv4.className="network-seperatorLine",this.manipulationDOM.deleteSpan=document.createElement("span"),this.manipulationDOM.deleteSpan.className="network-manipulationUI delete",this.manipulationDOM.deleteLabelSpan=document.createElement("span"),this.manipulationDOM.deleteLabelSpan.className="network-manipulationLabel",this.manipulationDOM.deleteLabelSpan.innerHTML=t.del,this.manipulationDOM.deleteSpan.appendChild(this.manipulationDOM.deleteLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv4),this.manipulationDiv.appendChild(this.manipulationDOM.deleteSpan)),this.manipulationDOM.addNodeSpan.onclick=this._createAddNodeToolbar.bind(this),this.manipulationDOM.addEdgeSpan.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDOM.editNodeSpan.onclick=this._editNode.bind(this):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.editEdgeSpan.onclick=this._createEditEdgeToolbar.bind(this)),0==this._selectionIsEmpty()&&(this.manipulationDOM.deleteSpan.onclick=this._deleteSelected.bind(this)),this.closeDiv.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{for(;this.editModeDiv.hasChildNodes();)this.editModeDiv.removeChild(this.editModeDiv.firstChild);this.manipulationDOM.editModeSpan=document.createElement("span"),this.manipulationDOM.editModeSpan.className="network-manipulationUI edit editmode",this.manipulationDOM.editModeLabelSpan=document.createElement("span"),this.manipulationDOM.editModeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editModeLabelSpan.innerHTML=t.edit,this.manipulationDOM.editModeSpan.appendChild(this.manipulationDOM.editModeLabelSpan),this.editModeDiv.appendChild(this.manipulationDOM.editModeSpan),this.manipulationDOM.editModeSpan.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.addDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._addNode.bind(this),this.on("select",this.boundFunction)},e._createAddEdgeToolbar=function(){this._clearManipulatorBar(),this._unselectAll(!0),this.freezeSimulation=!0;var t=this.constants.locales[this.constants.locale];this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.edgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._handleConnect.bind(this),this.on("select",this.boundFunction),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleDragEnd=this._handleDragEnd,this._handleTouch=this._handleConnect,this._manipulationReleaseOverload=function(){},this._handleDragStart=function(){},this._handleDragEnd=this._finishConnect,this._redraw()},e._createEditEdgeToolbar=function(){this._clearManipulatorBar(),this.controlNodesActive=!0,this.boundFunction&&this.off("select",this.boundFunction),this.edgeBeingEdited=this._getSelectedEdge(),this.edgeBeingEdited._enableControlNodes();var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.editEdgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleTap=this._handleTap,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleTouch=this._selectControlNode,this._handleTap=function(){},this._handleOnDrag=this._controlNodeDrag,this._handleDragStart=function(){},this._manipulationReleaseOverload=this._releaseControlNode,this._redraw()},e._selectControlNode=function(t){this.edgeBeingEdited.controlNodes.from.unselect(),this.edgeBeingEdited.controlNodes.to.unselect(),this.selectedControlNode=this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(t.x),this._YconvertDOMtoCanvas(t.y)),null!==this.selectedControlNode&&(this.selectedControlNode.select(),this.freezeSimulation=!0),this._redraw()},e._controlNodeDrag=function(t){var e=this._getPointer(t.gesture.center);null!==this.selectedControlNode&&void 0!==this.selectedControlNode&&(this.selectedControlNode.x=this._XconvertDOMtoCanvas(e.x),this.selectedControlNode.y=this._YconvertDOMtoCanvas(e.y)),this._redraw()},e._releaseControlNode=function(t){var e=this._getNodeAt(t);null!==e?(1==this.edgeBeingEdited.controlNodes.from.selected&&(this._editEdge(e.id,this.edgeBeingEdited.to.id),this.edgeBeingEdited.controlNodes.from.unselect()),1==this.edgeBeingEdited.controlNodes.to.selected&&(this._editEdge(this.edgeBeingEdited.from.id,e.id),this.edgeBeingEdited.controlNodes.to.unselect())):this.edgeBeingEdited._restoreControlNodes(),this.freezeSimulation=!1,this._redraw()},e._handleConnect=function(t){if(0==this._getSelectedNodeCount()){var e=this._getNodeAt(t);if(null!=e)if(e.clusterSize>1)alert(this.constants.locales[this.constants.locale].createEdgeError);else{this._selectObject(e,!1);var i=this.sectors.support.nodes;i.targetNode=new o({id:"targetNode"},{},{},this.constants);var s=i.targetNode;s.x=e.x,s.y=e.y,this.edges.connectionEdge=new n({id:"connectionEdge",from:e.id,to:s.id},this,this.constants);var r=this.edges.connectionEdge;r.from=e,r.connected=!0,r.options.smoothCurves={enabled:!0,dynamic:!1,type:"continuous",roundness:.5},r.selected=!0,r.to=s,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center),i=this.edges.connectionEdge;i.to.x=this._XconvertDOMtoCanvas(e.x),i.to.y=this._YconvertDOMtoCanvas(e.y)},this.moving=!0,this.start()}}},e._finishConnect=function(t){if(1==this._getSelectedNodeCount()){var e=this._getPointer(t.gesture.center);this._handleOnDrag=this.cachedFunctions._handleOnDrag,delete this.cachedFunctions._handleOnDrag;var i=this.edges.connectionEdge.fromId;delete this.edges.connectionEdge,delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode;var s=this._getNodeAt(e);null!=s&&(s.clusterSize>1?alert(this.constants.locales[this.constants.locale].createEdgeError):(this._createEdge(i,s.id),this._createManipulatorBar())),this._unselectAll()}},e._addNode=function(){if(this._selectionIsEmpty()&&1==this.editMode){var t=this._pointerToPositionObject(this.pointerPosition),e={id:s.randomUUID(),x:t.left,y:t.top,label:"new",allowedToMoveX:!0,allowedToMoveY:!0};if(this.triggerFunctions.add){if(2!=this.triggerFunctions.add.length)throw new Error("The function for add does not support two arguments (data,callback)");var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else this.nodesData.add(e),this._createManipulatorBar(),this.moving=!0,this.start()}},e._createEdge=function(t,e){if(1==this.editMode){var i={from:t,to:e};if(this.triggerFunctions.connect){if(2!=this.triggerFunctions.connect.length)throw new Error("The function for connect does not support two arguments (data,callback)");var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.start()})}else this.edgesData.add(i),this.moving=!0,this.start()}},e._editEdge=function(t,e){if(1==this.editMode){var i={id:this.edgeBeingEdited.id,from:t,to:e};if(this.triggerFunctions.editEdge){if(2!=this.triggerFunctions.editEdge.length)throw new Error("The function for edit does not support two arguments (data, callback)");var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(!this.triggerFunctions.edit||1!=this.editMode)throw new Error("No edit function has been bound to this button"); -var t=this._getSelectedNode(),e={id:t.id,label:t.label,group:t.options.group,shape:t.options.shape,color:{background:t.options.color.background,border:t.options.color.border,highlight:{background:t.options.color.highlight.background,border:t.options.color.highlight.border}}};if(2!=this.triggerFunctions.edit.length)throw new Error("The function for edit does not support two arguments (data, callback)");var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.locales[this.constants.locale].deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};if(!(this.triggerFunctions.del.length=2))throw new Error("The function for delete does not support two arguments (data, callback)");this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()})}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=(i(1),i(45));e._cleanNavigation=function(){if(0!=this.navigationHammers.existing.length){for(var t=0;t0){"RL"==this.constants.hierarchicalLayout.direction||"DU"==this.constants.hierarchicalLayout.direction?this.constants.hierarchicalLayout.levelSeparation*=-1:this.constants.hierarchicalLayout.levelSeparation=Math.abs(this.constants.hierarchicalLayout.levelSeparation),"RL"==this.constants.hierarchicalLayout.direction||"LR"==this.constants.hierarchicalLayout.direction?1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="vertical"):1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="horizontal");var t,e,i=0,s=!1,o=!1;for(e in this.nodes)this.nodes.hasOwnProperty(e)&&(t=this.nodes[e],-1!=t.level?s=!0:o=!0,is&&(n.xFixed=!1,n.x=i[n.level].minPos,r=!0):n.yFixed&&n.level>s&&(n.yFixed=!1,n.y=i[n.level].minPos,r=!0),1==r&&(i[n.level].minPos+=i[n.level].nodeSpacing,n.edges.length>1&&this._placeBranchNodes(n.edges,n.id,i,n.level))}},e._setLevel=function(t,e,i){for(var s=0;st)&&(o.level=t,o.edges.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._setLevelDirected=function(t,e,i){this.nodes[i].hierarchyEnumerated=!0;for(var s=0;s1&&o.hierarchyEnumerated===!1&&this._setLevelDirected(o.level,o.edges,o.id)}},e._restoreNodes=function(){for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.nodes[t].xFixed=!1,this.nodes[t].yFixed=!1)}},function(t,e,i){function s(){this.constants.smoothCurves.enabled=!this.constants.smoothCurves.enabled;var t=document.getElementById("graph_toggleSmooth");t.style.background=1==this.constants.smoothCurves.enabled?"#A4FF56":"#FF8532",this._configureSmoothCurves(!1)}function o(){for(var t in this.calculationNodes)this.calculationNodes.hasOwnProperty(t)&&(this.calculationNodes[t].vx=0,this.calculationNodes[t].vy=0,this.calculationNodes[t].fx=0,this.calculationNodes[t].fy=0);1==this.constants.hierarchicalLayout.enabled?(this._setupHierarchicalLayout(),a.call(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),a.call(this,"graph_H_cg",1,"physics_centralGravity"),a.call(this,"graph_H_sc",1,"physics_springConstant"),a.call(this,"graph_H_sl",1,"physics_springLength"),a.call(this,"graph_H_damp",1,"physics_damping")):this.repositionNodes(),this.moving=!0,this.start()}function n(){var t="No options are required, default values used.",e=[],i=document.getElementById("graph_physicsMethod1"),s=document.getElementById("graph_physicsMethod2");if(1==i.checked){if(this.constants.physics.barnesHut.gravitationalConstant!=this.backupConstants.physics.barnesHut.gravitationalConstant&&e.push("gravitationalConstant: "+this.constants.physics.barnesHut.gravitationalConstant),this.constants.physics.centralGravity!=this.backupConstants.physics.barnesHut.centralGravity&&e.push("centralGravity: "+this.constants.physics.centralGravity),this.constants.physics.springLength!=this.backupConstants.physics.barnesHut.springLength&&e.push("springLength: "+this.constants.physics.springLength),this.constants.physics.springConstant!=this.backupConstants.physics.barnesHut.springConstant&&e.push("springConstant: "+this.constants.physics.springConstant),this.constants.physics.damping!=this.backupConstants.physics.barnesHut.damping&&e.push("damping: "+this.constants.physics.damping),0!=e.length){t="var options = {",t+="physics: {barnesHut: {";for(var o=0;othis.constants.clustering.clusterThreshold&&1==this.constants.clustering.enabled&&this.clusterToFit(this.constants.clustering.reduceToNodes,!1),this._calculateForces())},e._calculateForces=function(){this._calculateGravitationalForces(),this._calculateNodeForces(),this.constants.physics.springConstant>0&&(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic?this._calculateSpringForcesWithSupport():1==this.constants.physics.hierarchicalRepulsion.enabled?this._calculateHierarchicalSpringForces():this._calculateSpringForces())},e._updateCalculationNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this.calculationNodes={},this.calculationNodeIndices=[];for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.calculationNodes[t]=this.nodes[t]);var e=this.sectors.support.nodes;for(var i in e)e.hasOwnProperty(i)&&(this.edges.hasOwnProperty(e[i].parentEdgeId)?this.calculationNodes[i]=e[i]:e[i]._setForce(0,0));for(var s in this.calculationNodes)this.calculationNodes.hasOwnProperty(s)&&this.calculationNodeIndices.push(s)}else this.calculationNodes=this.nodes,this.calculationNodeIndices=this.nodeIndices},e._calculateGravitationalForces=function(){var t,e,i,s,o,n=this.calculationNodes,r=this.constants.physics.centralGravity,a=0;for(o=0;oSimulation Mode:Barnes HutRepulsionHierarchical
Options:
',this.containerElement.parentElement.insertBefore(this.physicsConfiguration,this.containerElement),this.optionsDiv=document.createElement("div"),this.optionsDiv.style.fontSize="14px",this.optionsDiv.style.fontFamily="verdana",this.containerElement.parentElement.insertBefore(this.optionsDiv,this.containerElement);var e;e=document.getElementById("graph_BH_gc"),e.onchange=a.bind(this,"graph_BH_gc",-1,"physics_barnesHut_gravitationalConstant"),e=document.getElementById("graph_BH_cg"),e.onchange=a.bind(this,"graph_BH_cg",1,"physics_centralGravity"),e=document.getElementById("graph_BH_sc"),e.onchange=a.bind(this,"graph_BH_sc",1,"physics_springConstant"),e=document.getElementById("graph_BH_sl"),e.onchange=a.bind(this,"graph_BH_sl",1,"physics_springLength"),e=document.getElementById("graph_BH_damp"),e.onchange=a.bind(this,"graph_BH_damp",1,"physics_damping"),e=document.getElementById("graph_R_nd"),e.onchange=a.bind(this,"graph_R_nd",1,"physics_repulsion_nodeDistance"),e=document.getElementById("graph_R_cg"),e.onchange=a.bind(this,"graph_R_cg",1,"physics_centralGravity"),e=document.getElementById("graph_R_sc"),e.onchange=a.bind(this,"graph_R_sc",1,"physics_springConstant"),e=document.getElementById("graph_R_sl"),e.onchange=a.bind(this,"graph_R_sl",1,"physics_springLength"),e=document.getElementById("graph_R_damp"),e.onchange=a.bind(this,"graph_R_damp",1,"physics_damping"),e=document.getElementById("graph_H_nd"),e.onchange=a.bind(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),e=document.getElementById("graph_H_cg"),e.onchange=a.bind(this,"graph_H_cg",1,"physics_centralGravity"),e=document.getElementById("graph_H_sc"),e.onchange=a.bind(this,"graph_H_sc",1,"physics_springConstant"),e=document.getElementById("graph_H_sl"),e.onchange=a.bind(this,"graph_H_sl",1,"physics_springLength"),e=document.getElementById("graph_H_damp"),e.onchange=a.bind(this,"graph_H_damp",1,"physics_damping"),e=document.getElementById("graph_H_direction"),e.onchange=a.bind(this,"graph_H_direction",t,"hierarchicalLayout_direction"),e=document.getElementById("graph_H_levsep"),e.onchange=a.bind(this,"graph_H_levsep",1,"hierarchicalLayout_levelSeparation"),e=document.getElementById("graph_H_nspac"),e.onchange=a.bind(this,"graph_H_nspac",1,"hierarchicalLayout_nodeSpacing");var i=document.getElementById("graph_physicsMethod1"),d=document.getElementById("graph_physicsMethod2"),l=document.getElementById("graph_physicsMethod3");d.checked=!0,this.constants.physics.barnesHut.enabled&&(i.checked=!0),this.constants.hierarchicalLayout.enabled&&(l.checked=!0);var c=document.getElementById("graph_toggleSmooth"),p=document.getElementById("graph_repositionNodes"),u=document.getElementById("graph_generateOptions");c.onclick=s.bind(this),p.onclick=o.bind(this),u.onclick=n.bind(this),c.style.background=1==this.constants.smoothCurves&&0==this.constants.dynamicSmoothCurves?"#A4FF56":"#FF8532",r.apply(this),i.onchange=r.bind(this),d.onchange=r.bind(this),l.onchange=r.bind(this)}},e._overWriteGraphConstants=function(t,e){var i=t.split("_");1==i.length?this.constants[i[0]]=e:2==i.length?this.constants[i[0]][i[1]]=e:3==i.length&&(this.constants[i[0]][i[1]][i[2]]=e)}},function(t){function e(t){throw new Error("Cannot find module '"+t+"'.")}e.keys=function(){return[]},e.resolve=e,t.exports=e,e.id=67},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l,c=this.calculationNodes,p=this.calculationNodeIndices,u=-2/3,m=4/3,f=this.constants.physics.repulsion.nodeDistance,g=f;for(d=0;di&&(r=.5*g>i?1:v*i+m,r*=0==n?1:1+n*this.constants.clustering.forceAmplification,r/=i,s=t*r,o=e*r,a.fx-=s,a.fy-=o,h.fx+=s,h.fy+=o)}}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l=this.calculationNodes,c=this.calculationNodeIndices,p=this.constants.physics.hierarchicalRepulsion.nodeDistance;for(h=0;hi?-Math.pow(u*i,2)+Math.pow(u*p,2):0,0==i?i=.01:n/=i,s=t*n,o=e*n,r.fx-=s,r.fy-=o,a.fx+=s,a.fy+=o}},e._calculateHierarchicalSpringForces=function(){for(var t,e,i,s,o,n,r,a,h,d=this.edges,l=this.calculationNodes,c=this.calculationNodeIndices,p=0;pn;n++)t=e[i[n]],t.options.mass>0&&(this._getForceContribution(o.root.children.NW,t),this._getForceContribution(o.root.children.NE,t),this._getForceContribution(o.root.children.SW,t),this._getForceContribution(o.root.children.SE,t))}},e._getForceContribution=function(t,e){if(t.childrenCount>0){var i,s,o;if(i=t.centerOfMass.x-e.x,s=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+s*s),o*t.calcSize>this.constants.physics.barnesHut.theta){0==o&&(o=.1*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}else if(4==t.childrenCount)this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e);else if(t.children.data.id!=e.id){0==o&&(o=.5*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}}},e._formBarnesHutTree=function(t,e){for(var i,s=e.length,o=Number.MAX_VALUE,n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=-Number.MAX_VALUE,h=0;s>h;h++){var d=t[e[h]].x,l=t[e[h]].y;t[e[h]].options.mass>0&&(o>d&&(o=d),d>r&&(r=d),n>l&&(n=l),l>a&&(a=l))}var c=Math.abs(r-o)-Math.abs(a-n);c>0?(n-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var p=1e-5,u=Math.max(p,Math.abs(r-o)),m=.5*u,f=.5*(o+r),g=.5*(n+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:f-m,maxX:f+m,minY:g-m,maxY:g+m},size:u,calcSize:1/u,children:{data:null},maxWidth:0,level:0,childrenCount:4}};for(this._splitBranch(v.root),h=0;s>h;h++)i=t[e[h]],i.options.mass>0&&this._placeInTree(v.root,i);this.barnesHutTree=v},e._updateBranchMass=function(t,e){var i=t.mass+e.options.mass,s=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.options.mass,t.centerOfMass.x*=s,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.options.mass,t.centerOfMass.y*=s,t.mass=i;var o=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NW"):this._placeInRegion(t,e,"SW"):t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NE"):this._placeInRegion(t,e,"SE")},e._placeInRegion=function(t,e,i){switch(t.children[i].childrenCount){case 0:t.children[i].children.data=e,t.children[i].childrenCount=1,this._updateBranchMass(t.children[i],e);break;case 1:t.children[i].children.data.x==e.x&&t.children[i].children.data.y==e.y?(e.x+=Math.random(),e.y+=Math.random()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}},e._splitBranch=function(t){var e=null;1==t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)},e._insertRegion=function(t,e){var i,s,o,n,r=.5*t.size;switch(e){case"NW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:s,minY:o,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}},e._drawTree=function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))},e._drawBranch=function(t,e,i){void 0===i&&(i="#FF0000"),4==t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}}])}); -//# sourceMappingURL=vis.map diff --git a/docs/css/prettify.css b/docs/css/prettify.css deleted file mode 100644 index 3c7acd2e..00000000 --- a/docs/css/prettify.css +++ /dev/null @@ -1,87 +0,0 @@ -.com { - color: gray; -} - -.lit { - color: red; -} - -.pun { - color: gray; -} - -.pln { - color: #333333; -} - -pre.prettyprint { - border: 1px solid lightgray; - background-color: #fcfcfc; - padding: 5px; - - font-size: 10pt; - line-height: 1.5em; - font-family: monospace; -} - -ol.linenums { - margin-top:0; - margin-bottom:0; -} - -li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { - list-style:none; -} - -li.L1,li.L3,li.L5,li.L7,li.L9 { - background:#eee; -} - -.str,.atv { - color: green; -} - -.kwd,.tag { - color:#2B7CE9; -} - -.typ,.atn,.dec { - color: darkorange; -} - -@media print { - .com { - color:#600; - font-style:italic; - } - - .typ { - color:#404; - font-weight:700; - } - - .lit { - color:#044; - } - - .pun { - color:#440; - } - - .pln { - color:#000; - } - - .atn { - color:#404; - } - - .str,.atv { - color:#060; - } - - .kwd,.tag { - color:#006; - font-weight:700; - } -} \ No newline at end of file diff --git a/docs/css/style.css b/docs/css/style.css deleted file mode 100644 index 18916927..00000000 --- a/docs/css/style.css +++ /dev/null @@ -1,82 +0,0 @@ -html, body { - width: 100%; - height: 100%; - padding: 0; - margin: 0; -} - -body, td, th { - font-family: arial, sans-serif; - font-size: 11pt; - color: #4D4D4D; - line-height: 1.7em; -} - -#container { - position: relative; - margin: 0 auto; - padding: 10px 10px 50px 10px; - width: 700px; - max-width: 100%; - box-sizing: border-box; -} - -h1 { - font-size: 180%; - font-weight: bold; - padding: 0; - margin: 1em 0 1em 0; -} - -h2 { - padding-top: 20px; - padding-bottom: 10px; - border-bottom: 1px solid #a0c0f0; - color: #2B7CE9; -} - -h3 { - font-size: 140%; -} - -a > img { - border: none; -} - -a { - color: #2B7CE9; - text-decoration: none; -} - -a:visited { - color: #2E60A4; -} - -a:hover { - color: red; - text-decoration: underline; -} - -table { - border-collapse: collapse; -} - -th { - font-weight: bold; - border: 1px solid lightgray; - background-color: #E5E5E5; - text-align: left; - vertical-align: top; - padding: 5px; -} - -td { - border: 1px solid lightgray; - padding: 5px; - vertical-align: top; -} - -p.important_note { - color: #3a6baa; - font-weight:bold; -} \ No newline at end of file diff --git a/docs/dataset.html b/docs/dataset.html deleted file mode 100644 index d6c2bf81..00000000 --- a/docs/dataset.html +++ /dev/null @@ -1,931 +0,0 @@ - - - - - vis.js | DataSet documentation - - - - - - - - -
- -

DataSet documentation

- -

Contents

- - - -

Overview

- -

- Vis.js comes with a flexible DataSet, which can be used to hold and - manipulate unstructured data and listen for changes in the data. - The DataSet is key/value based. Data items can be added, updated and - removed from the DatSet, and one can subscribe to changes in the DataSet. - The data in the DataSet can be filtered and ordered, and fields (like - dates) can be converted to a specific type. Data can be normalized when - appending it to the DataSet as well. -

- - -

Example

- -

- The following example shows how to use a DataSet. -

- -
-// create a DataSet
-var options = {};
-var data = new vis.DataSet(options);
-
-// add items
-// note that the data items can contain different properties and data formats
-data.add([
-  {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},
-  {id: 2, text: 'item 2', date: '2013-06-23', group: 2},
-  {id: 3, text: 'item 3', date: '2013-06-25', group: 2},
-  {id: 4, text: 'item 4'}
-]);
-
-// subscribe to any change in the DataSet
-data.on('*', function (event, properties, senderId) {
-  console.log('event', event, properties);
-});
-
-// update an existing item
-data.update({id: 2, group: 1});
-
-// remove an item
-data.remove(4);
-
-// get all ids
-var ids = data.getIds();
-console.log('ids', ids);
-
-// get a specific item
-var item1 = data.get(1);
-console.log('item1', item1);
-
-// retrieve a filtered subset of the data
-var items = data.get({
-  filter: function (item) {
-    return item.group == 1;
-  }
-});
-console.log('filtered items', items);
-
-// retrieve formatted items
-var items = data.get({
-  fields: ['id', 'date'],
-  type: {
-    date: 'ISODate'
-  }
-});
-console.log('formatted items', items);
-
- - - -

Construction

- -

- A DataSet can be constructed as: -

- -
-var data = new vis.DataSet([data] [, options])
-
- -

- After construction, data can be added to the DataSet using the methods - add and update, as described in section - Data Manipulation. -

- -

- The parameter data is optional and can be an Array or - Google DataTable with items. -

- -

- The parameter options is optional and is an object which can - contain the following properties: -

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefault valueDescription
fieldIdString"id" - The name of the field containing the id of the items. - - When data is fetched from a server which uses some specific - field to identify items, this field name can be specified - in the DataSet using the option fieldId. - For example CouchDB uses the field - "_id" to identify documents. -
typeObject.<String, String>none - An object containing field names as key, and data types as - value. By default, the type of the properties of items are left - unchanged. Item properties can be normalized by specifying a - field type. This is useful for example to automatically convert - stringified dates coming from a server into JavaScript Date - objects. The available data types are listed in section - Data Types. -
queueObject | booleannone - Queue data changes ('add', 'update', 'remove') and flush them at once. - The queue can be flushed manually by calling - DataSet.flush(), or can be flushed after a configured delay - or maximum number of entries. -
-
- When queue is true, a queue is created - with default options. Options can be specified by providing an object: -
    -
  • delay: number
    - The queue will be flushed automatically after an inactivity of this - delay in milliseconds. Default value is null. -
  • max: number
    - When the queue exceeds the given maximum number - of entries, the queue is flushed automatically. - Default value is Infinity. -
  • -
-
- - -

Methods

- -

DataSet contains the following methods.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MethodReturn TypeDescription
add(data [, senderId])Number[]Add one or multiple items to the DataSet. data can be a single item or an array with items. Adding an item will fail when there already is an item with the same id. The function returns an array with the ids of the added items. See section Data Manipulation.
clear([senderId])Number[]Clear all data from the DataSet. The function returns an array with the ids of the removed items.
distinct(field)ArrayFind all distinct values of a specified field. Returns an unordered array containing all distinct values. If data items do not contain the specified field are ignored.
flush()noneFlush queued changes. Only available when the DataSet is configured with the option queue, see section Construction.
forEach(callback [, options])none - Execute a callback function for every item in the dataset. - The available options are described in section Data Selection. -
- get([options] [, data])
- get(id [,options] [, data])
- get(ids [, options] [, data]) -
Object | Array | DataTable - Get a single item, multiple items, or all items from the DataSet. - Usage examples can be found in section Getting Data, and the available options are described in section Data Selection. If parameter data is provided, items will be appended to this array or table, which is required in case of Google DataTable. -
- getDataSet() - DataSet - Get the DataSet itself. In case of a DataView, this function does not - return the DataSet to which the DataView is connected. -
- getIds([options]) - Number[] - Get ids of all items or of a filtered set of items. - Available options are described in section Data Selection, except that options fields and type are not applicable in case of getIds. -
map(callback [, options])Array - Map every item in the DataSet. - The available options are described in section Data Selection. -
max(field)Object | null - Find the item with maximum value of specified field. Returns null if no item is found. -
min(field)Object | null - Find the item with minimum value of specified field. Returns null if no item is found. -
off(event, callback)none - Unsubscribe from an event, remove an event listener. See section Subscriptions. -
on(event, callback)none - Subscribe to an event, add an event listener. See section Subscriptions. -
- remove(id [, senderId])
- remove(ids [, senderId]) -
Number[] - Remove one or multiple items by id or by the items themselves. Returns an array with the ids of the removed items. See section Data Manipulation. -
- setOptions(options) - none - Set options for the DataSet. Available options: - -
    -
  • - queue
    - Queue data changes ('add', 'update', 'remove') and flush them at once. - The queue can be flushed manually by calling - DataSet.flush(), or can be flushed after a configured delay - or maximum number of entries. -
    -
    - When queue is true, a queue is created with default options. - When queue is false, an existing queue will be flushed and removed. - Options can be specified by providing an object: -
      -
    • delay: number
      - The queue will be flushed automatically after an inactivity of this - delay in milliseconds. Default value is null. -
    • max: number
      - When the queue exceeds the given maximum number - of entries, the queue is flushed automatically. - Default value is Infinity. -
    • -
    -
  • -
-
- update(data [, senderId]) - Number[] - Update on ore multiple existing items. data can be a single item or an array with items. When an item doesn't exist, it will be created. Returns an array with the ids of the removed items. See section Data Manipulation. -
- - -

Subscriptions

- -

- One can subscribe on changes in a DataSet. - A subscription can be created using the method on, - and removed with off. -

- -
-// create a DataSet
-var data = new vis.DataSet();
-
-// subscribe to any change in the DataSet
-data.on('*', function (event, properties, senderId) {
-  console.log('event:', event, 'properties:', properties, 'senderId:', senderId);
-});
-
-// add an item
-data.add({id: 1, text: 'item 1'});              // triggers an 'add' event
-data.update({id: 1, text: 'item 1 (updated)'}); // triggers an 'update' event
-data.remove(1);                                 // triggers an 'remove' event
-
- - -

On

- -

- Subscribe to an event. -

- -Syntax: -
DataSet.on(event, callback)
- -Where: -
    -
  • - event is a String containing any of the events listed - in section Events. -
  • -
  • - callback is a callback function which will be called - each time the event occurs. The callback function is described in - section Callback. -
  • -
- -

Off

- -

- Unsubscribe from an event. -

- -Syntax: -
DataSet.off(event, callback)
- -Where event and callback correspond with the -parameters used to subscribe to the event. - -

Events

- -

- The following events are available for subscription: -

- - - - - - - - - - - - - - - - - - - - - - -
EventDescription
add - The add event is triggered when an item - or a set of items is added, or when an item is updated while - not yet existing. -
update - The update event is triggered when an existing item - or a set of existing items is updated. -
remove - The remove event is triggered when an item - or a set of items is removed. -
* - The * event is triggered when any of the events - add, update, and remove - occurs. -
- -

Callback

- -

- The callback functions of subscribers are called with the following - parameters: -

- -
-function (event, properties, senderId) {
-  // handle the event
-});
-
- -

- where the parameters are defined as -

- - - - - - - - - - - - - - - - - - - - - - -
ParameterTypeDescription
eventString - Any of the available events: add, - update, or remove. -
propertiesObject | null - Optional properties providing more information on the event. - In case of the events add, - update, and remove, - properties is always an object containing a property - items, which contains an array with the ids of the affected - items. The update event has an extra field data - containing the original data of the updated items, i.e. the gives the - changed fields of the changed items. -
senderIdString | Number - An senderId, optionally provided by the application code - which triggered the event. If senderId is not provided, the - argument will be null. -
- - -

Data Manipulation

- -

- The data in a DataSet can be manipulated using the methods - add, - update, - and remove. - The DataSet can be emptied using the method - clear. -

- -
-// create a DataSet
-var data = new vis.DataSet();
-
-// add items
-data.add([
-  {id: 1, text: 'item 1'},
-  {id: 2, text: 'item 2'},
-  {id: 3, text: 'item 3'}
-]);
-
-// update an item
-data.update({id: 2, text: 'item 2 (updated)'});
-
-// remove an item
-data.remove(3);
-
- -

Add

- -

- Add a data item or an array with items. -

- -Syntax: -
var addedIds = DataSet.add(data [, senderId])
- -The argument data can contain: -
    -
  • - An Object containing a single item to be - added. The item must contain an id. -
  • -
  • - An Array or - google.visualization.DataTable containing - a list with items to be added. Each item must contain - an id. -
  • -
- -

- After the items are added to the DataSet, the DataSet will - trigger an event add. When a senderId - is provided, this id will be passed with the triggered - event to all subscribers. -

- -

- The method will throw an Error when an item with the same id - as any of the added items already exists. -

- -

Update

- -

- Update a data item or an array with items. -

- -Syntax: -
var updatedIds = DataSet.update(data [, senderId])
- -The argument data can contain: -
    -
  • - An Object containing a single item to be - updated. The item must contain an id. -
  • -
  • - An Array or - google.visualization.DataTable containing - a list with items to be updated. Each item must contain - an id. -
  • -
- -

- The provided properties will be merged in the existing item. - When an item does not exist, it will be created. -

- -

- After the items are updated, the DataSet will - trigger an event add for the added items, and - an event update. When a senderId - is provided, this id will be passed with the triggered - event to all subscribers. -

- -

Remove

- -

- Remove a data item or an array with items. -

- -Syntax: -
var removedIds = DataSet.remove(id [, senderId])
- -

- The argument id can be: -

-
    -
  • - A Number or String containing the id - of a single item to be removed. -
  • -
  • - An Object containing the item to be deleted. - The item will be deleted by its id. -
  • -
  • - An Array containing ids or items to be removed. -
  • -
- -

- The method ignores removal of non-existing items, and returns an array - containing the ids of the items which are actually removed from the - DataSet. -

- -

- After the items are removed, the DataSet will - trigger an event remove for the removed items. - When a senderId is provided, this id will be passed with - the triggered event to all subscribers. -

- - -

Clear

- -

- Clear the complete DataSet. -

- -Syntax: -
var removedIds = DataSet.clear([senderId])
- -

- After the items are removed, the DataSet will - trigger an event remove for all removed items. - When a senderId is provided, this id will be passed with - the triggered event to all subscribers. -

- - -

Data Selection

- -

- The DataSet contains functionality to format, filter, and sort data retrieved via the - methods get, getIds, forEach, and map. These methods have the following syntax: -

- -
-DataSet.get([id] [, options] [, data]);
-DataSet.getIds([options]);
-DataSet.forEach(callback [, options]);
-DataSet.map(callback [, options]);
-
- -

- Where options is an Object which can have the following - properties: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
fieldsString[ ] - An array with field names. - By default, all properties of the items are emitted. - When fields is defined, only the properties - whose name is specified in fields will be included - in the returned items. -
typeObject.<String, String> - An object containing field names as key, and data types as value. - By default, the type of the properties of an item are left - unchanged. When a field type is specified, this field in the - items will be converted to the specified type. This can be used - for example to convert ISO strings containing a date to a - JavaScript Date object, or convert strings to numbers or vice - versa. The available data types are listed in section - Data Types. -
filterFunctionItems can be filtered on specific properties by providing a filter - function. A filter function is executed for each of the items in the - DataSet, and is called with the item as parameter. The function must - return a boolean. All items for which the filter function returns - true will be emitted. - See section Data Filtering.
orderString | FunctionOrder the items by a field name or custom sort function.
returnTypeStringDetermine the type of output of the get function. Allowed values are Array | Object | DataTable. - The DataTable refers to a Google DataTable. The default returnType is an array. The object type will return a JSON object with the ID's as keys.
- -

- The following example demonstrates formatting properties and filtering - properties from items. -

- -
-// create a DataSet
-var data = new vis.DataSet();
-data.add([
-  {id: 1, text: 'item 1', date: '2013-06-20', group: 1, first: true},
-  {id: 2, text: 'item 2', date: '2013-06-23', group: 2},
-  {id: 3, text: 'item 3', date: '2013-06-25', group: 2},
-  {id: 4, text: 'item 4'}
-]);
-
-// retrieve formatted items
-var items = data.get({
-  fields: ['id', 'date', 'group'],    // output the specified fields only
-  type: {
-    date: 'Date',                   // convert the date fields to Date objects
-    group: 'String'                 // convert the group fields to Strings
-  }
-});
-
- -

Getting Data

- -

- Data can be retrieved from the DataSet using the method get. - This method can return a single item or a list with items. -

- -

A single item can be retrieved by its id:

- -
-var item1 = dataset.get(1);
-
- -

A selection of items can be retrieved by providing an array with ids:

- -
-var items = dataset.get([1, 3, 4]); // retrieve items 1, 3, and 4
-
- -

All items can be retrieved by simply calling get without - specifying an id:

- -
-var items = dataset.get();          // retrieve all items
-
- - -

Data Filtering

- -

- Items can be filtered on specific properties by providing a filter - function. A filter function is executed for each of the items in the - DataSet, and is called with the item as parameter. The function must - return a boolean. All items for which the filter function returns - true will be emitted. -

- -
-// retrieve all items having a property group with value 2
-var group2 = dataset.get({
-  filter: function (item) {
-    return (item.group == 2);
-  }
-});
-
-// retrieve all items having a property balance with a value above zero
-var positiveBalance = dataset.get({
-  filter: function (item) {
-    return (item.balance > 0);
-  }
-});
-
-
- - -

Data Types

- -

- DataSet supports the following data types: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionExamples
BooleanA JavaScript Boolean - true
- false -
NumberA JavaScript Number - 32
- 2.4 -
StringA JavaScript String - "hello world"
- "2013-06-28" -
DateA JavaScript Date object - new Date()
- new Date(2013, 5, 28)
- new Date(1372370400000) -
MomentA Moment object, created with - moment.js - moment()
- moment('2013-06-28') -
ISODateA string containing an ISO Date - new Date().toISOString()
- "2013-06-27T22:00:00.000Z" -
ASPDateA string containing an ASP Date - "/Date(1372370400000)/"
- "/Date(1198908717056-0700)/" -
- - -

Data Policy

-

- All code and data is processed and rendered in the browser. - No data is sent to any server. -

- -
- - diff --git a/docs/dataview.html b/docs/dataview.html deleted file mode 100644 index 3046391f..00000000 --- a/docs/dataview.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - vis.js | DataView documentation - - - - - - - - -
- -

DataView documentation

- -

Contents

- - - -

Overview

- -

- A DataView offers a filtered and/or formatted view on a - DataSet. - One can subscribe on changes in a DataView, and easily get filtered or - formatted data without having to specify filters and field types all - the time. -

- -

Example

- -

- The following example shows how to use a DataView. -

- -
-// create a DataSet
-var data = new vis.DataSet();
-data.add([
-  {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},
-  {id: 2, text: 'item 2', date: '2013-06-23', group: 2},
-  {id: 3, text: 'item 3', date: '2013-06-25', group: 2},
-  {id: 4, text: 'item 4'}
-]);
-
-// create a DataView
-// the view will only contain items having a property group with value 1,
-// and will only output fields id, text, and date.
-var view = new vis.DataView(data, {
-  filter: function (item) {
-    return (item.group == 1);
-  },
-  fields: ['id', 'text', 'date']
-});
-
-// subscribe to any change in the DataView
-view.on('*', function (event, properties, senderId) {
-  console.log('event', event, properties);
-});
-
-// update an item in the data set
-data.update({id: 2, group: 1});
-
-// get all ids in the view
-var ids = view.getIds();
-console.log('ids', ids); // will output [1, 2]
-
-// get all items in the view
-var items = view.get();
-
- -

Construction

- - -

- A DataView can be constructed as: -

- -
-var data = new vis.DataView(dataset, options)
-
- -

- where: -

- -
    -
  • - dataset is a DataSet or DataView. -
  • -
  • - options is an object which can - contain the following properties. Note that these properties - are exactly the same as the properties available in methods - DataSet.get and DataView.get. - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameTypeDescription
    convertObject.<String, String> - An object containing field names as key, and data types as value. - By default, the type of the properties of an item are left - unchanged. When a field type is specified, this field in the - items will be converted to the specified type. This can be used - for example to convert ISO strings containing a date to a - JavaScript Date object, or convert strings to numbers or vice - versa. The available data types are listed in section - Data Types. -
    fieldsString[ ] - An array with field names. - By default, all properties of the items are emitted. - When fields is defined, only the properties - whose name is specified in fields will be included - in the returned items. -
    filterfunctionItems can be filtered on specific properties by providing a filter - function. A filter function is executed for each of the items in the - DataSet, and is called with the item as parameter. The function must - return a boolean. All items for which the filter function returns - true will be emitted. - See also section Data Filtering.
    -
  • -
- -

Getting Data

- -

- Data of the DataView can be retrieved using the method get. -

- -
-var items = view.get();
-
- -

- Data of a DataView can be filtered and formatted again, in exactly the - same way as in a DataSet. See sections - Data Filtering and - Data Formatting for more - information. -

- -
-var items = view.get({
-  fields: ['id', 'score'],
-  filter: function (item) {
-    return (item.score > 50);
-  }
-});
-
- - - -

Subscriptions

-

- One can subscribe on changes in the DataView. Subscription works exactly - the same as for DataSets. See the documentation on - subscriptions in a DataSet - for more information. -

- -
-// create a DataSet and a view on the data set
-var data = new vis.DataSet();
-var view = new vis.DataView({
-  filter: function (item) {
-    return (item.group == 2);
-  }
-});
-
-// subscribe to any change in the DataView
-view.on('*', function (event, properties, senderId) {
-  console.log('event:', event, 'properties:', properties, 'senderId:', senderId);
-});
-
-// add, update, and remove data in the DataSet...
-
- - - -

Data Policy

-

- All code and data is processed and rendered in the browser. - No data is sent to any server. -

- -
- - \ No newline at end of file diff --git a/docs/graph.html b/docs/graph.html deleted file mode 100644 index 23d49b6a..00000000 --- a/docs/graph.html +++ /dev/null @@ -1,2324 +0,0 @@ - - - - - vis.js | graph documentation - - - - - - - - -
- -

Graph documentation

- -

Overview

-

- Graph is a visualization to display graphs and networks consisting of nodes - and edges. The visualization is easy to use and supports custom shapes, - styles, colors, sizes, images, and more. -

- -

- The graph visualization works smooth on any modern browser for up to a - few thousand nodes and edges. To handle a larger amount of nodes, Graph - has clustering support. -

- -

- Every dataset is different. Nodes can have different sizes based on content, interconnectivity can be high or low etc. Because of this, graph has a special option - that the user can use to explore which settings may be good for you. Use configurePhysics as described in the Physics section or by - example 25. -

- -

- To get started with Graph, install or download the - vis.js library. -

- - -

Contents

- - - -

Example

-

- Here a basic graph example. Note that unlike the - Timeline, the Graph does not need the vis.css - file. -

- -

- More examples can be found in the - examples directory. -

- -
<!doctype html>
-<html>
-<head>
-  <title>Graph | Basic usage</title>
-
-  <script type="text/javascript" src="../../dist/vis.js"></script>
-</head>
-
-<body>
-
-<div id="mygraph"></div>
-
-<script type="text/javascript">
-  // create an array with nodes
-  var nodes = [
-    {id: 1, label: 'Node 1'},
-    {id: 2, label: 'Node 2'},
-    {id: 3, label: 'Node 3'},
-    {id: 4, label: 'Node 4'},
-    {id: 5, label: 'Node 5'}
-  ];
-
-  // create an array with edges
-  var edges = [
-    {from: 1, to: 2},
-    {from: 1, to: 3},
-    {from: 2, to: 4},
-    {from: 2, to: 5}
-  ];
-
-  // create a graph
-  var container = document.getElementById('mygraph');
-  var data= {
-    nodes: nodes,
-    edges: edges,
-  };
-  var options = {
-    width: '400px',
-    height: '400px'
-  };
-  var graph = new vis.Graph(container, data, options);
-</script>
-
-</body>
-</html>
-
- - -

Loading

-

- Install or download the vis.js library. - in a subfolder of your project. Include the library script in the head of your html code: -

- -
-<script type="text/javascript" src="vis/dist/vis.js"></script>
-
- - -The constructor of the Graph is vis.Graph. -
var graph = new vis.Graph(container, data, options);
- -The constructor accepts three parameters: -
    -
  • - container is the DOM element in which to create the graph. -
  • -
  • - data is an Object containing properties nodes and - edges, which both contain an array with objects. - Optionally, data may contain an options object. - The parameter data is optional, data can also be set using - the method setData. Section Data Format - describes the data object. -
  • -
  • - options is an optional Object containing a name-value map - with options. Options can also be set using the method - setOptions. - Section Configuration Options - describes the available options. -
  • -
- -

Data format

-

- The data parameter of the Graph constructor is an object - which can contain different types of data. - The following properties are supported in the data object: -

- -
    -
  • - A property pair nodes and edges, - both containing an Array with objects. The data formats are described - in the sections Nodes and Edges. - Example: -
    -var data = {
    -  nodes: [...],
    -  edges: [...]
    -};
    -
    -
  • -
  • - A property dot, - containing a string with data in the - DOT language. - DOT support is described in section DOT_language. - - Example: -
    -var data = {
    -  dot: '...'
    -};
    -
    -
  • -
  • - A property options, - containing an object with global options. - Options can be provided as third parameter in the graph constructor - as well. Section Configuration Options - describes the available options. - -
  • -
- -

Nodes

- -

- Nodes typically have an id and label. - A node must contain at least a property id. - Nodes can have extra properties, used to define the shape and style of the - nodes. -

- -

- A JavaScript Array with nodes is constructed like: -

-
-var nodes = [
-  {
-    id: 1,
-    label: 'Node 1'
-  },
-  // ... more nodes
-];
-
-Alternatively, a vis DataSet can also be used: -
-var nodes = new vis.DataSet();
-nodes.add([
-    {id: '1', label: 'Node 1'},
-    {id: '2', label: 'Node 2'},
-    {id: '3', label: 'Node 3'},
-    {id: '4', label: 'Node 4'},
-    // ... more nodes
-]);
-
-When using a DataSet, the graph is automatically updating to changes in the DataSet. - -

- Nodes support the following properties: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredDescription
colorString | ObjectnoColor for the node.
color.backgroundStringnoBackground color for the node.
color.borderStringnoBorder color for the node.
color.highlightString | ObjectnoColor of the node when selected.
color.highlight.backgroundStringnoBackground color of the node when selected.
color.highlight.borderStringnoBorder color of the node when selected.
color.hover.backgroundStringnoBackground color of the node when the node is hovered over and the hover option is enabled.
color.hover.borderStringnoBorder color of the node when the node is hovered over and the hover option is enabled.
groupNumber | StringnoA group number or name. The type can be number, - string, or an other type. All nodes with the same group get - the same color schema.
allowedToMoveXBooleanfalseIf allowedToMoveX is false, then the node will not move from its supplied position. - If an X position has been supplied, it is fixed in the X-direction. - If no X value has been supplied, this argument will not do anything.
allowedToMoveYBooleanfalseIf allowedToMoveY is false, then the node will not move from its supplied position. - If an Y position has been supplied, it is fixed in the Y-direction. - If no Y value has been supplied, this argument will not do anything.
fontColorStringnoFont color for label in the node.
fontFaceStringnoFont face for label in the node, for example "verdana" or "arial".
fontSizeNumbernoFont size in pixels for label in the node.
idNumber | StringyesA unique id for this node. - Nodes may not have duplicate id's. - Id's do not need to be consecutive. - An id is normally a number, but may be any type.
imagestringnoUrl of an image. Only applicable when the shape of the node is - image.
massnumber1When using the Barnes Hut simulation method (which is selected by default), - the mass of a node determines the gravitational repulsion during the simulation. Higher mass will push other nodes further away.
levelnumber-1This level is used in the hierarchical layout. If this is not selected, the level does not do anything.
radiusnumbernoRadius for the node. Applicable for all shapes except box, - circle, ellipse and database. - The value of radius will override a value in - property value.
shapestringnoDefine the shape for the node. - Choose from - ellipse (default), circle, box, - database, image, label, dot, - star, triangle, triangleDown, and square. -

- - In case of image, a property with name image must - be provided, containing image urls. -

- - The shapes dot, star, triangle, - triangleDown, and square, are scalable. - The size is determined by the properties radius or - value. -

- - When a property label is provided, - this label will be displayed inside the shape in case of shapes - box, circle, ellipse, - and database. - For all other shapes, the label will be displayed right below the shape. - -
labelstringnoText label to be displayed in the node or under the image of the node. - Multiple lines can be separated by a newline character \n .
titlestring | functionnoTitle to be displayed when the user hovers over the node. - The title can contain HTML code. If using a function, returning undefined - will prevent the tooltip from being displayed.
valuenumbernoA value for the node. - The radius of the nodes will be scaled automatically from minimum to - maximum value. - Only applicable when the shape of the node is dot. - If a radius is provided for the node too, it will override the - radius calculated from the value.
xnumbernoHorizontal position in pixels. - The horizontal position of the node will be fixed. - The vertical position y may remain undefined.
ynumbernoVertical position in pixels. - The vertical position of the node will be fixed. - The horizontal position x may remain undefined.
- - -

Edges

- -

- Edges are connections between nodes. - An edge must at least contain properties from and - to, both referring to the id of a node. - Edges can have extra properties, used to define the type and style. -

- -

- A JavaScript Array with edges is constructed as: -

-
-var edges = [
-  {
-    from: 1,
-    to: 3
-  },
-  // ... more edges
-];
-
-Alternatively, a vis DataSet can also be used: -
-var edges = new vis.DataSet();
-edges.add([
-    {from: '1', to: '2'},
-    {from: '1', to: '3'},
-    {from: '2', to: '4'},
-    {from: '2', to: '5'},
-    // ... more edges
-]);
-
-When using a DataSet, the graph is automatically updating to changes in the DataSet. - -

- Edges support the following properties: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredDescription
arrowScaleFactorNumbernoIf you are using arrows, this will scale the arrow. Values < 1 give smaller arrows, > 1 larger arrows. Default: 1.
colorString | ObjectnoColor for the edge.
color.colorStringnoColor of the edge when not selected.
color.highlightStringnoColor of the edge when selected.
color.hoverStringnoColor of the edge when the edge is hovered over and the hover option is enabled.
hoverWidthNumber1.5This determines the thickness of the edge if it is hovered over. This will only manifest when the hover option is enabled.
dashObjectno - Object containing properties for dashed lines. - Available properties: length, gap, - altLength. -
dash.altLengthnumbernoLength of the alternated dash in pixels on a dashed line. - Specifying dash.altLength allows for creating - a dashed line with a dash-dot style, for example when - dash.length=10 and dash.altLength=5. - See also the option dahs.length. - Only applicable when the line style is dash-line.
dash.lengthnumbernoLength of a dash in pixels on a dashed line. - Only applicable when the line style is dash-line.
dash.gapnumbernoLength of a gap in pixels on a dashed line. - Only applicable when the line style is dash-line.
fontColorStringnoFont color for the text label of the edge. - Only applicable when property label is defined.
fontFaceStringnoFont face for the text label of the edge, - for example "verdana" or "arial". - Only applicable when property label is defined.
fontSizeNumbernoFont size in pixels for the text label of the edge. - Only applicable when property label is defined.
fontFillstringnoFont fill for the background color of the text label of the edge. - Only applicable when property label is defined.
fromNumber | StringyesThe id of a node where the edge starts. The type must correspond with - the type of the node id's. This is normally a number, but can be any - type.
stylestringnoDefine a line style for the edge. - Choose from line (default), arrow, - arrow-center, or dash-line. -
labelstringnoText label to be displayed halfway the edge.
lengthnumberphysics.[method].springLengthThe resting length of the edge when modeled as a spring. By default the springLength determined by the physics is used. By using this setting you can make certain edges have different resting lengths.
titlestring | functionnoTitle to be displayed when the user hovers over the edge. - The title can contain HTML code. If using a function, returning undefined - will prevent the tooltip from being displayed.
toNumber | StringyesThe id of a node where the edge ends. The type must correspond with - the type of the node id's. This is normally a number, but can be any - type.
valuenumbernoA value for the edge. - The width of the edges will be scaled automatically from minimum to - maximum value. - If a width is provided for the edge too, it will override the - width calculated from the value.
widthnumbernoWidth of the line in pixels. The width will - override a specified value, if a value is - specified too.
- - - -

DOT language

- -

- Graph supports data in the - DOT language. - To provide data in the DOT language, the data object must contain - a property dot with a String containing the data. -

- -

- Example usage: -

- -
-// provide data in the DOT language
-var data = {
-  dot: 'digraph {1 -> 1 -> 2; 2 -> 3; 2 -- 4; 2 -> 1 }'
-};
-
-// create a graph
-var graph = new vis.Graph(container, data);
-
- - - -

Configuration options

- -

- Options can be used to customize the graph. Options are defined as a JSON object. - All options are optional. -

- -
-var options = {
-  width:  '100%',
-  height: '400px',
-  edges: {
-    color: 'red',
-    width: 2
-  }
-};
-
- -

- The following options are available. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
physicsObjectnone - Configuration of the physics system governing the simulation of the nodes and edges. - Barnes-Hut nBody simulation is used by default. See section Physics for an overview of the available options. -
configurePhysicsBooleanfalse - Enabling this setting will create a physics configuration div above the graph. You can use this to fine tune the physics system to suit your needs. - Because of the many possible configurations, there is not a one-size-fits-all setting. By using this tool, you can adapt the physics to your dataset. -
dataManipulationObjectnone - Settings for manipulating the Dataset. See section Data manipulation for an overview of the available options. -
clusteringObjectnone - Clustering configuration. Clustering is turned off by default. See section Clustering for an overview of the available options. -
edgesObjectnone - Configuration options applied to all edges. See section Edges configuration for an overview of the available options. -
freezeForStabilizationBooleanfalse - With the advent of the storePosition() function, the positions of the nodes can be saved after they are stabilized. The smoothCurves require support nodes and those positions are not stored. In order - to speed up the initialization of the graph by using storePosition() and loading the nodes with the stored positions, the freezeForStabilization option freezes all nodes that have been supplied with - an x and y position in place during the stabilization. That way only the support nodes for the smooth curves have to stabilize, greatly speeding up the stabilization process with cached positions. -
groupsObjectnoneIt is possible to specify custom styles for groups. - Each node assigned a group gets the specified style. - See Groups configuration for an overview of the available styles - and an example. -
heightString"400px"The height of the graph in pixels or as a percentage.
hoverBooleanfalseEnabling the change of the colors of nodes and edges when the mouse hovers over them. Enabling this may have a minor impact on performance.
keyboardObjectnone - Configuration options for shortcuts keys. Sortcut keys are turned off by default. See section Keyboard navigation for an overview of the available options. -
dragGraphBooleantrue - Toggle if the graph can be dragged. This will not affect the dragging of nodes. -
dragNodesBooleantrue - Toggle if the nodes can be dragged. This will not affect the dragging of the graph. -
navigationObjectnone - Configuration options for the navigation controls. See section Navigation controls for an overview of the available options. -
nodesObjectnone - Configuration options applied to all nodes. See section Nodes configuration for an overview of the available options. -
smoothCurvesBooleantrueIf true, edges are drawn as smooth curves. This is more computationally intensive since the edge now is a quadratic Bezier curve with control points on both nodes and an invisible node in the center of the edge. This support node is also handed by the physics simulation.
selectableBooleantrueIf true, nodes in the graph can be selected by clicking them. - Long press can be used to select multiple nodes.
stabilizeBooleantrueIf true, the graph is stabilized before displaying it. If false, - the nodes move to a stabe position visibly in an animated way.
stabilizationIterationsNumber1000If stabilize is set to true, this number is the (maximum) amount of physics steps the stabilization process takes - before showing the result. If your simulation takes too long to stabilize, this number can be reduced. On the other hand, if your graph is not stabilized after loading, this number can be increased.
widthString"400px"The width of the graph in pixels or as a percentage.
zoomableBooleantrue - Toggle if the graph can be zoomed. -
- -
- -

Nodes configuration

-

- Nodes can be configured with different styles and shapes. To configure nodes, provide an object named nodes in the options for the Graph. -

- -

- For example to give the nodes a custom color, shape, and size: -

-
-var options = {
-  // ...
-  nodes: {
-    color: {
-      background: 'white',
-      border: 'red',
-      highlight: {
-        background: 'pink',
-        border: 'red'
-      }
-    },
-    shape: 'star',
-    radius: 24
-  }
-};
-
- -

- The following options are available for nodes. These options must be created - inside an object nodes in the graphs options object.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
colorString | ObjectObjectDefault color of the nodes. When color is a string, the color is applied - to both background as well as the border of the node.
color.backgroundString"#97C2FC"Default background color of the nodes
color.borderString"#2B7CE9"Default border color of the nodes
color.highlightString | ObjectObjectDefault color of the node when the node is selected. In case of a string, the color is applied to - both border and background of the node.
color.highlight.backgroundString"#D2E5FF"Default background color of the node when selected.
color.highlight.borderString"#2B7CE9"Default border color of the node when selected.
allowedToMoveXBooleanfalseIf allowedToMoveX is false, then the node will not move from its supplied position. - If an X position has been supplied, it is fixed in the X-direction. - If no X value has been supplied, this argument will not do anything.
allowedToMoveYBooleanfalseIf allowedToMoveY is false, then the node will not move from its supplied position. - If an Y position has been supplied, it is fixed in the Y-direction. - If no Y value has been supplied, this argument will not do anything.
fontColorString"black"Default font color for the text label in the nodes.
fontFaceString"sans"Default font face for the text label in the nodes, for example "verdana" or "arial".
fontSizeNumber14Default font size in pixels for the text label in the nodes.
groupStringnoneDefault group for the nodes.
imageStringnoneDefault image url for the nodes. only applicable to shape image.
massnumber1When using the Barnes Hut simulation method (which is selected by default), - the mass of a node determines the gravitational repulsion during the simulation. Higher mass will push other nodes further away.
levelnumber-1This level is used in the hierarchical layout. If this is not selected, the level does not do anything.
widthMinNumber16The minimum width for a scaled image. Only applicable to shape image.
widthMaxNumber64The maximum width for a scaled image. Only applicable to shape image.
shapeString"ellipse"The default shape for all nodes. - Choose from - ellipse (default), circle, box, - database, image, label, dot, - star, triangle, triangleDown, and square. - This shape can be overridden by a group shape, or by a shape of an individual node.
radiusNumber5The default radius for a node. Only applicable to shapes dot, - star, triangle, triangleDown, and square.
radiusMinNumber5The minimum radius for a scaled node. Only applicable to shapes dot, - star, triangle, triangleDown, and square.
radiusMaxNumber20The maximum radius for a scaled node. Only applicable to shapes dot, - star, triangle, triangleDown, and square.
- - -

Edges configuration

- -

- Edges can be configured with different length and styling. To configure edges, provide an object named edges in the options for the Graph. -

- -

- For example to set the width of all edges to 2 pixels and give them a red color: -

-
-var options = {
-  // ...
-  edges: {
-    color: 'red',
-    width: 2
-  }
-};
-
- -

- The following options are available for edges. These options must be created - inside an object edges in the graphs options object. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
arrowScaleFactorNumber1If you are using arrows, this will scale the arrow. Values < 1 give smaller arrows, > 1 larger arrows. Default: 1.
colorString | ObjectObjectColors of the edge. This object contains both colors for the selected and unselected state.
color.colorString"#848484"Color of the edge when not selected.
color.highlightString"#848484"Color of the edge when selected.
dashObjectObject - Object containing default properties for dashed lines. - Available properties: length, gap, - altLength. -
dash.altLengthnumbernoneDefault length of the alternated dash in pixels on a dashed line. - Specifying dash.altLength allows for creating - a dashed line with a dash-dot style, for example when - dash.length=10 and dash.altLength=5. - See also the option dahs.length. - Only applicable when the line style is dash-line.
dash.lengthnumber10Default length of a dash in pixels on a dashed line. - Only applicable when the line style is dash-line.
dash.gapnumber5Default length of a gap in pixels on a dashed line. - Only applicable when the line style is dash-line.
lengthnumberphysics.[method].springLengthThe resting length of the edge when modeled as a spring. By default the springLength determined by the physics is used. By using this setting you can make certain edges have different resting lengths.
styleString"line"The default style of a edge. - Choose from line (default), arrow, - arrow-center, dash-line.
widthNumber1The default width of a edge.
- -

Groups configuration

- -

It is possible to specify custom styles for groups of nodes. - Each node having assigned to this group gets the specified style. - The options groups is an object containing one or multiple groups, - identified by a unique string, the groupname. -

-

- A group can have the following styles: -

- -
-var options = {
-  // ...
-
-  groups: {
-    mygroup: {
-      shape: 'circle',
-      color: {
-        border: 'black',
-        background: 'white',
-        highlight: {
-          border: 'yellow',
-          background: 'orange'
-        }
-      }
-      fontColor: 'red',
-      fontSize: 18
-    }
-    // add more groups here
-  }
-};
-
-var nodes = [
-  {id: 1, label: 'Node 1'},                    // will get the default style
-  {id: 2, label: 'Node 2', group: 'mygroup'},  // will get the style from 'mygroup'
-  // ... more nodes
-];
-
- - -

The following styles are available for groups:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
colorString | ObjectObjectColor of the node
color.borderString"#2B7CE9"Border color of the node
color.backgroundString"#97C2FC"Background color of the node
color.highlightString | Object"#D2E5FF"Default color of the node when the node is selected. In case of a string, the color is applied to - both border and background of the node.
color.highlight.backgroundString"#D2E5FF"Background color of the node when selected.
color.highlight.borderString"#D2E5FF"Border color of the node when selected.
imageStringnoneDefault image for the nodes. Only applicable in combination with - shape image.
fontColorString"black"Font color of the node.
fontFaceString"sans"Font name of the node, for example "verdana" or "arial".
fontSizeNumber14Font size for the node in pixels.
shapeString"ellipse"Choose from - ellipse (default), circle, box, - database, image, label, dot, - star, triangle, triangleDown, and square. - In case of image, a property with name image must be provided, containing - image urls.
radiusNumber5Default radius for the node. Only applicable in combination with - shapes box and dot.
- -

Physics

-

- The original simulation method was based on particel physics with a repulsion field (potential) around each node, - and the edges were modelled as springs. The new system employed the Barnes-Hut gravitational simulation model. The edges are still modelled as springs. - To unify the physics system, the damping, repulsion distance and edge length have been combined in an physics option. To retain good behaviour, both the old repulsion model and the Barnes-Hut model have their own parameters. - If no options for the physics system are supplied, the Barnes-Hut method will be used with the default parameters. If you want to customize the physics system easily, you can use the configurePhysics option. - -

Note: if the behaviour of your graph is not the way you want it, use configurePhysics as described below or by example 25.

-

-
-// These variables must be defined in an options object named physics.
-// If a variable is not supplied, the default value is used.
-var options = {
-    physics: {
-        barnesHut: {
-            enabled: true,
-            gravitationalConstant: -2000,
-            centralGravity: 0.1,
-            springLength: 95,
-            springConstant: 0.04,
-            damping: 0.09
-        },
-        repulsion: {
-            centralGravity: 0.1,
-            springLength: 50,
-            springConstant: 0.05,
-            nodeDistance: 100,
-            damping: 0.09
-        },
-    }
-
-
barnesHut:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
enabledBooleantrueThis switches the Barnes-Hut simulation on or off. If it is turned off, the old repulsion model is used. Barnes-Hut is generally faster and yields better results.
gravitationalConstantNumber-2000This is the gravitational constand used to calculate the gravity forces. More information is available here.
centralGravityNumber0.1The central gravity is a force that pulls all nodes to the center. This ensures independent groups do not float apart.
springLengthNumber95In the previous versions this was a property of the edges, called length. This is the length of the springs when they are at rest. During the simulation they will be streched by the gravitational fields. - To greatly reduce the edge length, the gravitationalConstant has to be reduced as well.
springConstantNumber0.04This is the spring constant used to calculate the spring forces based on Hooke′s Law. More information is available here.
dampingNumber0.09This is the damping constant. It is used to dissipate energy from the system to have it settle in an equilibrium. More information is available here.
-
repulsion:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
centralGravityNumber0.1The central gravity is a force that pulls all nodes to the center. This ensures independent groups do not float apart.
springLengthNumber50In the previous versions this was a property of the edges, called length. This is the length of the springs when they are at rest. During the simulation they will be streched by the gravitational fields. - To greatly reduce the edge length, the gravitationalConstant has to be reduced as well.
nodeDistanceNumber100This parameter is used to define the distance of influence of the repulsion field of the nodes. Below half this distance, the repulsion is maximal and beyond twice this distance the repulsion is zero.
springConstantNumber0.05This is the spring constant used to calculate the spring forces based on Hooke′s Law. More information is available here.
dampingNumber0.09This is the damping constant. It is used to dissipate energy from the system to have it settle in an equilibrium. More information is available here.
-

Configuration:

-Every dataset is different. Nodes can have different sizes based on content, interconnectivity can be high or low etc. Because of this, graph has a special option -that the user can use to explore which settings may be good for him or her. This is ment to be used during the development phase when you are implementing vis.js. Once you have found -settings you are happy with, you can supply them to graph using the physics options as described above. - -On start, the default settings will be loaded. Keep in mind that selecting the hierarchical simulation mode disables smooth curves. These will not be enabled again afterwards. -
-var options = {
-    configurePhysics:true
-}
-
-

Data manipulation

-

- By using the data manipulation feature of the graph you can dynamically create nodes, connect nodes with edges, edit nodes or delete nodes and edges. - The toolbar is fully HTML and CSS so the user can style this to their preference. To control the behaviour of the data manipulation, users can insert custom functions - into the data manipulation process. For example, an injected function can show an detailed pop-up when a user wants to add a node. In example 21, - two functions have been injected into the add and edit functionality. This is described in more detail in the next subsection. To correctly display the manipulation icons, the vis.css file must be included. - The user is free to alter or overload the CSS classes but without them the navigation icons are not visible. -

-
-// These variables must be defined in an options object named dataManipulation.
-// If a variable is not supplied, the default value is used.
-var options = {
-    dataManipulation: {
-      enabled: false,
-      initiallyVisible: false
-    }
-}
-// OR to just load the module with default values:
-var options: {
-    dataManipulation: true
-}
-
- - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
enabledBooleanfalseEnabling or disabling of the data manipulation toolbar. If it is initially hidden, an edit button appears in the top left corner.
initiallyVisibleBooleanfalseInitially hide or show the data manipulation toolbar.
- -

Data manipulation: custom functionality

-

- Users can insert custom functions into the add node, edit node, connect nodes, and delete selected operations. This is done by supplying them in the options. - If the callback is NOT called, nothing happens. Example 21 has two working examples - for the add and edit functions. The data the user is supplied with in these functions has been described in the code below. - For the add data, you can add any and all options that are accepted for node creation as described above. The same goes for edit, however only the fields described - in the code below contain information on the selected node. The callback for connect accepts any options that are used for edge creation. Only the callback for delete selected - requires the same data structure that is supplied to the user.

- If there is no injected function supplied for the edit operation, the button will not be shown in the toolbar. -

-
-// If a variable is not supplied, the default value is used.
-var options: {
-    dataManipulation: true,
-    onAdd: function(data,callback) {
-        /** data = {id: random unique id,
-        *           label: new,
-        *           x: x position of click (canvas space),
-        *           y: y position of click (canvas space),
-        *           allowedToMoveX: true,
-        *           allowedToMoveY: true
-        *          };
-        */
-        var newData = {..}; // alter the data as you want.
-                            // all fields normally accepted by a node can be used.
-        callback(newData);  // call the callback to add a node.
-    },
-    onEdit: function(data,callback) {
-        /** data = {id:...,
-        *           label: ...,
-        *           group: ...,
-        *           shape: ...,
-        *           color: {
-        *             background:...,
-        *             border:...,
-        *             highlight: {
-        *               background:...,
-        *               border:...
-        *             }
-        *           }
-        *          };
-        */
-        var newData = {..}; // alter the data as you want.
-                            // all fields normally accepted by a node can be used.
-        callback(newData);  // call the callback with the new data to edit the node.
-    }
-    onEditEdge: function(data,callback) {
-        /** data = {id: edgeID,
-        *           from: nodeId1,
-        *           to: nodeId2,
-        *          };
-        */
-        var newData = {..}; // alter the data as you want, except for the ID.
-                            // all fields normally accepted by an edge can be used.
-        callback(newData);  // call the callback with the new data to edit the edge.
-    }
-    onConnect: function(data,callback) {
-        // data = {from: nodeId1, to: nodeId2};
-        var newData = {..};      // check or alter data as you see fit.
-        callback(newData);       // call the callback to connect the nodes.
-    },
-    onDelete: function(data,callback) {
-        // data = {nodes: [selectedNodeIds], edges: [selectedEdgeIds]};
-        var newData = {..}; // alter the data as you want.
-                            // the same data structure is required.
-        callback(newData);  // call the callback to delete the objects.
-    }
-};
-
-

- Because the interface elements are CSS and HTML, the user will have to correct for size changes of the canvas. To facilitate this, a new event has been added called resize. - A function can be bound to this event. This function is supplied with the new widht and height of the canvas. The CSS can then be updated accordingly. - An code snippet from example 21 is shown below. -

-
-graph.on("resize", function(params) {console.log(params.width,params.height)});
-
- -

Clustering

-

- The graph now supports dynamic clustering of nodes. This allows a user to view a very large dataset (> 50.000 nodes) without - sacrificing performance. When loading a large dataset, the nodes are clustered initially (this may take a small while) to have a - responsive visualization to work with. The clustering is both outside-in and inside-out. Outside-in means that nodes with only one - connection will be contained, or clustered, in the node it is connected to. Inside-out clustering first determines which nodes are hubs. - Hubs are defined as the nodes with the top 3% highest amount of connections (assuming normal distribution). These hubs then "grow", meaning - they contain the nodes they are connected to within themselves. The edges that were connected to the nodes that are absorbed will be reconnected to the cluster. -
-
- A cluster is just a node that has references to the nodes and edges it contains. It has an internal counter to keep track of its size, which is then used - to calculate the required forces. The contained nodes are removed from the global nodes index, greatly speeding up the system. -
-
- The clustering has the following user-configurable settings. The default values have been tested with the Graph examples and work well. - The default state for clustering is off. -

- -
-// These variables must be defined in an options object named clustering.
-// If a variable is not supplied, the default value is used.
-var options = {
-    clustering: {
-      initialMaxNodes: 100,
-      clusterThreshold:500,
-      reduceToNodes:300,
-      chainThreshold: 0.4,
-      clusterEdgeThreshold: 20,
-      sectorThreshold: 100,
-      screenSizeThreshold: 0.2,
-      fontSizeMultiplier:  4.0,
-      maxFontSize: 1000,
-      forceAmplification:  0.1,
-      distanceAmplification: 0.1,
-      edgeGrowth: 20,
-      nodeScaling: {width:  1,
-                    height: 1,
-                    radius: 1},
-      maxNodeSizeIncrements: 600,
-      activeAreaBoxSize: 100,
-      clusterLevelDifference: 2
-    }
-}
-// OR to just load the module with default values:
-var options: {
-    clustering: true
-}
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
initialMaxNodesNumber100If the initial amount of nodes is larger than this value, clustering starts until the total number of nodes is less than this value.
clusterThresholdNumber500While zooming in and out, clusters can open up. Once there are more than absoluteMaxNumberOfNodes nodes, - clustering starts until reduceToMaxNumberOfNodes nodes are left. This is done to ensure performance is continuously fluid.
reduceToNodesNumber300While zooming in and out, clusters can open up. Once there are more than absoluteMaxNumberOfNodes nodes, - clustering starts until reduceToMaxNumberOfNodes nodes are left. This is done to ensure performance is continiously fluid.
chainThresholdNumber0.4Because of the clustering methods used, long chains of nodes can be formed. To reduce these chains, this threshold is used. - A chainThreshold of 0.4 means that no more than 40% of all nodes are allowed to be a chain node (two connections). - If there are more, they are clustered together.
clusterEdgeThresholdNumber20This is the absolute edge length threshold in pixels. If the edge is smaller on screen (that means zooming out reduces this length) - the node will be clustered. This is triggered when zooming out.
sectorThresholdInteger50If a cluster larger than sectorThreshold is opened, a seperate instance called a sector, will be created. All the simulation of - nodes outside of this instance will be paused. This is to maintain performance and clarity when examining large clusters. - A sector is collapsed when zooming out far enough. Also, when opening a cluster, if this cluster is smaller than this value, it is fully unpacked.
screenSizeThresholdNumber0.2When zooming in, the clusters become bigger. A screenSizeThreshold of 0.2 means that if the width or height of this cluster - becomes bigger than 20% of the width or height of the canvas, the cluster is opened. If a sector has been created, if the sector is smaller than - 20%, we collapse this sector.
fontSizeMultiplierNumber4.0This parameter denotes the increase in fontSize of the cluster when a single node is added to it.
maxFontSizeNumber1000This parameter denotes the largest allowed font size. If the font becomes too large, some browsers experience problems displaying this.
forceAmplificationNumber0.6This factor is used to calculate the increase of the repulsive force of a cluster. It is calculated by the following - formula: repulsingForce *= 1 + (clusterSize * forceAmplification).
distanceAmplificationNumber0.2This factor is used to calculate the increase in effective range of the repulsive force of the cluster. - A larger cluster has a longer range. It is calculated by the following - formula: minDistance *= 1 + (clusterSize * distanceAmplification).
edgeGrowthNumber20This factor determines the elongation of edges connected to a cluster.
nodeScaling.widthNumber10This factor determines how much the width of a cluster increases in pixels per added node.
nodeScaling.heightNumber10This factor determines how much the height of a cluster increases in pixels per added node.
nodeScaling.radiusNumber10This factor determines how much the radius of a cluster increases in pixels per added node.
maxNodeSizeIncrementsNumber600This limits the size clusters can grow to. The default value, 600, implies that if a cluster contains more than 600 nodes, it will no longer grow.
activeAreaBoxSizeNumber100Imagine a square with an edge length of activeAreaBoxSize pixels around your cursor. - If a cluster is in this box as you zoom in, the cluster can be opened in a seperate sector. - This is regardless of the zoom level.
clusterLevelDifferenceNumber2At every clustering session, Graph will check if the difference between cluster levels is - acceptable. When a cluster is formed when zooming out, that is one cluster level. - If you zoom out further and it encompasses more nodes, that is another level. For example: - If the highest level of your graph at any given time is 3, nodes that have not clustered or - have clustered only once will join their neighbour with the lowest cluster level.
- - -

- Graph has a menu with navigation controls, which is disabled by default. - It can be configured with the following settings. To correctly display the navigation icons, the vis.css file must be included. - The user is free to alter or overload the CSS classes but without them the navigation icons are not visible. -

- -
-// use of navigation controls
-var options: {
-  navigation: true
-}
-
-
- -

Keyboard navigation

-

- The graph can be navigated using shortcut keys. - The default state for the keyboard navigation is off. The predefined keys can be found in the example 20_navigation.html. -

- -
-// simple use of keyboard controls
-var options: {
-    keyboard: true
-}
-
-// advanced configuration for keyboard controls
-var options: {
-  keyboard: {
-    speed: {
-      x: 10,
-      y: 10,
-      zoom: 0.02
-    }
-  }
-}
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
speed.xNumber10This defines the speed of the camera movement in the x direction when using the keyboard navigation. -
speed.yNumber10This defines the speed of the camera movement in the y direction when using the keyboard navigation.
speed.zoomNumber0.02This defines the zoomspeed when using the keyboard navigation.
- - -

Hierarchical layout

-

- The graph can be used to display nodes in a hierarchical way. This can be determined automatically, based on the amount of edges connected to each node, or defined by the user. - If the user wants to manually determine the hierarchy, each node has to be supplied with a level (from 0 being heighest to n). The automatic method - is shown in example 23 and the user-defined method is shown in example 24. - This layout method does not support smooth curves or clustering. It automatically turns these features off. -

- -
-// simple use of the hierarchical layout
-var options: {
-    hierarchicalLayout: true
-}
-
-// advanced configuration for hierarchical layout
-var options: {
-    hierarchicalLayout: {
-      enabled:false,
-      levelSeparation: 150,
-      nodeSpacing: 100,
-      direction: "UD"
-    }
-}
-// partial configuration automatically sets enabled to true
-var options: {
-    hierarchicalLayout: {
-      nodeSpacing: 100,
-      direction: "UD"
-    }
-}
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
enabledBooleanfalseEnable or disable the hierarchical layout. -
levelSeparationNumber150This defines the space between levels (in the Y-direction, considering UP-DOWN direction).
nodeSpacingNumber100This defines the space between nodes in the same level (in the X-direction, considering UP-DOWN direction). - This is only relevant during the initial placing of nodes.
directionStringUDThis defines the direction the graph is drawn in. The supported directions are: Up-Down (UD), Down-Up (DU), Left-Right (LR) and Right-Left (RL). - These need to be supplied by the acronyms in parentheses.
- -

Localization

-

- When using vis.js in other languages, one can use the localization option to overwrite the labels used in the data manipulation interface. -

- -
-var options: {
-    labels:{
-      add:"Add Node",
-      edit:"Edit",
-      link:"Add Link",
-      del:"Delete selected",
-      editNode:"Edit Node",
-      editEdge:"Edit Edge",
-      back:"Back",
-      addDescription:"Click in an empty space to place a new node.",
-      linkDescription:"Click on a node and drag the edge to another
-                       node to connect them.",
-      editEdgeDescription:"Click on either one of the control points and drag them to another node to connect to it.".
-      addError:"The function for add does not support two arguments
-                                                        (data,callback).",
-      linkError:"The function for connect does not support two arguments
-                                                        (data,callback).",
-      editError:"The function for edit does not support two arguments
-                                                        (data, callback).",
-      editBoundError:"No edit function has been bound to this button.",
-      deleteError:"The function for delete does not support two arguments
-                                                        (data, callback).",
-      deleteClusterError:"Clusters cannot be deleted."
-    }
-}
-
- - - - - - - - - - - - - - - -
NameTypeDefaultDescription
labelsobject(shown above)Overwrite one or all labels used in the datamanipulation interface with localized strings. -
- -

Tooltips

-

- The behaviour and style of the tooltips used to display node and edge title attributes can be customized. -

- -
-// tooltip behaviour and style options
-var options: {
-  tooltip: {
-    delay: 300,
-    fontColor: "black",
-    fontSize: 14, // px
-    fontFace: "verdana",
-    color: {
-      border: "#666",
-      background: "#FFFFC6"
-    }
-  }
-}
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
delayNumber300Time in milliseconds a user must hover over a node or edge before a tooltip appears.
fontColorString"black"Default color for tooltip text.
fontSizeNumber14Size in pixels of tooltip text.
fontFaceString"verdana"Font family to used for tooltip text.
color.backgroundString"#FFFFC6"Background color for the node.
color.borderString"#666"Border color for the node.
- -

Methods

-

- Graph supports the following methods. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MethodReturn TypeDescription
getSelection()Array of idsReturns an array with the ids of the selected nodes. - Returns an empty array if no nodes are selected. - The selections are not ordered. -
focusOnNode(nodeId, [zoomLevel])noneThis function will move the view to center on the specified node. An optional zoomLevel can be passed where 1.0 is 100%, between 0.0 and 1.0 is zooming out and > 1.0 is zooming in. Generally, close to 1.0 is sufficient. - If this argument is not passed the view will only move, not zoom. -
storePosition()noneThis will put the X and Y positions of all nodes in the dataset. It will also include allowedToMoveX and allowedToMoveY with the correct values. - You can use this to stablize your graph once, then save the positions in a database so the next time you load the nodes, stabilization will be near instantaneous. -
DOMtoCanvas(pos)objectThis function converts DOM coordinates to coordinates on the canvas. Input and output are in the form of {x:xpos,y:ypos}. The DOM values are relative to the graph container. -
canvasToDOM(pos)objectThis function converts canvas coordinates to coordinates on the DOM. Input and output are in the form of {x:xpos,y:ypos}. The DOM values are relative to the graph container. -
on(event, callback)noneCreate an event listener. The callback function is invoked every time the event is triggered. Avialable events: select. The callback function is invoked as callback(properties), where properties is an object containing event specific properties. See section Events for more information.
off(event, callback)noneRemove an event listener created before via function on(event, callback). See section Events for more information.
redraw()noneRedraw the graph. Useful when the layout of the webpage changed.
setData(data,[disableStart])noneLoads data. Parameter data is an object containing - nodes, edges, and options. Parameters nodes, edges are an Array. - Options is a name-value map and is optional. Parameter disableStart is - an optional Boolean and can disable the start of the simulation that would begin at the end - of this function by default. -
setOptions(options)noneSet options for the graph. The available options are described in - the section Configuration Options. -
setSelection(selection)noneSelect nodes. - selection is an array with ids of nodes to be selected. - The array selection can contain zero or multiple ids. - Example usage: graph.setSelection([3, 5]); will select - nodes with id 3 and 5. -
setSize(width, height)noneParameters width and height are strings, - containing a new size for the visualization. Size can be provided in pixels - or in percentages.
zoomExtent()noneScales the graph so all the nodes are in center view.
- -

Events

-

- Graph fires events after one or multiple nodes are selected or deselected. - The event can be catched by creating a listener. -

- -

- Here an example on how to catch a select event. -

- -
-graph.on('select', function (properties) {
-  alert('selected nodes: ' + properties.nodes);
-});
-
- -

- A listener can be removed via the function off: -

- -
-function onSelect (properties) {
-  alert('selected nodes: ' + properties.nodes);
-}
-
-// add event listener
-graph.on('select', onSelect);
-
-// do stuff...
-
-// remove event listener
-graph.off('select', onSelect);
-
- - -

- The following events are available. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
nameDescriptionProperties
selectFired after the user selects or deselects a node by clicking it. - Not fired when the method setSelectionis executed. - -
    -
  • nodes: an array with the ids of the selected nodes
  • -
  • edges: an array with the ids of the selected edges
  • -
-
clickFired after the user clicks or taps on a touchscreen. -
    -
  • nodes: an array with the ids of the selected nodes
  • -
  • edges: an array with the ids of the selected edges
  • -
-
doubleClickFired after the user double clicks or double taps on a touchscreen. -
    -
  • nodes: an array with the ids of the selected nodes
  • -
  • edges: an array with the ids of the selected edges
  • -
-
hoverNodeFired when the mouse is moved over a node (assuming the hover option is enabled). -
    -
  • node: an object with the id of the hovered node.
  • -
-
blurNodeFired when the mouse is moved off a node (assuming the hover option is enabled). -
    -
  • node: an object with the id of the hovered node.
  • -
-
resizeFired when the size of the canvas has been updated (not neccecarily changed) by the setSize() function or by the setOptions() function. -
    -
  • width: the new width of the canvas
  • -
  • height: the new height of the canvas
  • -
-
stabilizedFired when the graph has been stabilized after initialization. This event can be used to trigger the .storePosition() function after stabilization. -
    -
  • iterations: number of iterations used to stabilize
  • -
-
viewChangedFired when the view has changed. This is when the graph has moved or zoomed. - none -
zoomFired when the graph has zoomed. This event can be used to trigger the .storePosition() function after stabilization. -
    -
  • direction: "+" or "-"
  • -
-
- - -

Data policy

-

- All code and data is processed and rendered in the browser. - No data is sent to any server. -

- -
- - diff --git a/docs/graph2d.html b/docs/graph2d.html deleted file mode 100644 index 05ab0579..00000000 --- a/docs/graph2d.html +++ /dev/null @@ -1,1087 +0,0 @@ - - - - vis.js | Graph2d documentation - - - - - - - - -
- -

Graph2d documentation

- -

Overview

-

- Graph2d is an interactive visualization chart to draw data in a 2D graph. - You can freely move and zoom in the graph by dragging and scrolling in the - window. -

-

- Graph2d uses HTML DOM and SVG for rendering. This allows for flexible - customization using css styling. -

- -

Contents

- - -

Example

-

- The following code shows how to create a Graph2d and provide it with data. - More examples can be found in the examples directory. -

- -
-<!DOCTYPE HTML>
-<html>
-<head>
-  <title>Graph2d | Basic Example</title>
-
-  <style type="text/css">
-    body, html {
-      font-family: sans-serif;
-    }
-  </style>
-
-  <script src="../../dist/vis.js"></script>
-  <link href="../../dist/vis.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="visualization"></div>
-
-<script type="text/javascript">
-  var container = document.getElementById('visualization');
-  var items = [
-      {x: '2014-06-11', y: 10},
-      {x: '2014-06-12', y: 25},
-      {x: '2014-06-13', y: 30},
-      {x: '2014-06-14', y: 10},
-      {x: '2014-06-15', y: 15},
-      {x: '2014-06-16', y: 30}
-  ];
-
-  var dataset = new vis.DataSet(items);
-  var options = {
-      start: '2014-06-10',
-      end: '2014-06-18'
-  };
-  var Graph2d = new vis.Graph2d(container, dataset, options);
-</script>
-</body>
-</html>
-
-
- - -

Loading

- -

- The class name of the Graph2d is vis.Graph2d. - When constructing a Graph2d, an HTML DOM container must be provided to attach - the graph to. Optionally, data an options can be provided. - Data is a vis DataSet or an Array, described in - section Data Format. - Options is a name-value map in the JSON format. The available options - are described in section Configuration Options. - Groups is a vis DataSet containing groups. The available options and the method of construction - are described in section Data Format. -

-
var graph = new vis.Graph2d(container [, data] [, groups] [, options]);
-For backwards compatibility, groups and options can be interchanged. - -

- Data, options and groups can be set or changed later on using the functions - Graph2d.setItems(data), Graph2d.setOptions(options) and Graph2d.setGroups(groups). -

- -

Data Format

-

- Graph2d can load data from an Array, a DataSet or a DataView. - JSON objects are added to this DataSet by using the add() function. - Data points must have properties x, y, and z, - and can optionally have a property style and filter. -

- Graph2d can be provided with two types of data: -

-
    -
  • Items containing a set of points to be displayed.
  • -
  • Groups containing a set of groups used to group items - together. All items belonging to a group will be drawn as a single graph.
  • -
- -

Items

- -
-var items = [
-    {x: '2014-06-13', y: 30, group: 0},
-    {x: '2014-06-14', y: 10, group: 0},
-    {x: '2014-06-15', y: 15, group: 1},
-    {x: '2014-06-16', y: 30, group: 1},
-    {x: '2014-06-17', y: 10, group: 1},
-    {x: '2014-06-18', y: 15, group: 1}
-];
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredDescription
xnumberyesLocation on the x-axis.
ynumberyesLocation on the y-axis.
groupnumber | stringnoThe ID of the group this point belongs to.
- -

Groups

- -

- Like the items, groups are regular JavaScript Arrays and Objects. - Using groups, items can be grouped together. - Items are filtered per group, and displayed as individual graphs. Groups can contain the properties id, - content, className (optional) and options (optional). -

-

- Groups can be applied to a timeline using the method setGroups. - A table with groups can be created like: -

- -
-var groups = new vis.DataSet();
-groups.add({
-    id: 1,
-    content: 'Group 1',
-    // Optional: a field 'visible'
-    // Optional: a field 'className'
-    // Optional: options
-  })
-groups.add({
-  // more groups...
-});
-
- - -

- Groups can have the following properties: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredDescription
idString | NumberyesAn id for the group. The group will display all items having a - property group which matches the id - of the group.
contentStringyesThe contents of the group. This can be plain text or html code.
classNameStringnoThis field is optional. A className can be used to give groups - an individual css style. -
styleStringnoThis field is optional. A style can be used to give groups - an individual css style, and any style tags specified in style will - override the definition in the className style defined in css. -
optionsJSON objectnoThis field is optional. The options can be used to give a group a specific draw style. - Any options that are colored green in the Configuration Options can be used as options here. -
visibleBooleantrueThis field is optional. If false, this group will not be drawn. -
- -

Configuration Options

- -

Graph2d Options

- -Options can be used to customize the Graph2d to your purposes. These options can be passed to the Graph2d object either in -the constructor, or by the setOptions function. - -
-var options = {
-    width:  '100%',
-    height: '400px',
-    style: 'surface'
-};
-
- -The options colored in green can also be used as options for the groups. All options are optional. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
yAxisOrientationString'left'This defines with which axis, left or right, the graph is coupled. Example 5 shows groups with different Y axis. If no groups are coupled - with an axis, it will not be shown.
defaultGroupString'default'This is the label for the default, ungrouped items when shown in a legend.
sortBooleantrueThis determines if the items are sorted automatically. - They are sorted by the x value. If sort is enabled, more optimizations are possible, increasing the performance.
samplingBooleantrueIf sampling is enabled, Graph2d will automatically determine the amount of points per pixel. - If there are more than 1 point per pixel, not all points will be drawn. Disabling sampling will cause a decrease in performance.
graphHeightNumber | String'400px'This is the height of the graph SVG canvas. - If it is larger than the height of the outer frame, you can drag up and down - the vertical direction as well as the usual horizontal direction.
shadedBoolean | ObjectfalseToggle a shaded area with the default settings.
shaded.enabledBooleanfalseThis toggles the shading.
shaded.orientationString'bottom'This determines if the shaded area is at the bottom or at the top of the curve. The options are 'bottom' or 'top'.
shaded.styleStringundefinedSet the style for the shading. This is a css string and it will override the attributes set in the class.
styleString'line'This allows the user to define if this should be a linegraph, barchart or pointcloud. The options are: 'line', 'bar', 'points'.
barChart.widthNumber50The width of the bars.
barChart.alignString'center'The alignment of the bars with regards to the coordinate. The options are 'left', 'right' or 'center'.
barChart.handleOverlapString'overlap'You can choose how graph2d handles the case where barcharts are occupying the same datapoint. The possible options are: - overlap, sideBySide, stack. - See example 10 for more information. - When using groups, see example 11. -
catmullRomBoolean | ObjecttrueToggle the interpolation with the default settings. For more customization use the JSON format.
catmullRom.enabledBooleantrueToggle the interpolation.
catmullRom.parametrizationString'centripetal'Define the type of parametrizaion. Example 7 shows the different methods. The options are 'centripetal' (best results), 'chordal' and 'uniform'. Uniform is the computationally cheapest variant. - If catmullRom is disabled, linear interpolation is used.
drawPointsBoolean | ObjecttrueToggle the drawing of the datapoints with the default settings.
drawPoints.enabledBooleantrueToggle the drawing of the datapoints.
drawPoints.sizeNumber6Determine the size at which the data points are drawn.
drawPoints.styleString'square'Determine the shape of the data points. The options are 'square' or 'circle'.
dataAxis.customRange.left.minNumberundefinedSet the minimum value of the left y-Axis.
dataAxis.customRange.left.maxNumberundefinedSet the maximum value of the left y-Axis.
dataAxis.customRange.right.minNumberundefinedSet the minimum value of the right y-Axis.
dataAxis.customRange.right.maxNumberundefinedSet the maximum value of the right y-Axis.
dataAxis.showMinorLabelsBooleantrueToggle the drawing of the minor labels on the Y axis.
dataAxis.showMajorLabelsBooleantrueToggle the drawing of the major labels on the Y axis.
dataAxis.iconsBooleanfalseToggle the drawing of automatically generated icons the Y axis.
dataAxis.widthNumber | String'40px'Set the (minimal) width of the yAxis. The axis will resize to accomodate the labels of the Y values.
dataAxis.visibleBooleantrueShow or hide the data axis.
dataAxis.title.left.textStringundefinedSet the title for the left axis.
dataAxis.title.left.styleStringundefinedSet the title style for the left axis. This is a css string and it will override the attributes set in the class.
dataAxis.title.right.textStringundefinedSet the title for the right axis.
dataAxis.title.right.styleStringundefinedSet the title style for the right axis. This is a css string and it will override the attributes set in the class.
dataAxis.format.left.decimalsNumberundefinedSet the number of decimal points used on the the left axis. If set, this will fix the number of decimal places - displayed after the decimal point. - If undefined, trailing zeros will be removed.
dataAxis.format.right.decimalsNumberundefinedSet the number of decimal points used on the the right axis. If set, this will fix the number of decimal places - displayed after the decimal point. - If undefined, trailing zeros will be removed.
dataAxis.alignZerosBooleantrueWhen using multiple axis, the right one is slaved to the left one. If you need to ensure that the zero-lines are on the same - height, you can turn this option on.
groups.visibilityObjectYou can use this to toggle the visibility of groups per graph2D instance. This is different from setting the visibility flag of the groups since - this is not communicated across instances of graph2d. Take a look at Example 14 - for more explanation. -
legendBooleanfalseToggle the legend with the default settings.
legend.enabledBooleanfalseToggle the legend.
legend.iconsBooleantrueShow automatically generated icons on the legend.
legend.left.visibleBooleantrueBoth axis, left and right, have a corresponding legend. This toggles the visibility of the legend that is coupled with the left axis.
legend.left.positionString'top-left'Determine the position of the legend coupled to the left axis. Options are 'top-left', 'top-right', 'bottom-left' or 'bottom-right'.
legend.right.visibleBooleantrueThis toggles the visibility of the legend that is coupled with the right axis.
legend.right.positionString'top-right'Determine the position of the legend coupled to the right axis. Options are 'top-left', 'top-right', 'bottom-left' or 'bottom-right'.
- -

Timeline Options

- -

- Graph2d is built upon the framework of the timeline. These options from the timeline can be used with graph2D. - All options are optional. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
autoResizebooleantrueIf true, the Timeline will automatically detect when its container is resized, and redraw itself accordingly. If false, the Timeline can be forced to repaint after its container has been resized using the function redraw().
clickToUsebooleanfalseWhen a Graph2d is configured to be clickToUse, it will react to mouse and touch events only when active. - When active, a blue shadow border is displayed around the Graph2d. The Graph2d is set active by clicking on it, and is changed to inactive again by clicking outside the Graph2d or by pressing the ESC key.
endDate | Number | StringnoneThe initial end date for the axis of the timeline. - If not provided, the latest date present in the items set is taken as - end date.
heightNumber | StringnoneThe height of the timeline in pixels or as a percentage. - When height is undefined or null, the height of the timeline is automatically - adjusted to fit the contents. - It is possible to set a maximum height using option maxHeight - to prevent the timeline from getting too high in case of automatically - calculated height. -
localeStringnoneSelect a locale for the Graph2d. See section Localization for more information.
localesObjectnoneA map with i18n locales. See section Localization for more information.
maxDate | Number | StringnoneSet a maximum Date for the visible range. - It will not be possible to move beyond this maximum. -
maxHeightNumber | StringnoneSpecifies the maximum height for the Timeline. Can be a number in pixels or a string like "300px".
minDate | Number | StringnoneSet a minimum Date for the visible range. - It will not be possible to move beyond this minimum. -
minHeightNumber | StringnoneSpecifies the minimum height for the Timeline. Can be a number in pixels or a string like "300px".
orientationString'bottom'Orientation of the timeline: 'top' or 'bottom' (default). If orientation is 'bottom', the time axis is drawn at the bottom, and if 'top', the axis is drawn on top.
showCurrentTimebooleantrueShow a vertical bar at the current time.
showCustomTimebooleanfalseShow a vertical bar displaying a custom time. This line can be dragged by the user. The custom time can be utilized to show a state in the past or in the future. When the custom time bar is dragged by the user, the event timechange is fired repeatedly. After the bar is dragged, the event timechanged is fired once.
showMajorLabelsbooleantrueBy default, the timeline shows both minor and major date labels on the - time axis. - For example the minor labels show minutes and the major labels show hours. - When showMajorLabels is false, no major labels - are shown.
showMinorLabelsbooleantrueBy default, the timeline shows both minor and major date labels on the - time axis. - For example the minor labels show minutes and the major labels show hours. - When showMinorLabels is false, no minor labels - are shown. When both showMajorLabels and - showMinorLabels are false, no horizontal axis will be - visible.
startDate | Number | StringnoneThe initial start date for the axis of the timeline. - If not provided, the earliest date present in the events is taken as start date.
widthString'100%'The width of the timeline in pixels or as a percentage.
zoomMaxNumber315360000000000Set a maximum zoom interval for the visible range in milliseconds. - It will not be possible to zoom out further than this maximum. - Default value equals about 10000 years. -
zoomMinNumber10Set a minimum zoom interval for the visible range in milliseconds. - It will not be possible to zoom in further than this minimum. -
- - -

Methods

-

- The Graph2d supports the following methods. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MethodReturn TypeDescription
clear([what])none - Clear the Graph2d. An object can be passed specifying which sections to clear: items, groups, - and/or options. By Default, items, groups and options are cleared, i.e. what = {items: true, groups: true, options: true}. Example usage: - -
Graph2d.clear();                // clear items, groups, and options
-Graph2d.clear({options: true}); // clear options only
-
-
destroy()noneDestroy the Graph2d. The Graph2d is removed from memory. all DOM elements and event listeners are cleaned up. -
getCurrentTime()DateGet the current time. Only applicable when option showCurrentTime is true. -
getCustomTime()DateRetrieve the custom time. Only applicable when the option showCustomTime is true. -
getLegend(groupId, iconWidth, iconHeight)SVGelement, String, StringReturns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right). -
getWindow()ObjectGet the current visible window. Returns an object with properties start: Date and end: Date.
getItemRange()ObjectGet the range of all the items as an object containing min: Date and max: Date.
fit()noneAdjust the visible window such that it fits all items. -
isGroupVisible(groupId)BooleanThis checks if the visible option of the supplied group (by ID) is true or false. -
moveTo(time [, options])noneMove the window such that given time is centered on screen. Parameter time can be a Date, Number, or String. Available options: -
    -
  • animate: boolean | number
    If true (default), the range is animated smoothly to the new window. If a number, the number is taken as duration for the animation. Default duration is 500 ms.
  • -
-
on(event, callback)noneCreate an event listener. The callback function is invoked every time the event is triggered. Avialable events: rangechange, rangechanged, select. The callback function is invoked as callback(properties), where properties is an object containing event specific properties. See section Events for more information.
off(event, callback)noneRemove an event listener created before via function on(event, callback). See section Events for more information.
redraw()noneForce a redraw of the Graph2d. Can be useful to manually redraw when option autoResize=false. -
setCurrentTime(time)noneSet a current time. This can be used for example to ensure that a client's time is synchronized with a shared server time. - time can be a Date object, numeric timestamp, or ISO date string. - Only applicable when option showCurrentTime is true.
setCustomTime(time)noneAdjust the custom time bar. Only applicable when the option showCustomTime is true. time can be a Date object, numeric timestamp, or ISO date string. -
setGroups(groups)noneSet a data set with groups for the Graph2d. - groups can be an Array with Objects, - a DataSet, or a DataView. For each of the groups, the items of the - Graph2d are filtered on the property group, which - must correspond with the id of the group. -
setItems(items)noneSet a data set with items for the Graph2d. - items can be an Array with Objects, - a DataSet, or a DataView. -
setOptions(options)noneSet or update options. It is possible to change any option of the Graph2d at any time. You can for example switch orientation on the fly. -
setWindow(start, end)noneSet the current visible window. The parameters start and end can be a Date, Number, or String. If the parameter value of start or end is null, the parameter will be left unchanged.
- - -

Events

-

- Graph2d fires events when changing the visible window by dragging, when - selecting items, and when dragging the custom time bar. -

- -

- Here an example on how to listen for a rangeChanged event. A listener can be removed via the function off: -

- -
-function onChange (properties) {
-  alert('changed!');
-}
-
-// add event listener
-Graph2d.on('rangechanged', onChange);
-
-// do stuff...
-
-// remove event listener
-Graph2d.off('rangechanged', onChange);
-
- - -

- The following events are available. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
nameDescriptionProperties
finishedRedrawFired after a redraw is complete. When moving the Graph2d around, this could be fired frequently. - - none. -
rangechangeFired repeatedly when the user is dragging the Graph2d window. - -
    -
  • start (Number): timestamp of the current start of the window.
  • -
  • end (Number): timestamp of the current end of the window.
  • -
-
rangechangedFired once after the user has dragged the Graph2d window. - -
    -
  • start (Number): timestamp of the current start of the window.
  • -
  • end (Number): timestamp of the current end of the window.
  • -
-
timechangeFired repeatedly when the user is dragging the custom time bar. - Only available when the custom time bar is enabled. - -
    -
  • time (Date): the current time.
  • -
-
timechangedFired once after the user has dragged the custom time bar. - Only available when the custom time bar is enabled. - -
    -
  • time (Date): the current time.
  • -
-
- -

Localization

-

- Graph2d can be localized. For localization, Graph2d depends largely on the localization of moment.js. Locales are not included in vis.js by default. To enable localization, moment.js must be loaded with locales. Moment.js offers a bundle named "moment-with-locales.min.js" for this and there are various alternative ways to load locales. -

- -

- To set a locale for the Graph2d, specify the option locale: -

- -
var options = {
-  locale: 'nl'
-};
-
- -

Create a new locale

- -To load a locale into the Graph2d not supported by default, one can add a new locale to the option locales: - -
var options = {
-  locales: {
-    // create a new locale
-    mylocale: {
-      current: 'current',
-      time: 'time',
-    }
-  },
-
-  // use the new locale
-  locale: 'mylocale'
-};
-
- -

Available locales

- -Graph2d comes with support for the following locales: - - - - - - - - - - - -
LanguageCode
English - en
- en_EN
- en_US -
Dutch - nl
- nl_NL
- nl_BE -
- -

Styles

-

- All parts of the Graph2d have a class name and a default css style just like the Graph2d. - The styles can be overwritten, which enables full customization of the layout - of the Graph2d. -

-

- Additionally, Graph2d has 10 preset styles for graphs, which are cycled through when loading groups. These styles can be overwritten - as well, along with defining your own classes to style the graphs! Example 4 and - example 5 show the usage of custom styles. -

- -

Data Policy

-

- All code and data is processed and rendered in the browser. - No data is sent to any server. -

- -
- - diff --git a/docs/graph3d.html b/docs/graph3d.html deleted file mode 100644 index 8a81c25a..00000000 --- a/docs/graph3d.html +++ /dev/null @@ -1,673 +0,0 @@ - - - - vis.js | graph3d documentation - - - - - - - - -
- -

Graph3d documentation

- -

Overview

-

- Graph3d is an interactive visualization chart to draw data in a three dimensional - graph. You can freely move and zoom in the graph by dragging and scrolling in the - window. Graph3d also supports animation of a graph. -

-

- Graph3d uses HTML canvas - to render graphs, and can render up to a few thousands of data points smoothly. -

- -

Contents

- - -

Example

-

- The following code shows how to create a Graph3d and provide it with data. - More examples can be found in the examples directory. -

- -
-<!DOCTYPE HTML>
-<html>
-<head>
-  <title>Graph 3D demo</title>
-
-  <style>
-    body {font: 10pt arial;}
-  </style>
-
-  <script type="text/javascript" src="../../dist/vis.js"></script>
-
-  <script type="text/javascript">
-  var data = null;
-  var graph = null;
-
-  function custom(x, y) {
-    return (Math.sin(x/50) * Math.cos(y/50) * 50 + 50);
-  }
-
-  // Called when the Visualization API is loaded.
-  function drawVisualization() {
-    // Create and populate a data table.
-    var data = new vis.DataSet();
-    // create some nice looking data with sin/cos
-    var steps = 50;  // number of datapoints will be steps*steps
-    var axisMax = 314;
-    var axisStep = axisMax / steps;
-    for (var x = 0; x < axisMax; x+=axisStep) {
-      for (var y = 0; y < axisMax; y+=axisStep) {
-        var value = custom(x, y);
-        data.add({
-          x: x,
-          y: y,
-          z: value,
-          style: value
-        });
-      }
-    }
-
-    // specify options
-    var options = {
-      width:  '600px',
-      height: '600px',
-      style: 'surface',
-      showPerspective: true,
-      showGrid: true,
-      showShadow: false,
-      keepAspectRatio: true,
-      verticalRatio: 0.5
-    };
-
-    // create a graph3d
-    var container = document.getElementById('mygraph');
-    graph3d = new vis.Graph3d(container, data, options);
-  }
-  </script>
-</head>
-
-<body onload="drawVisualization();">
-  <div id="mygraph"></div>
-</body>
-</html>
-
-
- - -

Loading

- -

- The class name of the Graph3d is vis.Graph3d. - When constructing a Graph3d, an HTML DOM container must be provided to attach - the graph to. Optionally, data an options can be provided. - Data is a vis DataSet or an Array, described in - section Data Format. - Options is a name-value map in the JSON format. The available options - are described in section Configuration Options. -

-
var graph = new vis.Graph3d(container [, data] [, options]);
- -

- Data and options can be set or changed later on using the functions - Graph3d.setData(data) and Graph3d.setOptions(options). -

- -

Data Format

-

- Graph3d can load data from an Array, a DataSet or a DataView. - JSON objects are added to this DataSet by using the add() function. - Data points must have properties x, y, and z, - and can optionally have a property style and filter. - -

Definition

-

- The DataSet JSON objects are defined as: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredDescription
xnumberyesLocation on the x-axis.
ynumberyesLocation on the y-axis.
znumberyesLocation on the z-axis.
stylenumbernoThe data value, required for graph styles dot-color and - dot-size. -
filter*noFilter values used for the animation. - This column may have any type, such as a number, string, or Date.
- - - -

Configuration Options

- -

- Options can be used to customize the graph. Options are defined as a JSON object. - All options are optional. -

- -
-var options = {
-    width:  '100%',
-    height: '400px',
-    style: 'surface'
-};
-
- -

- The following options are available. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
animationIntervalnumber1000The animation interval in milliseconds. This determines how fast - the animation runs.
animationPreloadbooleanfalseIf false, the animation frames are loaded as soon as they are requested. - if animationPreload is true, the graph will automatically load - all frames in the background, resulting in a smoother animation as soon as - all frames are loaded. The load progress is shown on screen.
animationAutoStartbooleanfalseIf true, the animation starts playing automatically after the graph - is created.
backgroundColorstring or Object'white'The background color for the main area of the chart. - Can be either a simple HTML color string, for example: 'red' or '#00cc00', - or an object with the following properties.
backgroundColor.strokestring'gray'The color of the chart border, as an HTML color string.
backgroundColor.strokeWidthnumber1The border width, in pixels.
backgroundColor.fillstring'white'The chart fill color, as an HTML color string.
cameraPositionObject{horizontal: 1.0, vertical: 0.5, distance: 1.7}Set the initial rotation and position of the camera. - The object cameraPosition contains three parameters: - horizontal, vertical, and distance. - Parameter horizontal is a value in radians and can have any - value (but normally in the range of 0 and 2*Pi). - Parameter vertical is a value in radians between 0 and 0.5*Pi. - Parameter distance is the (normalized) distance from the - camera to the center of the graph, in the range of 0.71 to 5.0. A - larger distance puts the graph further away, making it smaller. - All parameters are optional. -
heightstring'400px'The height of the graph in pixels or as a percentage.
keepAspectRatiobooleantrueIf keepAspectRatio is true, the x-axis and the y-axis - keep their aspect ratio. If false, the axes are scaled such that they - both have the same, maximum with.
showAnimationControlsbooleantrueIf true, animation controls are created at the bottom of the Graph. - The animation controls consists of buttons previous, start/stop, next, - and a slider showing the current frame. - Only applicable when the provided data contains an animation.
showGridbooleantrueIf true, grid lines are draw in the x-y surface (the bottom of the 3d - graph).
showPerspectivebooleantrueIf true, the graph is drawn in perspective: points and lines which - are further away are drawn smaller. - Note that the graph currently does not support a gray colored bottom side - when drawn in perspective. -
showShadowbooleanfalseShow shadow on the graph.
stylestring'dot'The style of the 3d graph. Available styles: - bar, - bar-color, - bar-size, - dot, - dot-line, - dot-color, - dot-size, - line, - grid, - or surface
tooltipboolean | functionfalseShow a tooltip showing the values of the hovered data point. - The contents of the tooltip can be customized by providing a callback - function as tooltip. In this case the function is called - with an object containing parameters x, - y, and z argument, - and must return a string which may contain HTML. -
valueMaxnumbernoneThe maximum value for the value-axis. Only available in combination - with the styles dot-color and dot-size.
valueMinnumbernoneThe minimum value for the value-axis. Only available in combination - with the styles dot-color and dot-size.
verticalRationumber0.5A value between 0.1 and 1.0. This scales the vertical size of the graph - When keepAspectRatio is set to false, and verticalRatio is set to 1.0, - the graph will be a cube.
widthstring'400px'The width of the graph in pixels or as a percentage.
xBarWidthnumbernoneThe width of bars in x direction. By default, the width is equal to the distance - between the data points, such that bars adjoin each other. - Only applicable for styles 'bar' and 'bar-color'.
xCenterstring'55%'The horizontal center position of the graph, as a percentage or in - pixels.
xMaxnumbernoneThe maximum value for the x-axis.
xMinnumbernoneThe minimum value for the x-axis.
xStepnumbernoneStep size for the grid on the x-axis.
xValueLabelfunctionnoneA function for custom formatting of the labels along the x-axis, - for example function (x) {return (x * 100) + '%'}. -
yBarWidthnumbernoneThe width of bars in y direction. By default, the width is equal to the distance - between the data points, such that bars adjoin each other. - Only applicable for styles 'bar' and 'bar-color'.
yCenterstring'45%'The vertical center position of the graph, as a percentage or in - pixels.
yMaxnumbernoneThe maximum value for the y-axis.
yMinnumbernoneThe minimum value for the y-axis.
yStepnumbernoneStep size for the grid on the y-axis.
yValueLabelfunctionnoneA function for custom formatting of the labels along the y-axis, - for example function (y) {return (y * 100) + '%'}. -
zMinnumbernoneThe minimum value for the z-axis.
zMaxnumbernoneThe maximum value for the z-axis.
zStepnumbernoneStep size for the grid on the z-axis.
zValueLabelfunctionnoneA function for custom formatting of the labels along the z-axis, - for example function (z) {return (z * 100) + '%'}. -
xLabelStringxLabel on the X axis.
yLabelStringyLabel on the Y axis.
zLabelStringzLabel on the Z axis.
filterLabelStringtimeLabel for the filter column.
legendLabelStringvalueLabel for the style description.
- - -

Methods

-

- Graph3d supports the following methods. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MethodReturn TypeDescription
animationStart()noneStart playing the animation. - Only applicable when animation data is available.
animationStop()noneStop playing the animation. - Only applicable when animation data is available.
getCameraPosition()An object with parameters horizontal, - vertical and distanceReturns an object with parameters horizontal, - vertical and distance, - which each one of them is a number, representing the rotation and position - of the camera.
redraw()noneRedraw the graph. Useful after the camera position is changed externally, - when data is changed, or when the layout of the webpage changed.
setData(data)noneReplace the data in the Graph3d.
setOptions(options)noneUpdate options of Graph3d. - The provided options will be merged with current options.
setSize(width, height)noneParameters width and height are strings, - containing a new size for the graph. Size can be provided in pixels - or in percentages.
setCameraPosition (pos){horizontal: 1.0, vertical: 0.5, distance: 1.7}Set the rotation and position of the camera. Parameter pos - is an object which contains three parameters: horizontal, - vertical, and distance. - Parameter horizontal is a value in radians and can have any - value (but normally in the range of 0 and 2*Pi). - Parameter vertical is a value in radians between 0 and 0.5*Pi. - Parameter distance is the (normalized) distance from the - camera to the center of the graph, in the range of 0.71 to 5.0. A - larger distance puts the graph further away, making it smaller. - All parameters are optional. -
- -

Events

-

- Graph3d fires events after the camera position has been changed. - The event can be catched by creating a listener. - Here an example on how to catch a cameraPositionChange event. -

- -
-function onCameraPositionChange(event) {
-  alert('The camera position changed to:\n' +
-        'Horizontal: ' + event.horizontal + '\n' +
-        'Vertical: ' + event.vertical + '\n' +
-        'Distance: ' + event.distance);
-}
-// assuming var graph3d = new vis.Graph3d(document.getElementById('mygraph'));
-graph3d.on('cameraPositionChange', onCameraPositionChange);
-
- -

- The following events are available. -

- - - - - - - - - - - - - - - - - -
nameDescriptionProperties
cameraPositionChangeThe camera position changed. Fired after the user modified the camera position - by moving (dragging) the graph, or by zooming (scrolling), - but not after a call to setCameraPosition method. - The new camera position can be retrieved by calling the method - getCameraPosition. -
    -
  • horizontal: Number. The horizontal angle of the camera.
  • -
  • vertical: Number. The vertical angle of the camera.
  • -
  • distance: Number. The distance of the camera to the center of the graph.
  • -
-
- -

Data Policy

-

- All code and data are processed and rendered in the browser. No data is sent to any server. -

- -
- - diff --git a/docs/img/graph/graph.png b/docs/img/graph/graph.png deleted file mode 100644 index 3acaa131..00000000 Binary files a/docs/img/graph/graph.png and /dev/null differ diff --git a/docs/img/graph/graph120x60.png b/docs/img/graph/graph120x60.png deleted file mode 100644 index 5a8aa291..00000000 Binary files a/docs/img/graph/graph120x60.png and /dev/null differ diff --git a/docs/img/graph3d.png b/docs/img/graph3d.png deleted file mode 100644 index 72fc45cd..00000000 Binary files a/docs/img/graph3d.png and /dev/null differ diff --git a/docs/img/graph3d120x60.png b/docs/img/graph3d120x60.png deleted file mode 100644 index 9d44dd30..00000000 Binary files a/docs/img/graph3d120x60.png and /dev/null differ diff --git a/docs/img/timeline/timeline.png b/docs/img/timeline/timeline.png deleted file mode 100644 index d77c304c..00000000 Binary files a/docs/img/timeline/timeline.png and /dev/null differ diff --git a/docs/img/timeline/timeline120x60.png b/docs/img/timeline/timeline120x60.png deleted file mode 100644 index f9d0c6a7..00000000 Binary files a/docs/img/timeline/timeline120x60.png and /dev/null differ diff --git a/docs/img/vis_overview.odg b/docs/img/vis_overview.odg deleted file mode 100644 index ec94baea..00000000 Binary files a/docs/img/vis_overview.odg and /dev/null differ diff --git a/docs/img/vis_overview.png b/docs/img/vis_overview.png deleted file mode 100644 index 588d5840..00000000 Binary files a/docs/img/vis_overview.png and /dev/null differ diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 1760a565..00000000 --- a/docs/index.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - vis.js | documentation - - - - - - - - -
- -

vis.js documentation

- -

- Vis.js is a dynamic, browser based visualization library. - The library is designed to be easy to use, handle large amounts - of dynamic data, and enable manipulation of the data. -

- -

- The library is developed by - Almende B.V.. - Vis.js runs fine on Chrome, Firefox, Opera, Safari, IE9+, and most mobile - browsers (with full touch support). -

- -

Components

- -

- Vis.js contains of the following components: -

- - - -
    -
  • - DataSet. - A flexible key/value based data set. - Add, update, and remove items. Subscribe on changes in the data set. - A DataSet can filter and order items, and convert fields of items. -
  • -
  • - DataView. - A filtered and/or formatted view on a DataSet. -
  • -
  • - Network. - Display a network (force directed graph) with nodes and edges (previously called Graph). -
  • -
  • - Graph2d. - Plot data on a timeline with lines or barcharts. -
  • -
  • - Graph3d. - Display data in a three dimensional graph. -
  • -
  • - Timeline. - Display different types of data on a timeline. -
  • -
- -

Install

- -

npm

- -
-npm install vis
-
- -

bower

- -
-bower install vis
-
- -

download

- Download the library from the website: - http://visjs.org. - -

Load

- -

- To load vis.js, include the javascript and css files of vis in your web page: -

- -
<!DOCTYPE HTML>
-<html>
-<head>
-  <script src="components/vis/vis.js"></script>
-  <link href="components/vis/vis.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<script type="text/javascript">
-  // ... load a visualization
-</script>
-</body>
-</html>
-
- -

- or load vis.js using require.js: -

- -
-require.config({
-  paths: {
-    vis: 'path/to/vis',
-  }
-});
-
-require(['vis'], function (math) {
-  // ... load a visualization
-});
-
- -

- A timeline can be instantiated as follows. Other components can be - created in a similar way. -

- -
-var timeline = new vis.Timeline(container, data, options);
-
- -

- Where container is an HTML element, data is - an Array with data or a DataSet, and options is an optional - object with configuration options for the component. -

- -

Use

- -

- A basic example on using a Timeline is shown below. More examples can be - found in the examples directory of the project. -

- -
-<!DOCTYPE HTML>
-<html>
-<head>
-  <title>Timeline basic demo</title>
-
-  <script src="components/vis/vis.js"></script>
-  <link href="components/vis/vis.css" rel="stylesheet" type="text/css" />
-
-  <style type="text/css">
-    body, html {
-      font-family: sans-serif;
-    }
-  </style>
-</head>
-<body>
-<div id="visualization"></div>
-
-<script type="text/javascript">
-  // DOM element where the Timeline will be attached
-  var container = document.getElementById('visualization');
-
-  // Create a DataSet (allows two way data-binding)
-  var data = new vis.DataSet([
-    {id: 1, content: 'item 1', start: '2013-04-20'},
-    {id: 2, content: 'item 2', start: '2013-04-14'},
-    {id: 3, content: 'item 3', start: '2013-04-18'},
-    {id: 4, content: 'item 4', start: '2013-04-16', end: '2013-04-19'},
-    {id: 5, content: 'item 5', start: '2013-04-25'},
-    {id: 6, content: 'item 6', start: '2013-04-27'}
-  ]);
-
-    // Configuration for the Timeline
-  var options = {};
-
-  // Create a Timeline
-  var timeline = new vis.Timeline(container, data, options);
-</script>
-</body>
-</html>
-
- - -

License

- -

- Copyright 2010-2014 Almende B.V. -

- -

- Vis.js is dual licensed under both -

- -

- and -

- - -

- Vis.js may be distributed under either license. -

- - -
- - \ No newline at end of file diff --git a/docs/lib/prettify/lang-apollo.js b/docs/lib/prettify/lang-apollo.js deleted file mode 100644 index bfc0014c..00000000 --- a/docs/lib/prettify/lang-apollo.js +++ /dev/null @@ -1,2 +0,0 @@ -PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/, -null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["apollo","agc","aea"]) \ No newline at end of file diff --git a/docs/lib/prettify/lang-css.js b/docs/lib/prettify/lang-css.js deleted file mode 100644 index 61157f38..00000000 --- a/docs/lib/prettify/lang-css.js +++ /dev/null @@ -1,2 +0,0 @@ -PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[ \t\r\n\f]+/,null," \t\r\n\u000c"]],[["str",/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],["str",/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],["kwd",/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//], -["com",/^(?: - - - orientation - String - 'bottom' - Orientation of the timeline: 'top' or 'bottom' (default). If orientation is 'bottom', the time axis is drawn at the bottom, and if 'top', the axis is drawn on top. - - - - padding - Number - 5 - The padding of items, needed to correctly calculate the size - of item ranges. Must correspond with the css of items, for example when setting options.padding=10, corresponding css is: -
-.vis.timeline .item {
-  padding: 10px;
-}
- - - - - selectable - Boolean - true - If true, the items on the timeline can be selected. Multiple items can be selected by long pressing them, or by using ctrl+click or shift+click. The event select is fired each time the selection has changed (see section Events). - - - - showCurrentTime - boolean - true - Show a vertical bar at the current time. - - - - showCustomTime - boolean - false - Show a vertical bar displaying a custom time. This line can be dragged by the user. The custom time can be utilized to show a state in the past or in the future. When the custom time bar is dragged by the user, the event timechange is fired repeatedly. After the bar is dragged, the event timechanged is fired once. - - - - - showMajorLabels - boolean - true - By default, the timeline shows both minor and major date labels on the - time axis. - For example the minor labels show minutes and the major labels show hours. - When showMajorLabels is false, no major labels - are shown. - - - - showMinorLabels - boolean - true - By default, the timeline shows both minor and major date labels on the - time axis. - For example the minor labels show minutes and the major labels show hours. - When showMinorLabels is false, no minor labels - are shown. When both showMajorLabels and - showMinorLabels are false, no horizontal axis will be - visible. - - - - stack - Boolean - true - If true (default), items will be stacked on top of each other such that they do not overlap. - - - - start - Date | Number | String - none - The initial start date for the axis of the timeline. - If not provided, the earliest date present in the events is taken as start date. - - - - template - Function - none - A template function used to generate the contents of the items. The function is called by the Timeline with an items data as argument, and must return HTML code as result. When the option template is specified, the items do not need to have a field content. See section Templates for a detailed explanation. - - - - type - String - none - Specifies the default type for the timeline items. Choose from 'box', 'point', 'range', and 'background'. Note that individual items can override this default type. If undefined, the Timeline will auto detect the type from the items data: if a start and end date is available, a 'range' will be created, and else, a 'box' is created. Items of type 'background' are not editable. - - - - - width - String - '100%' - The width of the timeline in pixels or as a percentage. - - - - zoomable - Boolean - true - - Specifies whether the Timeline can be zoomed by pinching or scrolling in the window. - Only applicable when option moveable is set true. - - - - - zoomMax - Number - 315360000000000 - Set a maximum zoom interval for the visible range in milliseconds. - It will not be possible to zoom out further than this maximum. - Default value equals about 10000 years. - - - - - zoomMin - Number - 10 - Set a minimum zoom interval for the visible range in milliseconds. - It will not be possible to zoom in further than this minimum. - - - - - - -

Methods

-

- The Timeline supports the following methods. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MethodReturn TypeDescription
clear([what])none - Clear the Timeline. An object can be passed specifying which sections to clear: items, groups, - and/or options. By Default, items, groups and options are cleared, i.e. what = {items: true, groups: true, options: true}. Example usage: - -
timeline.clear();                // clear items, groups, and options
-timeline.clear({options: true}); // clear options only
-
-
destroy()noneDestroy the Timeline. The timeline is removed from memory. all DOM elements and event listeners are cleaned up. -
fit([options])noneAdjust the visible window such that it fits all items. See also function focus(id). - Available options: -
    -
  • animate: boolean | number
    If true (default), the range is animated smoothly to the new window. If a number, the number is taken as duration for the animation. Default duration is 500 ms.
  • -
-
focus(id | ids [, options])noneAdjust the visible window such that the selected item (or multiple items) are centered on screen. See also function fit(). Available options: -
    -
  • animate: boolean | number
    If true (default), the range is animated smoothly to the new window. If a number, the number is taken as duration for the animation. Default duration is 500 ms.
  • -
-
getCurrentTime()DateGet the current time. Only applicable when option showCurrentTime is true. -
getCustomTime()DateRetrieve the custom time. Only applicable when the option showCustomTime is true. -
getSelection()Number[]Get an array with the ids of the currently selected items.
getVisibleItems()Number[]Get an array with the ids of the currently visible items.
getWindow()ObjectGet the current visible window. Returns an object with properties start: Date and end: Date.
moveTo(time [, options])noneMove the window such that given time is centered on screen. Parameter time can be a Date, Number, or String. Available options: -
    -
  • animate: boolean | number
    If true (default), the range is animated smoothly to the new window. If a number, the number is taken as duration for the animation. Default duration is 500 ms.
  • -
-
on(event, callback)noneCreate an event listener. The callback function is invoked every time the event is triggered. Avialable events: rangechange, rangechanged, select. The callback function is invoked as callback(properties), where properties is an object containing event specific properties. See section Events for more information.
off(event, callback)noneRemove an event listener created before via function on(event, callback). See section Events for more information.
redraw()noneForce a redraw of the Timeline. Can be useful to manually redraw when option autoResize=false. -
setCurrentTime(time)noneSet a current time. This can be used for example to ensure that a client's time is synchronized with a shared server time. - time can be a Date object, numeric timestamp, or ISO date string. - Only applicable when option showCurrentTime is true.
setCustomTime(time)noneAdjust the custom time bar. Only applicable when the option showCustomTime is true. time can be a Date object, numeric timestamp, or ISO date string. -
setGroups(groups)noneSet a data set with groups for the Timeline. - groups can be an Array with Objects, - a DataSet, or a DataView. For each of the groups, the items of the - timeline are filtered on the property group, which - must correspond with the id of the group. -
setItems(items)noneSet a data set with items for the Timeline. - items can be an Array with Objects, - a DataSet, or a DataView. -
setOptions(options)noneSet or update options. It is possible to change any option of the timeline at any time. You can for example switch orientation on the fly. -
setSelection(id | ids [, options])noneSelect one or multiple items by their id. The currently selected items will be unselected. To unselect all selected items, call `setSelection([])`. Available options: -
    -
  • focus: boolean
    If true, focus will be set to the selected item(s)
  • -
  • animate: boolean | number
    If true (default), the range is animated smoothly to the new window. If a number, the number is taken as duration for the animation. Default duration is 500 ms. Only applicable when option focus is true.
  • -
-
setWindow(start, end [, options])noneSet the current visible window. The parameters start and end can be a Date, Number, or String. If the parameter value of start or end is null, the parameter will be left unchanged. Available options: -
    -
  • animate: boolean | number
    If true (default), the range is animated smoothly to the new window. If a number, the number is taken as duration for the animation. Default duration is 500 ms.
  • -
-
- - -

Events

-

- Timeline fires events when changing the visible window by dragging, when - selecting items, and when dragging the custom time bar. -

- -

- Here an example on how to listen for a select event. -

- -
-timeline.on('select', function (properties) {
-  alert('selected items: ' + properties.nodes);
-});
-
- -

- A listener can be removed via the function off: -

- -
-function onSelect (properties) {
-  alert('selected items: ' + properties.nodes);
-}
-
-// add event listener
-timeline.on('select', onSelect);
-
-// do stuff...
-
-// remove event listener
-timeline.off('select', onSelect);
-
- - -

- The following events are available. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
nameDescriptionProperties
finishedRedrawFired after a redraw is complete. When moving the timeline around, this could be fired frequently. - - none. -
rangechangeFired repeatedly when the user is dragging the timeline window. - -
    -
  • start (Number): timestamp of the current start of the window.
  • -
  • end (Number): timestamp of the current end of the window.
  • -
-
rangechangedFired once after the user has dragged the timeline window. - -
    -
  • start (Number): timestamp of the current start of the window.
  • -
  • end (Number): timestamp of the current end of the window.
  • -
-
selectFired after the user selects or deselects items by tapping or holding them. - When a use taps an already selected item, the select event is fired again. - Not fired when the method setSelectionis executed. - -
    -
  • items: an array with the ids of the selected items
  • -
-
timechangeFired repeatedly when the user is dragging the custom time bar. - Only available when the custom time bar is enabled. - -
    -
  • time (Date): the current time.
  • -
-
timechangedFired once after the user has dragged the custom time bar. - Only available when the custom time bar is enabled. - -
    -
  • time (Date): the current time.
  • -
-
- -

Editing Items

-

- When the Timeline is configured to be editable (both options selectable and editable are true), the user can move items by dragging them, can create a new item by double tapping on an empty space, can update an item by double tapping it, and can delete a selected item by clicking the delete button on the top right. -

- -

Option editable accepts a boolean or an object. When editable is a boolean, all manipulation actions will be either enabled or disabled. When editable is an object, one can enable individual manipulation actions:

- -
// enable or disable all manipulation actions
-var options = {
-  editable: true       // true or false
-};
-
-// enable or disable individual manipulation actions
-var options = {
-  editable: {
-    add: true,         // add new items by double tapping
-    updateTime: true,  // drag items horizontally
-    updateGroup: true, // drag items from one group to another
-    remove: true       // delete an item by tapping the delete button top right
-  }
-};
- - -

- One can specify callback functions to validate changes made by the user. There are a number of callback functions for this purpose: -

- -
    -
  • onAdd(item, callback) Fired when a new item is about to be added. If not implemented, the item will be added with default text contents.
  • -
  • onUpdate(item, callback) Fired when an item is about to be updated. This function typically has to show a dialog where the user change the item. If not implemented, nothing happens.
  • -
  • onMove(item, callback) Fired when an item has been moved. If not implemented, the move action will be accepted.
  • -
  • onMoving(item, callback) Fired repeatedly while an item is being moved (dragged). Can be used to adjust the items start, end, and/or group to allowed regions.
  • -
  • onRemove(item, callback) Fired when an item is about to be deleted. If not implemented, the item will be always removed.
  • -
- -

- Each of the callbacks is invoked with two arguments: -

-
    -
  • item: the item being manipulated
  • -
  • callback: a callback function which must be invoked to report back. The callback must be invoked as callback(item | null). Here, item can contain changes to the passed item. Parameter `item` typically contains fields `content`, `start`, and optionally `end`. The type of `start` and `end` is determined by the DataSet type configuration and is `Date` by default. When invoked as callback(null), the action will be cancelled.
  • -
- -

- Example code: -

- -
var options = {
-  onUpdate: function (item, callback) {
-    item.content = prompt('Edit items text:', item.content);
-    if (item.content != null) {
-      callback(item); // send back adjusted item
-    }
-    else {
-      callback(null); // cancel updating the item
-    }
-  }
-};
-
- -A full example is available here: 08_edit_items.html. - - -

Templates

- -

- Timeline supports templates to format item contents. Any template engine (such as handlebars or mustache) can be used, and one can also manually build HTML. In the options, one can provide a template handler. This handler is a function accepting an items data as argument, and outputs formatted HTML: -

- -
var options = {
-  template: function (item) {
-    var html = ... // generate HTML markup for this item
-    return html;
-  }
-};
-
- -

Create HTML manually

- -The HTML for an item can be created manually: - -
var options = {
-  template: function (item) {
-    return '<h1>' + item.header + '</h1><p>' + item.description + '</p>';
-  }
-};
-
- -

Using a template engine

- -Using handlebars, one can write the template in HTML: - -
-<script id="item-template" type="text/x-handlebars-template">
-  <h1>{{header}}</h1>
-  <p>{{description}}</p>
-</script>
-
- -Compile the template: - -
-var source = document.getElementById('item-template').innerHTML;
-var template = Handlebars.compile(source);
-
- -And then specify the template in the Timeline options - -
var options = {
-  template: template
-};
-
- -

Multiple templates

- -In order to support multiple templates, the template handler can be extended to switch between different templates, depending on a specific item property: - -
-var templates = {
-  template1: Handlebars.compile(...),
-  template2: Handlebars.compile(...),
-  template2: Handlebars.compile(...),
-  ...
-};
-
-var options = {
-  template: function (item) {
-    var template = templates[item.template];  // choose the right template
-    return template(item);                    // execute the template
-  }
-};
-
- -Now the items can be extended with a property template, specifying which template to use for the item. - - -

Localization

-

- Timeline can be localized. For localization, Timeline depends largely on the localization of moment.js. Locales are not included in vis.js by default. To enable localization, moment.js must be loaded with locales. Moment.js offers a bundle named "moment-with-locales.min.js" for this and there are various alternative ways to load locales. -

- -

- To set a locale for the Timeline, specify the option locale: -

- -
var options = {
-  locale: 'nl'
-};
-
- -

Create a new locale

- -To load a locale into the Timeline not supported by default, one can add a new locale to the option locales: - -
var options = {
-  locales: {
-    // create a new locale (text strings should be replaced with localized strings)
-    mylocale: {
-      current: 'current',
-      time: 'time',
-    }
-  },
-
-  // use the new locale
-  locale: 'mylocale'
-};
-
- -

Available locales

- -

- Timeline comes with support for the following locales: -

- - - - - - - - - - - -
LanguageCode
English - en
- en_EN
- en_US -
Dutch - nl
- nl_NL
- nl_BE -
- - -

Styles

-

- All parts of the Timeline have a class name and a default css style. - The styles can be overwritten, which enables full customization of the layout - of the Timeline. -

- -

For example, to change the border and background color of all items, include the - following code inside the head of your html code or in a separate stylesheet.

-
<style>
-  .vis.timeline .item {
-    border-color: orange;
-    background-color: yellow;
-  }
-</style>
-
- -

Data Policy

-

- All code and data is processed and rendered in the browser. - No data is sent to any server. -

- - - - diff --git a/examples/graph2d/01_basic.html b/examples/graph2d/01_basic.html deleted file mode 100644 index f878d25c..00000000 --- a/examples/graph2d/01_basic.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - Graph2d | Basic Example - - - - - - - -

Graph2d | Basic Example

-
- This example shows the most basic functionality of the vis.js Graph2d module. An array or a vis.Dataset can be used as input. - In the following examples we'll explore the options Graph2d offest for customization. This example uses all default settings. - There are 10 predefined styles that will be cycled through automatically when you add different groups. Alternatively you can - create your own styling. -

- Graph2d is built upon the framework of the newly refactored timeline. A lot of the timeline options will also apply to Graph2d. - In these examples however, we will focus on what's new in Graph2d! -
-
-
- - - - \ No newline at end of file diff --git a/examples/graph2d/02_bars.html b/examples/graph2d/02_bars.html deleted file mode 100644 index 1c0ec2b7..00000000 --- a/examples/graph2d/02_bars.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - Graph2d | Bar Graph Example - - - - - - - -

Graph2d | Bar Graph Example

-
- This example shows the most the same data as the first example, except we plot the data as bars! The - dataAxis (y-axis) icons have been enabled as well. These icons are generated automatically from the CSS - styling of the graphs. Finally, we've used the option from Timeline where we draw the x-axis (time-axis) on top. -

- The align option can be used to align the bar at the center of the datapoint or on the left or right side of it. - This example uses the default center alignment. -
-
- -
- - - - \ No newline at end of file diff --git a/examples/graph2d/03_groups.html b/examples/graph2d/03_groups.html deleted file mode 100644 index 8b924a63..00000000 --- a/examples/graph2d/03_groups.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - Graph2d | Groups Example - - - - - - - - -

Graph2d | Groups Example

-
- This example shows the groups functionality within Graph2d. This works in the same way as it does in Timeline, - We have however simplified the constructor to accept groups as well to shorten the code. These groups are the - method used in Graph2d to define individual graphs. These groups can be given an individual class as well as all the - styling options you can supply to Graph2d! This example, as well as the ones that follow will showcase a few different usages - of these options.

- - This example also introduces the automatically generated legend. The icons are automatically generated and the label is the - content as you define it in the groups. If you have datapoints that are not part of a group, a default group is created with the label: 'default'. - In this example, the setting defaultGroup is used to rename the default group to 'ungrouped'. -
-
- -
- - - - \ No newline at end of file diff --git a/examples/graph2d/04_rightAxis.html b/examples/graph2d/04_rightAxis.html deleted file mode 100644 index 597c33c0..00000000 --- a/examples/graph2d/04_rightAxis.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - Graph2d | Right Axis Example - - - - - - - -

Graph2d | Right Axis Example

-
- This example shows the all of the graphs outlined on the right side using the yAxisOrientation option. - We also show a few custom styles for the graph and show icons on the axis, which are adhering to the custom styling. - Finally, the legend is manually positioned. Both the left and right axis - have their own legend. If one of the axis is unused, the legend is not shown. The options for the legend have been split - in a left and a right segment. Since this example shows the right axis, the right legend is configured. - - -
-
-
- - - - \ No newline at end of file diff --git a/examples/graph2d/05_bothAxis.html b/examples/graph2d/05_bothAxis.html deleted file mode 100644 index 57fe7daa..00000000 --- a/examples/graph2d/05_bothAxis.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - Graph2d | Both Axis Example - - - - - - - -

Graph2d | Both Axis Example

-
- This example shows the some of the graphs outlined on the right side using the yAxisOrientation option within the groups. - We also show a few more custom styles for the graphs. Finally, the legend is manually positioned. Both the left and right axis - have their own legend. If one of the axis is unused, the legend is not shown. The options for the legend have been split - in a left and a right segment. The default position of the left axis has been changed. - - -
-
-
- - - - \ No newline at end of file diff --git a/examples/graph2d/06_interpolation.html b/examples/graph2d/06_interpolation.html deleted file mode 100644 index 55fd0bbe..00000000 --- a/examples/graph2d/06_interpolation.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - Graph2d | Interpolation - - - - - - - -

Graph2d | Interpolation

-
- The Graph2d makes use of Catmull-Rom spline interpolation. - The user can configure these per group, or globally. In this example we show all 4 possiblities. The differences are in the parametrization of - the curves. The options are uniform, chordal and centripetal. Alternatively you can disable the Catmull-Rom interpolation and - a linear interpolation will be used. The centripetal parametrization produces the best result (no self intersection, yet follows the line closely) and is therefore the default setting. -

- For both the centripetal and chordal parametrization, the distances between the points have to be calculated and this makes these methods computationally intensive - if there are very many points. The uniform parametrization still has to do transformations, though it does not have to calculate the distance between point. Finally, the - linear interpolation is the fastest method. For more on the Catmull-Rom method, C. Yuksel et al. have an interesting paper titled ″On the parametrization of Catmull-Rom Curves″. -
-
-
- - - - \ No newline at end of file diff --git a/examples/graph2d/07_scrollingAndSorting.html b/examples/graph2d/07_scrollingAndSorting.html deleted file mode 100644 index 98e8629d..00000000 --- a/examples/graph2d/07_scrollingAndSorting.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - Graph2d | Scrolling and Sorting - - - - - - - -

Graph2d | Scrolling and Sorting

-
- You can determine the height of the Graph2d seperately from the height of the frame. If the graphHeight - is defined, and the height is not, the frame will auto-scale to accommodate the graphHeight. If the height - is defined as well, the user can scroll up and down vertically as well as horizontally to view the graph. -

- Vertical scrolling is planned, though not yet available. The graphHeight also does not conform if only the height is defined. -

- You can manually disable the automatic sorting of the datapoints by using the sort option. However, doing so does reduce the optimization - of the drawing so if you have a lot of points, keep sort turned on for the best results. -
-
-
- - - - \ No newline at end of file diff --git a/examples/graph2d/08_performance.html b/examples/graph2d/08_performance.html deleted file mode 100644 index 9a249f6c..00000000 --- a/examples/graph2d/08_performance.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - Graph2d | Performance - - - - - - - - - - -

Graph2d | Performance

-
- This example is a test of the performance of the Graph2d. Select the amount of datapoints you want to plot and press draw. - You can choose between the style of the points as well as the interpolation method. This can only be toggled with the buttons. - The interpolation options may not look different for this dataset but you can see their effects clearly in example 7. -

- Linear interpolation and no points are the settings that will render quickest. By default, Graph2d will downsample when there are more - than 1 point per pixel. This can be manually disabled at the cost of performance by using the sampling option. -
-
-

- Number of items: - Click the draw button to load the data! -
- - Interpolation method: - -
- Points style: - - -

-
- - - - \ No newline at end of file diff --git a/examples/graph2d/09_external_legend.html b/examples/graph2d/09_external_legend.html deleted file mode 100644 index 5ed73491..00000000 --- a/examples/graph2d/09_external_legend.html +++ /dev/null @@ -1,367 +0,0 @@ - - - - Graph2d | External legend Example - - - - - - - -

Graph2d | External custom legend

-
- This example shows how to create an external custom legend using the getLegend function. We use normal JavaScript to show and hide the - groups by updating the dataset. - -
-
-
-
- - - - - \ No newline at end of file diff --git a/examples/graph2d/10_barsSideBySide.html b/examples/graph2d/10_barsSideBySide.html deleted file mode 100644 index c64e8b87..00000000 --- a/examples/graph2d/10_barsSideBySide.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - Graph2d | Bar Graphs Side by Side Example - - - - - - - -

Graph2d | Bar Graphs Side by Side Example

-
- When using Bar graphs, it can often be the case that there are multiple bars on the same timepoint. This may not always be the desired result. You can use the - barChart.handleOverlap option to automatically plot the bars next to eachother or stacked on top of eachother if they occupy the same timeslot. By default, this option is on, the bars overlap. - Use the dropdown box to experiment with the options. The stacked only really makes sense when using groups as is shown in the next example. - -

- Handle overlap:
-
-
- -
- - - - \ No newline at end of file diff --git a/examples/graph2d/11_barsSideBySideGroups.html b/examples/graph2d/11_barsSideBySideGroups.html deleted file mode 100644 index b54ee119..00000000 --- a/examples/graph2d/11_barsSideBySideGroups.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - Graph2d | Bar Graphs Side by Side Example with Groups - - - - - - - -

Graph2d | Bar Graphs Side by Side Example with Groups

-
- When using Bar graphs, it can often be the case that there are multiple bars on the same timepoint. This may not always be the desired result. You can use the - barChart.handleOverlap option to automatically plot the bars next to eachother or stacked on top of eachother if they occupy the same timeslot. By default, this option is on, the bars overlap. - Use the dropdown box to experiment with the options. The stacked only really makes sense when using groups as is shown here. - -

- Handle overlap: -
-
- -
- - - - \ No newline at end of file diff --git a/examples/graph2d/12_customRange.html b/examples/graph2d/12_customRange.html deleted file mode 100644 index eb8f091a..00000000 --- a/examples/graph2d/12_customRange.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - Graph2d | Bar Graph Example - - - - - - - -

Graph2d | Custom axis range

-
- You can define a custom range for the Y axis. Since there are two Y axis, you can define both of them. You can also - only define the min or max values. Since one of the Y axis is slaved to the other one (the right one is slaved to the left one), - you cannot absolutely define the range of the slaved axis because it has to use the same lines. The values you supply are used as guidelines however. - If the zero-lines have to be aligned, you can use the option alignZeros. It is enabled by default. - -
-var options = {
-    dataAxis: {
-        customRange: {
-            left: {
-                min:-5, max:30
-            },
-            right: {
-                min:-5
-            }
-        }
-    }
-};
-
-
-
- -
- - - - \ No newline at end of file diff --git a/examples/graph2d/13_localization.html b/examples/graph2d/13_localization.html deleted file mode 100644 index f249fc6f..00000000 --- a/examples/graph2d/13_localization.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - Graph2d | Localization - - - - - - - - -

Graph2d | Localization

-

- To localize Graph2d, one has to load a version of moment.js including locales. To set a locale, specify option {locale: STRING}. -

- -

- - -

- -
- - - - \ No newline at end of file diff --git a/examples/graph2d/14_toggleGroups.html b/examples/graph2d/14_toggleGroups.html deleted file mode 100644 index f84d6188..00000000 --- a/examples/graph2d/14_toggleGroups.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - Graph2d | Toggle Groups Example - - - - - - - - -

Graph2d | Groups Example

-
- This example shows the groups visibility functionality within Graph2d. Groups have their own visibility option. By using this, - all graph2d instances using those groups would show or hide that group. If you have multiple instances sharing the same data and groups, - you can use the groups.visibility option to set it on an instance level. The graphs below all share the same groups, items and initial options. - We then use a setOptions like so: - - -
-        graph2d1.setOptions({
-            groups:{
-                visibility:{
-                    0:true,               // group id:0 visible
-                    1:false,              // group id:1 hidden
-                    2:false,              // group id:2 hidden
-                    3:false,              // group id:3 hidden
-                    "__ungrouped__":false // default group hidden
-                }
-            }
-        })
-    
-
-
- -
-
-
-
-
-
- - - - \ No newline at end of file diff --git a/examples/graph2d/15_streaming_data.html b/examples/graph2d/15_streaming_data.html deleted file mode 100644 index 4271320f..00000000 --- a/examples/graph2d/15_streaming_data.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - Graph2d | Streaming data - - - - - - - -

Graph2d | Streaming data

-

- This example demonstrates how to apply streaming data input to the Graph2d. The example shows two different ways to let the window move along with the new data, and there are more strategies for that. Note also that it is possible to disable moving and/or zooming the graph by setting options moveable and zoomable false. -

- -

- - -

- -
- - - - \ No newline at end of file diff --git a/examples/graph2d/16_bothAxis_titles.html b/examples/graph2d/16_bothAxis_titles.html deleted file mode 100644 index 8351677e..00000000 --- a/examples/graph2d/16_bothAxis_titles.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - Graph2d | Axis Titles and Styling - - - - - - - -

Graph2d | Axis Titles and Styling

-
- - - - - -
- This example shows setting a title for the left and right axis. Optionally the example allows the user - to show icons and labels on the left and right axis. - - - - - - - - - - - - - - - - - - - - - - -
Left decimals -
-
-
-
-
- - - - \ No newline at end of file diff --git a/examples/graph2d/17_dynamicStyling.html b/examples/graph2d/17_dynamicStyling.html deleted file mode 100644 index fed71c38..00000000 --- a/examples/graph2d/17_dynamicStyling.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - Graph2d | Dynamic Styling - - - - - - - -

Graph2d | Dynamic Styling Example

- -
- This example shows how to programmatically change the styling of a group. While this can also - be done in CSS, this must be statically defined, and the programmatic interface allows the - user to define the look of the graph at runtime. -
-
- - - - - - - - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Line Color - -
Line Style - -
Line thickness - -
Fill Position - -
Fill Color - -
Fill Opacity - -
Points Shape - -
Points Size - -
Points Color - -
Point Line Thickness - -
Points Fill Color - -
-
- - - - - diff --git a/examples/graph2d/18_scatterplot.html b/examples/graph2d/18_scatterplot.html deleted file mode 100644 index 51c4bf63..00000000 --- a/examples/graph2d/18_scatterplot.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - Graph2d | Scatterplot - - - - - - - -

Graph2d | Scatterplot

-
- You can manually disable the automatic sorting of the datapoints by using the sort option. You can use this with the - style: 'points' option for making a scatterplot! -
-
-var options = {
-    sort: false,
-    sampling:false,
-    style:'points'
-};
-
-
-
- - - - \ No newline at end of file diff --git a/examples/graph2d/default.css b/examples/graph2d/default.css deleted file mode 100644 index f7afb828..00000000 --- a/examples/graph2d/default.css +++ /dev/null @@ -1,87 +0,0 @@ -html, body { - width: 100%; - height: 100%; - padding: 0; - margin: 0; -} - -body, td, th { - font-family: arial, sans-serif; - font-size: 11pt; - color: #4D4D4D; - line-height: 1.7em; -} - -#container { - margin: 0 auto; - padding-bottom: 50px; - width: 900px; -} - -h1 { - font-size: 180%; - font-weight: bold; - padding: 0; - margin: 1em 0 1em 0; -} - -h2 { - padding-top: 20px; - padding-bottom: 10px; - border-bottom: 1px solid #a0c0f0; - color: #2B7CE9; -} - -h3 { - font-size: 140%; -} - - -a { - color: #2B7CE9; - text-decoration: none; -} -a:visited { - color: #2E60A4; -} -a:hover { - color: red; - text-decoration: underline; -} - -hr { - border: none 0; - border-top: 1px solid #abc; - height: 1px; -} - -pre { - display: block; - font-size: 10pt; - line-height: 1.5em; - font-family: monospace; -} - -pre, code { - background-color: #f5f5f5; -} - -table -{ - border-collapse: collapse; -} - -th { - font-weight: bold; - border: 1px solid lightgray; - background-color: #E5E5E5; - text-align: left; - vertical-align: top; - padding: 5px; -} - -td { - border: 1px solid lightgray; - padding: 5px; - vertical-align: top; -} diff --git a/examples/graph2d/index.html b/examples/graph2d/index.html deleted file mode 100644 index 1bfe0151..00000000 --- a/examples/graph2d/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - diff --git a/examples/graph3d/default.css b/examples/graph3d/default.css deleted file mode 100644 index f7afb828..00000000 --- a/examples/graph3d/default.css +++ /dev/null @@ -1,87 +0,0 @@ -html, body { - width: 100%; - height: 100%; - padding: 0; - margin: 0; -} - -body, td, th { - font-family: arial, sans-serif; - font-size: 11pt; - color: #4D4D4D; - line-height: 1.7em; -} - -#container { - margin: 0 auto; - padding-bottom: 50px; - width: 900px; -} - -h1 { - font-size: 180%; - font-weight: bold; - padding: 0; - margin: 1em 0 1em 0; -} - -h2 { - padding-top: 20px; - padding-bottom: 10px; - border-bottom: 1px solid #a0c0f0; - color: #2B7CE9; -} - -h3 { - font-size: 140%; -} - - -a { - color: #2B7CE9; - text-decoration: none; -} -a:visited { - color: #2E60A4; -} -a:hover { - color: red; - text-decoration: underline; -} - -hr { - border: none 0; - border-top: 1px solid #abc; - height: 1px; -} - -pre { - display: block; - font-size: 10pt; - line-height: 1.5em; - font-family: monospace; -} - -pre, code { - background-color: #f5f5f5; -} - -table -{ - border-collapse: collapse; -} - -th { - font-weight: bold; - border: 1px solid lightgray; - background-color: #E5E5E5; - text-align: left; - vertical-align: top; - padding: 5px; -} - -td { - border: 1px solid lightgray; - padding: 5px; - vertical-align: top; -} diff --git a/examples/graph3d/example01_basis.html b/examples/graph3d/example01_basis.html deleted file mode 100644 index b088aa0c..00000000 --- a/examples/graph3d/example01_basis.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - Graph 3D demo - - - - - - - - - -
- -
- - diff --git a/examples/graph3d/example02_camera.html b/examples/graph3d/example02_camera.html deleted file mode 100644 index 3c14adfe..00000000 --- a/examples/graph3d/example02_camera.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - Graph 3D camera position - - - - - - - - - -

Graph 3d camera position

- - - - - - - - - - - - - - - - - -
Horizontal angle (0 to 2*pi)
Vertical angle (0 to 0.5*pi)
Distance (0.71 to 5.0)
- -
- -
- - diff --git a/examples/graph3d/example03_filter.html b/examples/graph3d/example03_filter.html deleted file mode 100644 index 58a0bc3e..00000000 --- a/examples/graph3d/example03_filter.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - Graph 3D demo - - - - - - - - - -
- -
- - diff --git a/examples/graph3d/example04_animate.html b/examples/graph3d/example04_animate.html deleted file mode 100644 index 779e6a28..00000000 --- a/examples/graph3d/example04_animate.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - Graph 3D animation demo - - - - - - - - - -
- -
- - diff --git a/examples/graph3d/example05_line.html b/examples/graph3d/example05_line.html deleted file mode 100644 index 7a7e9601..00000000 --- a/examples/graph3d/example05_line.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - Graph 3D line demo - - - - - - - - - -
- -
- - diff --git a/examples/graph3d/example06_moving_dots.html b/examples/graph3d/example06_moving_dots.html deleted file mode 100644 index f5664bb5..00000000 --- a/examples/graph3d/example06_moving_dots.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - Graph 3D animation moving dots - - - - - - - - - -
- -
- - diff --git a/examples/graph3d/example07_dot_cloud_colors.html b/examples/graph3d/example07_dot_cloud_colors.html deleted file mode 100644 index eab36f26..00000000 --- a/examples/graph3d/example07_dot_cloud_colors.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - Graph 3D cloud with colored dots - - - - - - - - - -
- -
- - diff --git a/examples/graph3d/example08_dot_cloud_size.html b/examples/graph3d/example08_dot_cloud_size.html deleted file mode 100644 index edff678c..00000000 --- a/examples/graph3d/example08_dot_cloud_size.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - Graph 3D cloud with sized dots - - - - - - - - -
- -
- - diff --git a/examples/graph3d/example09_mobile.html b/examples/graph3d/example09_mobile.html deleted file mode 100644 index 7d0b0c35..00000000 --- a/examples/graph3d/example09_mobile.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - Graph 3D demo - - - - - - - - - - - - -
- - diff --git a/examples/graph3d/example10_styles.html b/examples/graph3d/example10_styles.html deleted file mode 100644 index 7791d985..00000000 --- a/examples/graph3d/example10_styles.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - Graph 3D styles - - - - - - - - - - -

- -

- -

- -

- -

- -

-

- -

- -
- -
- - diff --git a/examples/graph3d/example11_tooltips.html b/examples/graph3d/example11_tooltips.html deleted file mode 100644 index e4244387..00000000 --- a/examples/graph3d/example11_tooltips.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - Graph 3D tooltips - - - - - - - - - - -

- -

- -
- -
- - diff --git a/examples/graph3d/example12_ticks.html b/examples/graph3d/example12_ticks.html deleted file mode 100644 index 0d4c4cdb..00000000 --- a/examples/graph3d/example12_ticks.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - Graph 3D Axis Ticks - - - - - - - - - - -

- -

- -
- -
- - diff --git a/examples/graph3d/index.html b/examples/graph3d/index.html deleted file mode 100644 index 3e7a9b6f..00000000 --- a/examples/graph3d/index.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - diff --git a/examples/graph3d/playground/csv2array.js b/examples/graph3d/playground/csv2array.js deleted file mode 100644 index 95d0c4a6..00000000 --- a/examples/graph3d/playground/csv2array.js +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Convert data in CSV (comma separated value) format to a javascript array. - * - * Values are separated by a comma, or by a custom one character delimeter. - * Rows are separated by a new-line character. - * - * Leading and trailing spaces and tabs are ignored. - * Values may optionally be enclosed by double quotes. - * Values containing a special character (comma's, double-quotes, or new-lines) - * must be enclosed by double-quotes. - * Embedded double-quotes must be represented by a pair of consecutive - * double-quotes. - * - * Example usage: - * var csv = '"x", "y", "z"\n12.3, 2.3, 8.7\n4.5, 1.2, -5.6\n'; - * var array = csv2array(csv); - * - * Author: Jos de Jong, 2010 - * - * @param {string} data The data in CSV format. - * @param {string} delimeter [optional] a custom delimeter. Comma ',' by default - * The Delimeter must be a single character. - * @return {Array} array A two dimensional array containing the data - * @throw {String} error The method throws an error when there is an - * error in the provided data. - */ -function csv2array(data, delimeter) { - // Retrieve the delimeter - if (delimeter == undefined) - delimeter = ','; - if (delimeter && delimeter.length > 1) - delimeter = ','; - - // initialize variables - var newline = '\n'; - var eof = ''; - var i = 0; - var c = data.charAt(i); - var row = 0; - var col = 0; - var array = new Array(); - - while (c != eof) { - // skip whitespaces - while (c == ' ' || c == '\t' || c == '\r') { - c = data.charAt(++i); // read next char - } - - // get value - var value = ""; - if (c == '\"') { - // value enclosed by double-quotes - c = data.charAt(++i); - - do { - if (c != '\"') { - // read a regular character and go to the next character - value += c; - c = data.charAt(++i); - } - - if (c == '\"') { - // check for escaped double-quote - var cnext = data.charAt(i+1); - if (cnext == '\"') { - // this is an escaped double-quote. - // Add a double-quote to the value, and move two characters ahead. - value += '\"'; - i += 2; - c = data.charAt(i); - } - } - } - while (c != eof && c != '\"'); - - if (c == eof) { - throw "Unexpected end of data, double-quote expected"; - } - - c = data.charAt(++i); - } - else { - // value without quotes - while (c != eof && c != delimeter && c!= newline && c != ' ' && c != '\t' && c != '\r') { - value += c; - c = data.charAt(++i); - } - } - - // add the value to the array - if (array.length <= row) - array.push(new Array()); - array[row].push(value); - - // skip whitespaces - while (c == ' ' || c == '\t' || c == '\r') { - c = data.charAt(++i); - } - - // go to the next row or column - if (c == delimeter) { - // to the next column - col++; - } - else if (c == newline) { - // to the next row - col = 0; - row++; - } - else if (c != eof) { - // unexpected character - throw "Delimiter expected after character " + i; - } - - // go to the next character - c = data.charAt(++i); - } - - return array; -} diff --git a/examples/graph3d/playground/csv2datatable.html b/examples/graph3d/playground/csv2datatable.html deleted file mode 100644 index 35dc9bd0..00000000 --- a/examples/graph3d/playground/csv2datatable.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - Convert CSV to Google Datatable - - - - - - - - - - -
- -
- -CSV
- -
-
- -
-
- -Google DataTable
- - - - diff --git a/examples/graph3d/playground/datasource.html b/examples/graph3d/playground/datasource.html deleted file mode 100644 index efb47e1c..00000000 --- a/examples/graph3d/playground/datasource.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - Graph3d documentation - - - - - - - - -
-<?php
-
-/*
-This datasource returns a response in the form of a google query response
-
-USAGE
-All parameters are optional
-datasource.php?xmin=0&xmax=314&xstepnum=25&ymin=0&ymax=314&ystepnum=25
-
-DOCUMENTATION
-http://code.google.com/apis/visualization/documentation/dev/implementing_data_source.html
-
-
-EXAMPLE OF A RESPONSE FILE
-
-Note that the reqId in the response must correspond with the reqId from the
-request.
-________________________________________________________________________________
-
-google.visualization.Query.setResponse({
-  version:'0.6',
-  reqId:'0',
-  status:'ok',
-  table:{
-    cols:[
-      {id:'x',
-       label:'x',
-       type:'number'},
-      {id:'y',
-       label:'y',
-       type:'number'},
-      {id:'value',
-       label:'value',
-       type:'number'}
-    ],
-    rows:[
-      {c:[{v:0}, {v:0}, {v:10.0}]},
-      {c:[{v:1}, {v:0}, {v:12.0}]},
-      {c:[{v:2}, {v:0}, {v:13.0}]},
-      {c:[{v:0}, {v:1}, {v:11.0}]},
-      {c:[{v:1}, {v:1}, {v:14.0}]},
-      {c:[{v:2}, {v:1}, {v:11.0}]}
-    ]
-  }
-});
-________________________________________________________________________________
-
-*/
-
-
-/**
- * A custom function
- */
-function custom($x, $y) {
-  $d = sqrt(pow($x/100, 2) + pow($y/100, 2));
-
-  return 50 * exp(-5 * $d / 10) * sin($d*5)
-}
-
-
-
-
-// retrieve parameters
-$default_stepnum = 25;
-
-$xmin     = isset($_REQUEST['xmin'])     ? (float)$_REQUEST['xmin']   : -100;
-$xmax     = isset($_REQUEST['xmax'])     ? (float)$_REQUEST['xmax']   : 100;
-$xstepnum = isset($_REQUEST['xstepnum']) ? (int)$_REQUEST['xstepnum'] : $default_stepnum;
-
-$ymin     = isset($_REQUEST['ymin'])     ? (float)$_REQUEST['ymin']   : -100;
-$ymax     = isset($_REQUEST['ymax'])     ? (float)$_REQUEST['ymax']   : 100;
-$ystepnum = isset($_REQUEST['ystepnum']) ? (int)$_REQUEST['ystepnum'] : $default_stepnum;
-
-// in the reply we must fill in the request id that came with the request
-$reqId = getReqId();
-
-// check for a maximum number of datapoints (for safety)
-if ($xstepnum * $ystepnum > 10000) {
-  echo "google.visualization.Query.setResponse({
-    version:'0.6',
-    reqId:'$reqId',
-    status:'error',
-    errors:[{reason:'not_supported', message:'Maximum number of datapoints exceeded'}]
-  });";
-
-  exit;
-}
-
-
-// output the header part of the response
-echo "google.visualization.Query.setResponse({
-  version:'0.6',
-  reqId:'$reqId',
-  status:'ok',
-  table:{
-    cols:[
-      {id:'x',
-       label:'x',
-       type:'number'},
-      {id:'y',
-       label:'y',
-       type:'number'},
-      {id:'value',
-       label:'',
-       type:'number'}
-    ],
-    rows:[";
-
-// output the actual values
-$first = true;
-$xstep = ($xmax - $xmin) / $xstepnum;
-$ystep = ($ymax - $ymin) / $ystepnum;
-for ($x = $xmin; $x < $xmax; $x+=$xstep) {
-  for ($y = $ymin; $y < $ymax; $y+=$ystep) {
-    $value = custom($x,$y);
-
-    if (!$first) {
-      echo ",\n";
-    }
-    else {
-      echo "\n";
-    }
-    echo "      {c:[{v:$x}, {v:$y}, {v:$value}]}";
-
-    $first = false;
-  }
-}
-
-
-// output the end part of the response
-echo "
-    ]
-  }
-});
-";
-
-
-/**
- * Retrieve the request id from the get/post data
- * @return {number} $reqId       The request id, or 0 if not found
- */
-function getReqId() {
-  $reqId = 0;
-
-  foreach ($_REQUEST as $req) {
-    if (substr($req, 0,6) == "reqId:") {
-      $reqId = substr($req, 6);
-    }
-  }
-
-  return $reqId;
-}
-
-
-?>
-
-
- - - diff --git a/examples/graph3d/playground/datasource.php b/examples/graph3d/playground/datasource.php deleted file mode 100644 index 9c265cb9..00000000 --- a/examples/graph3d/playground/datasource.php +++ /dev/null @@ -1,155 +0,0 @@ - 10000) { - echo "google.visualization.Query.setResponse({ - version:'0.6', - reqId:'$reqId', - status:'error', - errors:[{reason:'not_supported', message:'Maximum number of datapoints exceeded'}] - });"; - - exit; -} - - -// output the header part of the response -echo "google.visualization.Query.setResponse({ - version:'0.6', - reqId:'$reqId', - status:'ok', - table:{ - cols:[ - {id:'x', - label:'x', - type:'number'}, - {id:'y', - label:'y', - type:'number'}, - {id:'value', - label:'', - type:'number'} - ], - rows:["; - -// output the actual values -$first = true; -$xstep = ($xmax - $xmin) / $xstepnum; -$ystep = ($ymax - $ymin) / $ystepnum; -for ($x = $xmin; $x < $xmax; $x+=$xstep) { - for ($y = $ymin; $y < $ymax; $y+=$ystep) { - $value = custom($x,$y); - - if (!$first) { - echo ",\n"; - } - else { - echo "\n"; - } - echo " {c:[{v:$x}, {v:$y}, {v:$value}]}"; - - $first = false; - } -} - - -// output the end part of the response -echo " - ] - } -}); -"; - - -/** - * Retrieve the request id from the get/post data - * @return {number} $reqId The request id, or 0 if not found - */ -function getReqId() { - $reqId = 0; - - foreach ($_REQUEST as $req) { - if (substr($req, 0,6) == "reqId:") { - $reqId = substr($req, 6); - } - } - - return $reqId; -} - - -?> diff --git a/examples/graph3d/playground/index.html b/examples/graph3d/playground/index.html deleted file mode 100644 index d9a7ed3a..00000000 --- a/examples/graph3d/playground/index.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - Graph 3D - Playground - - - - - - - - - - - - - -

Graph 3D - Playground

- - --- - - - - - - - -
-

Data

-

- Graph 3D expects a data table with first three to five columns: - colums x, y, z (optional), - style, filter (optional). -

- - - - - - - -
- Csv - - -
- -
-
-

Graph

-

- -

- -
-
-

Options

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionValue
width for example "500px" or "100%"
height for example "500px" or "100%"
style - -
showAnimationControls
showGrid
showPerspective
showShadow
keepAspectRatio
verticalRatio a value between 0.1 and 1.0
animationInterval in milliseconds
animationPreload
animationAutoStart
xCenter
yCenter
xMin
xMax
xStep
yMin
yMax
yStep
zMin
zMax
zStep
valueMin
valueMax
xBarWidth
yBarWidth
xLabel
yLabel
zLabel
filterLabel
legendLabel
- -
- - diff --git a/examples/graph3d/playground/playground.css b/examples/graph3d/playground/playground.css deleted file mode 100644 index 5139d4b5..00000000 --- a/examples/graph3d/playground/playground.css +++ /dev/null @@ -1,91 +0,0 @@ -body -{ - font: 13px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; -} - -h1 -{ - font-size: 180%; - font-weight: bold; - - margin: 1em 0 1em 0; -} - -h2 -{ - font-size: 140%; - padding: 5px; - border-bottom: 1px solid #a0c0f0; - color: #2B7CE9; -} - -h3 -{ - font-size: 100%; -} - -hr -{ - border: none 0; - border-top: 1px solid #a0c0f0; - height: 1px; -} - -pre.code -{ - display: block; - padding: 8px; - border: 1px dashed #ccc; -} - -table -{ - border-collapse: collapse; -} - -th, td -{ - font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; - text-align: left; - vertical-align: top; - /*border: 1px solid #888;*/ - padding: 3px; -} - -th -{ - font-weight: bold; -} - - -textarea { - width: 500px; - height: 200px; - border: 1px solid #888; -} - -input[type=text] { - border: 1px solid #888; -} - -#datasourceText, #googlespreadsheetText { - width: 500px; - -} - -.info { - color: gray; -} - -a { - color: gray; -} -a:hover { - color: red; -} - - -#graph { - width: 100%; - height: 600px; -} diff --git a/examples/graph3d/playground/playground.js b/examples/graph3d/playground/playground.js deleted file mode 100644 index 5b93dddb..00000000 --- a/examples/graph3d/playground/playground.js +++ /dev/null @@ -1,544 +0,0 @@ - -var query = null; - - -function load() { - selectDataType(); - - loadCsvExample(); - loadJsonExample(); - loadJavascriptExample(); - loadGooglespreadsheetExample(); - loadDatasourceExample(); - - draw(); -} - - - -/** - * Upate the UI based on the currently selected datatype - */ -function selectDataType() { -} - - -function round(value, decimals) { - return parseFloat(value.toFixed(decimals)); -} - -function loadCsvExample() { - var csv = ""; - - // headers - csv += '"x", "y", "value"\n'; - - // create some nice looking data with sin/cos - var steps = 30; - var axisMax = 314; - var axisStep = axisMax / steps; - for (var x = 0; x < axisMax; x+=axisStep) { - for (var y = 0; y < axisMax; y+=axisStep) { - var value = Math.sin(x/50) * Math.cos(y/50) * 50 + 50; - - csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(value, 2) + '\n'; - } - } - - document.getElementById("csvTextarea").innerHTML = csv; - - // also adjust some settings - document.getElementById("style").value = "surface"; - document.getElementById("verticalRatio").value = "0.5"; - - document.getElementById("xLabel").value = "x"; - document.getElementById("yLabel").value = "y"; - document.getElementById("zLabel").value = "value"; - document.getElementById("filterLabel").value = ""; - document.getElementById("legendLabel").value = ""; - drawCsv(); -} - - -function loadCsvAnimationExample() { - var csv = ""; - - // headers - csv += '"x", "y", "value", "time"\n'; - - // create some nice looking data with sin/cos - var steps = 20; - var axisMax = 314; - var tMax = 31; - var axisStep = axisMax / steps; - for (var t = 0; t < tMax; t++) { - for (var x = 0; x < axisMax; x+=axisStep) { - for (var y = 0; y < axisMax; y+=axisStep) { - var value = Math.sin(x/50 + t/10) * Math.cos(y/50 + t/10) * 50 + 50; - csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(value, 2) + ', ' + t + '\n'; - } - } - } - - document.getElementById("csvTextarea").innerHTML = csv; - - // also adjust some settings - document.getElementById("style").value = "surface"; - document.getElementById("verticalRatio").value = "0.5"; - document.getElementById("animationInterval").value = 100; - - document.getElementById("xLabel").value = "x"; - document.getElementById("yLabel").value = "y"; - document.getElementById("zLabel").value = "value"; - document.getElementById("filterLabel").value = "time"; - document.getElementById("legendLabel").value = ""; - - drawCsv(); -} - - -function loadCsvLineExample() { - var csv = ""; - - // headers - csv += '"sin(t)", "cos(t)", "t"\n'; - - // create some nice looking data with sin/cos - var steps = 100; - var axisMax = 314; - var tmax = 4 * 2 * Math.PI; - var axisStep = axisMax / steps; - for (t = 0; t < tmax; t += tmax / steps) { - var r = 1; - var x = r * Math.sin(t); - var y = r * Math.cos(t); - var z = t; - csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + '\n'; - } - - document.getElementById("csvTextarea").innerHTML = csv; - - // also adjust some settings - document.getElementById("style").value = "line"; - document.getElementById("verticalRatio").value = "1.0"; - document.getElementById("showPerspective").checked = false; - - document.getElementById("xLabel").value = "sin(t)"; - document.getElementById("yLabel").value = "cos(t)"; - document.getElementById("zLabel").value = "t"; - document.getElementById("filterLabel").value = ""; - document.getElementById("legendLabel").value = ""; - - drawCsv(); -} - -function loadCsvMovingDotsExample() { - var csv = ""; - - // headers - csv += '"x", "y", "z", "color value", "time"\n'; - - // create some shortcuts to math functions - var sin = Math.sin; - var cos = Math.cos; - var pi = Math.PI; - - // create the animation data - var tmax = 2.0 * pi; - var tstep = tmax / 75; - var dotCount = 1; // set this to 1, 2, 3, 4, ... - for (var t = 0; t < tmax; t += tstep) { - var tgroup = parseFloat(t.toFixed(2)); - var value = t; - - // a dot in the center - var x = 0; - var y = 0; - var z = 0; - csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n'; - - // one or multiple dots moving around the center - for (var dot = 0; dot < dotCount; dot++) { - var tdot = t + 2*pi * dot / dotCount; - //data.addRow([sin(tdot), cos(tdot), sin(tdot), value, tgroup]); - //data.addRow([sin(tdot), -cos(tdot), sin(tdot + tmax*1/2), value, tgroup]); - - var x = sin(tdot); - var y = cos(tdot); - var z = sin(tdot); - csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n'; - - var x = sin(tdot); - var y = -cos(tdot); - var z = sin(tdot + tmax*1/2); - csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n'; - - } - } - - document.getElementById("csvTextarea").innerHTML = csv; - - // also adjust some settings - document.getElementById("style").value = "dot-color"; - document.getElementById("verticalRatio").value = "1.0"; - document.getElementById("animationInterval").value = "35"; - document.getElementById("animationAutoStart").checked = true; - document.getElementById("showPerspective").checked = true; - - document.getElementById("xLabel").value = "x"; - document.getElementById("yLabel").value = "y"; - document.getElementById("zLabel").value = "z"; - document.getElementById("filterLabel").value = "time"; - document.getElementById("legendLabel").value = "color value"; - - drawCsv(); -} - -function loadCsvColoredDotsExample() { - var csv = ""; - - // headers - csv += '"x", "y", "z", "distance"\n'; - - // create some shortcuts to math functions - var sqrt = Math.sqrt; - var pow = Math.pow; - var random = Math.random; - - // create the animation data - var imax = 200; - for (var i = 0; i < imax; i++) { - var x = pow(random(), 2); - var y = pow(random(), 2); - var z = pow(random(), 2); - var dist = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2)); - - csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(dist, 2)+ '\n'; - } - - document.getElementById("csvTextarea").innerHTML = csv; - - // also adjust some settings - document.getElementById("style").value = "dot-color"; - document.getElementById("verticalRatio").value = "1.0"; - document.getElementById("showPerspective").checked = true; - - document.getElementById("xLabel").value = "x"; - document.getElementById("yLabel").value = "y"; - document.getElementById("zLabel").value = "value"; - document.getElementById("legendLabel").value = "distance" - document.getElementById("filterLabel").value = ""; - - drawCsv(); -} - -function loadCsvSizedDotsExample() { - var csv = ""; - - // headers - csv += '"x", "y", "z", "range"\n'; - - // create some shortcuts to math functions - var sqrt = Math.sqrt; - var pow = Math.pow; - var random = Math.random; - - // create the animation data - var imax = 200; - for (var i = 0; i < imax; i++) { - var x = pow(random(), 2); - var y = pow(random(), 2); - var z = pow(random(), 2); - var dist = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2)); - var range = sqrt(2) - dist; - - csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(range, 2)+ '\n'; - } - - document.getElementById("csvTextarea").innerHTML = csv; - - // also adjust some settings - document.getElementById("style").value = "dot-size"; - document.getElementById("verticalRatio").value = "1.0"; - document.getElementById("showPerspective").checked = true; - - document.getElementById("xLabel").value = "x"; - document.getElementById("yLabel").value = "y"; - document.getElementById("zLabel").value = "z"; - document.getElementById("legendLabel").value = "range"; - document.getElementById("filterLabel").value = ""; - - drawCsv(); -} - - -function loadJsonExample() { -} - - -function loadJavascriptExample() { -} - -function loadJavascriptFunctionExample() { -} - -function loadGooglespreadsheetExample() { - -} - - -function loadDatasourceExample() { -} - - - -/** - * Retrieve teh currently selected datatype - * @return {string} datatype - */ -function getDataType() { - return "csv"; -} - - -/** - * Retrieve the datatable from the entered contents of the csv text - * @param {boolean} [skipValue] | if true, the 4th element is a filter value - * @return {vis DataSet} - */ -function getDataCsv() { - var csv = document.getElementById("csvTextarea").value; - - // parse the csv content - var csvArray = csv2array(csv); - - var data = new vis.DataSet(); - - var skipValue = false; - if (document.getElementById("filterLabel").value != "" && document.getElementById("legendLabel").value == "") { - skipValue = true; - } - - // read all data - for (var row = 1; row < csvArray.length; row++) { - if (csvArray[row].length == 4 && skipValue == false) { - data.add({x:parseFloat(csvArray[row][0]), - y:parseFloat(csvArray[row][1]), - z:parseFloat(csvArray[row][2]), - style:parseFloat(csvArray[row][3])}); - } - else if (csvArray[row].length == 4 && skipValue == true) { - data.add({x:parseFloat(csvArray[row][0]), - y:parseFloat(csvArray[row][1]), - z:parseFloat(csvArray[row][2]), - filter:parseFloat(csvArray[row][3])}); - } - else if (csvArray[row].length == 5) { - data.add({x:parseFloat(csvArray[row][0]), - y:parseFloat(csvArray[row][1]), - z:parseFloat(csvArray[row][2]), - style:parseFloat(csvArray[row][3]), - filter:parseFloat(csvArray[row][4])}); - } - else { - data.add({x:parseFloat(csvArray[row][0]), - y:parseFloat(csvArray[row][1]), - z:parseFloat(csvArray[row][2]), - style:parseFloat(csvArray[row][2])}); - } - } - - return data; -} - -/** - * remove leading and trailing spaces - */ -function trim(text) { - while (text.length && text.charAt(0) == ' ') - text = text.substr(1); - - while (text.length && text.charAt(text.length-1) == ' ') - text = text.substr(0, text.length-1); - - return text; -} - -/** - * Retrieve the datatable from the entered contents of the javascript text - * @return {vis Dataset} - */ -function getDataJson() { - var json = document.getElementById("jsonTextarea").value; - var data = new google.visualization.DataTable(json); - - return data; -} - - -/** - * Retrieve the datatable from the entered contents of the javascript text - * @return {vis Dataset} - */ -function getDataJavascript() { - var js = document.getElementById("javascriptTextarea").value; - - eval(js); - - return data; -} - - -/** - * Retrieve the datatable from the entered contents of the datasource text - * @return {vis Dataset} - */ -function getDataDatasource() { -} - -/** - * Retrieve a JSON object with all options - */ -function getOptions() { - return { - width: document.getElementById("width").value, - height: document.getElementById("height").value, - style: document.getElementById("style").value, - showAnimationControls: (document.getElementById("showAnimationControls").checked != false), - showGrid: (document.getElementById("showGrid").checked != false), - showPerspective: (document.getElementById("showPerspective").checked != false), - showShadow: (document.getElementById("showShadow").checked != false), - keepAspectRatio: (document.getElementById("keepAspectRatio").checked != false), - verticalRatio: document.getElementById("verticalRatio").value, - animationInterval: document.getElementById("animationInterval").value, - xLabel: document.getElementById("xLabel").value, - yLabel: document.getElementById("yLabel").value, - zLabel: document.getElementById("zLabel").value, - filterLabel: document.getElementById("filterLabel").value, - legendLabel: document.getElementById("legendLabel").value, - animationPreload: (document.getElementById("animationPreload").checked != false), - animationAutoStart:(document.getElementById("animationAutoStart").checked != false), - - xCenter: Number(document.getElementById("xCenter").value) || undefined, - yCenter: Number(document.getElementById("yCenter").value) || undefined, - - xMin: Number(document.getElementById("xMin").value) || undefined, - xMax: Number(document.getElementById("xMax").value) || undefined, - xStep: Number(document.getElementById("xStep").value) || undefined, - yMin: Number(document.getElementById("yMin").value) || undefined, - yMax: Number(document.getElementById("yMax").value) || undefined, - yStep: Number(document.getElementById("yStep").value) || undefined, - zMin: Number(document.getElementById("zMin").value) || undefined, - zMax: Number(document.getElementById("zMax").value) || undefined, - zStep: Number(document.getElementById("zStep").value) || undefined, - - valueMin: Number(document.getElementById("valueMin").value) || undefined, - valueMax: Number(document.getElementById("valueMax").value) || undefined, - - xBarWidth: Number(document.getElementById("xBarWidth").value) || undefined, - yBarWidth: Number(document.getElementById("yBarWidth").value) || undefined - }; -} - -/** - * Redraw the graph with the entered data and options - */ -function draw() { - return drawCsv(); -} - - -function drawCsv() { - // retrieve data and options - var data = getDataCsv(); - var options = getOptions(); - - // Creat a graph - var graph = new vis.Graph3d(document.getElementById('graph'), data, options); -} - -function drawJson() { - // retrieve data and options - var data = getDataJson(); - var options = getOptions(); - - // Creat a graph - var graph = new vis.Graph3d(document.getElementById('graph'), data, options); -} - -function drawJavascript() { - // retrieve data and options - var data = getDataJavascript(); - var options = getOptions(); - - // Creat a graph - var graph = new vis.Graph3d(document.getElementById('graph'), data, options); -} - - -function drawGooglespreadsheet() { - // Instantiate our graph object. - drawGraph = function(response) { - document.getElementById("draw").disabled = ""; - - if (response.isError()) { - error = 'Error: ' + response.getMessage(); - document.getElementById('graph').innerHTML = - "" + error + ""; ; - } - - // retrieve the data from the query response - data = response.getDataTable(); - - // specify options - options = getOptions(); - - // Instantiate our graph object. - var graph = new vis.Graph3d(document.getElementById('graph'), data, options); - } - - url = document.getElementById("googlespreadsheetText").value; - document.getElementById("draw").disabled = "disabled"; - - // send the request - query && query.abort(); - query = new google.visualization.Query(url); - query.send(drawGraph); -} - - -function drawDatasource() { - // Instantiate our graph object. - drawGraph = function(response) { - document.getElementById("draw").disabled = ""; - - if (response.isError()) { - error = 'Error: ' + response.getMessage(); - document.getElementById('graph').innerHTML = - "" + error + ""; ; - } - - // retrieve the data from the query response - data = response.getDataTable(); - - // specify options - options = getOptions(); - - // Instantiate our graph object. - var graph = new vis.Graph3d(document.getElementById('graph'), data, options); - }; - - url = document.getElementById("datasourceText").value; - document.getElementById("draw").disabled = "disabled"; - - // if the entered url is a google spreadsheet url, replace the part - // "/ccc?" with "/tq?" in order to retrieve a neat data query result - if (url.indexOf("/ccc?")) { - url.replace("/ccc?", "/tq?"); - } - - // send the request - query && query.abort(); - query = new google.visualization.Query(url); - query.send(drawGraph); -} diff --git a/examples/graph3d/playground/prettify/lang-apollo.js b/examples/graph3d/playground/prettify/lang-apollo.js deleted file mode 100644 index bfc0014c..00000000 --- a/examples/graph3d/playground/prettify/lang-apollo.js +++ /dev/null @@ -1,2 +0,0 @@ -PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/, -null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["apollo","agc","aea"]) \ No newline at end of file diff --git a/examples/graph3d/playground/prettify/lang-css.js b/examples/graph3d/playground/prettify/lang-css.js deleted file mode 100644 index 61157f38..00000000 --- a/examples/graph3d/playground/prettify/lang-css.js +++ /dev/null @@ -1,2 +0,0 @@ -PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[ \t\r\n\f]+/,null," \t\r\n\u000c"]],[["str",/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],["str",/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],["kwd",/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//], -["com",/^(?: - - - - - - - - - -
- - diff --git a/examples/network/09_sizing.html b/examples/network/09_sizing.html deleted file mode 100644 index a6ef2ab8..00000000 --- a/examples/network/09_sizing.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - Network | Sizing - - - - - - - - - - -
- - diff --git a/examples/network/10_multiline_text.html b/examples/network/10_multiline_text.html deleted file mode 100644 index dfea910d..00000000 --- a/examples/network/10_multiline_text.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - Network | Multiline text - - - - - - - - - - -
- - diff --git a/examples/network/11_custom_style.html b/examples/network/11_custom_style.html deleted file mode 100644 index b58eb07c..00000000 --- a/examples/network/11_custom_style.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - Network | Custom style - - - - - - - - - - -
- - diff --git a/examples/network/12_scalable_images.html b/examples/network/12_scalable_images.html deleted file mode 100644 index 50be00fe..00000000 --- a/examples/network/12_scalable_images.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - Network | Scalable images - - - - - - - - - - -
- -
- - diff --git a/examples/network/13_dashed_lines.html b/examples/network/13_dashed_lines.html deleted file mode 100644 index ceab2e54..00000000 --- a/examples/network/13_dashed_lines.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - Network | Dashed lines - - - - - - - - - - -

- This example shows the different options for dashed lines. -

- -
- - diff --git a/examples/network/14_dot_language.html b/examples/network/14_dot_language.html deleted file mode 100644 index ad645c9b..00000000 --- a/examples/network/14_dot_language.html +++ /dev/null @@ -1,19 +0,0 @@ - - - Network | DOT Language - - - - - -
- - - - diff --git a/examples/network/15_dot_language_playground.html b/examples/network/15_dot_language_playground.html deleted file mode 100644 index 021955c6..00000000 --- a/examples/network/15_dot_language_playground.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - Network | DOT language playground - - - - - - - - - - - - - - - - - - -
-

DOT language playground

- -
-
- - -
-
- - -
-
- - - - - - - - - - - diff --git a/examples/network/16_dynamic_data.html b/examples/network/16_dynamic_data.html deleted file mode 100644 index 34aca765..00000000 --- a/examples/network/16_dynamic_data.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - Network | DataSet - - - - - - - - - - - - -

- This example demonstrates dynamically adding, updating and removing nodes - and edges using a DataSet. -

- -

Adjust

- - - - - - -
-

Node

- - - - - - - - - - - - - - - - -
Action - - - -
-
-

Edge

- - - - - - - - - - - - - - - - - - - - - -
Action - - - -
-
- -

View

- - - - - - - - - - - - - -
-

Nodes

-

-    
-

Edges

-

-    
-

Network

-
-
- - - diff --git a/examples/network/17_network_info.html b/examples/network/17_network_info.html deleted file mode 100644 index 1619d4e3..00000000 --- a/examples/network/17_network_info.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - Network | Images - - - - - - - - - - - -
- - - - \ No newline at end of file diff --git a/examples/network/18_fully_random_nodes_clustering.html b/examples/network/18_fully_random_nodes_clustering.html deleted file mode 100644 index 71f64fe3..00000000 --- a/examples/network/18_fully_random_nodes_clustering.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - Network | Fully random nodes clustering - - - - - - - - - - -

Clustering - Fully random network

-
- This example shows a fully randomly generated set of nodes and connected edges. - By clicking the checkbox you can turn clustering on and off. If you increase the number of nodes to - a value higher than 100, automatic clustering is used before the initial draw (assuming the checkbox is checked). -
-
- Clustering is done automatically when zooming out. When zooming in over the cluster, the cluster pops open. When the cluster is very big, a special instance - will be created and the cluster contents will only be simulated in there. Double click will also open a cluster. -
-
- Try values of 500 and 5000 with and without clustering. All thresholds can be changed to suit your dataset. -
-
-
- - - - - -
-
- -
- -

- - diff --git a/examples/network/19_scale_free_graph_clustering.html b/examples/network/19_scale_free_graph_clustering.html deleted file mode 100644 index e782f748..00000000 --- a/examples/network/19_scale_free_graph_clustering.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - Network | Scale free network clustering - - - - - - - - - - -

Clustering - Scale-Free-Network

-
- This example shows the randomly generated scale-free-network set of nodes and connected edges from example 2. - By clicking the checkbox you can turn clustering on and off. If you increase the number of nodes to - a value higher than 100, automatic clustering is used before the initial draw (assuming the checkbox is checked). -
-
- Clustering is done automatically when zooming out. When zooming in over the cluster, the cluster pops open. When the cluster is very big, a special instance - will be created and the cluster contents will only be simulated in there. Double click will also open a cluster. -
-
- Try values of 500 and 5000 with and without clustering. All thresholds can be changed to suit your dataset. - Experiment with the clusterEdgeThreshold, which increases the formation of clusters when zoomed out (assuming the checkbox is checked). -
-
-
- - - - - - - -
-
- -
- -

- - diff --git a/examples/network/20_navigation.html b/examples/network/20_navigation.html deleted file mode 100644 index 8cf4edee..00000000 --- a/examples/network/20_navigation.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - Network | Navigation - - - - - - - - - - -

Navigation controls and keyboad navigation

-
- This example is the same as example 2, except for the navigation controls that have been activated. The navigation controls are described below.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Icons:
Keyboard shortcuts:
Up arrow
Down arrow
Left arrow
Right arrow
=
[
Page up
-
]
Page down
None
Description:
Move up
Move down
Move left
Move right
Zoom in
Zoom out
Zoom extent
-
- Apart from clicking the icons, you can also navigate using the keyboard. The buttons are in table above. - Zoom Extends changes the zoom and position of the camera to encompass all visible nodes. To correctly display the navigation icons, the vis.css file must be included. - The user is free to alter or overload the CSS classes but without them the navigation icons are not visible. - - -
-
- -
- - - -
-
- -
- -

- - diff --git a/examples/network/21_data_manipulation.html b/examples/network/21_data_manipulation.html deleted file mode 100644 index a878fcfa..00000000 --- a/examples/network/21_data_manipulation.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - Network | Data Manipulation - - - - - - - - - -

Editing the dataset

-
- In this example we have enabled the data manipulation setting. If the dataManipulation option is set to true, the edit button will appear. - If you prefer to have the toolbar visible initially, you can set the initiallyVisible option to true. The exact method is described in the docs. -

- The data manipulation allows the user to add nodes, connect them, edit them and delete any selected items. In this example we have created trigger functions - for the add and edit operations. By settings these trigger functions the user can direct the way the data is manipulated. In this example we have created a simple - pop-up that allows us to edit some of the properties. -
-
- -
- node
- - - - - -
id
label
- - -
-
-
- -

- - - diff --git a/examples/network/22_les_miserables.html b/examples/network/22_les_miserables.html deleted file mode 100644 index 5a5e0cc4..00000000 --- a/examples/network/22_les_miserables.html +++ /dev/null @@ -1,374 +0,0 @@ - - - - Network | Multiline text - - - - - - - - - - -
- - diff --git a/examples/network/23_hierarchical_layout.html b/examples/network/23_hierarchical_layout.html deleted file mode 100644 index 51f226f4..00000000 --- a/examples/network/23_hierarchical_layout.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - Network | Random nodes - - - - - - - - - - -

Hierarchical Layout - Scale-Free-Network

-
- This example shows the randomly generated scale-free-network set of nodes and connected edges from example 2. - In this example, hierarchical layout has been enabled and the vertical levels are determined automatically. -
-
-
- - - -
- - - - - - - -
- -
- -

- - diff --git a/examples/network/24_hierarchical_layout_userdefined.html b/examples/network/24_hierarchical_layout_userdefined.html deleted file mode 100644 index 59d127f8..00000000 --- a/examples/network/24_hierarchical_layout_userdefined.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - Network | Hierarchical Layout, userDefined - - - - - - - - - - -

Hierarchical Layout - User-defined

-
- This example shows a user-defined hierarchical layout. If the user defines levels for nodes but does not do so for all nodes, an alert will show up and hierarchical layout will be disabled. Either all or none can be defined. - If the smooth curves appear to be inverted, the direction of the edge is not in the same direction as the network. -
- - - - - -
- -
- -

- - - diff --git a/examples/network/25_physics_configuration.html b/examples/network/25_physics_configuration.html deleted file mode 100644 index 104040be..00000000 --- a/examples/network/25_physics_configuration.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - Network | Playing with Physics - - - - - - - - - - - -

Playing with Physics

-
- Every dataset is different. Nodes can have different sizes based on content, interconnectivity can be high or low etc. Because of this, network has a special option - that the user can use to explore which settings may be good for him or her. This is ment to be used during the development phase when you are implementing vis.js. Once you have found - settings you are happy with, you can supply them to network using the documented physics options. - - On start, the default settings will be loaded. Keep in mind that selecting the hierarchical simulation mode disables smooth curves. These will not be enabled again afterwards. -
-
-
- -

- - diff --git a/examples/network/26_staticSmoothCurves.html b/examples/network/26_staticSmoothCurves.html deleted file mode 100644 index 1c338269..00000000 --- a/examples/network/26_staticSmoothCurves.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - Network | Static smooth curves - - - - - - - - - -

Static smooth curves

-
- All the smooth curves in the examples so far have been using dynamic smooth curves. This means that each curve has a - support node which takes part in the physics simulation. For large networks or dense clusters, this may not be the ideal - solution. To solve this, static smooth curves have been added. The static smooth curves are based only on the positions of the connected - nodes. There are multiple ways to determine the way this curve is drawn. This example shows the effect of the different - types.

- Drag the nodes around each other to see how the smooth curves are drawn for each setting. For animated system, we - recommend only the continuous mode. In the next example you can see the effect of these methods on a large network. Keep in mind - that the direction (the from and to) of the curve matters. -

-
- -Smooth curve type: - -
- - - - - diff --git a/examples/network/27_world_cup_network.html b/examples/network/27_world_cup_network.html deleted file mode 100644 index 54e85cb5..00000000 --- a/examples/network/27_world_cup_network.html +++ /dev/null @@ -1,10109 +0,0 @@ - - - - Network | Static smooth curves - World Cup Network - - - - - - - - - -

Static smooth curves - World Cup Network

-
- The static smooth curves are based only on the positions of the connected nodes. - There are multiple ways to determine the way this curve is drawn. - This example shows the effect of the different types on a large network. -

- Also shown in this example is the inheritColor option of the edges as well as the roundness factor.
-

- To improve performance, the physics have been disabled with: -
{barnesHut: {gravitationalConstant: 0, centralGravity: 0, springConstant: 0}}
and we have enabled - the toggle hideEdgesOnDrag. -

-
- -Smooth curve type: -
-inheritColor option: -
-Roundness (0..1): (0.5 is max roundness for continuous, 1.0 for the others) -
-Hide edges on drag:
-Hide nodes on drag: - -
- - - - - - diff --git a/examples/network/28_world_cup_network_performance.html b/examples/network/28_world_cup_network_performance.html deleted file mode 100644 index cffc274c..00000000 --- a/examples/network/28_world_cup_network_performance.html +++ /dev/null @@ -1,10053 +0,0 @@ - - - - Network | Static smooth curves - World Cup Network - - - - - - - - - -

Performance - World Cup Network

-
- This example shows the performance of vis with a larger network. The edges in particular (~9200) are very computationally intensive - to draw. Drag and hold the graph to see the performance difference if the edges are hidden. -

- We use the following physics configuration:
- {barnesHut: {gravitationalConstant: -80000, springConstant: 0.001, springLength: 200}} -

-
- -
- - - - - - diff --git a/examples/network/29_neighbourhood_highlight.html b/examples/network/29_neighbourhood_highlight.html deleted file mode 100644 index 783dfb29..00000000 --- a/examples/network/29_neighbourhood_highlight.html +++ /dev/null @@ -1,10213 +0,0 @@ - - - - Network | Static smooth curves - World Cup Network - - - - - - - - - -

Dynamic Data - Neighbourhood Highlight

-
- This example shows the power of the DataSet. Once a node is clicked, all nodes are greyed out except for the first and second order connected nodes. - In this example we show how you can determine the order of connection per node as well as applying individual styling to the nodes based on whether or not - they are connected to the selected node. The code doing the highlighting only takes about 20ms, the rest of the time is the redrawing of the network (9200 edges..). -

-
- -
- - - - - - diff --git a/examples/network/30_importing_from_gephi.html b/examples/network/30_importing_from_gephi.html deleted file mode 100644 index 589d4333..00000000 --- a/examples/network/30_importing_from_gephi.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - Dynamic Data - Importing from Gephi (JSON) - - - - - - - - -

Dynamic Data - Importing from Gephi (JSON)

-
- This example shows how to import a JSON file exported by Gephi. The two options available for the import are - available through the checkboxes. You can download the Gephi JSON exporter here: - https://marketplace.gephi.org/plugin/json-exporter/. - All of Gephi's attributes are also contained within the node elements. This means you can access all of this data through the DataSet. -
-
- - -: Allow to move after import.
-: Parse the color instead of copy (adds borders, highlights etc.) -
-

Node Content:

- - - - - - diff --git a/examples/network/31_localization.html b/examples/network/31_localization.html deleted file mode 100644 index 7e28ff7a..00000000 --- a/examples/network/31_localization.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - Network | Localization - - - - - - - - - -

Editing the dataset (localized)

-

- This is the same example as 21_data_manipulation.html, except that there is a select box added which allows to switch locale. The localization is only relevant to the manipulation buttons. -

- -

- - -

- -
- node
- - - - - -
id
label
- - -
-
-
- -

- - - diff --git a/examples/network/32_hierarchicaLayoutMethods.html b/examples/network/32_hierarchicaLayoutMethods.html deleted file mode 100644 index d523a56e..00000000 --- a/examples/network/32_hierarchicaLayoutMethods.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - Network | Hierarchical layout difference - - - - - - - - - - -

Hierarchical Layout - User-defined

-
- This example shows a the effect of the different hierarchical layout methods. Hubsize is based on the amount of edges connected to a node. - The node with the most connections (the largest hub) is drawn at the top of the tree. The direction method is based on the direction of the edges. - Try switching between the methods with the dropdown box below. -
-Layout method: -
-
- -
- -

- - - diff --git a/examples/network/33_animation.html b/examples/network/33_animation.html deleted file mode 100644 index 0bebc4f2..00000000 --- a/examples/network/33_animation.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - Network | Animation - - - - - - - - - - -

Camera animations

-
- You can move the view around programmatically using the .moveTo(options) function. The options supplied to this function can - also be (partially) supplied to the .zoomExtent() and .focusOnNode() methods. These are explained in the docs. -

- The buttons below take the fields from the table when they can. For instance, the "Animate with default settings." takes the position, scale and offset while using - the default animation values for duration and easing function. The focusOnNode takes everything except the position and the zoomExtent takes only the duration and easing function. -

- Here you can see a full description of the options you can supply to moveTo: -
-
-var moveToOptions = {
-    position: {x:x, y:x},    // position to animate to (Numbers)
-    scale: 1.0,              // scale to animate to  (Number)
-    offset: {x:x, y:y},      // offset from the center in DOM pixels (Numbers)
-    animation: {             // animation object, can also be Boolean
-      duration: 1000,                 // animation duration in milliseconds (Number)
-      easingFunction: "easeInOutQuad" // Animation easing function, available are:
-    }                                   // linear, easeInQuad, easeOutQuad, easeInOutQuad,
-}                                       // easeInCubic, easeOutCubic, easeInOutCubic,
-                                        // easeInQuart, easeOutQuart, easeInOutQuart,
-                                        // easeInQuint, easeOutQuint, easeInOutQuint
-
-
- - - - - - - - - - - - - - - - - - - - - - -
position x
position y
scale
offset x px
offset y px
duration ms
easingFunction - -
-
-
- Examples: -
-
-
-
-
-
-
-
-
- -

-

-
- - diff --git a/examples/network/data/WorldCup2014.json b/examples/network/data/WorldCup2014.json deleted file mode 100644 index 2f921e0e..00000000 --- a/examples/network/data/WorldCup2014.json +++ /dev/null @@ -1 +0,0 @@ -{"edges":[{"source":"131","target":"580","id":"4385","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"186","target":"368","id":"5487","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"651","target":"725","id":"10555","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"28","target":"83","id":"2090","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"570","target":"584","id":"10163","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"113","target":"337","id":"4011","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"89","target":"726","id":"3532","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"245","target":"643","id":"6493","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"314","target":"714","id":"7596","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"325","target":"496","id":"7735","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"52","target":"492","id":"2661","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"489","target":"548","id":"9605","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"72","target":"363","id":"3136","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"296","target":"716","id":"7337","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"60","target":"713","id":"2864","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"210","target":"217","id":"5899","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"246","target":"696","id":"6512","attributes":{"Weight":"1.0"},"color":"rgb(196,67,164)","size":1.0},{"source":"62","target":"375","id":"2912","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"377","target":"561","id":"8391","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"14","target":"190","id":"1777","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"16","target":"21","id":"1821","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"90","target":"375","id":"3544","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"80","target":"348","id":"3315","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"34","target":"229","id":"2247","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"4","target":"347","id":"1543","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"61","target":"350","id":"2879","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"483","target":"512","id":"9570","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"461","target":"463","id":"9374","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"449","target":"478","id":"9249","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"2","target":"99","id":"1489","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"535","target":"669","id":"9978","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"242","target":"502","id":"6439","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"196","target":"728","id":"5678","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"303","target":"616","id":"7445","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"316","target":"643","id":"7620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"549","target":"700","id":"10058","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"135","target":"717","id":"4479","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"97","target":"655","id":"3703","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"724","target":"730","id":"10678","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"173","target":"418","id":"5237","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"439","target":"695","id":"9144","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"350","target":"534","id":"8081","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"377","target":"391","id":"8378","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"176","target":"492","id":"5293","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"76","target":"728","id":"3240","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"95","target":"448","id":"3653","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"66","target":"78","id":"2993","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"236","target":"552","id":"6351","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"139","target":"434","id":"4545","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"22","target":"24","id":"1958","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"186","target":"334","id":"5485","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"30","target":"324","id":"2154","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"202","target":"450","id":"5775","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"524","target":"688","id":"9891","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"665","target":"693","id":"10599","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"215","target":"723","id":"6005","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"28","target":"627","id":"2118","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"2","target":"31","id":"1487","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"177","target":"625","id":"5320","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"179","target":"677","id":"5365","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"182","target":"662","id":"5412","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"135","target":"567","id":"4473","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"128","target":"248","id":"4309","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"45","target":"123","id":"2495","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"141","target":"622","id":"4601","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"71","target":"714","id":"3128","attributes":{"Weight":"1.0"},"color":"rgb(132,99,229)","size":1.0},{"source":"155","target":"227","id":"4888","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"591","target":"693","id":"10293","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"44","target":"648","id":"2487","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"23","target":"568","id":"1989","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"6","target":"477","id":"1594","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"145","target":"454","id":"4690","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"184","target":"270","id":"5442","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"385","target":"442","id":"8501","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"139","target":"702","id":"4554","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"173","target":"605","id":"5246","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"428","target":"652","id":"9013","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"16","target":"732","id":"1841","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"23","target":"540","id":"1988","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"444","target":"514","id":"9211","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"37","target":"210","id":"2312","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"103","target":"446","id":"3816","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"316","target":"720","id":"7625","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"82","target":"374","id":"3349","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"481","target":"670","id":"9564","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"262","target":"483","id":"6778","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"112","target":"209","id":"3990","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"345","target":"682","id":"8023","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"201","target":"334","id":"5755","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"337","target":"488","id":"7916","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"29","target":"307","id":"2128","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"224","target":"717","id":"6165","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"399","target":"647","id":"8691","attributes":{"Weight":"1.0"},"color":"rgb(148,83,196)","size":1.0},{"source":"347","target":"670","id":"8045","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"627","target":"717","id":"10445","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"115","target":"587","id":"4060","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"186","target":"710","id":"5494","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"551","target":"609","id":"10065","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"252","target":"291","id":"6599","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"442","target":"678","id":"9193","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"274","target":"631","id":"6970","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"454","target":"475","id":"9295","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"216","target":"286","id":"6007","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"567","target":"586","id":"10144","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"383","target":"587","id":"8477","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"230","target":"362","id":"6253","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"382","target":"438","id":"8451","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"104","target":"357","id":"3833","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"79","target":"385","id":"3286","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"191","target":"463","id":"5576","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"527","target":"679","id":"9918","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"104","target":"317","id":"3830","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"343","target":"588","id":"8001","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"252","target":"447","id":"6603","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"38","target":"277","id":"2340","attributes":{"Weight":"1.0"},"color":"rgb(229,180,67)","size":1.0},{"source":"557","target":"696","id":"10100","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"87","target":"663","id":"3478","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"215","target":"339","id":"5989","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"571","target":"719","id":"10178","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"204","target":"302","id":"5807","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"79","target":"455","id":"3290","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"9","target":"102","id":"1662","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"529","target":"699","id":"9941","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"228","target":"324","id":"6220","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"290","target":"395","id":"7245","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"275","target":"304","id":"6975","attributes":{"Weight":"1.0"},"color":"rgb(67,148,148)","size":1.0},{"source":"5","target":"258","id":"1564","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"44","target":"82","id":"2459","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"323","target":"443","id":"7711","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"212","target":"608","id":"5949","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"644","target":"720","id":"10518","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"300","target":"669","id":"7399","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"105","target":"234","id":"3846","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"677","target":"679","id":"10622","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"164","target":"166","id":"5056","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"299","target":"624","id":"7382","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"64","target":"354","id":"2963","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"176","target":"427","id":"5290","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"238","target":"713","id":"6385","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"293","target":"708","id":"7290","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"567","target":"676","id":"10145","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"213","target":"242","id":"5956","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"163","target":"388","id":"5046","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"396","target":"606","id":"8648","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"176","target":"456","id":"5291","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"41","target":"137","id":"2396","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"368","target":"569","id":"8272","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"78","target":"570","id":"3272","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"5","target":"603","id":"1576","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"241","target":"504","id":"6420","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"107","target":"705","id":"3888","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"323","target":"717","id":"7719","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"79","target":"140","id":"3279","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"299","target":"653","id":"7383","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"516","target":"633","id":"9815","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"511","target":"716","id":"9796","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"427","target":"609","id":"8999","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"325","target":"659","id":"7743","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"345","target":"714","id":"8024","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"207","target":"362","id":"5863","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"44","target":"79","id":"2458","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"66","target":"306","id":"3000","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"44","target":"573","id":"2480","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"133","target":"673","id":"4431","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"162","target":"384","id":"5024","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"216","target":"652","id":"6026","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"114","target":"246","id":"4026","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"146","target":"626","id":"4717","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"477","target":"515","id":"9532","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"251","target":"255","id":"6582","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"226","target":"714","id":"6194","attributes":{"Weight":"1.0"},"color":"rgb(213,132,148)","size":1.0},{"source":"272","target":"437","id":"6939","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"342","target":"691","id":"7989","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"110","target":"397","id":"3946","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"241","target":"480","id":"6418","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"55","target":"444","id":"2735","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"564","target":"592","id":"10131","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"38","target":"424","id":"2343","attributes":{"Weight":"1.0"},"color":"rgb(148,213,148)","size":1.0},{"source":"238","target":"668","id":"6384","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"646","target":"730","id":"10527","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"431","target":"586","id":"9046","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"425","target":"675","id":"8979","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"345","target":"534","id":"8017","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"86","target":"180","id":"3434","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"167","target":"607","id":"5127","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"180","target":"286","id":"5373","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"448","target":"501","id":"9239","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"235","target":"710","id":"6341","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"71","target":"83","id":"3105","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"151","target":"676","id":"4826","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"34","target":"581","id":"2262","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"372","target":"426","id":"8308","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"276","target":"355","id":"6995","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"110","target":"231","id":"3937","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"133","target":"613","id":"4429","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"44","target":"231","id":"2466","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"60","target":"201","id":"2839","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"493","target":"605","id":"9649","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"160","target":"671","id":"4996","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"415","target":"612","id":"8851","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"251","target":"696","id":"6598","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"117","target":"530","id":"4107","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"432","target":"443","id":"9052","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"64","target":"239","id":"2957","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"232","target":"576","id":"6289","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"209","target":"483","id":"5896","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"565","target":"663","id":"10136","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"63","target":"632","id":"2938","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"145","target":"331","id":"4683","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"125","target":"478","id":"4260","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"231","target":"575","id":"6269","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"20","target":"513","id":"1927","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"142","target":"542","id":"4620","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"222","target":"710","id":"6129","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"640","target":"708","id":"10502","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"33","target":"124","id":"2212","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"86","target":"428","id":"3442","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"241","target":"271","id":"6414","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"368","target":"548","id":"8270","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"487","target":"645","id":"9594","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"126","target":"513","id":"4280","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"193","target":"491","id":"5606","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"381","target":"719","id":"8449","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"392","target":"399","id":"8596","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"351","target":"609","id":"8099","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"74","target":"428","id":"3178","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"207","target":"344","id":"5860","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"72","target":"342","id":"3135","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"291","target":"481","id":"7265","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"1","target":"605","id":"1482","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"295","target":"592","id":"7322","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"334","target":"552","id":"7878","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"374","target":"433","id":"8334","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"205","target":"519","id":"5828","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"16","target":"51","id":"1827","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"100","target":"672","id":"3760","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"305","target":"334","id":"7464","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"326","target":"341","id":"7747","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"410","target":"557","id":"8813","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"300","target":"698","id":"7400","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"92","target":"176","id":"3575","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"80","target":"668","id":"3323","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"315","target":"389","id":"7598","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"157","target":"299","id":"4926","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"211","target":"261","id":"5915","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"460","target":"667","id":"9368","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"103","target":"318","id":"3813","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"69","target":"396","id":"3066","attributes":{"Weight":"1.0"},"color":"rgb(132,83,229)","size":1.0},{"source":"339","target":"504","id":"7940","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"479","target":"686","id":"9548","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"145","target":"289","id":"4679","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"434","target":"576","id":"9089","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"635","target":"697","id":"10477","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"298","target":"459","id":"7357","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"114","target":"632","id":"4038","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"165","target":"359","id":"5085","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"214","target":"483","id":"5981","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"332","target":"652","id":"7853","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"244","target":"682","id":"6475","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"61","target":"577","id":"2890","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"130","target":"701","id":"4369","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"23","target":"24","id":"1978","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"498","target":"573","id":"9691","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"266","target":"723","id":"6845","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"382","target":"481","id":"8456","attributes":{"Weight":"1.0"},"color":"rgb(132,164,148)","size":1.0},{"source":"258","target":"430","id":"6701","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"148","target":"458","id":"4745","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"279","target":"366","id":"7038","attributes":{"Weight":"1.0"},"color":"rgb(148,67,213)","size":1.0},{"source":"79","target":"614","id":"3298","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"150","target":"155","id":"4778","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"205","target":"526","id":"5830","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"647","target":"730","id":"10536","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"122","target":"614","id":"4206","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"332","target":"645","id":"7852","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"210","target":"488","id":"5905","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"387","target":"520","id":"8538","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"341","target":"365","id":"7965","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"199","target":"670","id":"5729","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"152","target":"163","id":"4829","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"561","target":"658","id":"10114","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"348","target":"603","id":"8055","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"166","target":"168","id":"5096","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"606","target":"646","id":"10353","attributes":{"Weight":"1.0"},"color":"rgb(132,83,229)","size":1.0},{"source":"3","target":"711","id":"1531","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"118","target":"387","id":"4119","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"239","target":"262","id":"6387","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"283","target":"413","id":"7129","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"202","target":"486","id":"5778","attributes":{"Weight":"1.0"},"color":"rgb(148,213,148)","size":1.0},{"source":"136","target":"206","id":"4483","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"65","target":"347","id":"2982","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"233","target":"699","id":"6310","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"116","target":"415","id":"4079","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"270","target":"312","id":"6905","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"561","target":"647","id":"10113","attributes":{"Weight":"1.0"},"color":"rgb(148,83,196)","size":1.0},{"source":"538","target":"684","id":"9998","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"205","target":"655","id":"5836","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"490","target":"675","id":"9617","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"64","target":"223","id":"2955","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"18","target":"65","id":"1866","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"460","target":"654","id":"9367","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"103","target":"357","id":"3815","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"30","target":"499","id":"2160","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"230","target":"262","id":"6248","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"368","target":"720","id":"8276","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"395","target":"405","id":"8633","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"165","target":"226","id":"5081","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"377","target":"394","id":"8381","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"5","target":"116","id":"1556","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"160","target":"322","id":"4985","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"338","target":"507","id":"7929","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"50","target":"419","id":"2619","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"253","target":"356","id":"6617","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"79","target":"475","id":"3291","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"362","target":"483","id":"8199","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"86","target":"332","id":"3440","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"182","target":"626","id":"5410","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"139","target":"430","id":"4544","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"174","target":"292","id":"5251","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"196","target":"381","id":"5658","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"560","target":"731","id":"10112","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"515","target":"686","id":"9812","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"506","target":"588","id":"9754","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"12","target":"424","id":"1741","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"299","target":"669","id":"7384","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"460","target":"606","id":"9363","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"401","target":"545","id":"8710","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"390","target":"658","id":"8576","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"661","target":"690","id":"10588","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"515","target":"518","id":"9808","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"162","target":"431","id":"5025","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"71","target":"210","id":"3112","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"395","target":"658","id":"8641","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"50","target":"643","id":"2627","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"317","target":"509","id":"7631","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"47","target":"254","id":"2546","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"398","target":"638","id":"8673","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"578","target":"596","id":"10224","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"523","target":"565","id":"9877","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"518","target":"541","id":"9834","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"305","target":"353","id":"7465","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"115","target":"363","id":"4052","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"28","target":"419","id":"2108","attributes":{"Weight":"1.0"},"color":"rgb(67,180,229)","size":1.0},{"source":"7","target":"596","id":"1616","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"61","target":"327","id":"2876","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"313","target":"459","id":"7569","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"343","target":"378","id":"7994","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"532","target":"685","id":"9957","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"6","target":"77","id":"1581","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"550","target":"712","id":"10063","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"196","target":"667","id":"5677","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"204","target":"636","id":"5815","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"299","target":"703","id":"7386","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"294","target":"629","id":"7307","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"204","target":"516","id":"5810","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"471","target":"515","id":"9469","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"297","target":"715","id":"7351","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"351","target":"367","id":"8089","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"400","target":"423","id":"8697","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"79","target":"648","id":"3300","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"660","target":"696","id":"10586","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"466","target":"646","id":"9419","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"155","target":"359","id":"4893","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"96","target":"234","id":"3673","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"370","target":"701","id":"8290","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"296","target":"525","id":"7329","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"438","target":"466","id":"9126","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"85","target":"323","id":"3417","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"432","target":"514","id":"9056","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"44","target":"627","id":"2486","attributes":{"Weight":"1.0"},"color":"rgb(67,180,196)","size":1.0},{"source":"272","target":"347","id":"6936","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"138","target":"437","id":"4525","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"300","target":"432","id":"7388","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"4","target":"664","id":"1551","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"345","target":"507","id":"8016","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"170","target":"556","id":"5182","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"290","target":"330","id":"7238","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"31","target":"153","id":"2171","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"220","target":"520","id":"6086","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"46","target":"565","id":"2538","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"150","target":"154","id":"4777","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"216","target":"593","id":"6020","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"217","target":"625","id":"6038","attributes":{"Weight":"1.0"},"color":"rgb(67,180,180)","size":1.0},{"source":"310","target":"518","id":"7534","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"16","target":"23","id":"1823","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"82","target":"480","id":"3357","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"332","target":"703","id":"7854","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"448","target":"712","id":"9246","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"384","target":"679","id":"8496","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"218","target":"572","id":"6058","attributes":{"Weight":"1.0"},"color":"rgb(148,115,213)","size":1.0},{"source":"454","target":"623","id":"9303","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"328","target":"615","id":"7791","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"378","target":"388","id":"8394","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"27","target":"575","id":"2077","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"23","target":"174","id":"1983","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"205","target":"218","id":"5821","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"242","target":"365","id":"6435","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"57","target":"604","id":"2788","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"289","target":"529","id":"7227","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"177","target":"366","id":"5308","attributes":{"Weight":"1.0"},"color":"rgb(67,148,180)","size":1.0},{"source":"416","target":"675","id":"8868","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"99","target":"672","id":"3743","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"153","target":"457","id":"4854","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"54","target":"261","id":"2699","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"184","target":"637","id":"5452","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"107","target":"662","id":"3887","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"124","target":"361","id":"4241","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"632","target":"639","id":"10460","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"406","target":"544","id":"8766","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"14","target":"72","id":"1774","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"170","target":"423","id":"5180","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"252","target":"661","id":"6613","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"96","target":"99","id":"3664","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"328","target":"609","id":"7790","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"537","target":"691","id":"9991","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"162","target":"723","id":"5039","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"24","target":"439","id":"2007","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"559","target":"560","id":"10106","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"246","target":"639","id":"6509","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"367","target":"551","id":"8260","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"36","target":"495","id":"2299","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"45","target":"478","id":"2509","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"48","target":"641","id":"2574","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"218","target":"279","id":"6047","attributes":{"Weight":"1.0"},"color":"rgb(148,115,213)","size":1.0},{"source":"304","target":"554","id":"7457","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"138","target":"404","id":"4523","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"154","target":"572","id":"4876","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"354","target":"484","id":"8128","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"56","target":"612","id":"2759","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"144","target":"150","id":"4649","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"575","target":"576","id":"10202","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"492","target":"549","id":"9637","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"431","target":"436","id":"9040","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"93","target":"618","id":"3613","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"359","target":"486","id":"8175","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"39","target":"711","id":"2374","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"160","target":"638","id":"4993","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"401","target":"556","id":"8711","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"113","target":"533","id":"4015","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"586","target":"699","id":"10269","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"76","target":"288","id":"3216","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"289","target":"717","id":"7236","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"98","target":"329","id":"3709","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"129","target":"155","id":"4325","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"243","target":"568","id":"6451","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"374","target":"396","id":"8333","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"176","target":"536","id":"5294","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"238","target":"303","id":"6369","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"206","target":"550","id":"5847","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"473","target":"594","id":"9498","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"370","target":"554","id":"8287","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"328","target":"551","id":"7789","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"23","target":"704","id":"1994","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"23","target":"733","id":"1997","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"260","target":"339","id":"6733","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"459","target":"477","id":"9349","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"44","target":"678","id":"2488","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"575","target":"668","id":"10207","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"465","target":"646","id":"9407","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"290","target":"560","id":"7253","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"129","target":"352","id":"4335","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"374","target":"623","id":"8345","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"343","target":"712","id":"8003","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"96","target":"457","id":"3679","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"542","target":"669","id":"10020","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"10","target":"457","id":"1699","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"416","target":"622","id":"8866","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"48","target":"733","id":"2579","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"433","target":"629","id":"9081","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"130","target":"481","id":"4362","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"259","target":"553","id":"6721","attributes":{"Weight":"1.0"},"color":"rgb(115,148,164)","size":1.0},{"source":"422","target":"572","id":"8937","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"8","target":"318","id":"1637","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"286","target":"703","id":"7178","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"147","target":"157","id":"4721","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"60","target":"324","id":"2846","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"27","target":"308","id":"2067","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"210","target":"407","id":"5903","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"231","target":"583","id":"6271","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"304","target":"630","id":"7458","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"41","target":"380","id":"2403","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"24","target":"732","id":"2015","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"38","target":"531","id":"2349","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"385","target":"678","id":"8515","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"580","target":"593","id":"10241","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"303","target":"415","id":"7435","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"375","target":"577","id":"8359","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"455","target":"698","id":"9319","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"102","target":"235","id":"3788","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"163","target":"617","id":"5053","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"180","target":"188","id":"5370","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"320","target":"609","id":"7683","attributes":{"Weight":"1.0"},"color":"rgb(164,99,148)","size":1.0},{"source":"57","target":"87","id":"2768","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"68","target":"270","id":"3039","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"342","target":"702","id":"7990","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"261","target":"450","id":"6760","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"516","target":"697","id":"9822","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"261","target":"279","id":"6752","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"536","target":"700","id":"9984","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"237","target":"452","id":"6361","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"14","target":"115","id":"1776","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"44","target":"717","id":"2490","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"217","target":"627","id":"6040","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"52","target":"615","id":"2666","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"287","target":"631","id":"7192","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"593","target":"703","id":"10300","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"57","target":"409","id":"2774","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"712","target":"727","id":"10672","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"62","target":"406","id":"2913","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"22","target":"568","id":"1970","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"38","target":"359","id":"2342","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"288","target":"523","id":"7207","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"410","target":"545","id":"8811","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"134","target":"476","id":"4443","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"60","target":"222","id":"2840","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"234","target":"600","id":"6322","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"247","target":"584","id":"6524","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"346","target":"664","id":"8034","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"150","target":"373","id":"4787","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"318","target":"371","id":"7639","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"145","target":"586","id":"4697","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"94","target":"673","id":"3636","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"482","target":"653","id":"9567","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"392","target":"394","id":"8594","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"53","target":"633","id":"2683","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"354","target":"362","id":"8125","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"485","target":"671","id":"9582","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"113","target":"705","id":"4021","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"474","target":"657","id":"9508","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"76","target":"508","id":"3227","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"17","target":"49","id":"1844","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"260","target":"266","id":"6730","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"112","target":"230","id":"3993","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"624","target":"698","id":"10433","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"601","target":"703","id":"10331","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"181","target":"369","id":"5393","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"229","target":"318","id":"6237","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"541","target":"686","id":"10017","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"443","target":"567","id":"9199","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"359","target":"430","id":"8172","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"556","target":"557","id":"10088","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"340","target":"346","id":"7953","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"155","target":"591","id":"4899","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"247","target":"389","id":"6520","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"316","target":"371","id":"7608","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"27","target":"576","id":"2078","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"95","target":"617","id":"3660","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"110","target":"179","id":"3935","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"545","target":"696","id":"10041","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"432","target":"719","id":"9068","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"568","target":"704","id":"10151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"68","target":"73","id":"3033","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"297","target":"485","id":"7342","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"304","target":"652","id":"7459","attributes":{"Weight":"1.0"},"color":"rgb(148,115,148)","size":1.0},{"source":"159","target":"671","id":"4976","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"67","target":"73","id":"3013","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"332","target":"528","id":"7845","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"104","target":"275","id":"3827","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"89","target":"127","id":"3513","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"12","target":"202","id":"1731","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"168","target":"430","id":"5137","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"505","target":"574","id":"9745","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"299","target":"455","id":"7375","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"74","target":"172","id":"3170","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"465","target":"724","id":"9412","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"10","target":"130","id":"1688","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"2","target":"130","id":"1493","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"479","target":"515","id":"9543","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"5","target":"308","id":"1566","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"656","target":"660","id":"10573","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"401","target":"660","id":"8715","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"377","target":"390","id":"8377","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"56","target":"667","id":"2762","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"678","target":"687","id":"10625","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"420","target":"705","id":"8913","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"625","target":"654","id":"10434","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"8","target":"177","id":"1634","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"100","target":"181","id":"3749","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"143","target":"698","id":"4648","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"144","target":"603","id":"4668","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"348","target":"702","id":"8059","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"497","target":"684","id":"9685","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"382","target":"651","id":"8463","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"122","target":"687","id":"4210","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"422","target":"693","id":"8941","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"15","target":"274","id":"1806","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"156","target":"375","id":"4913","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"44","target":"547","id":"2479","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"309","target":"369","id":"7517","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"152","target":"343","id":"4833","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"310","target":"470","id":"7529","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"379","target":"505","id":"8411","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"11","target":"272","id":"1713","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"641","target":"733","id":"10510","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"178","target":"367","id":"5332","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"425","target":"472","id":"8965","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"624","target":"653","id":"10431","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"90","target":"213","id":"3538","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"86","target":"716","id":"3454","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"8","target":"646","id":"1652","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"66","target":"389","id":"3003","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"639","target":"715","id":"10497","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"16","target":"293","id":"1832","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"49","target":"317","id":"2590","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"32","target":"656","id":"2202","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"288","target":"567","id":"7213","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"174","target":"732","id":"5261","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"37","target":"722","id":"2327","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"402","target":"545","id":"8721","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"105","target":"309","id":"3848","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"234","target":"630","id":"6324","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"296","target":"582","id":"7331","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"555","target":"642","id":"10084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"5","target":"335","id":"1567","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"415","target":"616","id":"8852","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"333","target":"528","id":"7858","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"634","target":"711","id":"10472","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"279","target":"676","id":"7051","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"531","target":"634","id":"9948","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"148","target":"298","id":"4741","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"218","target":"519","id":"6055","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"280","target":"376","id":"7059","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"94","target":"507","id":"3630","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"55","target":"542","id":"2741","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"425","target":"676","id":"8980","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"193","target":"466","id":"5605","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"5","target":"238","id":"1562","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"251","target":"410","id":"6588","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"67","target":"736","id":"3032","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"102","target":"324","id":"3792","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"337","target":"627","id":"7920","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"236","target":"324","id":"6343","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"143","target":"332","id":"4635","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"493","target":"494","id":"9643","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"280","target":"289","id":"7056","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"10","target":"369","id":"1697","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"306","target":"467","id":"7477","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"163","target":"448","id":"5047","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"218","target":"585","id":"6060","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"360","target":"727","id":"8192","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"99","target":"366","id":"3736","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"27","target":"76","id":"2057","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"125","target":"483","id":"4263","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"676","target":"699","id":"10619","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"364","target":"602","id":"8221","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"485","target":"657","id":"9580","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"167","target":"191","id":"5117","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"89","target":"322","id":"3520","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"279","target":"436","id":"7042","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"134","target":"683","id":"4449","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"255","target":"402","id":"6651","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"206","target":"360","id":"5841","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"670","target":"709","id":"10609","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"425","target":"440","id":"8963","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"294","target":"589","id":"7304","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"239","target":"361","id":"6391","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"152","target":"378","id":"4835","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"335","target":"575","id":"7886","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"283","target":"393","id":"7122","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"625","target":"707","id":"10439","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"684","target":"688","id":"10632","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"471","target":"518","id":"9470","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"121","target":"486","id":"4186","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"330","target":"566","id":"7827","attributes":{"Weight":"1.0"},"color":"rgb(213,67,196)","size":1.0},{"source":"48","target":"158","id":"2565","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"503","target":"628","id":"9729","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"301","target":"444","id":"7404","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"31","target":"99","id":"2166","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"208","target":"471","id":"5876","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"379","target":"597","id":"8415","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"40","target":"570","id":"2389","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"300","target":"444","id":"7389","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"547","target":"676","id":"10049","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"425","target":"473","id":"8966","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"460","target":"625","id":"9365","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"195","target":"274","id":"5637","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"176","target":"615","id":"5298","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"588","target":"727","id":"10278","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"603","target":"713","id":"10344","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"50","target":"371","id":"2616","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"218","target":"260","id":"6044","attributes":{"Weight":"1.0"},"color":"rgb(115,196,148)","size":1.0},{"source":"667","target":"677","id":"10602","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"478","target":"482","id":"9539","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"470","target":"541","id":"9463","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"119","target":"360","id":"4138","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"109","target":"248","id":"3914","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"82","target":"337","id":"3348","attributes":{"Weight":"1.0"},"color":"rgb(67,180,196)","size":1.0},{"source":"148","target":"310","id":"4743","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"5","target":"415","id":"1569","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"181","target":"370","id":"5394","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"100","target":"457","id":"3757","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"252","target":"565","id":"6611","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"256","target":"357","id":"6670","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"73","target":"633","id":"3161","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"61","target":"345","id":"2878","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"85","target":"547","id":"3425","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"375","target":"721","id":"8364","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"373","target":"677","id":"8327","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"258","target":"348","id":"6698","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"501","target":"617","id":"9718","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"136","target":"501","id":"4491","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"316","target":"719","id":"7624","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"349","target":"397","id":"8064","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"418","target":"631","id":"8888","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"245","target":"397","id":"6484","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"14","target":"695","id":"1797","attributes":{"Weight":"1.0"},"color":"rgb(148,148,83)","size":1.0},{"source":"10","target":"309","id":"1694","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"118","target":"670","id":"4128","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"115","target":"537","id":"4058","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"538","target":"688","id":"9999","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"106","target":"370","id":"3866","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"53","target":"688","id":"2688","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"311","target":"408","id":"7541","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"158","target":"568","id":"4951","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"146","target":"182","id":"4704","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"266","target":"665","id":"6840","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"582","target":"631","id":"10251","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"264","target":"734","id":"6816","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"39","target":"634","id":"2373","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"122","target":"385","id":"4195","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"142","target":"469","id":"4616","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"263","target":"444","id":"6785","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"131","target":"528","id":"4383","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"88","target":"610","id":"3504","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"458","target":"477","id":"9338","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"700","target":"718","id":"10663","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"618","target":"716","id":"10409","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"77","target":"307","id":"3245","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"113","target":"420","id":"4013","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"167","target":"711","id":"5129","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"508","target":"562","id":"9770","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"4","target":"590","id":"1549","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"361","target":"445","id":"8194","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"338","target":"350","id":"7925","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"315","target":"598","id":"7603","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"82","target":"454","id":"3355","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"29","target":"680","id":"2142","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"51","target":"568","id":"2638","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"69","target":"438","id":"3067","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"435","target":"631","id":"9103","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"115","target":"706","id":"4065","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"132","target":"214","id":"4400","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"443","target":"571","id":"9200","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"119","target":"617","id":"4147","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"4","target":"199","id":"1538","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"335","target":"713","id":"7894","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"58","target":"416","id":"2801","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"240","target":"603","id":"6408","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"152","target":"248","id":"4831","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"345","target":"606","id":"8019","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"94","target":"417","id":"3628","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"496","target":"566","id":"9670","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"120","target":"499","id":"4164","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"14","target":"200","id":"1779","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"135","target":"279","id":"4455","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"12","target":"642","id":"1749","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"177","target":"572","id":"5317","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"332","target":"571","id":"7846","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"234","target":"366","id":"6316","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"111","target":"569","id":"3978","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"46","target":"422","id":"2529","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"78","target":"380","id":"3268","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"5","target":"232","id":"1561","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"454","target":"678","id":"9305","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"504","target":"693","id":"9741","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"337","target":"420","id":"7915","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"66","target":"599","id":"3010","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"150","target":"591","id":"4795","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"249","target":"452","id":"6549","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"558","target":"660","id":"10102","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"448","target":"617","id":"9245","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"124","target":"132","id":"4228","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"196","target":"369","id":"5657","attributes":{"Weight":"1.0"},"color":"rgb(148,67,229)","size":1.0},{"source":"202","target":"211","id":"5765","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"109","target":"563","id":"3924","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"27","target":"238","id":"2064","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"95","target":"588","id":"3659","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"129","target":"531","id":"4343","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"547","target":"586","id":"10047","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"427","target":"492","id":"8995","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"375","target":"455","id":"8353","attributes":{"Weight":"1.0"},"color":"rgb(116,148,148)","size":1.0},{"source":"3","target":"38","id":"1510","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"180","target":"216","id":"5371","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"224","target":"280","id":"6144","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"247","target":"306","id":"6517","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"182","target":"407","id":"5405","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"393","target":"413","id":"8613","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"524","target":"684","id":"9890","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"330","target":"414","id":"7823","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"190","target":"363","id":"5555","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"197","target":"551","id":"5693","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"221","target":"600","id":"6110","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"349","target":"720","id":"8076","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"328","target":"549","id":"7788","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"239","target":"445","id":"6394","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"470","target":"479","id":"9460","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"34","target":"275","id":"2250","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"150","target":"245","id":"4781","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"217","target":"321","id":"6031","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"528","target":"619","id":"9929","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"226","target":"461","id":"6187","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"185","target":"425","id":"5463","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"296","target":"619","id":"7334","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"53","target":"183","id":"2672","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"443","target":"589","id":"9202","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"26","target":"252","id":"2044","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"143","target":"624","id":"4644","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"72","target":"200","id":"3133","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"114","target":"160","id":"4024","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"274","target":"494","id":"6963","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"95","target":"630","id":"3661","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"485","target":"632","id":"9577","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"355","target":"510","id":"8133","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"382","target":"650","id":"8462","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"256","target":"355","id":"6669","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"397","target":"644","id":"8660","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"150","target":"164","id":"4779","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"2","target":"630","id":"1506","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"203","target":"577","id":"5798","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"382","target":"735","id":"8471","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"119","target":"388","id":"4140","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"509","target":"546","id":"9778","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"145","target":"567","id":"4695","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"141","target":"249","id":"4588","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"93","target":"571","id":"3608","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"217","target":"337","id":"6032","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"289","target":"732","id":"7237","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"63","target":"671","id":"2942","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"254","target":"401","id":"6635","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"34","target":"510","id":"2259","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"51","target":"439","id":"2636","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"187","target":"301","id":"5498","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"248","target":"360","id":"6530","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"546","target":"592","id":"10045","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"134","target":"544","id":"4447","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"42","target":"580","id":"2429","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"131","target":"188","id":"4371","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"432","target":"653","id":"9065","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"400","target":"557","id":"8700","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"167","target":"185","id":"5116","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"631","target":"734","id":"10458","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"55","target":"669","id":"2744","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"313","target":"479","id":"7574","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"617","target":"727","id":"10405","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"330","target":"413","id":"7822","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"212","target":"676","id":"5954","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"387","target":"396","id":"8534","attributes":{"Weight":"1.0"},"color":"rgb(132,148,213)","size":1.0},{"source":"147","target":"444","id":"4729","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"117","target":"265","id":"4098","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"48","target":"540","id":"2571","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"489","target":"643","id":"9609","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"338","target":"345","id":"7924","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"30","target":"710","id":"2164","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"528","target":"606","id":"9927","attributes":{"Weight":"1.0"},"color":"rgb(213,115,148)","size":1.0},{"source":"21","target":"24","id":"1934","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"142","target":"539","id":"4619","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"125","target":"291","id":"4252","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"153","target":"219","id":"4847","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"77","target":"148","id":"3242","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"261","target":"366","id":"6756","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"457","target":"672","id":"9332","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"122","target":"374","id":"4194","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"207","target":"361","id":"5862","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"87","target":"562","id":"3472","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"94","target":"396","id":"3627","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"13","target":"192","id":"1758","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"38","target":"711","id":"2354","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"2","target":"234","id":"1497","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"119","target":"727","id":"4149","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"134","target":"530","id":"4446","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"166","target":"240","id":"5100","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"552","target":"710","id":"10070","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"105","target":"130","id":"3842","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"66","target":"192","id":"2995","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"80","target":"116","id":"3304","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"289","target":"704","id":"7235","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"129","target":"711","id":"4348","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"58","target":"125","id":"2794","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"259","target":"537","id":"6720","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"18","target":"199","id":"1869","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"227","target":"371","id":"6202","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"9","target":"60","id":"1661","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"7","target":"480","id":"1612","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"576","target":"646","id":"10214","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"42","target":"652","id":"2434","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"72","target":"702","id":"3148","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"202","target":"462","id":"5777","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"411","target":"658","id":"8826","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"148","target":"468","id":"4747","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"401","target":"402","id":"8707","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"2","target":"100","id":"1490","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"216","target":"277","id":"6006","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"42","target":"618","id":"2432","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"521","target":"594","id":"9858","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"421","target":"663","id":"8928","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"141","target":"481","id":"4598","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"186","target":"324","id":"5484","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"108","target":"494","id":"3898","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"480","target":"577","id":"9553","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"131","target":"716","id":"4395","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"264","target":"646","id":"6806","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"409","target":"440","id":"8792","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"211","target":"462","id":"5923","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"127","target":"246","id":"4288","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"61","target":"325","id":"2875","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"454","target":"517","id":"9298","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"17","target":"103","id":"1845","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"480","target":"678","id":"9558","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"159","target":"553","id":"4970","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"393","target":"561","id":"8617","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"368","target":"595","id":"8273","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"44","target":"614","id":"2484","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"488","target":"561","id":"9596","attributes":{"Weight":"1.0"},"color":"rgb(148,99,196)","size":1.0},{"source":"189","target":"655","id":"5547","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"136","target":"388","id":"4489","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"195","target":"205","id":"5635","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"199","target":"347","id":"5720","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"395","target":"399","id":"8632","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"62","target":"513","id":"2916","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"578","target":"610","id":"10227","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"177","target":"522","id":"5314","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"420","target":"626","id":"8910","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"221","target":"366","id":"6099","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"138","target":"628","id":"4529","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"157","target":"521","id":"4936","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"201","target":"548","id":"5761","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"391","target":"414","id":"8587","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"332","target":"618","id":"7850","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"201","target":"429","id":"5758","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"58","target":"249","id":"2797","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"474","target":"726","id":"9511","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"690","target":"692","id":"10645","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"475","target":"480","id":"9512","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"434","target":"668","id":"9093","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"386","target":"415","id":"8518","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"128","target":"336","id":"4310","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"450","target":"462","id":"9258","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"496","target":"714","id":"9677","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"47","target":"255","id":"2547","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"83","target":"407","id":"3379","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"522","target":"679","id":"9872","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"149","target":"566","id":"4770","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"42","target":"131","id":"2414","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"224","target":"547","id":"6157","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"242","target":"513","id":"6440","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"529","target":"569","id":"9937","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"86","target":"99","id":"3432","attributes":{"Weight":"1.0"},"color":"rgb(148,115,148)","size":1.0},{"source":"2","target":"701","id":"1509","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"2","target":"153","id":"1494","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"596","target":"602","id":"10306","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"112","target":"214","id":"3991","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"102","target":"264","id":"3790","attributes":{"Weight":"1.0"},"color":"rgb(148,83,180)","size":1.0},{"source":"29","target":"298","id":"2127","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"101","target":"230","id":"3770","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"187","target":"535","id":"5504","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"83","target":"533","id":"3382","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"82","target":"498","id":"3358","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"241","target":"453","id":"6417","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"149","target":"659","id":"4773","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"166","target":"677","id":"5112","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"307","target":"515","id":"7493","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"393","target":"731","id":"8619","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"87","target":"288","id":"3458","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"267","target":"446","id":"6853","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"376","target":"676","id":"8374","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"307","target":"620","id":"7496","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"429","target":"643","id":"9025","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"331","target":"567","id":"7837","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"57","target":"381","id":"2773","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"134","target":"265","id":"4437","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"239","target":"484","id":"6396","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"596","target":"665","id":"10309","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"36","target":"570","id":"2300","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"248","target":"501","id":"6534","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"637","target":"684","id":"10484","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"324","target":"499","id":"7725","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"126","target":"375","id":"4276","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"171","target":"579","id":"5203","attributes":{"Weight":"1.0"},"color":"rgb(132,99,229)","size":1.0},{"source":"205","target":"435","id":"5825","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"60","target":"120","id":"2835","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"287","target":"734","id":"7195","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"319","target":"600","id":"7668","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"52","target":"329","id":"2653","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"176","target":"351","id":"5286","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"584","target":"598","id":"10260","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"493","target":"525","id":"9645","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"352","target":"461","id":"8106","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"76","target":"425","id":"3221","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"222","target":"334","id":"6120","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"242","target":"683","id":"6445","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"330","target":"391","id":"7813","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"156","target":"476","id":"4915","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"301","target":"542","id":"7410","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"269","target":"731","id":"6903","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"111","target":"245","id":"3965","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"364","target":"721","id":"8229","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"40","target":"284","id":"2382","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"308","target":"555","id":"7504","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"151","target":"233","id":"4808","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"473","target":"663","id":"9500","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"266","target":"271","id":"6830","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"501","target":"588","id":"9717","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"536","target":"549","id":"9980","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"462","target":"555","id":"9384","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"251","target":"558","id":"6593","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"396","target":"534","id":"8646","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"496","target":"534","id":"9669","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"221","target":"225","id":"6092","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"88","target":"177","id":"3483","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"31","target":"106","id":"2169","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"166","target":"185","id":"5097","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"138","target":"220","id":"4517","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"314","target":"350","id":"7584","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"565","target":"589","id":"10132","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"534","target":"606","id":"9967","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"187","target":"653","id":"5508","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"279","target":"280","id":"7034","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"134","target":"502","id":"4444","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"273","target":"306","id":"6948","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"281","target":"466","id":"7082","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"4","target":"272","id":"1540","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"464","target":"492","id":"9396","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"674","target":"694","id":"10615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"56","target":"707","id":"2766","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"197","target":"232","id":"5679","attributes":{"Weight":"1.0"},"color":"rgb(83,148,180)","size":1.0},{"source":"36","target":"40","id":"2285","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"199","target":"503","id":"5724","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"289","target":"376","id":"7221","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"246","target":"553","id":"6505","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"190","target":"232","id":"5551","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"365","target":"502","id":"8235","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"140","target":"455","id":"4569","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"310","target":"620","id":"7536","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"504","target":"661","id":"9737","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"131","target":"332","id":"4376","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"556","target":"694","id":"10093","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"183","target":"538","id":"5427","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"356","target":"401","id":"8139","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"407","target":"533","id":"8771","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"458","target":"468","id":"9335","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"534","target":"566","id":"9966","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"10","target":"100","id":"1685","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"290","target":"394","id":"7244","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"17","target":"318","id":"1855","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"198","target":"736","id":"5714","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"182","target":"210","id":"5400","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"218","target":"493","id":"6053","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"385","target":"573","id":"8508","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"341","target":"530","id":"7971","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"473","target":"508","id":"9490","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"591","target":"629","id":"10290","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"404","target":"709","id":"8752","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"456","target":"615","id":"9327","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"394","target":"658","id":"8630","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"443","target":"623","id":"9203","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"4","target":"628","id":"1550","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"493","target":"722","id":"9653","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"331","target":"586","id":"7838","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"329","target":"700","id":"7809","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"87","target":"523","id":"3470","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"36","target":"41","id":"2286","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"83","target":"662","id":"3386","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"110","target":"316","id":"3941","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"381","target":"562","id":"8440","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"140","target":"179","id":"4559","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"511","target":"601","id":"9791","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"384","target":"408","id":"8484","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"106","target":"309","id":"3863","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"403","target":"505","id":"8731","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"267","target":"564","id":"6858","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"571","target":"580","id":"10167","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"378","target":"617","id":"8404","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"367","target":"700","id":"8263","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"80","target":"616","id":"3322","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"102","target":"334","id":"3793","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"27","target":"348","id":"2069","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"138","target":"199","id":"4516","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"33","target":"643","id":"2241","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"118","target":"520","id":"4123","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"168","target":"359","id":"5135","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"77","target":"470","id":"3251","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"520","target":"628","id":"9849","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"485","target":"621","id":"9576","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"202","target":"225","id":"5768","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"396","target":"682","id":"8653","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"3","target":"226","id":"1520","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"284","target":"380","id":"7139","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"613","target":"714","id":"10393","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"219","target":"672","id":"6076","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"333","target":"618","id":"7864","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"381","target":"604","id":"8445","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"339","target":"596","id":"7943","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"417","target":"613","id":"8874","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"215","target":"578","id":"5994","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"138","target":"503","id":"4526","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"75","target":"194","id":"3196","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"102","target":"186","id":"3784","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"26","target":"59","id":"2038","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"164","target":"629","id":"5069","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"298","target":"515","id":"7363","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"456","target":"549","id":"9324","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"397","target":"719","id":"8663","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"35","target":"584","id":"2281","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"203","target":"623","id":"5801","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"171","target":"338","id":"5194","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"62","target":"91","id":"2901","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"703","target":"716","id":"10665","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"543","target":"629","id":"10028","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"173","target":"585","id":"5245","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"93","target":"528","id":"3607","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"177","target":"667","id":"5322","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"304","target":"366","id":"7452","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"112","target":"124","id":"3986","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"151","target":"342","id":"4815","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"349","target":"629","id":"8072","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"208","target":"515","id":"5879","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"409","target":"629","id":"8806","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"455","target":"624","id":"9314","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"205","target":"296","id":"5823","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"11","target":"709","id":"1727","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"296","target":"722","id":"7338","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"230","target":"239","id":"6247","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"241","target":"690","id":"6427","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"294","target":"569","id":"7301","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"91","target":"156","id":"3557","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"325","target":"613","id":"7742","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"485","target":"715","id":"9583","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"13","target":"570","id":"1768","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"189","target":"484","id":"5543","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"56","target":"384","id":"2752","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"106","target":"457","id":"3867","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"227","target":"644","id":"6213","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"438","target":"729","id":"9136","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"68","target":"736","id":"3055","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"565","target":"728","id":"10137","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"506","target":"563","id":"9753","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"562","target":"646","id":"10122","attributes":{"Weight":"1.0"},"color":"rgb(148,83,229)","size":1.0},{"source":"317","target":"546","id":"7633","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"160","target":"485","id":"4988","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"21","target":"439","id":"1946","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"33","target":"262","id":"2223","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"146","target":"321","id":"4709","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"425","target":"589","id":"8974","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"30","target":"429","id":"2158","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"650","target":"725","id":"10548","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"393","target":"560","id":"8616","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"199","target":"340","id":"5718","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"294","target":"349","id":"7294","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"454","target":"611","id":"9301","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"278","target":"662","id":"7032","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"660","target":"694","id":"10585","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"112","target":"262","id":"3995","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"35","target":"380","id":"2276","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"99","target":"130","id":"3728","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"20","target":"681","id":"1930","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"24","target":"540","id":"2008","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"9","target":"235","id":"1668","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"8","target":"60","id":"1627","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"183","target":"707","id":"5437","attributes":{"Weight":"1.0"},"color":"rgb(99,229,99)","size":1.0},{"source":"573","target":"679","id":"10193","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"577","target":"721","id":"10223","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"152","target":"588","id":"4842","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"378","target":"563","id":"8402","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"82","target":"475","id":"3356","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"498","target":"577","id":"9692","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"125","target":"565","id":"4264","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"151","target":"436","id":"4818","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"277","target":"333","id":"7006","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"279","target":"331","id":"7037","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"242","target":"406","id":"6437","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"49","target":"658","id":"2601","attributes":{"Weight":"1.0"},"color":"rgb(148,148,115)","size":1.0},{"source":"115","target":"383","id":"4054","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"89","target":"398","id":"3521","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"195","target":"444","id":"5641","attributes":{"Weight":"1.0"},"color":"rgb(99,115,229)","size":1.0},{"source":"252","target":"675","id":"6614","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"44","target":"238","id":"2467","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"275","target":"546","id":"6986","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"82","target":"327","id":"3347","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"46","target":"58","id":"2517","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"69","target":"689","id":"3077","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"342","target":"547","id":"7982","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"71","target":"626","id":"3124","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"262","target":"484","id":"6779","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"46","target":"661","id":"2540","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"16","target":"695","id":"1838","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"299","target":"602","id":"7381","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"459","target":"515","id":"9351","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"228","target":"334","id":"6221","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"60","target":"228","id":"2841","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"429","target":"569","id":"9023","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"338","target":"566","id":"7931","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"33","target":"720","id":"2242","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"393","target":"414","id":"8614","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"141","target":"252","id":"4589","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"215","target":"602","id":"5996","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"75","target":"383","id":"3202","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"214","target":"354","id":"5977","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"77","target":"298","id":"3244","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"127","target":"638","id":"4298","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"100","target":"630","id":"3759","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"30","target":"489","id":"2159","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"325","target":"714","id":"7746","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"7","target":"241","id":"1605","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"114","target":"553","id":"4036","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"388","target":"727","id":"8554","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"440","target":"663","id":"9163","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"70","target":"202","id":"3084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"521","target":"543","id":"9854","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"321","target":"533","id":"7689","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"147","target":"669","id":"4738","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"104","target":"546","id":"3837","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"349","target":"419","id":"8065","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"89","target":"632","id":"3526","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"688","target":"736","id":"10638","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"431","target":"547","id":"9044","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"372","target":"492","id":"8312","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"40","target":"389","id":"2386","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"118","target":"664","id":"4127","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"71","target":"407","id":"3119","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"123","target":"482","id":"4224","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"267","target":"317","id":"6849","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"546","target":"564","id":"10043","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"435","target":"493","id":"9095","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"356","target":"400","id":"8138","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"430","target":"634","id":"9035","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"134","target":"513","id":"4445","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"7","target":"578","id":"1615","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"310","target":"477","id":"7531","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"172","target":"625","id":"5224","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"22","target":"158","id":"1963","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"14","target":"194","id":"1778","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"375","target":"687","id":"8363","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"222","target":"228","id":"6115","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"213","target":"530","id":"5966","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"266","target":"364","id":"6832","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"127","target":"257","id":"4289","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"2","target":"672","id":"1508","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"391","target":"394","id":"8580","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"138","target":"520","id":"4527","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"204","target":"637","id":"5816","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"127","target":"726","id":"4304","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"497","target":"538","id":"9680","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"269","target":"559","id":"6899","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"88","target":"261","id":"3489","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"289","target":"547","id":"7230","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"107","target":"146","id":"3873","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"461","target":"531","id":"9377","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"325","target":"338","id":"7730","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"163","target":"588","id":"5052","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"137","target":"666","id":"4514","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"278","target":"626","id":"7030","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"257","target":"553","id":"6684","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"27","target":"679","id":"2084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"264","target":"724","id":"6812","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"49","target":"357","id":"2593","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"94","target":"682","id":"3637","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"366","target":"572","id":"8246","attributes":{"Weight":"1.0"},"color":"rgb(148,67,213)","size":1.0},{"source":"107","target":"579","id":"3884","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"253","target":"556","id":"6624","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"141","target":"696","id":"4603","attributes":{"Weight":"1.0"},"color":"rgb(213,148,83)","size":1.0},{"source":"16","target":"24","id":"1824","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"215","target":"638","id":"5998","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"264","target":"729","id":"6814","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"336","target":"343","id":"7896","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"1","target":"218","id":"1470","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"212","target":"462","id":"5944","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"629","target":"644","id":"10450","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"38","target":"168","id":"2335","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"19","target":"449","id":"1903","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"170","target":"356","id":"5175","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"130","target":"534","id":"4364","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"365","target":"544","id":"8238","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"266","target":"578","id":"6835","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"441","target":"465","id":"9167","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"381","target":"409","id":"8428","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"3","target":"121","id":"1512","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"196","target":"652","id":"5675","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"98","target":"176","id":"3705","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"227","target":"720","id":"6216","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"94","target":"613","id":"3634","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"489","target":"552","id":"9606","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"66","target":"402","id":"3004","attributes":{"Weight":"1.0"},"color":"rgb(148,132,164)","size":1.0},{"source":"545","target":"656","id":"10037","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"100","target":"219","id":"3750","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"159","target":"246","id":"4962","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"8","target":"654","id":"1653","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"401","target":"558","id":"8713","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"241","target":"602","id":"6423","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"356","target":"674","id":"8149","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"125","target":"237","id":"4249","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"57","target":"440","id":"2777","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"60","target":"562","id":"2858","attributes":{"Weight":"1.0"},"color":"rgb(229,67,180)","size":1.0},{"source":"45","target":"59","id":"2493","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"328","target":"372","id":"7781","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"72","target":"706","id":"3149","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"74","target":"625","id":"3185","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"53","target":"270","id":"2676","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"173","target":"655","id":"5248","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"159","target":"639","id":"4974","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"54","target":"451","id":"2710","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"336","target":"501","id":"7903","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"103","target":"509","id":"3817","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"142","target":"624","id":"4621","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"277","target":"528","id":"7011","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"96","target":"366","id":"3676","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"187","target":"299","id":"5496","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"392","target":"393","id":"8593","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"521","target":"604","id":"9860","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"444","target":"624","id":"9215","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"137","target":"584","id":"4511","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"308","target":"348","id":"7500","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"319","target":"720","id":"7673","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"33","target":"361","id":"2229","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"121","target":"634","id":"4189","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"169","target":"318","id":"5155","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"133","target":"396","id":"4422","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"331","target":"490","id":"7834","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"86","target":"131","id":"3433","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"90","target":"544","id":"3550","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"172","target":"654","id":"5225","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"204","target":"635","id":"5814","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"107","target":"337","id":"3879","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"473","target":"523","id":"9492","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"132","target":"484","id":"4412","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"285","target":"382","id":"7148","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"94","target":"314","id":"3622","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"160","target":"553","id":"4989","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"203","target":"678","id":"5804","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"219","target":"554","id":"6074","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"226","target":"486","id":"6189","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"310","target":"479","id":"7532","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"104","target":"295","id":"3829","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"60","target":"334","id":"2847","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"69","target":"650","id":"3075","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"295","target":"446","id":"7316","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"241","target":"266","id":"6413","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"466","target":"647","id":"9420","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"640","target":"732","id":"10503","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"169","target":"355","id":"5157","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"175","target":"263","id":"5264","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"179","target":"238","id":"5348","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"263","target":"300","id":"6782","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"63","target":"89","id":"2921","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"265","target":"544","id":"6827","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"93","target":"579","id":"3609","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"478","target":"622","id":"9541","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"111","target":"368","id":"3970","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"350","target":"417","id":"8078","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"215","target":"266","id":"5987","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"247","target":"315","id":"6518","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"171","target":"350","id":"5196","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"367","target":"549","id":"8259","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"82","target":"203","id":"3346","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"49","target":"509","id":"2595","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"57","target":"523","id":"2782","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"32","target":"696","id":"2206","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"271","target":"453","id":"6920","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"253","target":"694","id":"6630","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"69","target":"647","id":"3074","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"3","target":"185","id":"1518","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"388","target":"712","id":"8553","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"190","target":"537","id":"5561","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"481","target":"482","id":"9560","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"146","target":"286","id":"4708","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"334","target":"710","id":"7880","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"143","target":"542","id":"4643","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"387","target":"633","id":"8541","attributes":{"Weight":"1.0"},"color":"rgb(99,229,132)","size":1.0},{"source":"17","target":"581","id":"1863","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"290","target":"392","id":"7242","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"180","target":"333","id":"5375","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"16","target":"158","id":"1828","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"99","target":"369","id":"3737","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"61","target":"714","id":"2898","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"384","target":"431","id":"8485","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"149","target":"325","id":"4761","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"378","target":"448","id":"8396","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"408","target":"612","id":"8781","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"128","target":"501","id":"4316","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"539","target":"653","id":"10004","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"149","target":"714","id":"4776","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"284","target":"389","id":"7140","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"427","target":"549","id":"8997","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"57","target":"521","id":"2781","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"461","target":"661","id":"9381","attributes":{"Weight":"1.0"},"color":"rgb(196,213,67)","size":1.0},{"source":"419","target":"462","id":"8895","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"261","target":"693","id":"6771","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"392","target":"559","id":"8602","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"694","target":"696","id":"10656","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"24","target":"158","id":"2002","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"526","target":"652","id":"9907","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"31","target":"369","id":"2178","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"578","target":"665","id":"10230","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"139","target":"583","id":"4549","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"146","target":"662","id":"4719","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"480","target":"687","id":"9559","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"12","target":"608","id":"1748","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"193","target":"646","id":"5607","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"63","target":"161","id":"2927","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"244","target":"325","id":"6460","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"30","target":"120","id":"2146","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"190","target":"342","id":"5554","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"448","target":"588","id":"9244","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"28","target":"643","id":"2119","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"315","target":"666","id":"7605","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"524","target":"736","id":"9893","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"102","target":"201","id":"3785","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"60","target":"353","id":"2848","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"122","target":"480","id":"4200","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"298","target":"310","id":"7354","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"39","target":"430","id":"2367","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"334","target":"548","id":"7877","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"428","target":"593","id":"9009","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"112","target":"239","id":"3994","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"250","target":"400","id":"6564","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"252","target":"483","id":"6610","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"381","target":"432","id":"8431","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"129","target":"486","id":"4342","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"149","target":"314","id":"4760","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"77","target":"458","id":"3248","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"243","target":"292","id":"6447","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"21","target":"74","id":"1938","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"364","target":"661","id":"8223","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"177","target":"527","id":"5315","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"199","target":"437","id":"5723","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"229","target":"592","id":"6246","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"301","target":"432","id":"7403","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"166","target":"191","id":"5098","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"84","target":"627","id":"3403","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"255","target":"400","id":"6649","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"284","target":"599","id":"7146","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"663","target":"728","id":"10594","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"167","target":"240","id":"5119","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"392","target":"658","id":"8605","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"70","target":"642","id":"3103","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"33","target":"419","id":"2232","attributes":{"Weight":"1.0"},"color":"rgb(148,180,148)","size":1.0},{"source":"119","target":"136","id":"4131","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"156","target":"513","id":"4917","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"495","target":"598","id":"9665","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"44","target":"577","id":"2481","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"261","target":"422","id":"6758","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"21","target":"158","id":"1939","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"15","target":"582","id":"1815","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"622","target":"676","id":"10424","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"383","target":"537","id":"8475","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"142","target":"514","id":"4617","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"632","target":"657","id":"10461","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"143","target":"147","id":"4626","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"265","target":"406","id":"6822","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"195","target":"585","id":"5648","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"274","target":"655","id":"6971","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"284","target":"570","id":"7143","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"386","target":"612","id":"8524","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"651","target":"734","id":"10558","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"113","target":"321","id":"4010","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"270","target":"736","id":"6917","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"253","target":"545","id":"6623","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"246","target":"621","id":"6506","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"95","target":"128","id":"3641","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"513","target":"544","id":"9798","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"118","target":"347","id":"4118","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"389","target":"598","id":"8559","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"107","target":"626","id":"3885","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"504","target":"690","id":"9739","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"373","target":"719","id":"8329","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"171","target":"325","id":"5193","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"429","target":"720","id":"9027","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"28","target":"429","id":"2110","attributes":{"Weight":"1.0"},"color":"rgb(148,99,180)","size":1.0},{"source":"37","target":"217","id":"2313","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"24","target":"174","id":"2003","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"54","target":"225","id":"2698","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"358","target":"642","id":"8168","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"381","target":"440","id":"8432","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"305","target":"429","id":"7467","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"247","target":"284","id":"6516","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"455","target":"721","id":"9320","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"298","target":"477","id":"7361","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"90","target":"549","id":"3551","attributes":{"Weight":"1.0"},"color":"rgb(100,148,148)","size":1.0},{"source":"28","target":"182","id":"2097","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"57","target":"271","id":"2771","attributes":{"Weight":"1.0"},"color":"rgb(196,148,148)","size":1.0},{"source":"67","target":"538","id":"3024","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"197","target":"427","id":"5687","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"245","target":"368","id":"6481","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"245","target":"569","id":"6489","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"494","target":"631","id":"9660","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"391","target":"395","id":"8581","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"425","target":"594","id":"8975","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"293","target":"704","id":"7289","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"120","target":"548","id":"4165","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"68","target":"198","id":"3036","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"27","target":"144","id":"2061","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"1","target":"274","id":"1471","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"621","target":"632","id":"10415","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"69","target":"382","id":"3064","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"341","target":"513","id":"7970","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"508","target":"728","id":"9776","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"408","target":"654","id":"8783","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"441","target":"651","id":"9173","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"438","target":"650","id":"9130","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"382","target":"465","id":"8454","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"318","target":"581","id":"7649","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"4","target":"670","id":"1552","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"204","target":"697","id":"5819","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"428","target":"716","id":"9016","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"577","target":"614","id":"10218","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"319","target":"487","id":"7663","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"179","target":"522","id":"5355","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"369","target":"526","id":"8279","attributes":{"Weight":"1.0"},"color":"rgb(67,115,229)","size":1.0},{"source":"128","target":"712","id":"4323","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"111","target":"150","id":"3960","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"575","target":"612","id":"10205","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"59","target":"141","id":"2817","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"494","target":"525","id":"9655","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"257","target":"398","id":"6680","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"478","target":"481","id":"9538","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"67","target":"633","id":"3025","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"322","target":"632","id":"7700","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"571","target":"644","id":"10174","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"366","target":"422","id":"8243","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"426","target":"492","id":"8985","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"107","target":"182","id":"3874","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"392","target":"413","id":"8600","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"642","target":"707","id":"10512","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"381","target":"565","id":"8441","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"331","target":"443","id":"7833","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"114","target":"161","id":"4025","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"522","target":"677","id":"9871","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"313","target":"620","id":"7578","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"281","target":"729","id":"7092","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"84","target":"579","id":"3401","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"70","target":"287","id":"3091","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"2","target":"309","id":"1499","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"491","target":"647","id":"9625","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"655","target":"722","id":"10572","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"268","target":"392","id":"6868","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"57","target":"508","id":"2780","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"142","target":"535","id":"4618","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"275","target":"317","id":"6976","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"10","target":"96","id":"1683","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"222","target":"353","id":"6121","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"222","target":"595","id":"6128","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"223","target":"239","id":"6131","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"518","target":"656","id":"9837","attributes":{"Weight":"1.0"},"color":"rgb(229,83,83)","size":1.0},{"source":"324","target":"368","id":"7722","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"91","target":"406","id":"3565","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"371","target":"576","id":"8298","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"126","target":"213","id":"4270","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"285","target":"725","id":"7160","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"37","target":"113","id":"2309","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"187","target":"300","id":"5497","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"115","target":"691","id":"4063","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"519","target":"655","id":"9846","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"20","target":"213","id":"1917","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"149","target":"673","id":"4774","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"237","target":"711","id":"6367","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"314","target":"417","id":"7586","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"368","target":"489","id":"8267","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"55","target":"299","id":"2730","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"21","target":"532","id":"1947","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"367","target":"427","id":"8254","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"149","target":"613","id":"4772","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"431","target":"443","id":"9041","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"246","target":"516","id":"6504","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"179","target":"685","id":"5367","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"172","target":"612","id":"5222","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"70","target":"225","id":"3089","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"409","target":"521","id":"8797","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"350","target":"507","id":"8080","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"151","target":"289","id":"4812","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"399","target":"560","id":"8689","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"196","target":"565","id":"5671","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"290","target":"689","id":"7256","attributes":{"Weight":"1.0"},"color":"rgb(148,83,196)","size":1.0},{"source":"396","target":"496","id":"8644","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"374","target":"573","id":"8341","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"94","target":"133","id":"3618","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"46","target":"125","id":"2521","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"5","target":"139","id":"1557","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"245","target":"294","id":"6477","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"481","target":"534","id":"9562","attributes":{"Weight":"1.0"},"color":"rgb(197,148,148)","size":1.0},{"source":"473","target":"562","id":"9495","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"28","target":"662","id":"2120","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"162","target":"301","id":"5021","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"440","target":"521","id":"9153","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"197","target":"254","id":"5680","attributes":{"Weight":"1.0"},"color":"rgb(164,67,164)","size":1.0},{"source":"469","target":"535","id":"9447","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"621","target":"639","id":"10417","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"496","target":"630","id":"9673","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"143","target":"469","id":"4639","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"551","target":"718","id":"10068","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"297","target":"322","id":"7339","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"378","target":"506","id":"8399","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"136","target":"617","id":"4496","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"108","target":"525","id":"3900","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"141","target":"447","id":"4594","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"489","target":"720","id":"9611","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"370","target":"672","id":"8289","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"16","target":"22","id":"1822","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"59","target":"711","id":"2832","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"60","target":"460","id":"2852","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"281","target":"725","id":"7091","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"282","target":"730","id":"7113","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"689","target":"729","id":"10641","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"206","target":"588","id":"5849","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"44","target":"442","id":"2473","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"56","target":"74","id":"2746","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"129","target":"463","id":"4341","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"228","target":"548","id":"6227","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"223","target":"484","id":"6140","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"535","target":"624","id":"9976","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"210","target":"626","id":"5908","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"165","target":"634","id":"5092","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"382","target":"534","id":"8459","attributes":{"Weight":"1.0"},"color":"rgb(132,83,229)","size":1.0},{"source":"642","target":"726","id":"10513","attributes":{"Weight":"1.0"},"color":"rgb(115,148,229)","size":1.0},{"source":"69","target":"441","id":"3068","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"324","target":"710","id":"7729","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"157","target":"432","id":"4929","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"142","target":"301","id":"4612","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"55","target":"455","id":"2736","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"51","target":"640","id":"2639","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"604","target":"663","id":"10346","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"602","target":"692","id":"10337","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"148","target":"459","id":"4746","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"76","target":"629","id":"3237","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"269","target":"377","id":"6886","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"40","target":"495","id":"2388","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"611","target":"678","id":"10379","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"154","target":"569","id":"4875","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"486","target":"618","id":"9587","attributes":{"Weight":"1.0"},"color":"rgb(229,180,67)","size":1.0},{"source":"491","target":"650","id":"9626","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"216","target":"571","id":"6017","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"510","target":"581","id":"9784","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"194","target":"691","id":"5632","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"121","target":"352","id":"4181","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"60","target":"305","id":"2844","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"39","target":"607","id":"2372","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"37","target":"83","id":"2306","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"202","target":"618","id":"5783","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"53","target":"302","id":"2677","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"79","target":"577","id":"3296","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"154","target":"294","id":"4865","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"55","target":"539","id":"2740","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"54","target":"432","id":"2707","attributes":{"Weight":"1.0"},"color":"rgb(99,148,229)","size":1.0},{"source":"411","target":"560","id":"8824","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"406","target":"683","id":"8768","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"399","target":"413","id":"8685","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"171","target":"566","id":"5202","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"176","target":"329","id":"5285","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"337","target":"662","id":"7922","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"145","target":"151","id":"4674","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"32","target":"556","id":"2199","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"7","target":"693","id":"1623","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"536","target":"551","id":"9981","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"38","target":"185","id":"2336","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"220","target":"503","id":"6085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"621","target":"715","id":"10421","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"281","target":"735","id":"7095","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"191","target":"352","id":"5572","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"70","target":"451","id":"3097","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"391","target":"560","id":"8589","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"264","target":"285","id":"6799","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"616","target":"713","id":"10402","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"248","target":"336","id":"6528","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"22","target":"292","id":"1966","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"283","target":"411","id":"7127","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"190","target":"702","id":"5567","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"472","target":"473","id":"9476","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"127","target":"485","id":"4294","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"189","target":"262","id":"5534","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"232","target":"668","id":"6293","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"112","target":"320","id":"3996","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"36","target":"78","id":"2288","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"93","target":"703","id":"3616","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"126","target":"406","id":"4277","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"86","target":"277","id":"3437","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"278","target":"627","id":"7031","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"164","target":"719","id":"5074","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"135","target":"436","id":"4467","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"54","target":"450","id":"2709","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"48","target":"732","id":"2578","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"280","target":"436","id":"7061","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"339","target":"692","id":"7949","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"538","target":"635","id":"9995","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"145","target":"676","id":"4698","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"650","target":"729","id":"10549","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"633","target":"637","id":"10467","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"347","target":"590","id":"8042","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"133","target":"338","id":"4419","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"258","target":"702","id":"6711","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"124","target":"189","id":"4229","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"436","target":"567","id":"9111","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"15","target":"418","id":"1808","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"330","target":"411","id":"7820","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"251","target":"557","id":"6592","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"63","target":"553","id":"2936","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"306","target":"495","id":"7478","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"54","target":"221","id":"2697","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"95","target":"119","id":"3640","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"50","target":"489","id":"2621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"391","target":"731","id":"8592","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"125","target":"622","id":"4265","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"389","target":"584","id":"8558","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"339","target":"661","id":"7946","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"121","target":"531","id":"4187","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"9","target":"324","id":"1671","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"173","target":"722","id":"5249","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"388","target":"501","id":"8547","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"302","target":"312","id":"7417","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"377","target":"393","id":"8380","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"163","target":"563","id":"5051","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"654","target":"668","id":"10566","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"527","target":"654","id":"9915","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"449","target":"675","id":"9254","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"212","target":"419","id":"5938","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"59","target":"249","id":"2819","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"298","target":"468","id":"7358","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"617","target":"680","id":"10403","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"429","target":"489","id":"9018","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"336","target":"617","id":"7908","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"224","target":"233","id":"6142","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"93","target":"619","id":"3614","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"431","target":"676","id":"9048","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"227","target":"342","id":"6200","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"279","target":"529","id":"7045","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"364","target":"453","id":"8217","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"265","target":"683","id":"6829","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"267","target":"510","id":"6856","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"529","target":"547","id":"9935","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"88","target":"366","id":"3495","attributes":{"Weight":"1.0"},"color":"rgb(115,148,148)","size":1.0},{"source":"525","target":"526","id":"9894","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"126","target":"326","id":"4273","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"286","target":"571","id":"7171","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"213","target":"683","id":"5970","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"303","target":"603","id":"7444","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"179","target":"612","id":"5360","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"37","target":"84","id":"2307","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"68","target":"637","id":"3050","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"25","target":"733","id":"2034","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"422","target":"481","id":"8935","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"123","target":"416","id":"4217","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"96","target":"153","id":"3669","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"14","target":"342","id":"1783","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"263","target":"542","id":"6791","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"354","target":"361","id":"8124","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"131","target":"644","id":"4392","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"125","target":"482","id":"4262","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"638","target":"723","id":"10493","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"97","target":"605","id":"3701","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"316","target":"349","id":"7607","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"356","target":"557","id":"8145","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"54","target":"212","id":"2695","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"442","target":"648","id":"9192","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"90","target":"156","id":"3537","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"46","target":"237","id":"2523","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"365","target":"681","id":"8239","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"661","target":"723","id":"10592","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"27","target":"616","id":"2081","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"62","target":"213","id":"2906","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"8","target":"408","id":"1641","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"207","target":"239","id":"5857","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"54","target":"555","id":"2713","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"58","target":"141","id":"2795","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"29","target":"458","id":"2131","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"183","target":"697","id":"5436","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"427","target":"551","id":"8998","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"92","target":"492","id":"3587","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"466","target":"730","id":"9427","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"329","target":"343","id":"7794","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"139","target":"576","id":"4548","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"105","target":"370","id":"3851","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"173","target":"205","id":"5233","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"643","target":"720","id":"10516","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"381","target":"728","id":"8450","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"253","target":"674","id":"6629","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"314","target":"345","id":"7583","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"327","target":"374","id":"7758","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"104","target":"318","id":"3831","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"42","target":"619","id":"2433","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"379","target":"403","id":"8409","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"78","target":"247","id":"3263","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"142","target":"175","id":"4607","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"76","target":"472","id":"3224","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"358","target":"450","id":"8161","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"341","target":"502","id":"7969","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"33","target":"445","id":"2234","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"387","target":"437","id":"8536","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"216","target":"623","id":"6024","attributes":{"Weight":"1.0"},"color":"rgb(148,196,115)","size":1.0},{"source":"226","target":"634","id":"6192","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"96","target":"672","id":"3682","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"90","target":"681","id":"3552","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"77","target":"541","id":"3257","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"154","target":"726","id":"4885","attributes":{"Weight":"1.0"},"color":"rgb(196,67,213)","size":1.0},{"source":"127","target":"322","id":"4291","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"90","target":"134","id":"3536","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"314","target":"534","id":"7589","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"228","target":"353","id":"6222","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"453","target":"602","id":"9285","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"397","target":"629","id":"8658","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"186","target":"353","id":"5486","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"144","target":"434","id":"4661","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"229","target":"581","id":"6245","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"614","target":"678","id":"10396","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"305","target":"499","id":"7469","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"124","target":"362","id":"4242","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"651","target":"724","id":"10554","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"172","target":"384","id":"5214","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"431","target":"699","id":"9049","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"96","target":"369","id":"3677","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"111","target":"529","id":"3977","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"166","target":"531","id":"5109","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"208","target":"680","id":"5883","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"443","target":"717","id":"9207","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"359","target":"373","id":"8170","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"160","target":"257","id":"4982","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"53","target":"637","id":"2686","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"369","target":"554","id":"8280","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"81","target":"310","id":"3329","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"387","target":"404","id":"8535","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"73","target":"635","id":"3162","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"43","target":"138","id":"2439","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"47","target":"400","id":"2550","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"191","target":"486","id":"5577","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"57","target":"615","id":"2789","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"104","target":"267","id":"3826","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"153","target":"309","id":"4850","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"95","target":"206","id":"3645","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"227","target":"591","id":"6209","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"68","target":"636","id":"3049","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"6","target":"307","id":"1586","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"139","target":"258","id":"4537","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"43","target":"404","id":"2447","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"489","target":"569","id":"9607","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"48","target":"640","id":"2573","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"291","target":"449","id":"7262","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"96","target":"630","id":"3681","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"428","target":"532","id":"9005","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"135","target":"419","id":"4464","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"87","target":"449","id":"3464","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"55","target":"469","id":"2737","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"25","target":"120","id":"2019","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"341","target":"681","id":"7973","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"275","target":"352","id":"6978","attributes":{"Weight":"1.0"},"color":"rgb(148,213,67)","size":1.0},{"source":"10","target":"99","id":"1684","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"371","target":"528","id":"8294","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"239","target":"344","id":"6389","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"85","target":"135","id":"3407","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"338","target":"673","id":"7935","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"192","target":"284","id":"5584","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"525","target":"655","id":"9901","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"8","target":"685","id":"1657","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"116","target":"616","id":"4089","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"39","target":"461","id":"2368","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"166","target":"685","id":"5113","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"288","target":"508","id":"7204","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"133","target":"171","id":"4415","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"295","target":"564","id":"7320","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"9","target":"228","id":"1667","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"430","target":"668","id":"9037","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"250","target":"482","id":"6569","attributes":{"Weight":"1.0"},"color":"rgb(213,148,83)","size":1.0},{"source":"77","target":"680","id":"3259","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"76","target":"562","id":"3231","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"252","target":"452","id":"6605","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"289","target":"431","id":"7223","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"356","target":"556","id":"8144","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"18","target":"138","id":"1868","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"178","target":"372","id":"5333","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"272","target":"404","id":"6938","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"391","target":"561","id":"8590","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"473","target":"521","id":"9491","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"301","target":"514","id":"7407","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"28","target":"489","id":"2112","attributes":{"Weight":"1.0"},"color":"rgb(148,99,180)","size":1.0},{"source":"52","target":"56","id":"2646","attributes":{"Weight":"1.0"},"color":"rgb(83,148,180)","size":1.0},{"source":"243","target":"695","id":"6454","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"599","target":"666","id":"10321","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"410","target":"696","id":"8819","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"135","target":"368","id":"4462","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"45","target":"565","id":"2513","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"206","target":"712","id":"5851","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"15","target":"494","id":"1811","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"179","target":"386","id":"5352","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"74","target":"704","id":"3191","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"54","target":"419","id":"2705","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"428","target":"601","id":"9010","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"121","target":"607","id":"4188","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"241","target":"364","id":"6416","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"5","target":"668","id":"1578","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"231","target":"258","id":"6260","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"286","target":"528","id":"7170","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"292","target":"704","id":"7279","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"169","target":"546","id":"5164","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"49","target":"581","id":"2599","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"176","target":"609","id":"5297","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"271","target":"690","id":"6929","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"211","target":"358","id":"5918","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"314","target":"325","id":"7581","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"317","target":"564","id":"7634","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"103","target":"229","id":"3806","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"423","target":"557","id":"8944","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"418","target":"519","id":"8882","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"35","target":"598","id":"2282","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"271","target":"610","id":"6925","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"221","target":"287","id":"6096","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"440","target":"508","id":"9152","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"74","target":"679","id":"3189","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"158","target":"174","id":"4945","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"45","target":"675","id":"2516","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"45","target":"622","id":"2514","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"76","target":"523","id":"3229","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"375","target":"406","id":"8350","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"68","target":"574","id":"3046","attributes":{"Weight":"1.0"},"color":"rgb(99,229,83)","size":1.0},{"source":"519","target":"585","id":"9843","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"562","target":"594","id":"10119","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"79","target":"316","id":"3282","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"76","target":"409","id":"3219","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"364","target":"692","id":"8227","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"444","target":"669","id":"9217","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"36","target":"380","id":"2296","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"64","target":"101","id":"2946","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"201","target":"324","id":"5754","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"121","target":"276","id":"4180","attributes":{"Weight":"1.0"},"color":"rgb(148,213,67)","size":1.0},{"source":"527","target":"707","id":"9920","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"182","target":"705","id":"5413","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"283","target":"394","id":"7123","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"28","target":"488","id":"2111","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"447","target":"675","id":"9237","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"24","target":"695","id":"2012","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"281","target":"491","id":"7083","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"511","target":"528","id":"9786","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"550","target":"617","id":"10062","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"562","target":"728","id":"10125","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"73","target":"637","id":"3164","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"274","target":"605","id":"6969","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"508","target":"565","id":"9771","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"79","target":"145","id":"3280","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"223","target":"362","id":"6137","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"311","target":"685","id":"7554","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"50","target":"227","id":"2609","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"556","target":"674","id":"10092","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"23","target":"48","id":"1980","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"446","target":"564","id":"9228","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"189","target":"354","id":"5538","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"391","target":"393","id":"8579","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"493","target":"655","id":"9652","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"174","target":"708","id":"5260","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"246","target":"726","id":"6514","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"337","target":"387","id":"7912","attributes":{"Weight":"1.0"},"color":"rgb(67,180,213)","size":1.0},{"source":"297","target":"553","id":"7343","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"571","target":"589","id":"10168","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"63","target":"638","id":"2939","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"304","target":"457","id":"7455","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"177","target":"677","id":"5323","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"286","target":"511","id":"7169","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"94","target":"338","id":"3624","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"357","target":"592","id":"8158","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"256","target":"581","id":"6676","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"633","target":"697","id":"10470","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"92","target":"328","id":"3578","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"4","target":"340","id":"1541","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"22","target":"708","id":"1975","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"612","target":"625","id":"10382","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"208","target":"307","id":"5869","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"42","target":"601","id":"2431","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"26","target":"45","id":"2035","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"453","target":"721","id":"9292","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"439","target":"733","id":"9149","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"432","target":"539","id":"9058","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"58","target":"277","id":"2799","attributes":{"Weight":"1.0"},"color":"rgb(213,196,67)","size":1.0},{"source":"175","target":"301","id":"5267","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"493","target":"582","id":"9647","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"336","target":"378","id":"7899","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"99","target":"234","id":"3732","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"46","target":"416","id":"2528","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"33","target":"112","id":"2211","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"633","target":"736","id":"10471","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"120","target":"305","id":"4157","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"47","target":"558","id":"2558","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"355","target":"546","id":"8134","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"146","target":"579","id":"4716","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"21","target":"568","id":"1949","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"304","target":"667","id":"7460","attributes":{"Weight":"1.0"},"color":"rgb(67,148,180)","size":1.0},{"source":"637","target":"688","id":"10485","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"395","target":"560","id":"8639","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"115","target":"505","id":"4057","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"8","target":"150","id":"1632","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"13","target":"284","id":"1761","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"193","target":"382","id":"5600","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"196","target":"526","id":"5668","attributes":{"Weight":"1.0"},"color":"rgb(148,115,229)","size":1.0},{"source":"503","target":"590","id":"9728","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"202","target":"319","id":"5771","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"23","target":"243","id":"1984","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"56","target":"311","id":"2751","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"33","target":"135","id":"2214","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"25","target":"708","id":"2032","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"178","target":"456","id":"5336","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"34","target":"355","id":"2255","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"567","target":"699","id":"10146","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"165","target":"285","id":"5083","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"45","target":"141","id":"2497","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"516","target":"688","id":"9820","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"532","target":"679","id":"9956","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"101","target":"354","id":"3775","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"357","target":"546","id":"8155","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"336","target":"588","id":"7907","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"323","target":"331","id":"7707","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"192","target":"584","id":"5592","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"319","target":"451","id":"7661","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"270","target":"497","id":"6906","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"59","target":"482","id":"2829","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"126","target":"156","id":"4269","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"143","target":"175","id":"4628","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"370","target":"457","id":"8286","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"219","target":"370","id":"6072","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"200","target":"587","id":"5742","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"343","target":"448","id":"7996","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"341","target":"683","id":"7974","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"172","target":"667","id":"5226","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"25","target":"568","id":"2027","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"435","target":"525","id":"9098","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"632","target":"715","id":"10463","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"155","target":"720","id":"4906","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"213","target":"341","id":"5959","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"260","target":"661","id":"6745","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"619","target":"716","id":"10412","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"151","target":"699","id":"4827","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"57","target":"473","id":"2779","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"231","target":"713","id":"6277","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"689","target":"735","id":"10644","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"352","target":"369","id":"8104","attributes":{"Weight":"1.0"},"color":"rgb(148,132,148)","size":1.0},{"source":"376","target":"431","id":"8365","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"102","target":"499","id":"3798","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"111","target":"373","id":"3972","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"80","target":"583","id":"3320","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"441","target":"730","id":"9178","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"37","target":"146","id":"2310","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"125","target":"449","id":"4257","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"206","target":"506","id":"5846","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"280","target":"631","id":"7071","attributes":{"Weight":"1.0"},"color":"rgb(148,115,213)","size":1.0},{"source":"682","target":"714","id":"10631","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"63","target":"114","id":"2923","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"49","target":"229","id":"2584","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"33","target":"354","id":"2228","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"42","target":"86","id":"2412","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"113","target":"217","id":"4008","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"474","target":"621","id":"9504","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"240","target":"491","id":"6405","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"291","target":"447","id":"7261","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"170","target":"402","id":"5178","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"258","target":"415","id":"6700","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"31","target":"672","id":"2183","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"71","target":"84","id":"3106","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"125","target":"252","id":"4251","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"293","target":"540","id":"7284","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"540","target":"640","id":"10008","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"121","target":"711","id":"4190","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"243","target":"540","id":"6450","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"228","target":"429","id":"6224","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"140","target":"145","id":"4556","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"294","target":"443","id":"7300","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"66","target":"284","id":"2999","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"150","target":"719","id":"4802","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"406","target":"681","id":"8767","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"317","target":"510","id":"7632","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"281","target":"724","id":"7090","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"421","target":"682","id":"8929","attributes":{"Weight":"1.0"},"color":"rgb(213,67,229)","size":1.0},{"source":"158","target":"292","id":"4947","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"259","target":"649","id":"6725","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"653","target":"669","id":"10563","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"535","target":"539","id":"9974","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"432","target":"644","id":"9064","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"692","target":"721","id":"10652","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"522","target":"625","id":"9868","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"375","target":"544","id":"8358","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"306","target":"584","id":"7480","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"528","target":"601","id":"9926","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"627","target":"662","id":"10443","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"173","target":"435","id":"5238","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"139","target":"440","id":"4546","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"559","target":"561","id":"10107","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"330","target":"394","id":"7816","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"207","target":"223","id":"5855","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"511","target":"571","id":"9788","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"558","target":"694","id":"10104","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"216","target":"432","id":"6013","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"15","target":"435","id":"1809","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"50","target":"294","id":"2611","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"224","target":"555","id":"6158","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"78","target":"192","id":"3262","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"5","target":"144","id":"1558","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"126","target":"681","id":"4283","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"270","target":"697","id":"6916","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"87","target":"565","id":"3473","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"256","target":"295","id":"6666","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"166","target":"352","id":"5101","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"201","target":"368","id":"5757","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"594","target":"604","id":"10302","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"148","target":"470","id":"4748","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"145","target":"323","id":"4681","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"256","target":"318","id":"6668","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"410","target":"694","id":"8818","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"216","target":"294","id":"6008","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"163","target":"360","id":"5044","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"332","target":"511","id":"7844","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"625","target":"685","id":"10438","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"311","target":"522","id":"7543","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"132","target":"230","id":"4402","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"151","target":"529","id":"4821","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"173","target":"519","id":"5241","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"554","target":"672","id":"10080","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"5","target":"713","id":"1579","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"16","target":"568","id":"1835","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"265","target":"530","id":"6826","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"613","target":"682","id":"10392","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"28","target":"569","id":"2115","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"2","target":"366","id":"1501","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"62","target":"502","id":"2915","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"19","target":"55","id":"1889","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"189","target":"239","id":"5533","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"164","target":"245","id":"5058","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"316","target":"577","id":"7617","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"225","target":"319","id":"6169","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"112","target":"354","id":"3998","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"614","target":"623","id":"10394","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"448","target":"727","id":"9247","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"126","target":"544","id":"4282","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"59","target":"481","id":"2828","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"162","target":"299","id":"5020","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"90","target":"406","id":"3545","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"398","target":"715","id":"8680","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"621","target":"706","id":"10420","attributes":{"Weight":"1.0"},"color":"rgb(115,148,164)","size":1.0},{"source":"337","target":"705","id":"7923","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"188","target":"703","id":"5526","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"277","target":"652","id":"7020","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"19","target":"141","id":"1894","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"338","target":"606","id":"7932","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"132","target":"362","id":"4409","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"587","target":"702","id":"10274","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"110","target":"547","id":"3947","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"97","target":"525","id":"3697","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"554","target":"630","id":"10079","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"432","target":"669","id":"9066","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"393","target":"559","id":"8615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"82","target":"396","id":"3352","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"46","target":"59","id":"2518","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"43","target":"346","id":"2444","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"529","target":"643","id":"9939","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"385","target":"517","id":"8506","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"21","target":"292","id":"1943","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"568","target":"708","id":"10152","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"442","target":"721","id":"9195","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"1","target":"526","id":"1479","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"19","target":"478","id":"1905","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"345","target":"715","id":"8025","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"287","target":"608","id":"7191","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"293","target":"732","id":"7291","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"21","target":"640","id":"1950","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"492","target":"615","id":"9640","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"398","target":"621","id":"8671","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"27","target":"498","id":"2074","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"455","target":"669","id":"9316","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"342","target":"383","id":"7977","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"600","target":"642","id":"10324","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"504","target":"665","id":"9738","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"332","target":"601","id":"7849","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"58","target":"622","id":"2812","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"141","target":"675","id":"4602","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"134","target":"326","id":"4438","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"32","target":"558","id":"2201","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"290","target":"561","id":"7254","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"94","target":"566","id":"3632","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"93","target":"428","id":"3605","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"465","target":"735","id":"9417","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"528","target":"576","id":"9923","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"89","target":"485","id":"3523","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"10","target":"672","id":"1702","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"148","target":"208","id":"4740","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"237","target":"675","id":"6366","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"406","target":"530","id":"8765","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"71","target":"420","id":"3120","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"222","target":"235","id":"6116","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"282","target":"491","id":"7103","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"19","target":"26","id":"1886","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"140","target":"721","id":"4585","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"147","target":"698","id":"4739","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"61","target":"375","id":"2880","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"170","target":"401","id":"5177","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"74","target":"667","id":"3187","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"58","target":"237","id":"2796","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"143","target":"309","id":"4634","attributes":{"Weight":"1.0"},"color":"rgb(99,67,229)","size":1.0},{"source":"391","target":"411","id":"8584","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"14","target":"706","id":"1799","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"274","target":"418","id":"6960","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"173","target":"274","id":"5235","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"130","target":"503","id":"4363","attributes":{"Weight":"1.0"},"color":"rgb(67,148,213)","size":1.0},{"source":"26","target":"558","id":"2054","attributes":{"Weight":"1.0"},"color":"rgb(213,148,83)","size":1.0},{"source":"310","target":"459","id":"7527","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"614","target":"648","id":"10395","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"59","target":"452","id":"2826","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"142","target":"299","id":"4610","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"308","target":"713","id":"7513","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"13","target":"273","id":"1760","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"162","target":"504","id":"5027","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"308","target":"616","id":"7509","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"71","target":"533","id":"3122","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"8","target":"116","id":"1629","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"314","target":"566","id":"7590","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"170","target":"254","id":"5173","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"212","target":"221","id":"5932","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"665","target":"692","id":"10598","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"76","target":"303","id":"3217","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"37","target":"71","id":"2305","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"580","target":"618","id":"10243","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"118","target":"709","id":"4129","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"292","target":"732","id":"7281","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"251","target":"660","id":"6595","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"390","target":"561","id":"8575","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"611","target":"623","id":"10376","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"79","target":"611","id":"3297","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"156","target":"530","id":"4918","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"167","target":"430","id":"5122","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"4","target":"503","id":"1547","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"390","target":"394","id":"8565","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"308","target":"603","id":"7508","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"46","target":"482","id":"2536","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"529","target":"586","id":"9938","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"255","target":"558","id":"6657","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"66","target":"273","id":"2998","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"6","target":"458","id":"1589","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"83","target":"210","id":"3374","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"650","target":"735","id":"10552","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"109","target":"136","id":"3910","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"542","target":"624","id":"10018","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"445","target":"484","id":"9220","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"12","target":"645","id":"1750","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"492","target":"551","id":"9638","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"216","target":"619","id":"6023","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"646","target":"724","id":"10524","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"178","target":"700","id":"5344","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"596","target":"721","id":"10313","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"75","target":"342","id":"3199","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"160","target":"657","id":"4995","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"303","target":"335","id":"7432","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"302","target":"635","id":"7423","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"249","target":"483","id":"6554","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"57","target":"594","id":"2787","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"122","target":"577","id":"4204","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"151","target":"443","id":"4819","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"646","target":"735","id":"10529","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"382","target":"725","id":"8467","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"241","target":"693","id":"6429","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"432","target":"542","id":"9059","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"75","target":"379","id":"3201","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"321","target":"420","id":"7687","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"133","target":"417","id":"4423","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"218","target":"693","id":"6065","attributes":{"Weight":"1.0"},"color":"rgb(115,196,148)","size":1.0},{"source":"1","target":"97","id":"1465","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"546","target":"581","id":"10044","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"201","target":"552","id":"5762","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"97","target":"195","id":"3686","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"56","target":"677","id":"2763","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"138","target":"193","id":"4515","attributes":{"Weight":"1.0"},"color":"rgb(67,164,213)","size":1.0},{"source":"295","target":"510","id":"7318","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"428","target":"540","id":"9006","attributes":{"Weight":"1.0"},"color":"rgb(229,115,67)","size":1.0},{"source":"316","target":"397","id":"7611","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"485","target":"639","id":"9579","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"569","target":"719","id":"10161","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"330","target":"561","id":"7826","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"490","target":"676","id":"9618","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"584","target":"599","id":"10261","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"277","target":"571","id":"7013","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"443","target":"490","id":"9196","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"128","target":"513","id":"4318","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"137","target":"380","id":"4506","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"166","target":"167","id":"5095","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"172","target":"522","id":"5218","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"177","target":"311","id":"5307","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"404","target":"661","id":"8749","attributes":{"Weight":"1.0"},"color":"rgb(115,229,132)","size":1.0},{"source":"328","target":"700","id":"7792","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"14","target":"243","id":"1780","attributes":{"Weight":"1.0"},"color":"rgb(148,148,83)","size":1.0},{"source":"693","target":"723","id":"10655","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"404","target":"664","id":"8750","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"399","target":"411","id":"8683","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"169","target":"667","id":"5169","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"306","target":"666","id":"7483","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"240","target":"521","id":"6406","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"446","target":"510","id":"9226","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"470","target":"477","id":"9459","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"92","target":"426","id":"3583","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"231","target":"586","id":"6272","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"432","target":"589","id":"9061","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"116","target":"150","id":"4068","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"41","target":"66","id":"2394","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"656","target":"696","id":"10576","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"318","target":"510","id":"7643","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"642","target":"645","id":"10511","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"142","target":"432","id":"4613","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"374","target":"633","id":"8346","attributes":{"Weight":"1.0"},"color":"rgb(99,229,115)","size":1.0},{"source":"50","target":"135","id":"2604","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"102","target":"489","id":"3797","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"243","target":"704","id":"6455","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"623","target":"648","id":"10427","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"440","target":"594","id":"9160","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"102","target":"710","id":"3803","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"629","target":"643","id":"10449","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"180","target":"580","id":"5380","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"64","target":"125","id":"2949","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"200","target":"537","id":"5739","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"328","target":"367","id":"7780","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"175","target":"698","id":"5281","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"131","target":"333","id":"4377","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"172","target":"621","id":"5223","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"306","target":"599","id":"7482","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"264","target":"282","id":"6798","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"255","target":"410","id":"6652","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"571","target":"601","id":"10170","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"432","target":"444","id":"9053","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"366","target":"630","id":"8248","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"558","target":"674","id":"10103","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"428","target":"703","id":"9014","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"460","target":"612","id":"9364","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"72","target":"259","id":"3134","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"154","target":"707","id":"4882","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"224","target":"279","id":"6143","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"35","target":"36","id":"2264","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"169","target":"357","id":"5158","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"144","target":"562","id":"4664","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"35","target":"192","id":"2270","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"213","target":"681","id":"5969","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"199","target":"272","id":"5716","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"729","target":"734","id":"10686","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"409","target":"562","id":"8800","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"455","target":"577","id":"9313","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"376","target":"502","id":"8369","attributes":{"Weight":"1.0"},"color":"rgb(164,148,132)","size":1.0},{"source":"194","target":"259","id":"5619","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"540","target":"568","id":"10007","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"185","target":"531","id":"5470","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"311","target":"667","id":"7551","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"340","target":"437","id":"7957","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"284","target":"467","id":"7141","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"234","target":"672","id":"6326","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"120","target":"368","id":"4161","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"289","target":"436","id":"7224","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"232","target":"415","id":"6286","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"154","target":"155","id":"4859","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"13","target":"389","id":"1765","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"494","target":"526","id":"9656","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"141","target":"452","id":"4596","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"108","target":"195","id":"3890","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"443","target":"529","id":"9197","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"45","target":"661","id":"2515","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"195","target":"435","id":"5640","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"240","target":"461","id":"6402","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"45","target":"422","id":"2504","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"173","target":"494","id":"5240","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"457","target":"701","id":"9333","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"247","target":"598","id":"6525","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"547","target":"717","id":"10051","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"371","target":"569","id":"8296","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"328","target":"329","id":"7778","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"80","target":"603","id":"3321","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"172","target":"532","id":"5220","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"200","target":"649","id":"5745","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"555","target":"645","id":"10085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"26","target":"675","id":"2056","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"53","target":"524","id":"2681","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"71","target":"705","id":"3127","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"3","target":"486","id":"1527","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"434","target":"713","id":"9094","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"639","target":"657","id":"10495","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"203","target":"454","id":"5791","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"95","target":"248","id":"3647","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"3","target":"39","id":"1511","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"49","target":"510","id":"2596","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"92","target":"615","id":"3592","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"419","target":"451","id":"8894","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"128","target":"388","id":"4314","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"187","target":"539","id":"5505","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"8","target":"667","id":"1654","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"92","target":"197","id":"3577","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"87","target":"473","id":"3466","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"189","target":"483","id":"5542","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"152","target":"617","id":"4843","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"154","target":"316","id":"4867","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"252","target":"481","id":"6608","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"507","target":"613","id":"9761","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"45","target":"46","id":"2491","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"120","target":"222","id":"4152","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"150","target":"644","id":"4799","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"312","target":"635","id":"7561","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"15","target":"631","id":"1818","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"275","target":"355","id":"6979","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"427","target":"718","id":"9002","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"38","target":"634","id":"2352","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"139","target":"575","id":"4547","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"375","target":"442","id":"8351","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"570","target":"599","id":"10165","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"327","target":"480","id":"7766","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"388","target":"563","id":"8550","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"240","target":"607","id":"6409","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"373","target":"397","id":"8320","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"351","target":"426","id":"8091","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"171","target":"200","id":"5190","attributes":{"Weight":"1.0"},"color":"rgb(132,148,164)","size":1.0},{"source":"348","target":"575","id":"8052","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"50","target":"591","id":"2625","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"276","target":"295","id":"6992","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"214","target":"230","id":"5972","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"630","target":"701","id":"10455","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"204","target":"524","id":"5811","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"246","target":"257","id":"6497","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"505","target":"649","id":"9748","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"17","target":"267","id":"1850","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"2","target":"639","id":"1507","attributes":{"Weight":"1.0"},"color":"rgb(115,67,229)","size":1.0},{"source":"555","target":"600","id":"10082","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"116","target":"231","id":"4069","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"498","target":"678","id":"9698","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"108","target":"418","id":"3895","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"221","target":"487","id":"6106","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"218","target":"366","id":"6049","attributes":{"Weight":"1.0"},"color":"rgb(67,115,229)","size":1.0},{"source":"398","target":"657","id":"8676","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"523","target":"594","id":"9879","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"275","target":"564","id":"6987","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"318","target":"646","id":"7652","attributes":{"Weight":"1.0"},"color":"rgb(67,164,148)","size":1.0},{"source":"462","target":"600","id":"9385","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"18","target":"387","id":"1876","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"38","target":"226","id":"2338","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"180","target":"593","id":"5381","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"555","target":"608","id":"10083","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"127","target":"657","id":"4300","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"196","target":"562","id":"5670","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"505","target":"537","id":"9744","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"415","target":"576","id":"8848","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"486","target":"607","id":"9586","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"91","target":"613","id":"3571","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"42","target":"703","id":"2435","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"264","target":"438","id":"6801","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"87","target":"212","id":"3457","attributes":{"Weight":"1.0"},"color":"rgb(148,148,229)","size":1.0},{"source":"279","target":"323","id":"7036","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"268","target":"283","id":"6862","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"218","target":"274","id":"6046","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"117","target":"126","id":"4093","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"231","target":"576","id":"6270","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"409","target":"565","id":"8801","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"101","target":"262","id":"3772","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"278","target":"488","id":"7027","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"725","target":"730","id":"10682","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"233","target":"567","id":"6307","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"269","target":"399","id":"6893","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"436","target":"547","id":"9110","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"157","target":"603","id":"4940","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"518","target":"686","id":"9839","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"158","target":"704","id":"4955","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"160","target":"614","id":"4990","attributes":{"Weight":"1.0"},"color":"rgb(115,148,196)","size":1.0},{"source":"52","target":"178","id":"2650","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"436","target":"529","id":"9109","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"429","target":"548","id":"9021","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"433","target":"623","id":"9080","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"51","target":"540","id":"2637","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"21","target":"243","id":"1941","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"43","target":"340","id":"2443","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"543","target":"562","id":"10022","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"69","target":"387","id":"3065","attributes":{"Weight":"1.0"},"color":"rgb(67,164,213)","size":1.0},{"source":"4","target":"404","id":"1545","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"198","target":"688","id":"5712","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"430","target":"711","id":"9039","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"72","target":"574","id":"3143","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"280","target":"608","id":"7070","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"251","target":"253","id":"6580","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"37","target":"579","id":"2322","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"272","target":"503","id":"6940","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"258","target":"583","id":"6706","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"277","target":"618","id":"7017","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"98","target":"492","id":"3717","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"124","target":"223","id":"4233","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"258","target":"440","id":"6703","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"266","target":"690","id":"6841","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"108","target":"519","id":"3899","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"202","target":"261","id":"5769","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"85","target":"431","id":"3420","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"347","target":"709","id":"8046","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"497","target":"516","id":"9678","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"423","target":"656","id":"8946","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"183","target":"302","id":"5419","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"86","target":"580","id":"3446","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"426","target":"456","id":"8983","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"221","target":"591","id":"6109","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"679","target":"685","id":"10627","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"363","target":"537","id":"8208","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"295","target":"509","id":"7317","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"596","target":"692","id":"10311","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"71","target":"662","id":"3126","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"368","target":"710","id":"8275","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"527","target":"685","id":"9919","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"228","target":"710","id":"6230","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"115","target":"702","id":"4064","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"99","target":"309","id":"3735","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"459","target":"680","id":"9355","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"175","target":"653","id":"5279","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"366","target":"457","id":"8244","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"359","target":"397","id":"8171","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"102","target":"697","id":"3802","attributes":{"Weight":"1.0"},"color":"rgb(180,148,99)","size":1.0},{"source":"234","target":"287","id":"6313","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"130","target":"370","id":"4358","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"480","target":"497","id":"9549","attributes":{"Weight":"1.0"},"color":"rgb(99,229,115)","size":1.0},{"source":"288","target":"473","id":"7203","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"352","target":"526","id":"8109","attributes":{"Weight":"1.0"},"color":"rgb(148,180,148)","size":1.0},{"source":"145","target":"375","id":"4684","attributes":{"Weight":"1.0"},"color":"rgb(164,148,132)","size":1.0},{"source":"424","target":"636","id":"8960","attributes":{"Weight":"1.0"},"color":"rgb(99,229,148)","size":1.0},{"source":"133","target":"606","id":"4428","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"49","target":"295","id":"2589","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"318","target":"606","id":"7651","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"160","target":"632","id":"4992","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"175","target":"455","id":"5271","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"265","target":"502","id":"6824","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"64","target":"512","id":"2972","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"101","target":"209","id":"3767","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"275","target":"318","id":"6977","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"340","target":"404","id":"7956","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"160","target":"726","id":"4998","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"578","target":"601","id":"10225","attributes":{"Weight":"1.0"},"color":"rgb(196,196,67)","size":1.0},{"source":"23","target":"293","id":"1986","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"71","target":"488","id":"3121","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"287","target":"469","id":"7187","attributes":{"Weight":"1.0"},"color":"rgb(99,148,229)","size":1.0},{"source":"601","target":"716","id":"10332","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"119","target":"128","id":"4130","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"126","target":"476","id":"4278","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"364","target":"504","id":"8218","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"142","target":"455","id":"4615","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"516","target":"736","id":"9823","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"425","target":"562","id":"8972","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"424","target":"645","id":"8962","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"543","target":"663","id":"10029","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"578","target":"602","id":"10226","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"656","target":"674","id":"10574","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"411","target":"561","id":"8825","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"243","target":"641","id":"6453","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"458","target":"686","id":"9345","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"257","target":"723","id":"6693","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"474","target":"553","id":"9503","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"62","target":"341","id":"2910","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"171","target":"345","id":"5195","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"464","target":"549","id":"9398","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"202","target":"645","id":"5785","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"498","target":"614","id":"9694","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"297","target":"663","id":"7349","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"255","target":"674","id":"6660","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"507","target":"715","id":"9766","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"327","target":"573","id":"7769","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"128","target":"206","id":"4308","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"203","target":"614","id":"5800","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"351","target":"549","id":"8097","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"319","target":"642","id":"7670","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"282","target":"466","id":"7102","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"280","target":"699","id":"7073","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"145","target":"224","id":"4675","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"240","target":"531","id":"6407","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"169","target":"446","id":"5160","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"124","target":"271","id":"4237","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"64","target":"661","id":"2974","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"8","target":"371","id":"1638","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"159","target":"322","id":"4966","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"100","target":"369","id":"3755","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"444","target":"535","id":"9212","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"118","target":"138","id":"4112","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"675","target":"676","id":"10617","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"352","target":"531","id":"8110","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"276","target":"564","id":"7001","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"307","target":"468","id":"7488","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"119","target":"336","id":"4136","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"192","target":"247","id":"5582","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"230","target":"483","id":"6255","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"230","target":"512","id":"6257","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"280","target":"734","id":"7075","attributes":{"Weight":"1.0"},"color":"rgb(148,83,213)","size":1.0},{"source":"474","target":"632","id":"9505","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"553","target":"671","id":"10076","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"386","target":"460","id":"8519","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"606","target":"682","id":"10356","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"574","target":"718","id":"10201","attributes":{"Weight":"1.0"},"color":"rgb(83,148,164)","size":1.0},{"source":"108","target":"655","id":"3906","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"223","target":"344","id":"6134","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"125","target":"141","id":"4248","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"405","target":"411","id":"8753","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"339","target":"610","id":"7945","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"389","target":"599","id":"8560","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"661","target":"721","id":"10591","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"77","target":"620","id":"3258","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"141","target":"237","id":"4586","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"175","target":"535","id":"5275","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"443","target":"586","id":"9201","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"30","target":"552","id":"2162","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"135","target":"429","id":"4465","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"496","target":"659","id":"9674","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"130","target":"382","id":"4359","attributes":{"Weight":"1.0"},"color":"rgb(67,83,229)","size":1.0},{"source":"7","target":"504","id":"1614","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"500","target":"537","id":"9706","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"327","target":"687","id":"7776","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"307","target":"541","id":"7495","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"327","target":"375","id":"7759","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"211","target":"486","id":"5924","attributes":{"Weight":"1.0"},"color":"rgb(148,213,148)","size":1.0},{"source":"523","target":"543","id":"9875","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"76","target":"440","id":"3223","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"342","target":"574","id":"7983","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"237","target":"252","id":"6355","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"249","target":"622","id":"6556","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"478","target":"675","id":"9542","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"119","target":"248","id":"4135","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"111","target":"591","id":"3980","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"249","target":"461","id":"6550","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"310","target":"458","id":"7526","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"194","target":"403","id":"5624","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"136","target":"448","id":"4490","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"215","target":"260","id":"5986","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"401","target":"656","id":"8714","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"98","target":"551","id":"3720","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"604","target":"621","id":"10345","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"37","target":"337","id":"2316","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"180","target":"528","id":"5378","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"361","target":"483","id":"8195","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"110","target":"349","id":"3943","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"162","target":"339","id":"5022","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"231","target":"308","id":"6262","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"89","target":"715","id":"3531","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"338","target":"714","id":"7937","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"185","target":"461","id":"5466","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"433","target":"687","id":"9085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"217","target":"705","id":"6042","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"224","target":"676","id":"6162","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"533","target":"627","id":"9963","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"12","target":"600","id":"1747","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"418","target":"722","id":"8890","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"288","target":"381","id":"7197","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"15","target":"519","id":"1812","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"475","target":"678","id":"9523","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"74","target":"527","id":"3181","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"143","target":"535","id":"4641","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"98","target":"456","id":"3715","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"41","target":"192","id":"2397","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"394","target":"559","id":"8627","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"158","target":"439","id":"4949","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"268","target":"390","id":"6866","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"331","target":"436","id":"7832","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"238","target":"308","id":"6370","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"27","target":"116","id":"2059","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"161","target":"322","id":"5002","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"364","target":"693","id":"8228","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"498","target":"679","id":"9699","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"344","target":"484","id":"8010","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"517","target":"648","id":"9831","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"134","target":"375","id":"4441","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"142","target":"157","id":"4606","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"596","target":"693","id":"10312","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"188","target":"428","id":"5516","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"382","target":"647","id":"8461","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"4","target":"65","id":"1535","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"340","target":"387","id":"7955","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"52","target":"464","id":"2660","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"78","target":"389","id":"3269","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"573","target":"687","id":"10194","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"124","target":"615","id":"4247","attributes":{"Weight":"1.0"},"color":"rgb(164,99,148)","size":1.0},{"source":"11","target":"65","id":"1707","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"612","target":"679","id":"10386","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"112","target":"189","id":"3988","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"166","target":"359","id":"5102","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"572","target":"644","id":"10182","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"429","target":"529","id":"9020","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"193","target":"734","id":"5616","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"280","target":"547","id":"7066","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"19","target":"59","id":"1891","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"57","target":"124","id":"2769","attributes":{"Weight":"1.0"},"color":"rgb(229,99,148)","size":1.0},{"source":"533","target":"626","id":"9962","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"64","target":"124","id":"2948","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"451","target":"487","id":"9268","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"72","target":"194","id":"3132","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"185","target":"191","id":"5457","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"289","target":"699","id":"7234","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"371","target":"606","id":"8300","attributes":{"Weight":"1.0"},"color":"rgb(213,67,213)","size":1.0},{"source":"113","target":"674","id":"4020","attributes":{"Weight":"1.0"},"color":"rgb(148,99,164)","size":1.0},{"source":"31","target":"130","id":"2170","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"82","target":"385","id":"3350","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"203","target":"611","id":"5799","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"612","target":"667","id":"10384","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"55","target":"653","id":"2743","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"250","target":"410","id":"6567","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"20","target":"502","id":"1926","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"249","target":"449","id":"6548","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"528","target":"571","id":"9922","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"179","target":"408","id":"5353","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"30","target":"305","id":"2153","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"111","target":"227","id":"3964","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"36","target":"273","id":"2292","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"208","target":"620","id":"5882","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"173","target":"525","id":"5242","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"510","target":"564","id":"9783","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"149","target":"417","id":"4766","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"175","target":"669","id":"5280","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"344","target":"445","id":"8008","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"99","target":"701","id":"3744","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"129","target":"373","id":"4337","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"342","target":"627","id":"7987","attributes":{"Weight":"1.0"},"color":"rgb(67,180,164)","size":1.0},{"source":"198","target":"633","id":"5706","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"291","target":"422","id":"7260","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"292","target":"695","id":"7278","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"292","target":"439","id":"7273","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"502","target":"681","id":"9724","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"436","target":"717","id":"9116","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"97","target":"437","id":"3693","attributes":{"Weight":"1.0"},"color":"rgb(67,196,213)","size":1.0},{"source":"177","target":"384","id":"5309","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"213","target":"365","id":"5960","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"704","target":"733","id":"10668","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"473","target":"604","id":"9499","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"90","target":"326","id":"3541","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"14","target":"379","id":"1785","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"56","target":"177","id":"2749","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"188","target":"593","id":"5521","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"433","target":"678","id":"9083","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"131","target":"623","id":"4391","attributes":{"Weight":"1.0"},"color":"rgb(148,196,115)","size":1.0},{"source":"88","target":"279","id":"3492","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"182","target":"627","id":"5411","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"224","target":"490","id":"6155","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"345","target":"417","id":"8014","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"76","target":"543","id":"3230","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"8","target":"384","id":"1639","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"51","target":"641","id":"2640","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"6","target":"298","id":"1585","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"44","target":"586","id":"2482","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"229","target":"256","id":"6231","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"2","target":"105","id":"1491","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"688","target":"697","id":"10637","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"349","target":"569","id":"8069","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"130","target":"291","id":"4353","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"39","target":"240","id":"2364","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"192","target":"380","id":"5587","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"194","target":"342","id":"5620","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"73","target":"184","id":"3151","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"664","target":"709","id":"10596","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"193","target":"689","id":"5611","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"296","target":"519","id":"7328","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"124","target":"354","id":"4240","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"66","target":"467","id":"3005","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"301","target":"384","id":"7401","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"110","target":"164","id":"3934","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"42","target":"528","id":"2427","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"63","target":"639","id":"2940","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"56","target":"625","id":"2760","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"601","target":"619","id":"10328","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"84","target":"113","id":"3389","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"523","target":"562","id":"9876","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"294","target":"397","id":"7298","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"323","target":"676","id":"7717","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"176","target":"718","id":"5300","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"28","target":"113","id":"2094","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"146","target":"210","id":"4705","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"252","target":"416","id":"6601","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"184","target":"736","id":"5456","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"612","target":"681","id":"10387","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"392","target":"411","id":"8598","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"336","target":"356","id":"7897","attributes":{"Weight":"1.0"},"color":"rgb(229,148,83)","size":1.0},{"source":"137","target":"598","id":"4512","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"172","target":"604","id":"5221","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"250","target":"423","id":"6568","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"381","target":"594","id":"8444","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"498","target":"629","id":"9696","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"394","target":"731","id":"8631","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"7","target":"271","id":"1608","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"266","target":"693","id":"6843","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"201","target":"710","id":"5764","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"391","target":"399","id":"8582","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"179","target":"231","id":"5347","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"325","target":"539","id":"7739","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"11","target":"220","id":"1711","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"459","target":"620","id":"9354","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"42","target":"93","id":"2413","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"198","target":"524","id":"5704","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"350","target":"659","id":"8085","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"316","target":"442","id":"7612","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"50","target":"429","id":"2620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"409","target":"573","id":"8802","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"430","target":"702","id":"9038","attributes":{"Weight":"1.0"},"color":"rgb(148,213,83)","size":1.0},{"source":"21","target":"733","id":"1956","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"385","target":"614","id":"8511","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"211","target":"608","id":"5928","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"44","target":"122","id":"2461","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"435","target":"494","id":"9096","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"724","target":"734","id":"10679","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"283","target":"392","id":"7121","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"383","target":"649","id":"8479","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"185","target":"352","id":"5461","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"177","target":"532","id":"5316","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"384","target":"667","id":"8494","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"291","target":"478","id":"7264","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"377","target":"731","id":"8393","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"115","target":"379","id":"4053","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"490","target":"699","id":"9619","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"455","target":"687","id":"9318","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"46","target":"141","id":"2522","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"586","target":"627","id":"10267","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"409","target":"433","id":"8791","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"403","target":"649","id":"8736","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"317","target":"357","id":"7629","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"65","target":"346","id":"2981","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"46","target":"291","id":"2526","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"272","target":"340","id":"6934","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"550","target":"588","id":"10061","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"150","target":"720","id":"4803","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"184","target":"636","id":"5451","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"84","target":"407","id":"3397","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"71","target":"579","id":"3123","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"405","target":"731","id":"8761","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"349","target":"644","id":"8074","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"281","target":"614","id":"7084","attributes":{"Weight":"1.0"},"color":"rgb(67,164,196)","size":1.0},{"source":"116","target":"528","id":"4082","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"575","target":"583","id":"10203","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"251","target":"694","id":"6597","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"248","target":"712","id":"6540","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"421","target":"728","id":"8930","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"60","target":"646","id":"2862","attributes":{"Weight":"1.0"},"color":"rgb(148,83,180)","size":1.0},{"source":"258","target":"654","id":"6709","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"319","target":"429","id":"7659","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"260","target":"271","id":"6731","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"86","target":"286","id":"3438","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"329","target":"367","id":"7796","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"454","target":"480","id":"9296","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"210","target":"337","id":"5902","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"590","target":"709","id":"10289","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"229","target":"267","id":"6232","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"419","target":"642","id":"8903","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"382","target":"491","id":"8457","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"289","target":"323","id":"7219","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"120","target":"708","id":"4168","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"459","target":"471","id":"9348","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"183","target":"224","id":"5417","attributes":{"Weight":"1.0"},"color":"rgb(180,148,132)","size":1.0},{"source":"536","target":"718","id":"9985","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"280","target":"490","id":"7064","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"28","target":"420","id":"2109","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"284","target":"315","id":"7138","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"343","target":"388","id":"7995","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"335","target":"415","id":"7882","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"70","target":"645","id":"3104","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"689","target":"724","id":"10639","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"424","target":"642","id":"8961","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"195","target":"218","id":"5636","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"83","target":"420","id":"3380","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"140","target":"460","id":"4570","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"528","target":"593","id":"9925","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"623","target":"719","id":"10430","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"115","target":"194","id":"4048","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"330","target":"560","id":"7825","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"305","target":"324","id":"7463","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"524","target":"636","id":"9888","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"150","target":"371","id":"4786","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"68","target":"312","id":"3041","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"526","target":"582","id":"9903","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"82","target":"517","id":"3359","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"339","target":"693","id":"7950","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"183","target":"726","id":"5438","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"518","target":"620","id":"9836","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"217","target":"533","id":"6036","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"199","target":"664","id":"5728","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"337","target":"533","id":"7917","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"416","target":"447","id":"8857","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"378","target":"399","id":"8395","attributes":{"Weight":"1.0"},"color":"rgb(229,148,115)","size":1.0},{"source":"158","target":"641","id":"4953","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"417","target":"534","id":"8871","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"19","target":"447","id":"1902","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"577","target":"678","id":"10221","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"197","target":"456","id":"5688","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"294","target":"644","id":"7309","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"583","target":"603","id":"10254","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"572","target":"693","id":"10183","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"506","target":"727","id":"9757","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"148","target":"307","id":"4742","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"528","target":"646","id":"9930","attributes":{"Weight":"1.0"},"color":"rgb(148,132,148)","size":1.0},{"source":"61","target":"145","id":"2869","attributes":{"Weight":"1.0"},"color":"rgb(213,67,213)","size":1.0},{"source":"52","target":"718","id":"2668","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"159","target":"632","id":"4972","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"433","target":"543","id":"9075","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"356","target":"423","id":"8142","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"206","target":"448","id":"5844","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"170","target":"545","id":"5181","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"295","target":"357","id":"7315","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"229","target":"564","id":"6244","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"128","target":"360","id":"4312","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"129","target":"240","id":"4334","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"88","target":"422","id":"3496","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"159","target":"621","id":"4971","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"31","target":"100","id":"2167","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"76","target":"594","id":"3235","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"600","target":"608","id":"10322","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"97","target":"296","id":"3690","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"121","target":"191","id":"4177","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"566","target":"613","id":"10139","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"296","target":"494","id":"7327","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"12","target":"450","id":"1742","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"27","target":"139","id":"2060","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"432","target":"455","id":"9054","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"399","target":"731","id":"8693","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"396","target":"566","id":"8647","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"537","target":"649","id":"9990","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"147","target":"539","id":"4734","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"266","target":"692","id":"6842","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"470","target":"471","id":"9458","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"421","target":"473","id":"8917","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"288","target":"409","id":"7198","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"472","target":"508","id":"9477","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"428","target":"619","id":"9012","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"53","target":"736","id":"2690","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"288","target":"728","id":"7218","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"45","target":"237","id":"2498","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"15","target":"108","id":"1801","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"49","target":"169","id":"2582","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"441","target":"734","id":"9179","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"236","target":"305","id":"6342","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"100","target":"130","id":"3747","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"144","target":"668","id":"4672","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"335","target":"726","id":"7895","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"318","target":"509","id":"7642","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"607","target":"711","id":"10360","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"639","target":"671","id":"10496","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"605","target":"631","id":"10349","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"91","target":"242","id":"3559","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"315","target":"467","id":"7599","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"108","target":"218","id":"3892","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"140","target":"678","id":"4580","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"144","target":"303","id":"4654","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"82","target":"633","id":"3365","attributes":{"Weight":"1.0"},"color":"rgb(99,229,115)","size":1.0},{"source":"255","target":"660","id":"6659","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"167","target":"226","id":"5118","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"96","target":"701","id":"3683","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"169","target":"352","id":"5156","attributes":{"Weight":"1.0"},"color":"rgb(148,213,67)","size":1.0},{"source":"517","target":"573","id":"9825","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"339","target":"453","id":"7939","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"60","target":"429","id":"2851","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"594","target":"728","id":"10304","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"75","target":"537","id":"3206","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"27","target":"573","id":"2076","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"169","target":"581","id":"5166","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"225","target":"462","id":"6175","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"311","target":"654","id":"7550","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"254","target":"674","id":"6645","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"586","target":"676","id":"10268","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"160","target":"297","id":"4984","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"508","target":"604","id":"9774","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"261","target":"642","id":"6769","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"587","target":"649","id":"10272","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"235","target":"353","id":"6333","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"248","target":"343","id":"6529","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"401","target":"694","id":"8717","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"568","target":"733","id":"10155","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"188","target":"652","id":"5525","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"637","target":"736","id":"10487","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"289","target":"540","id":"7229","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"102","target":"222","id":"3786","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"61","target":"94","id":"2866","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"435","target":"582","id":"9100","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"282","target":"650","id":"7106","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"44","target":"475","id":"2475","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"347","target":"628","id":"8043","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"20","target":"375","id":"1923","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"677","target":"707","id":"10624","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"404","target":"565","id":"8746","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"7","target":"690","id":"1621","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"430","target":"440","id":"9028","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"225","target":"358","id":"6170","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"77","target":"208","id":"3243","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"465","target":"689","id":"9411","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"17","target":"564","id":"1862","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"124","target":"445","id":"4243","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"523","target":"649","id":"9881","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"326","target":"513","id":"7753","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"205","target":"631","id":"5835","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"59","target":"478","id":"2827","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"284","target":"495","id":"7142","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"259","target":"500","id":"6718","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"123","target":"141","id":"4212","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"274","target":"296","id":"6959","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"107","target":"488","id":"3882","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"145","target":"699","id":"4701","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"602","target":"610","id":"10333","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"269","target":"405","id":"6894","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"213","target":"476","id":"5963","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"257","target":"474","id":"6682","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"14","target":"259","id":"1781","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"64","target":"262","id":"2960","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"114","target":"297","id":"4028","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"191","target":"634","id":"5580","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"674","target":"696","id":"10616","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"286","target":"601","id":"7174","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"423","target":"558","id":"8945","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"436","target":"676","id":"9113","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"654","target":"707","id":"10571","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"61","target":"140","id":"2868","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"328","target":"718","id":"7793","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"144","target":"583","id":"4667","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"279","target":"289","id":"7035","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"357","target":"446","id":"8152","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"197","target":"328","id":"5681","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"247","target":"380","id":"6519","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"269","target":"393","id":"6890","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"453","target":"610","id":"9286","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"498","target":"517","id":"9689","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"290","target":"731","id":"7257","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"32","target":"410","id":"2196","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"291","target":"534","id":"7268","attributes":{"Weight":"1.0"},"color":"rgb(197,148,148)","size":1.0},{"source":"110","target":"572","id":"3949","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"83","target":"107","id":"3370","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"62","target":"134","id":"2904","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"7","target":"723","id":"1625","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"171","target":"606","id":"5205","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"458","target":"471","id":"9337","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"562","target":"606","id":"10121","attributes":{"Weight":"1.0"},"color":"rgb(213,67,229)","size":1.0},{"source":"161","target":"671","id":"5012","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"336","target":"550","id":"7905","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"266","target":"602","id":"6837","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"80","target":"144","id":"3306","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"569","target":"629","id":"10158","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"371","target":"719","id":"8306","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"353","target":"429","id":"8117","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"129","target":"677","id":"4346","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"159","target":"398","id":"4967","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"48","target":"174","id":"2566","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"190","target":"383","id":"5557","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"252","target":"461","id":"6606","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"396","target":"613","id":"8649","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"57","target":"472","id":"2778","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"87","target":"421","id":"3461","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"186","target":"595","id":"5493","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"479","target":"541","id":"9545","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"409","target":"472","id":"8793","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"335","target":"348","id":"7881","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"308","target":"583","id":"7507","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"321","target":"488","id":"7688","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"297","target":"398","id":"7340","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"635","target":"636","id":"10473","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"19","target":"45","id":"1887","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"245","target":"719","id":"6495","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"264","target":"465","id":"6803","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"216","target":"428","id":"6012","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"112","target":"344","id":"3997","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"153","target":"672","id":"4857","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"172","target":"177","id":"5211","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"184","target":"497","id":"5445","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"483","target":"661","id":"9572","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"143","target":"455","id":"4638","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"627","target":"705","id":"10444","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"275","target":"526","id":"6985","attributes":{"Weight":"1.0"},"color":"rgb(67,196,148)","size":1.0},{"source":"672","target":"701","id":"10612","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"218","target":"591","id":"6061","attributes":{"Weight":"1.0"},"color":"rgb(148,115,213)","size":1.0},{"source":"111","target":"164","id":"3963","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"543","target":"604","id":"10027","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"337","target":"626","id":"7919","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"18","target":"220","id":"1870","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"57","target":"76","id":"2767","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"26","target":"416","id":"2046","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"108","target":"631","id":"3905","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"169","target":"592","id":"5167","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"295","target":"581","id":"7321","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"85","target":"490","id":"3423","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"275","target":"592","id":"6989","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"89","target":"297","id":"3519","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"157","target":"300","id":"4927","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"496","target":"613","id":"9672","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"51","target":"158","id":"2631","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"30","target":"368","id":"2157","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"227","target":"397","id":"6204","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"73","target":"736","id":"3168","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"276","target":"357","id":"6996","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"582","target":"585","id":"10249","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"242","target":"574","id":"6443","attributes":{"Weight":"1.0"},"color":"rgb(83,229,83)","size":1.0},{"source":"269","target":"283","id":"6883","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"29","target":"515","id":"2138","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"42","target":"277","id":"2420","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"286","target":"326","id":"7165","attributes":{"Weight":"1.0"},"color":"rgb(164,196,67)","size":1.0},{"source":"582","target":"722","id":"10253","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"19","target":"58","id":"1890","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"51","target":"733","id":"2645","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"95","target":"109","id":"3639","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"188","target":"619","id":"5524","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"93","target":"332","id":"3603","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"215","target":"241","id":"5984","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"111","target":"644","id":"3983","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"275","target":"652","id":"6990","attributes":{"Weight":"1.0"},"color":"rgb(148,196,67)","size":1.0},{"source":"35","target":"306","id":"2274","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"508","target":"663","id":"9775","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"144","target":"575","id":"4665","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"298","target":"458","id":"7356","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"85","target":"676","id":"3428","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"108","target":"585","id":"3903","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"134","target":"681","id":"4448","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"165","target":"461","id":"5087","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"654","target":"667","id":"10565","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"425","target":"449","id":"8964","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"404","target":"416","id":"8740","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"444","target":"455","id":"9209","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"128","target":"550","id":"4319","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"126","target":"502","id":"4279","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"283","target":"658","id":"7135","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"661","target":"692","id":"10589","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"96","target":"130","id":"3668","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"131","target":"443","id":"4381","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"659","target":"714","id":"10583","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"73","target":"688","id":"3166","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"6","target":"81","id":"1582","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"5","target":"157","id":"1559","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"253","target":"402","id":"6620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"44","target":"151","id":"2462","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"229","target":"546","id":"6243","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"610","target":"693","id":"10372","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"725","target":"735","id":"10684","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"51","target":"292","id":"2634","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"155","target":"349","id":"4892","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"650","target":"734","id":"10551","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"121","target":"185","id":"4176","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"56","target":"386","id":"2753","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"168","target":"352","id":"5134","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"61","target":"534","id":"2888","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"189","target":"512","id":"5544","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"199","target":"387","id":"5721","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"419","target":"555","id":"8899","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"318","target":"592","id":"7650","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"10","target":"106","id":"1687","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"282","target":"465","id":"7101","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"23","target":"695","id":"1992","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"133","target":"534","id":"4426","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"45","target":"447","id":"2505","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"155","target":"316","id":"4891","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"254","target":"557","id":"6641","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"441","target":"724","id":"9175","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"252","target":"449","id":"6604","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"67","target":"312","id":"3020","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"16","target":"708","id":"1840","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"144","target":"616","id":"4670","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"219","target":"457","id":"6073","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"439","target":"732","id":"9148","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"72","target":"691","id":"3147","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"352","target":"607","id":"8111","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"224","target":"529","id":"6156","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"216","target":"716","id":"6028","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"159","target":"485","id":"4969","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"175","target":"539","id":"5276","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"68","target":"635","id":"3048","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"174","target":"733","id":"5262","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"568","target":"709","id":"10153","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"345","target":"659","id":"8021","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"54","target":"216","id":"2696","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"6","target":"148","id":"1583","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"188","target":"528","id":"5518","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"9","target":"201","id":"1665","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"282","target":"735","id":"7115","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"10","target":"105","id":"1686","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"212","target":"449","id":"5941","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"169","target":"564","id":"5165","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"162","target":"721","id":"5038","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"259","target":"587","id":"6723","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"192","target":"495","id":"5590","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"296","target":"631","id":"7335","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"296","target":"526","id":"7330","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"574","target":"587","id":"10195","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"385","target":"475","id":"8503","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"640","target":"695","id":"10500","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"202","target":"642","id":"5784","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"452","target":"503","id":"9277","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"387","target":"709","id":"8544","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"66","target":"380","id":"3002","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"171","target":"673","id":"5208","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"488","target":"626","id":"9598","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"121","target":"463","id":"4185","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"22","target":"439","id":"1968","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"608","target":"631","id":"10361","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"59","target":"252","id":"2820","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"517","target":"577","id":"9826","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"323","target":"567","id":"7715","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"106","target":"369","id":"3865","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"470","target":"680","id":"9465","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"170","target":"251","id":"5171","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"224","target":"726","id":"6166","attributes":{"Weight":"1.0"},"color":"rgb(196,67,213)","size":1.0},{"source":"375","target":"683","id":"8362","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"5","target":"303","id":"1565","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"240","target":"486","id":"6404","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"94","target":"345","id":"3625","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"225","target":"600","id":"6178","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"279","target":"693","id":"7052","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"307","target":"686","id":"7498","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"342","target":"717","id":"7992","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"176","target":"328","id":"5284","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"82","target":"678","id":"3367","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"494","target":"585","id":"9658","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"98","target":"351","id":"3710","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"68","target":"302","id":"3040","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"460","target":"713","id":"9373","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"28","target":"278","id":"2101","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"57","target":"288","id":"2772","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"162","target":"690","id":"5034","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"94","target":"244","id":"3621","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"266","target":"339","id":"6831","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"283","target":"559","id":"7131","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"120","target":"595","id":"4167","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"187","target":"669","id":"5509","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"293","target":"641","id":"7287","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"439","target":"568","id":"9141","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"52","target":"176","id":"2649","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"579","target":"626","id":"10237","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"235","target":"429","id":"6335","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"398","target":"654","id":"8675","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"397","target":"569","id":"8655","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"65","target":"503","id":"2986","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"148","target":"541","id":"4754","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"264","target":"730","id":"6815","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"551","target":"615","id":"10066","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"128","target":"152","id":"4306","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"33","target":"344","id":"2226","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"273","target":"315","id":"6949","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"212","target":"358","id":"5937","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"386","target":"685","id":"8532","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"577","target":"648","id":"10220","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"164","target":"591","id":"5068","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"253","target":"254","id":"6615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"444","target":"542","id":"9214","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"116","target":"576","id":"4085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"297","target":"638","id":"7346","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"76","target":"589","id":"3234","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"118","target":"346","id":"4117","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"18","target":"670","id":"1884","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"172","target":"527","id":"5219","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"26","target":"125","id":"2040","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"129","target":"359","id":"4336","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"18","target":"404","id":"1877","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"268","target":"413","id":"6876","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"270","target":"633","id":"6910","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"226","target":"607","id":"6191","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"314","target":"659","id":"7593","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"310","target":"680","id":"7537","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"528","target":"580","id":"9924","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"651","target":"735","id":"10559","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"42","target":"202","id":"2417","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"363","target":"379","id":"8202","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"113","target":"662","id":"4019","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"261","target":"462","id":"6762","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"266","target":"596","id":"6836","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"201","target":"222","id":"5749","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"506","target":"712","id":"9756","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"163","target":"378","id":"5045","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"31","target":"96","id":"2165","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"19","target":"622","id":"1908","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"276","target":"509","id":"6998","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"2","target":"322","id":"1500","attributes":{"Weight":"1.0"},"color":"rgb(115,67,229)","size":1.0},{"source":"360","target":"448","id":"8184","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"216","target":"644","id":"6025","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"502","target":"530","id":"9722","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"158","target":"640","id":"4952","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"209","target":"512","id":"5898","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"167","target":"359","id":"5121","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"170","target":"253","id":"5172","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"212","target":"319","id":"5936","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"517","target":"614","id":"9828","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"344","target":"354","id":"8005","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"224","target":"567","id":"6159","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"251","target":"336","id":"6583","attributes":{"Weight":"1.0"},"color":"rgb(229,148,83)","size":1.0},{"source":"625","target":"679","id":"10437","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"197","target":"329","id":"5682","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"132","target":"189","id":"4397","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"78","target":"306","id":"3266","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"351","target":"615","id":"8100","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"165","target":"430","id":"5086","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"202","target":"287","id":"5770","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"2","target":"370","id":"1503","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"464","target":"615","id":"9402","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"168","target":"226","id":"5132","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"143","target":"645","id":"4645","attributes":{"Weight":"1.0"},"color":"rgb(99,148,229)","size":1.0},{"source":"165","target":"711","id":"5093","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"24","target":"243","id":"2004","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"121","target":"240","id":"4179","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"374","target":"687","id":"8349","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"114","target":"322","id":"4029","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"169","target":"510","id":"5162","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"191","target":"359","id":"5573","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"342","target":"649","id":"7988","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"311","target":"527","id":"7545","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"59","target":"416","id":"2822","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"222","target":"236","id":"6117","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"390","target":"731","id":"8577","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"40","target":"41","id":"2375","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"693","target":"721","id":"10654","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"81","target":"148","id":"3325","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"202","target":"424","id":"5774","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"312","target":"736","id":"7567","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"28","target":"135","id":"2095","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"122","target":"442","id":"4197","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"352","target":"667","id":"8114","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"228","target":"499","id":"6226","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"90","target":"341","id":"3542","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"329","target":"372","id":"7797","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"371","target":"572","id":"8297","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"464","target":"536","id":"9397","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"381","target":"508","id":"8436","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"116","target":"303","id":"4073","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"421","target":"562","id":"8922","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"303","target":"498","id":"7438","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"280","target":"443","id":"7062","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"151","target":"490","id":"4820","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"421","target":"440","id":"8915","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"286","target":"580","id":"7172","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"264","target":"647","id":"6807","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"440","target":"523","id":"9154","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"303","target":"434","id":"7437","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"229","target":"446","id":"6240","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"43","target":"590","id":"2453","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"117","target":"156","id":"4095","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"217","target":"488","id":"6035","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"234","target":"554","id":"6321","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"186","target":"552","id":"5492","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"106","target":"153","id":"3858","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"95","target":"712","id":"3662","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"553","target":"715","id":"10077","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"19","target":"452","id":"1904","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"45","target":"481","id":"2510","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"133","target":"314","id":"4417","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"489","target":"595","id":"9608","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"466","target":"729","id":"9426","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"95","target":"343","id":"3649","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"86","target":"93","id":"3431","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"38","target":"537","id":"2350","attributes":{"Weight":"1.0"},"color":"rgb(148,213,83)","size":1.0},{"source":"464","target":"552","id":"9400","attributes":{"Weight":"1.0"},"color":"rgb(164,67,180)","size":1.0},{"source":"1","target":"722","id":"1485","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"208","target":"518","id":"5880","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"91","target":"341","id":"3562","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"157","target":"469","id":"4933","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"411","target":"412","id":"8820","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"377","target":"559","id":"8389","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"263","target":"432","id":"6784","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"253","target":"410","id":"6621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"608","target":"734","id":"10364","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"326","target":"530","id":"7754","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"116","target":"713","id":"4092","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"211","target":"600","id":"5927","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"201","target":"236","id":"5752","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"121","target":"166","id":"4173","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"232","target":"583","id":"6290","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"85","target":"279","id":"3414","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"4","target":"387","id":"1544","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"186","target":"201","id":"5478","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"102","target":"552","id":"3800","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"228","target":"368","id":"6223","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"64","target":"344","id":"2962","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"222","target":"499","id":"6125","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"312","target":"538","id":"7559","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"135","target":"289","id":"4457","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"399","target":"658","id":"8692","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"210","target":"533","id":"5906","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"103","target":"317","id":"3812","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"52","target":"551","id":"2664","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"501","target":"506","id":"9714","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"315","target":"584","id":"7602","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"375","target":"476","id":"8354","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"195","target":"631","id":"5650","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"94","target":"659","id":"3635","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"251","target":"423","id":"6589","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"205","target":"722","id":"5837","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"647","target":"735","id":"10538","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"19","target":"125","id":"1893","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"575","target":"616","id":"10206","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"41","target":"315","id":"2402","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"118","target":"595","id":"4125","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"148","target":"518","id":"4753","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"650","target":"689","id":"10546","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"355","target":"564","id":"8135","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"11","target":"664","id":"1725","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"17","target":"510","id":"1860","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"8","target":"679","id":"1656","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"570","target":"666","id":"10166","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"301","target":"669","id":"7414","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"199","target":"404","id":"5722","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"42","target":"188","id":"2416","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"19","target":"123","id":"1892","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"289","target":"443","id":"7225","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"490","target":"547","id":"9613","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"110","target":"245","id":"3939","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"373","target":"569","id":"8321","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"277","target":"593","id":"7015","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"163","target":"248","id":"5041","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"227","target":"373","id":"6203","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"47","target":"556","id":"2556","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"206","target":"563","id":"5848","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"301","target":"455","id":"7405","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"193","target":"441","id":"5603","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"235","target":"305","id":"6330","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"120","target":"201","id":"4151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"116","target":"562","id":"4083","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"444","target":"653","id":"9216","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"46","target":"252","id":"2525","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"329","target":"536","id":"7803","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"267","target":"592","id":"6860","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"104","target":"581","id":"3839","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"162","target":"266","id":"5018","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"465","target":"491","id":"9406","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"91","target":"326","id":"3561","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"268","target":"330","id":"6864","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"285","target":"441","id":"7150","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"86","target":"333","id":"3441","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"282","target":"647","id":"7105","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"431","target":"602","id":"9047","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"667","target":"679","id":"10603","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"85","target":"233","id":"3413","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"330","target":"395","id":"7817","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"30","target":"595","id":"2163","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"249","target":"447","id":"6547","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"145","target":"721","id":"4703","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"467","target":"666","id":"9435","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"160","target":"474","id":"4987","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"463","target":"531","id":"9392","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"440","target":"583","id":"9158","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"122","target":"433","id":"4196","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"28","target":"111","id":"2093","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"200","target":"403","id":"5736","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"407","target":"579","id":"8772","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"689","target":"734","id":"10643","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"131","target":"652","id":"4393","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"62","target":"156","id":"2905","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"255","target":"423","id":"6653","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"25","target":"292","id":"2023","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"362","target":"445","id":"8198","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"499","target":"548","id":"9701","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"150","target":"397","id":"4788","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"209","target":"320","id":"5890","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"277","target":"428","id":"7008","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"212","target":"450","id":"5942","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"8","target":"140","id":"1630","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"145","target":"717","id":"4702","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"241","target":"339","id":"6415","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"529","target":"676","id":"9940","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"391","target":"413","id":"8586","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"17","target":"357","id":"1857","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"336","target":"563","id":"7906","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"376","target":"586","id":"8373","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"75","target":"259","id":"3198","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"6","target":"686","id":"1601","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"333","target":"593","id":"7862","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"212","target":"261","id":"5934","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"603","target":"668","id":"10343","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"68","target":"497","id":"3042","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"45","target":"452","id":"2507","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"325","target":"345","id":"7731","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"110","target":"373","id":"3945","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"331","target":"717","id":"7841","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"280","target":"676","id":"7072","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"53","target":"73","id":"2671","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"326","target":"375","id":"7749","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"245","target":"572","id":"6490","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"489","target":"529","id":"9604","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"505","target":"691","id":"9749","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"386","target":"707","id":"8533","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"715","target":"726","id":"10673","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"400","target":"660","id":"8703","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"63","target":"322","id":"2932","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"516","target":"538","id":"9814","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"383","target":"597","id":"8478","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"166","target":"461","id":"5106","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"319","target":"529","id":"7665","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"1","target":"631","id":"1483","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"514","target":"669","id":"9806","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"649","target":"691","id":"10542","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"395","target":"561","id":"8640","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"156","target":"213","id":"4907","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"61","target":"673","id":"2894","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"384","target":"703","id":"8498","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"585","target":"655","id":"10265","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"187","target":"514","id":"5503","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"339","target":"723","id":"7952","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"281","target":"650","id":"7087","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"91","target":"530","id":"3569","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"3","target":"165","id":"1514","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"574","target":"691","id":"10198","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"526","target":"585","id":"9904","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"290","target":"391","id":"7241","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"400","target":"402","id":"8695","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"272","target":"346","id":"6935","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"346","target":"628","id":"8033","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"540","target":"708","id":"10012","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"519","target":"582","id":"9842","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"565","target":"604","id":"10134","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"405","target":"560","id":"8758","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"179","target":"679","id":"5366","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"107","target":"113","id":"3872","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"181","target":"672","id":"5398","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"223","target":"262","id":"6132","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"79","target":"687","id":"3302","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"218","target":"494","id":"6054","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"227","target":"643","id":"6212","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"476","target":"513","id":"9526","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"422","target":"591","id":"8938","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"248","target":"388","id":"6532","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"416","target":"461","id":"8860","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"458","target":"518","id":"9341","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"28","target":"368","id":"2106","attributes":{"Weight":"1.0"},"color":"rgb(148,99,180)","size":1.0},{"source":"88","target":"215","id":"3484","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"545","target":"674","id":"10039","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"270","target":"636","id":"6912","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"458","target":"470","id":"9336","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"328","target":"456","id":"7784","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"583","target":"668","id":"10257","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"17","target":"34","id":"1843","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"177","target":"279","id":"5306","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"77","target":"477","id":"3253","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"68","target":"688","id":"3052","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"225","target":"555","id":"6177","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"9","target":"710","id":"1681","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"279","target":"443","id":"7043","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"332","target":"333","id":"7842","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"209","target":"230","id":"5887","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"74","target":"289","id":"3173","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"5","target":"80","id":"1555","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"246","target":"638","id":"6508","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"170","target":"558","id":"5184","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"264","target":"491","id":"6805","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"451","target":"608","id":"9271","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"29","target":"477","id":"2136","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"197","target":"718","id":"5697","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"296","target":"655","id":"7336","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"426","target":"609","id":"8989","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"39","target":"168","id":"2360","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"151","target":"238","id":"4809","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"535","target":"542","id":"9975","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"571","target":"619","id":"10172","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"353","target":"499","id":"8119","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"95","target":"550","id":"3657","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"159","target":"638","id":"4973","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"68","target":"524","id":"3044","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"24","target":"641","id":"2011","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"561","target":"731","id":"10115","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"98","target":"197","id":"3707","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"602","target":"723","id":"10341","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"118","target":"199","id":"4113","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"148","target":"313","id":"4744","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"211","target":"451","id":"5922","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"154","target":"591","id":"4877","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"181","target":"309","id":"5391","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"569","target":"643","id":"10159","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"500","target":"574","id":"9707","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"72","target":"403","id":"3139","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"221","target":"555","id":"6107","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"130","target":"452","id":"4360","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"65","target":"670","id":"2991","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"190","target":"197","id":"5549","attributes":{"Weight":"1.0"},"color":"rgb(83,148,164)","size":1.0},{"source":"526","target":"631","id":"9906","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"186","target":"222","id":"5479","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"255","target":"556","id":"6655","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"117","target":"544","id":"4108","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"81","target":"459","id":"3332","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"9","target":"222","id":"1666","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"67","target":"524","id":"3023","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"54","target":"589","id":"2715","attributes":{"Weight":"1.0"},"color":"rgb(148,148,229)","size":1.0},{"source":"24","target":"704","id":"2013","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"86","target":"662","id":"3452","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"364","target":"690","id":"8226","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"724","target":"735","id":"10680","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"638","target":"715","id":"10492","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"122","target":"498","id":"4201","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"390","target":"393","id":"8564","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"104","target":"446","id":"3834","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"460","target":"522","id":"9357","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"440","target":"543","id":"9155","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"244","target":"417","id":"6465","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"60","target":"595","id":"2860","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"409","target":"589","id":"8803","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"579","target":"627","id":"10238","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"388","target":"617","id":"8552","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"301","target":"653","id":"7413","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"181","target":"366","id":"5392","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"154","target":"373","id":"4871","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"578","target":"690","id":"10231","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"17","target":"104","id":"1846","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"348","target":"440","id":"8051","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"624","target":"669","id":"10432","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"116","target":"460","id":"4081","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"193","target":"650","id":"5609","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"320","target":"361","id":"7676","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"204","target":"538","id":"5812","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"251","target":"656","id":"6594","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"652","target":"716","id":"10562","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"469","target":"608","id":"9451","attributes":{"Weight":"1.0"},"color":"rgb(99,148,229)","size":1.0},{"source":"43","target":"533","id":"2452","attributes":{"Weight":"1.0"},"color":"rgb(67,180,213)","size":1.0},{"source":"545","target":"557","id":"10035","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"445","target":"638","id":"9222","attributes":{"Weight":"1.0"},"color":"rgb(196,99,148)","size":1.0},{"source":"523","target":"682","id":"9883","attributes":{"Weight":"1.0"},"color":"rgb(213,67,229)","size":1.0},{"source":"277","target":"619","id":"7018","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"623","target":"687","id":"10429","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"347","target":"503","id":"8040","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"31","target":"219","id":"2173","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"175","target":"444","id":"5270","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"353","target":"552","id":"8121","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"189","target":"207","id":"5528","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"321","target":"627","id":"7692","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"60","target":"144","id":"2836","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"177","target":"261","id":"5305","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"188","target":"618","id":"5523","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"157","target":"444","id":"4931","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"105","target":"672","id":"3855","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"268","target":"395","id":"6871","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"56","target":"408","id":"2754","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"173","target":"526","id":"5243","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"258","target":"398","id":"6699","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"282","target":"683","id":"7108","attributes":{"Weight":"1.0"},"color":"rgb(83,164,148)","size":1.0},{"source":"493","target":"631","id":"9651","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"408","target":"532","id":"8780","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"73","target":"538","id":"3160","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"113","target":"407","id":"4012","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"75","target":"363","id":"3200","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"503","target":"709","id":"9732","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"168","target":"410","id":"5136","attributes":{"Weight":"1.0"},"color":"rgb(229,132,83)","size":1.0},{"source":"435","target":"655","id":"9104","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"156","target":"406","id":"4914","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"470","target":"518","id":"9462","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"384","target":"532","id":"8489","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"343","target":"563","id":"8000","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"64","target":"404","id":"2966","attributes":{"Weight":"1.0"},"color":"rgb(148,180,132)","size":1.0},{"source":"137","target":"570","id":"4510","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"47","target":"250","id":"2543","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"250","target":"556","id":"6571","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"60","target":"489","id":"2853","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"453","target":"504","id":"9282","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"641","target":"709","id":"10508","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"410","target":"558","id":"8814","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"433","target":"498","id":"9073","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"596","target":"661","id":"10308","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"429","target":"552","id":"9022","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"504","target":"578","id":"9733","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"193","target":"408","id":"5601","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"433","target":"517","id":"9074","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"256","target":"267","id":"6663","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"152","target":"388","id":"4836","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"309","target":"370","id":"7518","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"331","target":"699","id":"7840","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"183","target":"636","id":"5431","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"224","target":"642","id":"6161","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"13","target":"247","id":"1759","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"643","target":"719","id":"10515","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"364","target":"596","id":"8220","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"298","target":"471","id":"7360","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"465","target":"650","id":"9409","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"441","target":"646","id":"9170","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"399","target":"414","id":"8686","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"288","target":"527","id":"7209","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"375","target":"513","id":"8356","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"100","target":"554","id":"3758","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"212","target":"622","id":"5950","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"22","target":"120","id":"1962","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"649","target":"682","id":"10541","attributes":{"Weight":"1.0"},"color":"rgb(132,148,164)","size":1.0},{"source":"190","target":"691","id":"5566","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"257","target":"638","id":"6687","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"324","target":"548","id":"7726","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"273","target":"598","id":"6956","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"525","target":"527","id":"9895","attributes":{"Weight":"1.0"},"color":"rgb(67,196,180)","size":1.0},{"source":"609","target":"700","id":"10366","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"250","target":"402","id":"6566","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"66","target":"584","id":"3008","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"534","target":"659","id":"9969","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"233","target":"547","id":"6306","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"447","target":"452","id":"9232","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"66","target":"315","id":"3001","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"60","target":"576","id":"2859","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"220","target":"664","id":"6089","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"376","target":"547","id":"8371","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"231","target":"627","id":"6275","attributes":{"Weight":"1.0"},"color":"rgb(67,180,180)","size":1.0},{"source":"263","target":"455","id":"6786","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"144","target":"232","id":"4651","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"453","target":"596","id":"9284","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"60","target":"235","id":"2842","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"219","target":"304","id":"6068","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"61","target":"79","id":"2865","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"334","target":"499","id":"7876","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"324","target":"353","id":"7721","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"420","target":"579","id":"8909","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"106","target":"701","id":"3871","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"59","target":"449","id":"2825","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"285","target":"491","id":"7153","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"133","target":"682","id":"4432","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"49","target":"546","id":"2597","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"730","target":"734","id":"10688","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"277","target":"580","id":"7014","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"282","target":"441","id":"7100","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"76","target":"196","id":"3215","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"52","target":"427","id":"2658","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"105","target":"106","id":"3841","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"88","target":"266","id":"3490","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"269","target":"392","id":"6889","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"629","target":"719","id":"10452","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"86","target":"593","id":"3447","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"2","target":"554","id":"1505","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"650","target":"724","id":"10547","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"46","target":"481","id":"2535","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"223","target":"361","id":"6136","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"539","target":"542","id":"10002","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"203","target":"517","id":"5795","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"237","target":"622","id":"6365","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"499","target":"595","id":"9703","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"184","target":"697","id":"5455","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"27","target":"409","id":"2070","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"469","target":"600","id":"9450","attributes":{"Weight":"1.0"},"color":"rgb(99,148,229)","size":1.0},{"source":"245","target":"644","id":"6494","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"188","target":"216","id":"5511","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"143","target":"669","id":"4647","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"476","target":"530","id":"9527","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"498","target":"648","id":"9697","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"260","target":"693","id":"6749","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"566","target":"673","id":"10141","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"426","target":"464","id":"8984","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"44","target":"623","id":"2485","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"379","target":"574","id":"8413","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"200","target":"500","id":"5737","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"316","target":"591","id":"7618","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"246","target":"671","id":"6511","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"138","target":"347","id":"4521","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"254","target":"556","id":"6640","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"30","target":"102","id":"2145","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"13","target":"306","id":"1762","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"259","target":"574","id":"6722","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"154","target":"245","id":"4864","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"261","target":"572","id":"6765","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"632","target":"726","id":"10464","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"265","target":"326","id":"6818","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"527","target":"532","id":"9911","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"267","target":"355","id":"6851","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"203","target":"480","id":"5793","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"215","target":"257","id":"5985","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"416","target":"483","id":"8864","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"75","target":"200","id":"3197","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"12","target":"54","id":"1729","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"372","target":"609","id":"8316","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"152","target":"501","id":"4838","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"196","target":"425","id":"5661","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"13","target":"137","id":"1757","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"256","target":"509","id":"6672","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"234","target":"608","id":"6323","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"421","target":"649","id":"8927","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"33","target":"368","id":"2231","attributes":{"Weight":"1.0"},"color":"rgb(229,99,99)","size":1.0},{"source":"398","target":"485","id":"8668","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"296","target":"418","id":"7323","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"301","target":"535","id":"7408","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"609","target":"615","id":"10365","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"573","target":"648","id":"10191","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"235","target":"324","id":"6331","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"136","target":"152","id":"4481","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"154","target":"644","id":"4881","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"161","target":"474","id":"5004","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"68","target":"184","id":"3035","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"264","target":"725","id":"6813","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"99","target":"300","id":"3733","attributes":{"Weight":"1.0"},"color":"rgb(99,67,229)","size":1.0},{"source":"235","target":"334","id":"6332","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"461","target":"607","id":"9379","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"515","target":"680","id":"9811","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"468","target":"620","id":"9443","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"485","target":"663","id":"9581","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"553","target":"657","id":"10075","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"474","target":"485","id":"9502","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"185","target":"676","id":"5475","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"164","target":"359","id":"5062","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"288","target":"421","id":"7199","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"73","target":"516","id":"3158","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"106","target":"234","id":"3861","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"291","target":"675","id":"7271","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"53","target":"635","id":"2684","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"191","target":"607","id":"5579","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"410","target":"674","id":"8817","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"397","target":"720","id":"8664","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"90","target":"242","id":"3539","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"88","target":"578","id":"3500","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"98","target":"464","id":"3716","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"162","target":"665","id":"5033","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"178","target":"426","id":"5334","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"13","target":"78","id":"1756","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"25","target":"293","id":"2024","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"350","target":"613","id":"8084","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"250","target":"660","id":"6576","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"131","target":"216","id":"4372","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"11","target":"340","id":"1714","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"455","target":"514","id":"9309","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"172","target":"707","id":"5231","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"214","target":"344","id":"5976","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"236","target":"595","id":"6352","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"299","target":"542","id":"7380","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"67","target":"497","id":"3021","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"311","target":"707","id":"7555","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"157","target":"301","id":"4928","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"67","target":"302","id":"3019","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"262","target":"362","id":"6776","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"53","target":"198","id":"2674","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"161","target":"715","id":"5013","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"6","target":"470","id":"1592","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"580","target":"703","id":"10246","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"422","target":"622","id":"8939","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"91","target":"544","id":"3570","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"50","target":"572","id":"2624","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"66","target":"253","id":"2997","attributes":{"Weight":"1.0"},"color":"rgb(148,132,164)","size":1.0},{"source":"192","target":"599","id":"5594","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"62","target":"265","id":"2908","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"138","target":"664","id":"4530","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"350","target":"566","id":"8082","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"179","target":"667","id":"5364","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"93","target":"652","id":"3615","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"52","target":"367","id":"2655","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"70","target":"212","id":"3086","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"454","target":"498","id":"9297","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"725","target":"734","id":"10683","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"69","target":"491","id":"3071","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"390","target":"395","id":"8566","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"423","target":"660","id":"8947","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"15","target":"722","id":"1820","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"497","target":"524","id":"9679","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"420","target":"627","id":"8911","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"5","target":"583","id":"1575","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"223","target":"445","id":"6138","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"322","target":"671","id":"7704","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"22","target":"641","id":"1972","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"347","target":"520","id":"8041","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"98","target":"700","id":"3723","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"143","target":"263","id":"4630","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"607","target":"634","id":"10359","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"430","target":"607","id":"9034","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"85","target":"224","id":"3412","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"262","target":"445","id":"6777","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"379","target":"587","id":"8414","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"459","target":"686","id":"9356","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"24","target":"51","id":"2000","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"379","target":"500","id":"8410","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"452","target":"675","id":"9281","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"30","target":"228","id":"2150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"120","target":"236","id":"4155","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"72","target":"115","id":"3130","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"175","target":"187","id":"5263","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"144","target":"460","id":"4662","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"220","target":"437","id":"6084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"283","target":"399","id":"7125","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"408","target":"685","id":"8787","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"44","target":"203","id":"2464","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"186","target":"305","id":"5483","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"178","target":"329","id":"5330","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"120","target":"710","id":"4169","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"175","target":"299","id":"5265","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"154","target":"349","id":"4869","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"95","target":"727","id":"3663","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"139","target":"398","id":"4542","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"193","target":"264","id":"5596","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"195","target":"296","id":"5638","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"367","target":"536","id":"8258","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"207","target":"484","id":"5866","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"311","target":"612","id":"7548","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"91","target":"126","id":"3555","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"233","target":"280","id":"6296","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"22","target":"25","id":"1959","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"443","target":"644","id":"9204","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"421","target":"604","id":"8926","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"353","target":"710","id":"8123","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"101","target":"362","id":"3777","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"33","target":"239","id":"2221","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"215","target":"271","id":"5988","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"562","target":"565","id":"10116","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"60","target":"186","id":"2838","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"379","target":"691","id":"8417","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"238","target":"616","id":"6382","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"491","target":"521","id":"9622","attributes":{"Weight":"1.0"},"color":"rgb(148,83,229)","size":1.0},{"source":"332","target":"428","id":"7843","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"372","target":"718","id":"8319","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"50","target":"349","id":"2614","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"707","target":"726","id":"10669","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"650","target":"651","id":"10545","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"236","target":"353","id":"6345","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"119","target":"588","id":"4146","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"35","target":"137","id":"2269","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"330","target":"377","id":"7811","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"187","target":"455","id":"5501","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"256","target":"317","id":"6667","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"123","target":"622","id":"4226","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"231","target":"547","id":"6268","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"635","target":"688","id":"10476","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"130","target":"366","id":"4356","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"172","target":"386","id":"5215","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"300","target":"662","id":"7398","attributes":{"Weight":"1.0"},"color":"rgb(99,99,229)","size":1.0},{"source":"96","target":"554","id":"3680","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"343","target":"360","id":"7993","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"415","target":"668","id":"8853","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"286","target":"333","id":"7167","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"115","target":"403","id":"4055","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"462","target":"487","id":"9383","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"280","target":"287","id":"7055","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"38","target":"240","id":"2339","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"162","target":"692","id":"5035","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"319","target":"555","id":"7666","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"565","target":"594","id":"10133","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"28","target":"337","id":"2104","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"608","target":"642","id":"10362","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"64","target":"416","id":"2967","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"1","target":"582","id":"1480","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"172","target":"311","id":"5213","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"227","target":"629","id":"6211","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"384","target":"527","id":"8488","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"63","target":"160","id":"2926","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"109","target":"152","id":"3911","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"283","target":"731","id":"7136","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"388","target":"506","id":"8548","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"597","target":"649","id":"10315","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"584","target":"666","id":"10262","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"140","target":"311","id":"4560","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"80","target":"139","id":"3305","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"107","target":"420","id":"3881","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"102","target":"236","id":"3789","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"135","target":"145","id":"4450","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"160","target":"161","id":"4980","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"219","target":"369","id":"6071","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"42","target":"286","id":"2421","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"203","target":"498","id":"5794","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"472","target":"604","id":"9485","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"251","target":"400","id":"6585","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"381","target":"543","id":"8439","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"350","target":"496","id":"8079","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"189","target":"445","id":"5541","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"195","target":"655","id":"5651","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"381","target":"421","id":"8429","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"371","target":"646","id":"8304","attributes":{"Weight":"1.0"},"color":"rgb(148,83,213)","size":1.0},{"source":"319","target":"368","id":"7656","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"268","target":"405","id":"6873","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"162","target":"661","id":"5032","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"297","target":"639","id":"7347","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"580","target":"652","id":"10245","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"92","target":"98","id":"3574","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"250","target":"696","id":"6579","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"76","target":"498","id":"3226","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"533","target":"662","id":"9964","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"438","target":"689","id":"9133","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"365","target":"476","id":"8234","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"264","target":"650","id":"6808","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"378","target":"488","id":"8397","attributes":{"Weight":"1.0"},"color":"rgb(148,180,148)","size":1.0},{"source":"253","target":"558","id":"6626","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"452","target":"482","id":"9276","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"47","target":"251","id":"2544","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"155","target":"685","id":"4904","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"320","target":"354","id":"7675","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"346","target":"520","id":"8031","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"19","target":"46","id":"1888","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"515","target":"541","id":"9809","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"333","target":"652","id":"7866","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"102","target":"368","id":"3795","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"215","target":"610","id":"5997","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"109","target":"448","id":"3920","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"104","target":"355","id":"3832","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"44","target":"611","id":"2483","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"54","target":"424","id":"2706","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"97","target":"218","id":"3688","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"109","target":"163","id":"3912","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"85","target":"187","id":"3411","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"497","target":"688","id":"9686","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"121","target":"165","id":"4172","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"122","target":"611","id":"4205","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"35","target":"247","id":"2271","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"619","target":"703","id":"10411","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"25","target":"158","id":"2020","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"432","target":"698","id":"9067","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"332","target":"619","id":"7851","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"64","target":"483","id":"2970","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"397","target":"572","id":"8656","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"18","target":"272","id":"1871","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"10","target":"366","id":"1696","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"44","target":"517","id":"2478","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"88","target":"721","id":"3510","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"308","target":"576","id":"7506","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"570","target":"598","id":"10164","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"320","target":"445","id":"7679","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"200","target":"593","id":"5743","attributes":{"Weight":"1.0"},"color":"rgb(148,196,83)","size":1.0},{"source":"55","target":"157","id":"2726","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"54","target":"131","id":"2692","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"154","target":"555","id":"4874","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"155","target":"397","id":"4896","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"271","target":"692","id":"6930","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"334","target":"429","id":"7873","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"22","target":"48","id":"1960","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"275","target":"295","id":"6974","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"241","target":"596","id":"6422","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"136","target":"550","id":"4493","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"128","target":"163","id":"4307","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"280","target":"586","id":"7068","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"93","target":"580","id":"3610","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"111","target":"719","id":"3984","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"372","target":"536","id":"8313","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"360","target":"550","id":"8187","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"45","target":"404","id":"2502","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"43","target":"520","id":"2451","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"125","target":"422","id":"4255","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"84","target":"217","id":"3393","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"475","target":"623","id":"9520","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"553","target":"621","id":"10071","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"130","target":"457","id":"4361","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"1","target":"195","id":"1468","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"400","target":"656","id":"8702","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"371","target":"591","id":"8299","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"69","target":"193","id":"3057","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"294","target":"572","id":"7303","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"579","target":"593","id":"10236","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"69","target":"730","id":"3081","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"111","target":"572","id":"3979","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"72","target":"383","id":"3138","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"28","target":"533","id":"2114","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"41","target":"78","id":"2395","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"159","target":"302","id":"4965","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"430","target":"486","id":"9031","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"308","target":"434","id":"7502","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"27","target":"583","id":"2079","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"395","target":"413","id":"8636","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"721","target":"723","id":"10675","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"128","target":"378","id":"4313","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"251","target":"402","id":"6587","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"274","target":"585","id":"6968","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"597","target":"691","id":"10316","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"11","target":"347","id":"1716","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"352","target":"486","id":"8108","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"386","target":"575","id":"8523","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"5","target":"616","id":"1577","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"50","target":"629","id":"2626","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"215","target":"453","id":"5992","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"131","target":"286","id":"4374","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"238","target":"258","id":"6368","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"67","target":"636","id":"3027","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"2","target":"181","id":"1495","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"128","target":"448","id":"4315","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"281","target":"465","id":"7081","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"424","target":"537","id":"8956","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"185","target":"226","id":"5459","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"231","target":"238","id":"6259","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"243","target":"733","id":"6458","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"575","target":"603","id":"10204","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"143","target":"444","id":"4637","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"496","target":"606","id":"9671","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"5","target":"491","id":"1571","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"109","target":"588","id":"3925","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"365","target":"375","id":"8231","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"342","target":"587","id":"7985","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"272","target":"664","id":"6944","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"140","target":"707","id":"4584","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"195","target":"494","id":"5643","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"91","target":"375","id":"3564","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"612","target":"616","id":"10381","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"673","target":"714","id":"10614","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"473","target":"565","id":"9496","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"374","target":"678","id":"8348","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"243","target":"640","id":"6452","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"218","target":"526","id":"6057","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"203","target":"385","id":"5788","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"349","target":"489","id":"8067","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"477","target":"620","id":"9535","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"329","target":"351","id":"7795","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"109","target":"343","id":"3916","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"65","target":"138","id":"2976","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"250","target":"255","id":"6562","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"259","target":"379","id":"6715","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"288","target":"522","id":"7206","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"134","target":"406","id":"4442","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"169","target":"652","id":"5168","attributes":{"Weight":"1.0"},"color":"rgb(148,196,67)","size":1.0},{"source":"373","target":"572","id":"8322","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"85","target":"717","id":"3430","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"180","target":"332","id":"5374","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"163","target":"712","id":"5054","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"333","target":"619","id":"7865","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"324","target":"595","id":"7728","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"43","target":"709","id":"2457","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"238","target":"576","id":"6378","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"85","target":"331","id":"3418","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"225","target":"645","id":"6181","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"342","target":"706","id":"7991","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"84","target":"705","id":"3405","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"185","target":"240","id":"5460","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"400","target":"696","id":"8706","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"343","target":"727","id":"8004","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"131","target":"601","id":"4388","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"15","target":"655","id":"1819","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"154","target":"642","id":"4879","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"230","target":"445","id":"6254","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"559","target":"658","id":"10108","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"467","target":"584","id":"9432","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"97","target":"722","id":"3704","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"9","target":"120","id":"1663","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"288","target":"604","id":"7216","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"536","target":"609","id":"9982","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"114","target":"127","id":"4022","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"14","target":"363","id":"1784","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"169","target":"509","id":"5161","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"209","target":"262","id":"5889","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"294","target":"371","id":"7295","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"303","target":"573","id":"7440","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"573","target":"611","id":"10187","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"288","target":"565","id":"7212","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"576","target":"603","id":"10211","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"261","target":"419","id":"6757","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"359","target":"607","id":"8177","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"273","target":"284","id":"6947","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"75","target":"649","id":"3210","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"418","target":"585","id":"8886","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"46","target":"452","id":"2532","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"37","target":"321","id":"2315","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"268","target":"559","id":"6878","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"144","target":"713","id":"4673","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"470","target":"620","id":"9464","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"261","target":"319","id":"6754","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"265","target":"513","id":"6825","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"209","target":"362","id":"5894","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"137","target":"204","id":"4500","attributes":{"Weight":"1.0"},"color":"rgb(99,213,148)","size":1.0},{"source":"77","target":"81","id":"3241","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"327","target":"385","id":"7760","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"10","target":"554","id":"1700","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"37","target":"627","id":"2324","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"125","target":"461","id":"4259","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"123","target":"291","id":"4216","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"7","target":"602","id":"1617","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"9","target":"552","id":"1679","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"111","target":"154","id":"3961","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"244","target":"338","id":"6461","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"506","target":"550","id":"9752","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"296","target":"585","id":"7332","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"227","target":"231","id":"6195","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"292","target":"568","id":"7275","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"534","target":"613","id":"9968","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"15","target":"605","id":"1817","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"115","target":"200","id":"4049","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"128","target":"343","id":"4311","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"69","target":"337","id":"3062","attributes":{"Weight":"1.0"},"color":"rgb(67,116,229)","size":1.0},{"source":"222","target":"548","id":"6126","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"324","target":"429","id":"7723","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"198","target":"636","id":"5708","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"236","target":"334","id":"6344","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"432","target":"571","id":"9060","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"28","target":"84","id":"2091","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"418","target":"435","id":"8879","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"305","target":"710","id":"7473","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"132","target":"207","id":"4398","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"300","target":"455","id":"7390","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"177","target":"591","id":"5318","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"85","target":"145","id":"3408","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"1","target":"15","id":"1464","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"168","target":"531","id":"5141","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"549","target":"609","id":"10056","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"203","target":"327","id":"5786","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"345","target":"566","id":"8018","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"339","target":"690","id":"7948","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"281","target":"382","id":"7078","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"65","target":"437","id":"2985","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"589","target":"623","id":"10281","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"383","target":"691","id":"8480","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"440","target":"589","id":"9159","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"43","target":"503","id":"2450","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"333","target":"571","id":"7859","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"341","target":"406","id":"7967","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"375","target":"530","id":"8357","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"47","target":"660","id":"2560","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"76","target":"381","id":"3218","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"150","target":"606","id":"4796","attributes":{"Weight":"1.0"},"color":"rgb(213,67,213)","size":1.0},{"source":"108","target":"296","id":"3894","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"55","target":"432","id":"2734","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"258","target":"668","id":"6710","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"434","target":"583","id":"9090","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"38","target":"486","id":"2347","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"371","target":"643","id":"8302","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"27","target":"434","id":"2073","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"183","target":"308","id":"5420","attributes":{"Weight":"1.0"},"color":"rgb(99,229,99)","size":1.0},{"source":"336","target":"360","id":"7898","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"286","target":"619","id":"7176","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"573","target":"577","id":"10186","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"131","target":"381","id":"4378","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"43","target":"387","id":"2446","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"313","target":"471","id":"7572","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"124","target":"484","id":"4245","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"98","target":"178","id":"3706","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"185","target":"449","id":"5465","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"415","target":"713","id":"8855","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"40","target":"306","id":"2383","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"435","target":"585","id":"9101","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"92","target":"372","id":"3582","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"473","target":"589","id":"9497","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"135","target":"699","id":"4478","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"244","target":"350","id":"6463","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"87","target":"381","id":"3459","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"143","target":"299","id":"4631","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"84","target":"626","id":"3402","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"249","target":"482","id":"6553","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"519","target":"631","id":"9845","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"484","target":"701","id":"9574","attributes":{"Weight":"1.0"},"color":"rgb(148,99,148)","size":1.0},{"source":"437","target":"664","id":"9121","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"408","target":"679","id":"8786","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"171","target":"613","id":"5206","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"180","target":"716","id":"5387","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"396","target":"633","id":"8650","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"312","target":"688","id":"7565","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"323","target":"431","id":"7709","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"329","target":"492","id":"7802","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"436","target":"586","id":"9112","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"270","target":"524","id":"6908","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"129","target":"226","id":"4333","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"33","target":"529","id":"2239","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"424","target":"600","id":"8958","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"150","target":"646","id":"4800","attributes":{"Weight":"1.0"},"color":"rgb(148,83,213)","size":1.0},{"source":"409","target":"425","id":"8790","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"62","target":"90","id":"2900","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"230","target":"354","id":"6251","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"547","target":"627","id":"10048","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"273","target":"389","id":"6951","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"89","target":"639","id":"3528","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"285","target":"466","id":"7152","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"398","target":"474","id":"8667","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"25","target":"732","id":"2033","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"657","target":"726","id":"10579","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"319","target":"450","id":"7660","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"146","target":"326","id":"4710","attributes":{"Weight":"1.0"},"color":"rgb(83,180,148)","size":1.0},{"source":"44","target":"385","id":"2471","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"161","target":"257","id":"5000","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"137","target":"389","id":"4507","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"186","target":"548","id":"5491","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"385","target":"454","id":"8502","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"82","target":"611","id":"3362","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"455","target":"539","id":"9311","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"372","target":"615","id":"8317","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"92","target":"329","id":"3579","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"265","target":"476","id":"6823","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"316","target":"454","id":"7613","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"121","target":"226","id":"4178","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"176","target":"178","id":"5282","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"647","target":"729","id":"10535","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"402","target":"694","id":"8728","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"329","target":"426","id":"7798","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"227","target":"294","id":"6198","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"164","target":"644","id":"5071","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"287","target":"450","id":"7184","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"113","target":"146","id":"4005","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"164","target":"373","id":"5064","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"401","target":"410","id":"8708","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"363","target":"383","id":"8203","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"90","target":"502","id":"3547","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"33","target":"101","id":"2209","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"409","target":"523","id":"8798","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"21","target":"732","id":"1955","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"215","target":"445","id":"5991","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"521","target":"523","id":"9853","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"438","target":"441","id":"9124","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"125","target":"416","id":"4254","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"591","target":"720","id":"10295","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"485","target":"638","id":"9578","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"251","target":"545","id":"6590","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"330","target":"390","id":"7812","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"177","target":"685","id":"5325","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"516","target":"636","id":"9817","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"225","target":"642","id":"6180","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"288","target":"562","id":"7211","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"379","target":"383","id":"8408","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"520","target":"670","id":"9851","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"439","target":"540","id":"9140","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"196","target":"523","id":"5667","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"539","target":"698","id":"10006","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"628","target":"709","id":"10448","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"210","target":"662","id":"5910","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"104","target":"510","id":"3836","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"137","target":"192","id":"4499","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"19","target":"370","id":"1899","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"212","target":"424","id":"5939","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"275","target":"509","id":"6983","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"500","target":"597","id":"9709","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"331","target":"676","id":"7839","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"94","target":"606","id":"3633","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"271","target":"723","id":"6933","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"667","target":"685","id":"10604","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"95","target":"336","id":"3648","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"201","target":"489","id":"5759","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"260","target":"572","id":"6739","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"116","target":"434","id":"4080","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"381","target":"644","id":"8447","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"442","target":"623","id":"9191","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"84","target":"662","id":"3404","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"52","target":"609","id":"2665","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"424","target":"451","id":"8952","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"35","target":"78","id":"2268","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"279","target":"591","id":"7050","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"303","target":"583","id":"7443","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"318","target":"357","id":"7638","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"16","target":"540","id":"1834","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"355","target":"592","id":"8137","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"110","target":"238","id":"3938","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"95","target":"152","id":"3643","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"274","target":"519","id":"6964","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"522","target":"685","id":"9873","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"136","target":"727","id":"4498","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"93","target":"333","id":"3604","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"611","target":"648","id":"10377","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"88","target":"572","id":"3499","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"460","target":"528","id":"9359","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"433","target":"442","id":"9069","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"54","target":"487","id":"2712","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"21","target":"540","id":"1948","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"142","target":"444","id":"4614","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"254","target":"423","id":"6638","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"649","target":"702","id":"10543","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"79","target":"721","id":"3303","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"529","target":"720","id":"9943","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"227","target":"238","id":"6196","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"510","target":"546","id":"9782","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"491","target":"730","id":"9632","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"88","target":"661","id":"3505","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"35","target":"66","id":"2267","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"403","target":"587","id":"8734","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"181","target":"304","id":"5390","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"147","target":"469","id":"4731","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"294","target":"432","id":"7299","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"303","target":"308","id":"7431","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"103","target":"169","id":"3805","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"159","target":"160","id":"4959","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"167","target":"634","id":"5128","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"233","target":"289","id":"6297","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"621","target":"726","id":"10422","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"40","target":"192","id":"2379","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"252","target":"622","id":"6612","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"255","target":"557","id":"6656","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"393","target":"395","id":"8608","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"127","target":"474","id":"4293","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"335","target":"583","id":"7888","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"142","target":"143","id":"4604","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"119","target":"343","id":"4137","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"184","target":"684","id":"5453","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"493","target":"624","id":"9650","attributes":{"Weight":"1.0"},"color":"rgb(99,115,229)","size":1.0},{"source":"433","target":"454","id":"9070","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"219","target":"366","id":"6070","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"545","target":"722","id":"10042","attributes":{"Weight":"1.0"},"color":"rgb(148,115,164)","size":1.0},{"source":"320","target":"484","id":"7681","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"401","target":"674","id":"8716","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"64","target":"230","id":"2956","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"138","target":"709","id":"4532","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"211","target":"645","id":"5931","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"133","target":"507","id":"4425","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"418","target":"655","id":"8889","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"351","target":"536","id":"8096","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"340","target":"520","id":"7959","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"231","target":"348","id":"6265","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"577","target":"623","id":"10219","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"403","target":"574","id":"8733","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"20","target":"134","id":"1915","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"472","target":"649","id":"9486","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"311","target":"567","id":"7547","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"40","target":"599","id":"2392","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"203","target":"656","id":"5803","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"453","target":"665","id":"9288","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"340","target":"664","id":"7962","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"534","target":"673","id":"9971","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"220","target":"346","id":"6080","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"326","target":"365","id":"7748","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"418","target":"493","id":"8880","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"203","target":"573","id":"5797","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"524","target":"633","id":"9886","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"95","target":"378","id":"3651","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"465","target":"725","id":"9413","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"355","target":"581","id":"8136","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"164","target":"227","id":"5057","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"374","target":"648","id":"8347","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"121","target":"168","id":"4175","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"24","target":"120","id":"2001","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"606","target":"713","id":"10357","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"340","target":"628","id":"7961","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"606","target":"613","id":"10352","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"305","target":"368","id":"7466","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"648","target":"687","id":"10540","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"343","target":"506","id":"7998","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"207","target":"483","id":"5865","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"190","target":"505","id":"5560","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"150","target":"643","id":"4798","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"48","target":"292","id":"2568","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"483","target":"565","id":"9571","attributes":{"Weight":"1.0"},"color":"rgb(229,99,148)","size":1.0},{"source":"122","target":"327","id":"4193","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"647","target":"651","id":"10531","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"496","target":"507","id":"9668","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"43","target":"118","id":"2438","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"112","target":"132","id":"3987","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"279","target":"431","id":"7041","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"114","target":"523","id":"4035","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"461","target":"711","id":"9382","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"183","target":"524","id":"5426","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"278","target":"321","id":"7023","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"647","target":"689","id":"10532","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"547","target":"699","id":"10050","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"366","target":"701","id":"8251","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"215","target":"692","id":"6002","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"11","target":"437","id":"1719","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"186","target":"228","id":"5480","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"32","target":"47","id":"2185","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"411","target":"731","id":"8827","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"17","target":"295","id":"1853","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"588","target":"617","id":"10276","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"91","target":"134","id":"3556","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"9","target":"305","id":"1670","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"565","target":"661","id":"10135","attributes":{"Weight":"1.0"},"color":"rgb(196,148,148)","size":1.0},{"source":"44","target":"227","id":"2465","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"57","target":"421","id":"2775","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"566","target":"714","id":"10143","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"522","target":"707","id":"9874","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"4","target":"220","id":"1539","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"233","target":"586","id":"6308","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"212","target":"425","id":"5940","attributes":{"Weight":"1.0"},"color":"rgb(148,148,229)","size":1.0},{"source":"440","target":"654","id":"9162","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"612","target":"654","id":"10383","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"426","target":"615","id":"8990","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"371","target":"373","id":"8291","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"37","target":"488","id":"2319","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"279","target":"490","id":"7044","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"155","target":"719","id":"4905","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"63","target":"697","id":"2943","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"260","target":"578","id":"6740","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"115","target":"649","id":"4062","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"227","target":"245","id":"6197","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"124","target":"483","id":"4244","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"431","target":"529","id":"9043","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"137","target":"247","id":"4501","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"7","target":"266","id":"1607","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"301","target":"539","id":"7409","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"98","target":"615","id":"3722","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"494","target":"655","id":"9661","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"140","target":"177","id":"4558","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"90","target":"513","id":"3548","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"216","target":"332","id":"6009","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"258","target":"603","id":"6707","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"392","target":"731","id":"8606","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"518","target":"680","id":"9838","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"127","target":"297","id":"4290","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"39","target":"185","id":"2361","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"299","target":"431","id":"7372","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"262","target":"361","id":"6775","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"100","target":"366","id":"3754","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"57","target":"425","id":"2776","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"244","target":"673","id":"6474","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"227","target":"717","id":"6214","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"313","target":"458","id":"7568","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"141","target":"449","id":"4595","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"84","target":"146","id":"3390","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"209","target":"223","id":"5886","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"394","target":"405","id":"8622","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"390","target":"559","id":"8573","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"6","target":"471","id":"1593","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"321","target":"340","id":"7685","attributes":{"Weight":"1.0"},"color":"rgb(67,180,213)","size":1.0},{"source":"208","target":"298","id":"5868","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"97","target":"494","id":"3695","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"204","target":"312","id":"5808","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"204","target":"633","id":"5813","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"609","target":"718","id":"10367","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"708","target":"732","id":"10670","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"181","target":"554","id":"5396","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"46","target":"478","id":"2534","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"441","target":"689","id":"9174","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"335","target":"668","id":"7892","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"188","target":"333","id":"5515","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"408","target":"527","id":"8779","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"64","target":"214","id":"2954","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"597","target":"706","id":"10318","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"91","target":"513","id":"3568","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"83","target":"217","id":"3375","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"196","target":"663","id":"5676","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"499","target":"710","id":"9704","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"562","target":"663","id":"10123","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"509","target":"581","id":"9780","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"302","target":"714","id":"7429","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"380","target":"666","id":"8427","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"271","target":"578","id":"6922","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"600","target":"631","id":"10323","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"414","target":"560","id":"8842","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"73","target":"684","id":"3165","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"165","target":"167","id":"5077","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"100","target":"106","id":"3746","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"344","target":"361","id":"8006","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"239","target":"362","id":"6392","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"46","target":"64","id":"2519","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"88","target":"260","id":"3488","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"78","target":"284","id":"3265","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"50","target":"529","id":"2622","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"238","target":"575","id":"6377","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"521","target":"728","id":"9862","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"509","target":"510","id":"9777","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"12","target":"70","id":"1730","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"224","target":"289","id":"6145","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"557","target":"656","id":"10096","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"33","target":"223","id":"2219","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"354","target":"445","id":"8126","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"16","target":"48","id":"1826","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"532","target":"612","id":"9951","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"235","target":"236","id":"6329","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"38","target":"607","id":"2351","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"152","target":"727","id":"4845","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"236","target":"548","id":"6350","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"476","target":"683","id":"9530","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"304","target":"672","id":"7461","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"322","target":"485","id":"7697","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"180","target":"618","id":"5383","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"213","target":"544","id":"5967","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"354","target":"512","id":"8129","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"33","target":"512","id":"2238","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"208","target":"310","id":"5870","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"266","target":"721","id":"6844","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"111","target":"629","id":"3981","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"555","target":"726","id":"10087","attributes":{"Weight":"1.0"},"color":"rgb(115,148,229)","size":1.0},{"source":"120","target":"334","id":"4159","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"61","target":"338","id":"2877","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"93","target":"593","id":"3611","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"213","target":"375","id":"5961","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"150","target":"528","id":"4790","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"409","target":"421","id":"8789","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"416","target":"478","id":"8861","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"356","target":"656","id":"8147","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"338","target":"659","id":"7934","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"115","target":"597","id":"4061","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"413","target":"658","id":"8839","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"238","target":"603","id":"6381","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"406","target":"502","id":"8763","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"404","target":"670","id":"8751","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"397","target":"643","id":"8659","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"299","target":"469","id":"7376","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"190","target":"403","id":"5558","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"414","target":"559","id":"8841","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"27","target":"629","id":"2082","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"42","target":"211","id":"2418","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"539","target":"624","id":"10003","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"30","target":"548","id":"2161","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"103","target":"256","id":"3807","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"91","target":"117","id":"3554","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"52","target":"98","id":"2648","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"36","target":"598","id":"2302","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"356","target":"558","id":"8146","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"338","target":"396","id":"7926","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"453","target":"692","id":"9290","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"155","target":"294","id":"4890","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"398","target":"553","id":"8669","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"222","target":"305","id":"6118","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"649","target":"706","id":"10544","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"640","target":"641","id":"10499","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"11","target":"590","id":"1723","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"24","target":"293","id":"2006","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"44","target":"687","id":"2489","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"178","target":"615","id":"5343","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"434","target":"491","id":"9086","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"641","target":"708","id":"10507","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"620","target":"686","id":"10414","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"385","target":"480","id":"8504","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"30","target":"222","id":"2149","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"75","target":"115","id":"3194","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"226","target":"359","id":"6185","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"227","target":"627","id":"6210","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"181","target":"701","id":"5399","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"93","target":"277","id":"3601","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"441","target":"729","id":"9177","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"410","target":"556","id":"8812","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"351","target":"492","id":"8095","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"398","target":"430","id":"8665","attributes":{"Weight":"1.0"},"color":"rgb(196,132,148)","size":1.0},{"source":"88","target":"596","id":"3502","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"49","target":"198","id":"2583","attributes":{"Weight":"1.0"},"color":"rgb(99,229,67)","size":1.0},{"source":"430","target":"531","id":"9032","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"419","target":"643","id":"8904","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"328","target":"492","id":"7786","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"111","target":"371","id":"3971","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"229","target":"509","id":"6241","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"469","target":"698","id":"9456","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"135","target":"376","id":"4463","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"70","target":"462","id":"3098","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"272","target":"709","id":"6946","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"434","target":"575","id":"9088","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"261","target":"287","id":"6753","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"224","target":"331","id":"6148","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"123","target":"422","id":"4218","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"176","target":"372","id":"5288","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"134","target":"213","id":"4435","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"5","target":"521","id":"1572","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"402","target":"556","id":"8722","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"416","target":"422","id":"8856","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"182","target":"278","id":"5402","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"346","target":"503","id":"8030","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"113","target":"210","id":"4007","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"300","target":"624","id":"7396","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"623","target":"678","id":"10428","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"394","target":"413","id":"8625","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"114","target":"639","id":"4040","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"326","target":"681","id":"7756","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"172","target":"677","id":"5227","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"13","target":"380","id":"1764","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"246","target":"715","id":"6513","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"151","target":"280","id":"4811","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"360","target":"712","id":"8191","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"197","target":"351","id":"5683","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"88","target":"504","id":"3498","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"68","target":"516","id":"3043","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"275","target":"510","id":"6984","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"151","target":"279","id":"4810","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"146","target":"278","id":"4707","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"79","target":"433","id":"3287","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"145","target":"327","id":"4682","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"170","target":"557","id":"5183","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"21","target":"428","id":"1945","attributes":{"Weight":"1.0"},"color":"rgb(229,115,67)","size":1.0},{"source":"63","target":"398","id":"2933","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"203","target":"648","id":"5802","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"24","target":"640","id":"2010","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"46","target":"447","id":"2530","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"19","target":"675","id":"1909","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"475","target":"577","id":"9517","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"106","target":"554","id":"3868","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"298","target":"686","id":"7368","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"118","target":"503","id":"4122","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"232","target":"254","id":"6280","attributes":{"Weight":"1.0"},"color":"rgb(148,148,116)","size":1.0},{"source":"470","target":"515","id":"9461","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"231","target":"303","id":"6261","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"438","target":"651","id":"9131","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"155","target":"166","id":"4887","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"469","target":"631","id":"9453","attributes":{"Weight":"1.0"},"color":"rgb(99,115,229)","size":1.0},{"source":"394","target":"395","id":"8620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"462","target":"726","id":"9390","attributes":{"Weight":"1.0"},"color":"rgb(115,148,229)","size":1.0},{"source":"344","target":"362","id":"8007","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"192","target":"306","id":"5585","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"566","target":"606","id":"10138","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"299","target":"300","id":"7369","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"461","target":"565","id":"9378","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"27","target":"668","id":"2083","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"33","target":"483","id":"2235","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"275","target":"276","id":"6973","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"307","target":"310","id":"7484","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"461","target":"483","id":"9375","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"287","target":"555","id":"7189","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"300","target":"535","id":"7393","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"238","target":"586","id":"6380","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"307","target":"470","id":"7489","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"135","target":"323","id":"4459","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"89","target":"657","id":"3529","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"342","target":"586","id":"7984","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"367","target":"718","id":"8264","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"107","target":"533","id":"3883","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"110","target":"644","id":"3955","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"39","target":"166","id":"2358","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"119","target":"206","id":"4134","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"342","target":"379","id":"7976","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"187","target":"624","id":"5507","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"384","target":"460","id":"8486","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"22","target":"695","id":"1973","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"216","target":"580","id":"6018","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"151","target":"224","id":"4805","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"445","target":"512","id":"9221","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"28","target":"529","id":"2113","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"20","target":"156","id":"1916","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"145","target":"529","id":"4693","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"92","target":"609","id":"3591","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"46","target":"483","id":"2537","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"424","target":"517","id":"8955","attributes":{"Weight":"1.0"},"color":"rgb(67,229,196)","size":1.0},{"source":"9","target":"499","id":"1677","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"271","target":"596","id":"6923","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"477","target":"479","id":"9531","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"130","target":"672","id":"4368","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"212","target":"451","id":"5943","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"315","target":"495","id":"7600","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"170","target":"410","id":"5179","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"629","target":"720","id":"10453","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"268","target":"269","id":"6861","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"558","target":"656","id":"10101","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"26","target":"249","id":"2043","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"269","target":"412","id":"6896","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"35","target":"666","id":"2284","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"1","target":"205","id":"1469","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"303","target":"576","id":"7442","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"69","target":"264","id":"3058","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"284","target":"598","id":"7145","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"145","target":"443","id":"4689","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"37","target":"533","id":"2320","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"175","target":"300","id":"5266","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"245","target":"720","id":"6496","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"203","target":"687","id":"5805","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"253","target":"423","id":"6622","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"381","target":"425","id":"8430","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"114","target":"671","id":"4043","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"221","target":"608","id":"6111","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"316","target":"721","id":"7626","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"127","target":"398","id":"4292","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"243","target":"708","id":"6456","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"44","target":"327","id":"2468","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"199","target":"590","id":"5726","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"601","target":"655","id":"10330","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"127","target":"553","id":"4295","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"277","target":"537","id":"7012","attributes":{"Weight":"1.0"},"color":"rgb(148,196,83)","size":1.0},{"source":"13","target":"666","id":"1772","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"297","target":"657","id":"7348","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"197","target":"464","id":"5689","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"50","target":"373","id":"2617","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"488","target":"627","id":"9599","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"583","target":"654","id":"10256","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"99","target":"105","id":"3726","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"61","target":"316","id":"2874","attributes":{"Weight":"1.0"},"color":"rgb(213,67,213)","size":1.0},{"source":"47","target":"402","id":"2552","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"502","target":"513","id":"9721","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"71","target":"321","id":"3117","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"571","target":"716","id":"10177","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"590","target":"628","id":"10286","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"36","target":"192","id":"2290","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"60","target":"102","id":"2833","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"297","target":"474","id":"7341","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"131","target":"719","id":"4396","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"322","target":"621","id":"7699","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"409","target":"663","id":"8807","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"678","target":"721","id":"10626","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"3","target":"461","id":"1525","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"198","target":"497","id":"5702","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"123","target":"558","id":"4225","attributes":{"Weight":"1.0"},"color":"rgb(213,148,83)","size":1.0},{"source":"62","target":"530","id":"2917","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"140","target":"527","id":"4572","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"162","target":"602","id":"5030","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"473","target":"543","id":"9494","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"170","target":"250","id":"5170","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"419","target":"429","id":"8892","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"702","target":"706","id":"10664","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"454","target":"721","id":"9307","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"142","target":"660","id":"4623","attributes":{"Weight":"1.0"},"color":"rgb(180,67,164)","size":1.0},{"source":"467","target":"598","id":"9433","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"117","target":"213","id":"4096","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"218","target":"418","id":"6050","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"20","target":"341","id":"1921","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"363","target":"505","id":"8207","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"214","target":"262","id":"5974","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"114","target":"715","id":"4045","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"158","target":"733","id":"4958","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"417","target":"566","id":"8872","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"451","target":"600","id":"9270","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"38","target":"191","id":"2337","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"576","target":"668","id":"10215","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"137","target":"467","id":"4508","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"136","target":"163","id":"4482","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"646","target":"713","id":"10523","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"149","target":"345","id":"4763","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"524","target":"538","id":"9885","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"690","target":"723","id":"10648","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"151","target":"376","id":"4816","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"116","target":"668","id":"4091","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"110","target":"586","id":"3950","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"80","target":"434","id":"3317","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"234","target":"280","id":"6312","attributes":{"Weight":"1.0"},"color":"rgb(148,67,213)","size":1.0},{"source":"168","target":"191","id":"5131","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"20","target":"683","id":"1931","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"500","target":"706","id":"9713","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"130","target":"219","id":"4351","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"194","target":"505","id":"5626","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"17","target":"446","id":"1858","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"178","target":"197","id":"5328","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"261","target":"555","id":"6764","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"406","target":"476","id":"8762","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"47","target":"170","id":"2542","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"611","target":"656","id":"10378","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"196","target":"589","id":"5672","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"454","target":"648","id":"9304","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"67","target":"198","id":"3016","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"34","target":"592","id":"2263","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"224","target":"335","id":"6149","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"40","target":"315","id":"2384","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"528","target":"562","id":"9921","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"196","target":"543","id":"5669","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"101","target":"483","id":"3780","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"52","target":"700","id":"2667","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"157","target":"624","id":"4941","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"151","target":"179","id":"4804","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"228","target":"552","id":"6228","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"535","target":"653","id":"9977","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"20","target":"476","id":"1925","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"155","target":"245","id":"4889","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"494","target":"605","id":"9659","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"516","target":"524","id":"9813","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"501","target":"727","id":"9720","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"433","target":"648","id":"9082","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"365","target":"390","id":"8232","attributes":{"Weight":"1.0"},"color":"rgb(164,148,115)","size":1.0},{"source":"404","target":"503","id":"8744","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"4","target":"138","id":"1537","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"636","target":"697","id":"10482","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"503","target":"670","id":"9731","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"356","target":"696","id":"8151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"615","target":"700","id":"10398","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"168","target":"607","id":"5143","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"320","target":"344","id":"7674","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"638","target":"671","id":"10490","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"40","target":"137","id":"2378","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"384","target":"677","id":"8495","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"295","target":"317","id":"7312","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"179","target":"311","id":"5349","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"245","target":"489","id":"6487","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"135","target":"547","id":"4472","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"78","target":"273","id":"3264","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"147","target":"514","id":"4732","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"384","target":"522","id":"8487","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"29","target":"208","id":"2126","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"60","target":"606","id":"2861","attributes":{"Weight":"1.0"},"color":"rgb(213,67,180)","size":1.0},{"source":"233","target":"376","id":"6300","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"635","target":"736","id":"10478","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"54","target":"381","id":"2704","attributes":{"Weight":"1.0"},"color":"rgb(148,148,229)","size":1.0},{"source":"171","target":"714","id":"5210","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"5","target":"575","id":"1573","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"112","target":"512","id":"4004","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"182","target":"420","id":"5406","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"69","target":"282","id":"3060","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"37","target":"545","id":"2321","attributes":{"Weight":"1.0"},"color":"rgb(148,99,164)","size":1.0},{"source":"363","target":"574","id":"8209","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"175","target":"624","id":"5278","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"40","target":"380","id":"2385","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"25","target":"439","id":"2025","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"39","target":"352","id":"2365","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"386","target":"532","id":"8522","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"449","target":"490","id":"9252","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"157","target":"187","id":"4923","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"78","target":"137","id":"3261","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"724","target":"729","id":"10677","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"211","target":"555","id":"5926","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"148","target":"477","id":"4750","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"253","target":"557","id":"6625","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"9","target":"429","id":"1675","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"252","target":"478","id":"6607","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"611","target":"687","id":"10380","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"421","target":"565","id":"8923","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"511","target":"593","id":"9790","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"279","target":"717","id":"7054","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"32","target":"250","id":"2187","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"93","target":"131","id":"3595","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"360","target":"563","id":"8188","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"404","target":"483","id":"8743","attributes":{"Weight":"1.0"},"color":"rgb(148,180,132)","size":1.0},{"source":"344","target":"483","id":"8009","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"13","target":"35","id":"1751","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"367","target":"609","id":"8261","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"442","target":"687","id":"9194","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"35","target":"599","id":"2283","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"557","target":"558","id":"10095","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"471","target":"686","id":"9475","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"156","target":"502","id":"4916","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"486","target":"531","id":"9585","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"68","target":"718","id":"3054","attributes":{"Weight":"1.0"},"color":"rgb(116,148,148)","size":1.0},{"source":"273","target":"467","id":"6952","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"269","target":"560","id":"6900","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"256","target":"446","id":"6671","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"631","target":"655","id":"10456","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"433","target":"611","id":"9078","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"226","target":"463","id":"6188","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"224","target":"699","id":"6163","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"135","target":"224","id":"4452","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"508","target":"521","id":"9767","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"197","target":"536","id":"5691","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"11","target":"346","id":"1715","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"259","target":"702","id":"6727","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"116","target":"371","id":"4078","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"220","target":"404","id":"6083","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"540","target":"732","id":"10013","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"174","target":"695","id":"5258","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"253","target":"400","id":"6618","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"316","target":"644","id":"7621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"116","target":"308","id":"4074","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"71","target":"278","id":"3115","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"7","target":"453","id":"1611","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"352","target":"634","id":"8112","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"194","target":"649","id":"5631","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"376","target":"443","id":"8367","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"285","target":"734","id":"7163","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"290","target":"411","id":"7248","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"416","target":"449","id":"8858","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"374","target":"442","id":"8335","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"593","target":"619","id":"10298","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"257","target":"632","id":"6686","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"399","target":"488","id":"8687","attributes":{"Weight":"1.0"},"color":"rgb(148,99,196)","size":1.0},{"source":"409","target":"473","id":"8794","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"57","target":"562","id":"2784","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"50","target":"644","id":"2628","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"376","target":"567","id":"8372","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"208","target":"458","id":"5872","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"532","target":"540","id":"9950","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"389","target":"570","id":"8557","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"381","target":"521","id":"8437","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"183","target":"555","id":"5428","attributes":{"Weight":"1.0"},"color":"rgb(99,229,148)","size":1.0},{"source":"270","target":"688","id":"6915","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"381","target":"473","id":"8435","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"353","target":"368","id":"8116","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"38","target":"430","id":"2344","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"270","target":"538","id":"6909","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"452","target":"534","id":"9278","attributes":{"Weight":"1.0"},"color":"rgb(197,148,148)","size":1.0},{"source":"84","target":"107","id":"3388","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"258","target":"335","id":"6697","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"458","target":"620","id":"9343","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"270","target":"637","id":"6913","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"91","target":"502","id":"3567","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"13","target":"66","id":"1755","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"54","target":"608","id":"2717","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"361","target":"484","id":"8196","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"342","target":"500","id":"7979","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"73","target":"524","id":"3159","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"31","target":"370","id":"2179","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"593","target":"601","id":"10296","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"394","target":"414","id":"8626","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"171","target":"417","id":"5198","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"371","target":"562","id":"8295","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"48","target":"708","id":"2577","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"460","target":"677","id":"9369","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"661","target":"665","id":"10587","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"448","target":"506","id":"9240","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"133","target":"244","id":"4416","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"23","target":"158","id":"1982","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"81","target":"479","id":"3338","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"218","target":"435","id":"6052","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"65","target":"520","id":"2987","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"367","target":"426","id":"8253","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"123","target":"481","id":"4223","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"390","target":"399","id":"8567","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"428","target":"571","id":"9007","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"507","target":"714","id":"9765","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"267","target":"275","id":"6846","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"725","target":"729","id":"10681","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"261","target":"600","id":"6767","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"466","target":"735","id":"9429","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"336","target":"388","id":"7900","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"174","target":"568","id":"5255","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"522","target":"612","id":"9867","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"294","target":"643","id":"7308","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"612","target":"707","id":"10389","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"576","target":"606","id":"10212","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"75","target":"574","id":"3207","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"417","target":"659","id":"8875","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"276","target":"546","id":"7000","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"135","target":"280","id":"4456","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"391","target":"405","id":"8583","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"124","target":"320","id":"4238","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"12","target":"462","id":"1744","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"507","target":"534","id":"9758","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"104","target":"229","id":"3824","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"170","target":"255","id":"5174","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"526","target":"667","id":"9909","attributes":{"Weight":"1.0"},"color":"rgb(67,196,180)","size":1.0},{"source":"117","target":"375","id":"4102","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"371","target":"713","id":"8305","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"279","target":"567","id":"7047","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"525","target":"722","id":"9902","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"257","target":"445","id":"6681","attributes":{"Weight":"1.0"},"color":"rgb(196,99,148)","size":1.0},{"source":"71","target":"226","id":"3114","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"452","target":"481","id":"9275","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"242","target":"341","id":"6434","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"286","target":"593","id":"7173","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"247","target":"599","id":"6526","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"241","target":"610","id":"6424","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"100","target":"701","id":"3761","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"425","target":"565","id":"8973","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"61","target":"455","id":"2885","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"143","target":"187","id":"4629","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"221","target":"419","id":"6100","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"34","target":"546","id":"2260","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"259","target":"706","id":"6728","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"289","target":"532","id":"7228","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"6","target":"680","id":"1600","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"349","target":"643","id":"8073","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"93","target":"180","id":"3597","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"326","target":"544","id":"7755","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"295","target":"355","id":"7314","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"128","target":"588","id":"4321","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"626","target":"662","id":"10441","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"207","target":"230","id":"5856","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"17","target":"317","id":"1854","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"287","target":"451","id":"7185","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"610","target":"690","id":"10370","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"335","target":"616","id":"7890","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"275","target":"357","id":"6980","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"566","target":"659","id":"10140","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"330","target":"399","id":"7818","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"120","target":"429","id":"4162","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"564","target":"581","id":"10130","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"98","target":"372","id":"3712","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"442","target":"577","id":"9188","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"154","target":"719","id":"4883","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"71","target":"627","id":"3125","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"16","target":"174","id":"1829","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"87","target":"675","id":"3479","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"54","target":"70","id":"2691","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"505","target":"702","id":"9750","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"241","target":"578","id":"6421","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"422","target":"447","id":"8931","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"326","target":"683","id":"7757","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"54","target":"645","id":"2721","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"157","target":"240","id":"4924","attributes":{"Weight":"1.0"},"color":"rgb(180,132,148)","size":1.0},{"source":"239","target":"391","id":"6393","attributes":{"Weight":"1.0"},"color":"rgb(229,99,115)","size":1.0},{"source":"162","target":"364","id":"5023","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"213","target":"635","id":"5968","attributes":{"Weight":"1.0"},"color":"rgb(116,229,67)","size":1.0},{"source":"248","target":"448","id":"6533","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"425","target":"728","id":"8981","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"277","target":"332","id":"7005","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"103","target":"275","id":"3809","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"378","target":"588","id":"8403","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"425","target":"543","id":"8971","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"179","target":"654","id":"5363","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"101","target":"207","id":"3766","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"349","target":"591","id":"8071","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"64","target":"249","id":"2958","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"462","target":"707","id":"9389","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"65","target":"664","id":"2990","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"596","target":"723","id":"10314","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"260","target":"610","id":"6744","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"337","target":"579","id":"7918","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"39","target":"121","id":"2355","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"285","target":"438","id":"7149","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"14","target":"702","id":"1798","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"97","target":"173","id":"3685","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"166","target":"397","id":"5104","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"250","target":"694","id":"6578","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"258","target":"713","id":"6712","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"184","target":"302","id":"5443","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"421","target":"472","id":"8916","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"508","target":"543","id":"9769","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"117","target":"134","id":"4094","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"7","target":"661","id":"1619","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"389","target":"467","id":"8555","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"316","target":"327","id":"7606","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"6","target":"518","id":"1597","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"32","target":"255","id":"2191","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"33","target":"245","id":"2222","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"80","target":"575","id":"3318","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"144","target":"308","id":"4655","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"131","target":"432","id":"4380","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"32","target":"660","id":"2203","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"61","target":"678","id":"2895","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"210","target":"278","id":"5900","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"453","target":"690","id":"9289","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"54","target":"719","id":"2722","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"80","target":"335","id":"3314","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"34","target":"318","id":"2254","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"31","target":"701","id":"2184","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"582","target":"655","id":"10252","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"211","target":"487","id":"5925","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"224","target":"443","id":"6153","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"82","target":"573","id":"3360","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"614","target":"687","id":"10397","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"268","target":"731","id":"6882","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"517","target":"678","id":"9832","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"610","target":"692","id":"10371","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"398","target":"702","id":"8679","attributes":{"Weight":"1.0"},"color":"rgb(115,148,164)","size":1.0},{"source":"515","target":"620","id":"9810","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"133","target":"659","id":"4430","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"283","target":"330","id":"7117","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"264","target":"466","id":"6804","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"8","target":"527","id":"1644","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"161","target":"553","id":"5006","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"205","target":"582","id":"5832","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"129","target":"164","id":"4326","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"530","target":"683","id":"9946","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"44","target":"179","id":"2463","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"225","target":"419","id":"6171","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"675","target":"728","id":"10618","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"212","target":"645","id":"5952","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"230","target":"484","id":"6256","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"16","target":"733","id":"1842","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"61","target":"314","id":"2873","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"370","target":"630","id":"8288","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"360","target":"388","id":"8183","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"421","target":"594","id":"8925","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"76","target":"663","id":"3238","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"9","target":"236","id":"1669","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"242","target":"544","id":"6442","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"82","target":"623","id":"3364","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"456","target":"536","id":"9323","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"225","target":"424","id":"6172","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"401","target":"557","id":"8712","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"392","target":"414","id":"8601","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"121","target":"461","id":"4184","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"285","target":"650","id":"7156","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"38","target":"517","id":"2348","attributes":{"Weight":"1.0"},"color":"rgb(148,213,115)","size":1.0},{"source":"181","target":"219","id":"5388","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"492","target":"535","id":"9635","attributes":{"Weight":"1.0"},"color":"rgb(116,67,229)","size":1.0},{"source":"6","target":"310","id":"1587","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"384","target":"707","id":"8499","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"67","target":"697","id":"3031","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"437","target":"520","id":"9118","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"28","target":"720","id":"2122","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"225","target":"451","id":"6174","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"572","target":"719","id":"10184","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"27","target":"80","id":"2058","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"279","target":"572","id":"7048","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"115","target":"342","id":"4051","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"63","target":"257","id":"2929","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"182","target":"488","id":"5407","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"311","target":"384","id":"7539","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"387","target":"664","id":"8542","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"263","target":"669","id":"6795","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"131","target":"511","id":"4382","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"63","target":"485","id":"2935","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"164","target":"720","id":"5075","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"70","target":"608","id":"3102","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"283","target":"414","id":"7130","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"40","target":"598","id":"2391","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"98","target":"718","id":"3724","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"238","target":"335","id":"6371","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"640","target":"733","id":"10504","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"132","target":"512","id":"4413","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"119","target":"378","id":"4139","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"405","target":"658","id":"8760","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"313","target":"468","id":"7570","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"398","target":"632","id":"8672","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"155","target":"643","id":"4901","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"377","target":"414","id":"8388","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"135","target":"489","id":"4469","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"31","target":"309","id":"2176","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"102","target":"595","id":"3801","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"509","target":"592","id":"9781","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"25","target":"51","id":"2018","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"445","target":"483","id":"9219","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"21","target":"25","id":"1935","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"50","target":"164","id":"2608","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"203","target":"374","id":"5787","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"227","target":"569","id":"6206","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"384","target":"685","id":"8497","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"18","target":"628","id":"1882","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"140","target":"687","id":"4583","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"78","target":"495","id":"3271","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"52","target":"456","id":"2659","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"42","target":"428","id":"2424","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"220","target":"340","id":"6079","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"269","target":"658","id":"6902","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"98","target":"367","id":"3711","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"212","target":"487","id":"5945","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"545","target":"556","id":"10034","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"39","target":"463","id":"2369","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"96","target":"370","id":"3678","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"190","target":"706","id":"5568","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"244","target":"613","id":"6471","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"635","target":"637","id":"10474","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"313","target":"477","id":"7573","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"200","target":"597","id":"5744","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"69","target":"285","id":"3061","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"250","target":"674","id":"6577","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"587","target":"597","id":"10271","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"256","target":"276","id":"6665","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"147","target":"455","id":"4730","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"136","target":"712","id":"4497","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"144","target":"606","id":"4669","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"319","target":"349","id":"7654","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"284","target":"306","id":"7137","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"195","target":"605","id":"5649","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"628","target":"664","id":"10446","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"421","target":"508","id":"8918","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"101","target":"361","id":"3776","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"21","target":"708","id":"1954","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"184","target":"312","id":"5444","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"154","target":"224","id":"4862","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"174","target":"704","id":"5259","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"10","target":"153","id":"1689","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"84","target":"533","id":"3400","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"18","target":"383","id":"1875","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"198","target":"538","id":"5705","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"260","target":"665","id":"6746","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"306","target":"380","id":"7475","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"235","target":"489","id":"6336","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"1","target":"519","id":"1477","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"665","target":"723","id":"10601","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"46","target":"675","id":"2541","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"127","target":"715","id":"4303","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"81","target":"620","id":"3342","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"216","target":"618","id":"6022","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"54","target":"202","id":"2693","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"192","target":"666","id":"5595","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"177","target":"221","id":"5303","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"183","target":"462","id":"5423","attributes":{"Weight":"1.0"},"color":"rgb(99,229,148)","size":1.0},{"source":"185","target":"728","id":"5477","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"60","target":"150","id":"2837","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"287","target":"462","id":"7186","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"179","target":"586","id":"5359","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"269","target":"390","id":"6887","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"16","target":"439","id":"1833","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"176","target":"700","id":"5299","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"8","target":"460","id":"1642","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"114","target":"257","id":"4027","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"52","target":"197","id":"2651","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"122","target":"266","id":"4192","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"95","target":"244","id":"3646","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"416","target":"481","id":"8862","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"342","target":"403","id":"7978","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"114","target":"421","id":"4031","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"177","target":"218","id":"5302","attributes":{"Weight":"1.0"},"color":"rgb(67,196,180)","size":1.0},{"source":"82","target":"614","id":"3363","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"192","target":"315","id":"5586","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"548","target":"710","id":"10054","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"65","target":"340","id":"2980","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"71","target":"146","id":"3109","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"159","target":"257","id":"4963","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"137","target":"306","id":"4504","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"225","target":"287","id":"6168","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"117","target":"700","id":"4111","attributes":{"Weight":"1.0"},"color":"rgb(100,148,148)","size":1.0},{"source":"208","target":"541","id":"5881","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"195","target":"493","id":"5642","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"668","target":"713","id":"10607","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"280","target":"331","id":"7058","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"469","target":"514","id":"9446","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"87","target":"185","id":"3455","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"677","target":"685","id":"10623","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"197","target":"700","id":"5696","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"79","target":"375","id":"3285","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"156","target":"242","id":"4908","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"537","target":"706","id":"9993","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"214","target":"320","id":"5975","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"632","target":"671","id":"10462","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"448","target":"520","id":"9241","attributes":{"Weight":"1.0"},"color":"rgb(148,229,132)","size":1.0},{"source":"211","target":"618","id":"5929","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"524","target":"637","id":"9889","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"189","target":"230","id":"5532","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"454","target":"577","id":"9300","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"29","target":"310","id":"2129","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"298","target":"479","id":"7362","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"79","target":"623","id":"3299","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"141","target":"482","id":"4599","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"211","target":"642","id":"5930","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"438","target":"724","id":"9134","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"189","target":"361","id":"5539","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"329","target":"464","id":"7801","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"259","target":"363","id":"6714","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"525","target":"567","id":"9896","attributes":{"Weight":"1.0"},"color":"rgb(148,115,213)","size":1.0},{"source":"475","target":"614","id":"9519","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"122","target":"454","id":"4198","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"15","target":"97","id":"1800","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"661","target":"693","id":"10590","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"477","target":"680","id":"9536","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"183","target":"736","id":"5439","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"110","target":"719","id":"3957","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"200","target":"579","id":"5741","attributes":{"Weight":"1.0"},"color":"rgb(67,180,164)","size":1.0},{"source":"543","target":"589","id":"10025","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"258","target":"575","id":"6704","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"3","target":"634","id":"1530","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"633","target":"635","id":"10465","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"35","target":"570","id":"2280","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"196","target":"421","id":"5660","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"336","target":"448","id":"7902","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"87","target":"440","id":"3463","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"374","target":"611","id":"8343","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"220","target":"709","id":"6091","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"205","target":"585","id":"5833","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"15","target":"296","id":"1807","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"44","target":"454","id":"2474","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"577","target":"611","id":"10217","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"327","target":"455","id":"7764","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"572","target":"629","id":"10180","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"441","target":"650","id":"9172","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"216","target":"703","id":"6027","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"243","target":"439","id":"6449","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"289","target":"567","id":"7231","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"440","target":"472","id":"9150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"372","target":"549","id":"8314","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"39","target":"129","id":"2356","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"468","target":"680","id":"9444","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"114","target":"398","id":"4030","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"205","target":"525","id":"5829","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"234","target":"304","id":"6314","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"302","target":"736","id":"7430","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"364","target":"665","id":"8224","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"267","target":"509","id":"6855","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"263","target":"539","id":"6790","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"166","target":"607","id":"5110","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"312","target":"497","id":"7556","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"412","target":"413","id":"8828","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"109","target":"119","id":"3908","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"264","target":"281","id":"6797","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"68","target":"697","id":"3053","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"287","target":"487","id":"7188","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"59","target":"422","id":"2823","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"58","target":"452","id":"2806","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"524","target":"635","id":"9887","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"414","target":"658","id":"8844","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"15","target":"195","id":"1803","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"277","target":"424","id":"7007","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"136","target":"336","id":"4485","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"174","target":"640","id":"5256","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"202","target":"221","id":"5767","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"125","target":"404","id":"4253","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"43","target":"437","id":"2448","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"569","target":"572","id":"10156","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"457","target":"630","id":"9331","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"425","target":"508","id":"8968","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"351","target":"456","id":"8093","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"114","target":"682","id":"4044","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"500","target":"505","id":"9705","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"47","target":"696","id":"2563","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"451","target":"462","id":"9267","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"307","target":"479","id":"7492","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"110","target":"150","id":"3930","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"315","target":"380","id":"7597","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"384","target":"625","id":"8492","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"23","target":"698","id":"1993","attributes":{"Weight":"1.0"},"color":"rgb(180,67,148)","size":1.0},{"source":"103","target":"581","id":"3821","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"244","target":"314","id":"6459","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"38","target":"461","id":"2345","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"113","target":"278","id":"4009","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"1","target":"108","id":"1466","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"527","target":"612","id":"9913","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"33","target":"50","id":"2207","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"241","target":"692","id":"6428","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"466","target":"651","id":"9422","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"309","target":"332","id":"7515","attributes":{"Weight":"1.0"},"color":"rgb(148,115,148)","size":1.0},{"source":"317","target":"355","id":"7628","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"182","target":"533","id":"5408","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"88","target":"241","id":"3487","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"504","target":"692","id":"9740","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"208","target":"459","id":"5873","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"14","target":"292","id":"1782","attributes":{"Weight":"1.0"},"color":"rgb(148,148,83)","size":1.0},{"source":"41","target":"584","id":"2408","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"633","target":"688","id":"10469","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"7","target":"339","id":"1609","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"373","target":"720","id":"8330","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"26","target":"123","id":"2039","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"263","target":"299","id":"6781","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"447","target":"481","id":"9234","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"228","target":"489","id":"6225","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"291","target":"670","id":"7270","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"12","target":"319","id":"1738","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"433","target":"577","id":"9077","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"345","target":"613","id":"8020","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"25","target":"243","id":"2022","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"178","target":"427","id":"5335","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"454","target":"614","id":"9302","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"402","target":"696","id":"8729","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"323","target":"529","id":"7713","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"157","target":"175","id":"4922","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"473","target":"728","id":"9501","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"88","target":"723","id":"3511","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"541","target":"620","id":"10015","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"29","target":"471","id":"2135","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"8","target":"311","id":"1636","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"106","target":"304","id":"3862","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"3","target":"607","id":"1529","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"37","target":"626","id":"2323","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"149","target":"682","id":"4775","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"176","target":"551","id":"5296","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"109","target":"501","id":"3921","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"183","target":"204","id":"5416","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"251","target":"401","id":"6586","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"492","target":"609","id":"9639","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"254","target":"545","id":"6639","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"169","target":"275","id":"5150","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"28","target":"33","id":"2086","attributes":{"Weight":"1.0"},"color":"rgb(148,132,148)","size":1.0},{"source":"108","target":"435","id":"3896","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"193","target":"724","id":"5612","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"320","target":"362","id":"7677","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"74","target":"654","id":"3186","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"323","target":"699","id":"7718","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"77","target":"310","id":"3246","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"353","target":"595","id":"8122","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"36","target":"315","id":"2295","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"547","target":"567","id":"10046","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"199","target":"274","id":"5717","attributes":{"Weight":"1.0"},"color":"rgb(67,196,213)","size":1.0},{"source":"7","target":"692","id":"1622","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"136","target":"506","id":"4492","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"571","target":"703","id":"10176","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"460","target":"679","id":"9370","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"190","target":"254","id":"5552","attributes":{"Weight":"1.0"},"color":"rgb(148,148,100)","size":1.0},{"source":"14","target":"574","id":"1791","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"42","target":"716","id":"2436","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"233","target":"443","id":"6303","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"61","target":"171","id":"2871","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"459","target":"470","id":"9347","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"127","target":"639","id":"4299","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"43","target":"347","id":"2445","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"18","target":"43","id":"1865","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"277","target":"636","id":"7019","attributes":{"Weight":"1.0"},"color":"rgb(180,196,67)","size":1.0},{"source":"154","target":"462","id":"4873","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"161","target":"398","id":"5003","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"522","target":"532","id":"9865","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"275","target":"667","id":"6991","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"161","target":"726","id":"5014","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"193","target":"281","id":"5597","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"41","target":"273","id":"2399","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"468","target":"515","id":"9440","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"495","target":"666","id":"9667","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"166","target":"226","id":"5099","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"50","target":"316","id":"2612","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"435","target":"526","id":"9099","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"41","target":"570","id":"2407","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"176","target":"464","id":"5292","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"245","target":"629","id":"6492","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"438","target":"647","id":"9129","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"140","target":"384","id":"4564","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"196","target":"508","id":"5665","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"485","target":"726","id":"9584","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"387","target":"670","id":"8543","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"68","target":"684","id":"3051","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"329","target":"563","id":"7806","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"67","target":"684","id":"3029","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"26","target":"447","id":"2048","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"538","target":"636","id":"9996","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"197","target":"367","id":"5684","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"312","target":"684","id":"7564","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"268","target":"560","id":"6879","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"611","target":"614","id":"10375","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"437","target":"628","id":"9120","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"197","target":"615","id":"5695","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"110","target":"591","id":"3951","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"298","target":"307","id":"7353","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"610","target":"723","id":"10374","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"73","target":"697","id":"3167","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"179","target":"527","id":"5356","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"387","target":"503","id":"8537","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"74","target":"179","id":"3172","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"374","target":"385","id":"8331","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"138","target":"346","id":"4520","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"326","target":"406","id":"7750","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"268","target":"377","id":"6865","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"482","target":"622","id":"9566","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"317","target":"446","id":"7630","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"72","target":"190","id":"3131","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"146","target":"407","id":"4712","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"161","target":"632","id":"5008","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"425","target":"663","id":"8978","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"107","target":"278","id":"3877","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"133","target":"325","id":"4418","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"142","target":"187","id":"4608","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"390","target":"405","id":"8568","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"41","target":"467","id":"2405","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"300","target":"469","id":"7391","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"122","target":"203","id":"4191","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"652","target":"667","id":"10560","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"502","target":"683","id":"9725","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"402","target":"656","id":"8725","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"394","target":"399","id":"8621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"358","target":"600","id":"8166","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"205","target":"494","id":"5827","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"249","target":"481","id":"6552","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"519","target":"605","id":"9844","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"382","target":"689","id":"8465","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"266","target":"610","id":"6838","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"299","target":"384","id":"7371","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"346","target":"404","id":"8028","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"8","target":"576","id":"1648","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"52","target":"426","id":"2657","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"329","target":"551","id":"7805","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"146","target":"627","id":"4718","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"360","target":"617","id":"8190","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"296","target":"450","id":"7325","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"88","target":"271","id":"3491","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"246","target":"474","id":"6502","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"375","target":"678","id":"8360","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"436","target":"490","id":"9107","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"532","target":"677","id":"9955","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"363","target":"597","id":"8211","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"418","target":"494","id":"8881","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"264","target":"382","id":"6800","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"81","target":"477","id":"3337","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"264","target":"689","id":"6810","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"423","target":"545","id":"8942","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"349","target":"529","id":"8068","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"165","target":"240","id":"5082","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"45","target":"249","id":"2499","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"200","target":"342","id":"5732","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"545","target":"694","id":"10040","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"396","target":"417","id":"8643","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"719","target":"720","id":"10674","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"549","target":"615","id":"10057","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"264","target":"441","id":"6802","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"732","target":"733","id":"10690","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"28","target":"407","id":"2107","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"319","target":"608","id":"7669","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"111","target":"489","id":"3976","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"36","target":"66","id":"2287","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"37","target":"182","id":"2311","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"17","target":"256","id":"1849","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"459","target":"518","id":"9352","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"403","target":"537","id":"8732","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"248","target":"588","id":"6538","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"28","target":"705","id":"2121","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"46","target":"404","id":"2527","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"136","target":"248","id":"4484","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"391","target":"412","id":"8585","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"441","target":"466","id":"9168","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"589","target":"604","id":"10280","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"500","target":"691","id":"9711","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"98","target":"427","id":"3714","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"26","target":"291","id":"2045","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"409","target":"508","id":"8796","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"69","target":"466","id":"3070","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"484","target":"512","id":"9573","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"123","target":"249","id":"4214","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"237","target":"416","id":"6357","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"249","target":"675","id":"6558","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"360","target":"506","id":"8186","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"560","target":"561","id":"10110","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"190","target":"200","id":"5550","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"148","target":"686","id":"4757","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"12","target":"221","id":"1734","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"3","target":"240","id":"1521","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"240","target":"359","id":"6399","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"278","target":"579","id":"7029","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"378","target":"647","id":"8405","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"298","target":"680","id":"7367","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"92","target":"700","id":"3593","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"335","target":"434","id":"7883","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"171","target":"659","id":"5207","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"305","target":"595","id":"7472","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"388","target":"448","id":"8546","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"174","target":"439","id":"5253","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"199","target":"346","id":"5719","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"198","target":"637","id":"5709","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"33","target":"209","id":"2217","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"294","target":"720","id":"7311","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"319","target":"462","id":"7662","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"19","target":"237","id":"1895","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"246","target":"657","id":"6510","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"163","target":"343","id":"5043","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"38","target":"129","id":"2331","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"13","target":"599","id":"1771","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"149","target":"606","id":"4771","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"13","target":"40","id":"1753","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"189","target":"344","id":"5537","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"131","target":"277","id":"4373","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"526","target":"722","id":"9910","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"164","target":"397","id":"5065","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"156","target":"265","id":"4909","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"194","target":"587","id":"5629","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"443","target":"676","id":"9205","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"54","target":"571","id":"2714","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"90","target":"530","id":"3549","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"557","target":"660","id":"10097","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"123","target":"675","id":"4227","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"458","target":"541","id":"9342","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"300","target":"542","id":"7395","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"464","target":"609","id":"9401","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"23","target":"732","id":"1996","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"647","target":"734","id":"10537","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"149","target":"534","id":"4769","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"101","target":"112","id":"3762","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"70","target":"600","id":"3101","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"373","target":"685","id":"8328","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"532","target":"704","id":"9958","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"3","target":"430","id":"1524","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"65","target":"590","id":"2988","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"161","target":"246","id":"4999","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"196","target":"304","id":"5655","attributes":{"Weight":"1.0"},"color":"rgb(148,67,229)","size":1.0},{"source":"373","target":"643","id":"8325","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"1","target":"655","id":"1484","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"39","target":"165","id":"2357","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"455","target":"469","id":"9308","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"98","target":"536","id":"3718","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"443","target":"699","id":"9206","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"632","target":"638","id":"10459","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"461","target":"486","id":"9376","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"355","target":"446","id":"8131","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"32","target":"254","id":"2190","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"163","target":"206","id":"5040","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"246","target":"485","id":"6503","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"418","target":"526","id":"8884","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"414","target":"561","id":"8843","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"271","target":"339","id":"6918","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"104","target":"276","id":"3828","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"157","target":"434","id":"4930","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"107","target":"407","id":"3880","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"77","target":"471","id":"3252","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"695","target":"732","id":"10659","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"545","target":"558","id":"10036","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"50","target":"155","id":"2607","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"85","target":"586","id":"3427","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"11","target":"118","id":"1708","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"67","target":"270","id":"3018","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"314","target":"496","id":"7587","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"435","target":"519","id":"9097","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"242","target":"375","id":"6436","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"173","target":"582","id":"5244","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"347","target":"664","id":"8044","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"5","target":"27","id":"1554","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"456","target":"700","id":"9328","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"434","target":"616","id":"9092","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"150","target":"294","id":"4782","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"454","target":"455","id":"9294","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"36","target":"584","id":"2301","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"504","target":"610","id":"9736","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"290","target":"393","id":"7243","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"23","target":"708","id":"1995","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"268","target":"658","id":"6881","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"127","target":"160","id":"4286","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"97","target":"493","id":"3694","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"92","target":"427","id":"3584","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"48","target":"704","id":"2576","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"154","target":"371","id":"4870","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"468","target":"686","id":"9445","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"107","target":"321","id":"3878","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"29","target":"479","id":"2137","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"578","target":"692","id":"10232","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"276","target":"446","id":"6997","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"45","target":"58","id":"2492","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"170","target":"696","id":"5189","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"28","target":"321","id":"2103","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"47","target":"694","id":"2562","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"490","target":"586","id":"9615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"455","target":"678","id":"9317","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"268","target":"394","id":"6870","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"297","target":"621","id":"7344","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"41","target":"389","id":"2404","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"53","target":"497","id":"2679","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"53","target":"68","id":"2670","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"382","target":"441","id":"8452","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"95","target":"163","id":"3644","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"303","target":"679","id":"7448","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"139","target":"616","id":"4551","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"578","target":"721","id":"10234","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"145","target":"316","id":"4680","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"507","target":"566","id":"9759","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"180","target":"652","id":"5385","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"202","target":"451","id":"5776","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"87","target":"521","id":"3469","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"349","target":"368","id":"8061","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"118","target":"220","id":"4114","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"58","target":"123","id":"2793","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"300","target":"301","id":"7387","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"367","target":"372","id":"8252","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"21","target":"23","id":"1933","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"325","target":"507","id":"7736","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"34","target":"317","id":"2253","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"605","target":"655","id":"10350","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"215","target":"364","id":"5990","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"261","target":"608","id":"6768","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"194","target":"379","id":"5622","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"178","target":"718","id":"5345","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"422","target":"478","id":"8934","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"61","target":"721","id":"2899","attributes":{"Weight":"1.0"},"color":"rgb(180,148,148)","size":1.0},{"source":"79","target":"517","id":"3294","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"3","target":"129","id":"1513","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"246","target":"632","id":"6507","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"147","target":"175","id":"4722","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"422","target":"675","id":"8940","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"80","target":"576","id":"3319","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"8","target":"74","id":"1628","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"329","target":"718","id":"7810","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"144","target":"258","id":"4653","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"117","target":"341","id":"4100","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"238","target":"348","id":"6373","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"468","target":"518","id":"9441","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"231","target":"232","id":"6258","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"392","target":"412","id":"8599","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"81","target":"518","id":"3340","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"56","target":"679","id":"2764","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"140","target":"522","id":"4571","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"440","target":"473","id":"9151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"355","target":"357","id":"8130","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"244","target":"534","id":"6468","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"130","target":"309","id":"4355","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"115","target":"190","id":"4047","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"259","target":"383","id":"6716","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"46","target":"461","id":"2533","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"21","target":"704","id":"1953","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"543","target":"594","id":"10026","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"220","target":"387","id":"6082","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"402","target":"410","id":"8719","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"246","target":"297","id":"6498","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"619","target":"652","id":"10410","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"491","target":"646","id":"9624","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"112","target":"445","id":"4001","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"80","target":"308","id":"3313","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"685","target":"707","id":"10635","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"242","target":"265","id":"6432","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"166","target":"430","id":"5105","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"171","target":"244","id":"5191","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"180","target":"428","id":"5376","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"198","target":"635","id":"5707","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"180","target":"601","id":"5382","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"97","target":"418","id":"3691","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"170","target":"674","id":"5187","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"283","target":"377","id":"7118","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"151","target":"227","id":"4806","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"608","target":"645","id":"10363","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"695","target":"704","id":"10657","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"155","target":"629","id":"4900","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"477","target":"518","id":"9533","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"404","target":"437","id":"8741","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"438","target":"730","id":"9137","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"311","target":"679","id":"7553","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"553","target":"639","id":"10074","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"55","target":"147","id":"2725","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"517","target":"687","id":"9833","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"101","target":"132","id":"3764","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"20","target":"62","id":"1910","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"52","target":"92","id":"2647","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"261","target":"358","id":"6755","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"50","target":"110","id":"2602","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"165","target":"191","id":"5080","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"458","target":"515","id":"9340","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"332","target":"593","id":"7848","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"296","target":"435","id":"7324","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"245","target":"591","id":"6491","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"168","target":"461","id":"5138","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"130","target":"181","id":"4350","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"144","target":"646","id":"4671","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"226","target":"711","id":"6193","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"143","target":"301","id":"4633","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"60","target":"236","id":"2843","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"653","target":"698","id":"10564","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"16","target":"292","id":"1831","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"127","target":"159","id":"4285","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"17","target":"169","id":"1847","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"168","target":"240","id":"5133","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"58","target":"517","id":"2810","attributes":{"Weight":"1.0"},"color":"rgb(132,229,115)","size":1.0},{"source":"139","target":"308","id":"4539","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"435","target":"605","id":"9102","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"405","target":"412","id":"8754","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"129","target":"634","id":"4345","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"53","target":"636","id":"2685","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"394","target":"411","id":"8623","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"421","target":"523","id":"8920","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"319","target":"358","id":"7655","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"171","target":"682","id":"5209","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"271","target":"721","id":"6932","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"383","target":"505","id":"8474","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"346","target":"590","id":"8032","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"382","target":"734","id":"8470","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"559","target":"731","id":"10109","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"153","target":"366","id":"4851","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"33","target":"362","id":"2230","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"44","target":"480","id":"2476","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"43","target":"473","id":"2449","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"164","target":"349","id":"5061","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"273","target":"599","id":"6957","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"217","target":"407","id":"6033","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"320","target":"483","id":"7680","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"267","target":"581","id":"6859","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"212","target":"287","id":"5935","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"263","target":"535","id":"6789","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"147","target":"535","id":"4733","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"407","target":"627","id":"8774","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"636","target":"684","id":"10480","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"327","target":"614","id":"7772","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"309","target":"457","id":"7519","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"332","target":"716","id":"7855","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"187","target":"698","id":"5510","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"248","target":"617","id":"6539","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"27","target":"433","id":"2072","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"173","target":"195","id":"5232","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"89","target":"621","id":"3525","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"501","target":"712","id":"9719","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"447","target":"478","id":"9233","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"469","target":"542","id":"9449","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"72","target":"649","id":"3146","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"442","target":"573","id":"9187","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"424","target":"608","id":"8959","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"316","target":"687","id":"7623","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"537","target":"574","id":"9986","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"416","target":"565","id":"8865","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"154","target":"335","id":"4868","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"162","target":"215","id":"5015","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"207","target":"209","id":"5853","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"95","target":"388","id":"3652","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"395","target":"559","id":"8638","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"378","target":"727","id":"8407","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"27","target":"603","id":"2080","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"14","target":"75","id":"1775","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"185","target":"622","id":"5472","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"169","target":"317","id":"5154","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"57","target":"663","id":"2790","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"250","target":"656","id":"6575","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"5","target":"231","id":"1560","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"418","target":"605","id":"8887","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"356","target":"402","id":"8140","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"155","target":"164","id":"4886","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"248","target":"563","id":"6537","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"514","target":"542","id":"9803","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"148","target":"620","id":"4755","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"221","target":"642","id":"6112","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"132","target":"320","id":"4405","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"83","target":"488","id":"3381","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"395","target":"414","id":"8637","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"184","target":"635","id":"5450","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"236","target":"710","id":"6353","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"331","target":"376","id":"7830","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"330","target":"658","id":"7828","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"601","target":"652","id":"10329","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"523","target":"604","id":"9880","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"36","target":"389","id":"2297","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"145","target":"442","id":"4688","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"412","target":"414","id":"8829","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"288","target":"663","id":"7217","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"525","target":"582","id":"9897","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"83","target":"579","id":"3383","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"27","target":"335","id":"2068","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"317","target":"318","id":"7627","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"24","target":"733","id":"2016","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"251","target":"254","id":"6581","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"85","target":"436","id":"3421","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"281","target":"689","id":"7089","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"352","target":"463","id":"8107","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"157","target":"653","id":"4942","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"16","target":"25","id":"1825","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"151","target":"431","id":"4817","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"2","target":"369","id":"1502","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"409","target":"679","id":"8808","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"69","target":"735","id":"3083","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"433","target":"475","id":"9071","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"58","target":"447","id":"2804","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"60","target":"710","id":"2863","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"189","target":"578","id":"5545","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"307","target":"459","id":"7487","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"262","target":"344","id":"6773","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"427","target":"700","id":"9001","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"336","target":"727","id":"7910","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"20","target":"406","id":"1924","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"244","target":"630","id":"6472","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"288","target":"472","id":"7202","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"125","target":"452","id":"4258","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"208","target":"470","id":"5875","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"67","target":"635","id":"3026","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"473","target":"533","id":"9493","attributes":{"Weight":"1.0"},"color":"rgb(148,99,229)","size":1.0},{"source":"132","target":"262","id":"4404","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"2","target":"10","id":"1486","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"94","target":"149","id":"3619","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"451","target":"555","id":"9269","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"140","target":"612","id":"4575","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"491","target":"651","id":"9627","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"311","target":"525","id":"7544","attributes":{"Weight":"1.0"},"color":"rgb(67,196,180)","size":1.0},{"source":"250","target":"558","id":"6573","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"466","target":"725","id":"9425","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"245","target":"349","id":"6480","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"486","target":"634","id":"9588","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"152","target":"506","id":"4839","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"185","target":"430","id":"5464","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"255","target":"656","id":"6658","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"231","target":"668","id":"6276","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"181","target":"457","id":"5395","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"104","target":"564","id":"3838","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"16","target":"243","id":"1830","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"46","target":"622","id":"2539","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"363","target":"403","id":"8204","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"241","target":"723","id":"6431","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"49","target":"276","id":"2588","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"397","target":"677","id":"8661","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"22","target":"733","id":"1977","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"70","target":"214","id":"3087","attributes":{"Weight":"1.0"},"color":"rgb(148,180,148)","size":1.0},{"source":"69","target":"633","id":"3072","attributes":{"Weight":"1.0"},"color":"rgb(99,164,148)","size":1.0},{"source":"183","target":"637","id":"5432","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"604","target":"706","id":"10347","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"407","target":"626","id":"8773","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"269","target":"391","id":"6888","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"312","target":"697","id":"7566","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"122","target":"475","id":"4199","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"78","target":"315","id":"3267","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"177","target":"679","id":"5324","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"86","target":"618","id":"3449","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"667","target":"707","id":"10605","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"43","target":"199","id":"2440","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"426","target":"700","id":"8991","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"101","target":"457","id":"3779","attributes":{"Weight":"1.0"},"color":"rgb(148,99,148)","size":1.0},{"source":"53","target":"204","id":"2675","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"211","target":"287","id":"5916","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"106","target":"219","id":"3860","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"292","target":"293","id":"7272","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"56","target":"460","id":"2755","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"8","target":"606","id":"1649","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"87","target":"409","id":"3460","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"263","target":"698","id":"6796","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"145","target":"687","id":"4700","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"289","target":"676","id":"7233","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"118","target":"272","id":"4115","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"134","target":"365","id":"4440","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"408","target":"625","id":"8782","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"23","target":"25","id":"1979","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"151","target":"547","id":"4822","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"218","target":"261","id":"6045","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"270","target":"635","id":"6911","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"398","target":"440","id":"8666","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"377","target":"395","id":"8382","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"689","target":"730","id":"10642","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"471","target":"620","id":"9473","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"34","target":"267","id":"2249","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"178","target":"609","id":"5342","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"185","target":"711","id":"5476","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"74","target":"386","id":"3176","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"39","target":"359","id":"2366","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"238","target":"627","id":"6383","attributes":{"Weight":"1.0"},"color":"rgb(67,180,180)","size":1.0},{"source":"161","target":"657","id":"5011","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"202","target":"358","id":"5772","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"511","target":"703","id":"9795","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"31","target":"181","id":"2172","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"217","target":"662","id":"6041","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"534","target":"682","id":"9972","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"10","target":"630","id":"1701","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"87","target":"589","id":"3474","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"622","target":"728","id":"10425","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"160","target":"639","id":"4994","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"11","target":"43","id":"1705","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"480","target":"614","id":"9555","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"113","target":"627","id":"4018","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"250","target":"254","id":"6561","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"56","target":"654","id":"2761","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"669","target":"698","id":"10608","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"205","target":"274","id":"5822","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"290","target":"413","id":"7250","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"456","target":"718","id":"9329","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"269","target":"394","id":"6891","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"616","target":"668","id":"10400","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"173","target":"296","id":"5236","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"384","target":"654","id":"8493","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"448","target":"563","id":"9243","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"563","target":"727","id":"10129","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"98","target":"426","id":"3713","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"486","target":"711","id":"9589","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"557","target":"694","id":"10099","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"219","target":"309","id":"6069","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"246","target":"322","id":"6499","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"73","target":"312","id":"3156","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"147","target":"432","id":"4728","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"605","target":"722","id":"10351","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"386","target":"408","id":"8517","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"349","target":"429","id":"8066","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"364","target":"438","id":"8216","attributes":{"Weight":"1.0"},"color":"rgb(115,164,148)","size":1.0},{"source":"339","target":"602","id":"7944","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"340","target":"347","id":"7954","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"219","target":"234","id":"6067","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"208","target":"468","id":"5874","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"303","target":"433","id":"7436","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"116","target":"606","id":"4088","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"407","target":"488","id":"8770","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"223","target":"230","id":"6130","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"64","target":"207","id":"2952","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"341","target":"476","id":"7968","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"109","target":"360","id":"3917","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"148","target":"479","id":"4751","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"225","target":"450","id":"6173","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"207","target":"512","id":"5867","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"376","target":"436","id":"8366","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"111","target":"429","id":"3975","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"31","target":"366","id":"2177","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"261","target":"645","id":"6770","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"207","target":"445","id":"5864","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"691","target":"706","id":"10650","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"20","target":"365","id":"1922","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"146","target":"533","id":"4715","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"436","target":"516","id":"9108","attributes":{"Weight":"1.0"},"color":"rgb(180,148,132)","size":1.0},{"source":"100","target":"304","id":"3752","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"233","target":"529","id":"6305","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"235","target":"499","id":"6337","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"110","target":"371","id":"3944","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"38","target":"165","id":"2332","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"351","target":"551","id":"8098","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"94","target":"534","id":"3631","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"390","target":"413","id":"8571","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"69","target":"729","id":"3080","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"197","target":"549","id":"5692","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"116","target":"139","id":"4066","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"288","target":"311","id":"7196","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"263","target":"514","id":"6788","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"281","target":"651","id":"7088","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"33","target":"349","id":"2227","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"50","target":"111","id":"2603","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"309","target":"645","id":"7522","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"310","target":"471","id":"7530","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"364","target":"610","id":"8222","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"10","target":"234","id":"1692","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"442","target":"455","id":"9182","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"105","target":"369","id":"3850","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"33","target":"111","id":"2210","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"34","target":"295","id":"2252","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"425","target":"490","id":"8967","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"125","target":"249","id":"4250","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"8","target":"562","id":"1647","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"563","target":"712","id":"10128","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"235","target":"548","id":"6338","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"26","target":"622","id":"2055","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"283","target":"395","id":"7124","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"251","target":"556","id":"6591","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"483","target":"484","id":"9569","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"398","target":"726","id":"8681","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"621","target":"638","id":"10416","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"358","target":"645","id":"8169","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"330","target":"412","id":"7821","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"218","target":"722","id":"6066","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"229","target":"510","id":"6242","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"249","target":"252","id":"6542","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"235","target":"368","id":"6334","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"422","target":"482","id":"8936","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"381","target":"571","id":"8442","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"623","target":"644","id":"10426","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"159","target":"226","id":"4961","attributes":{"Weight":"1.0"},"color":"rgb(196,132,148)","size":1.0},{"source":"86","target":"571","id":"3445","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"417","target":"496","id":"8869","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"394","target":"412","id":"8624","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"437","target":"670","id":"9122","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"391","target":"392","id":"8578","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"516","target":"696","id":"9821","attributes":{"Weight":"1.0"},"color":"rgb(180,148,83)","size":1.0},{"source":"27","target":"303","id":"2066","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"237","target":"482","id":"6364","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"74","target":"732","id":"3193","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"676","target":"717","id":"10620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"3","target":"166","id":"1515","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"131","target":"619","id":"4390","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"491","target":"724","id":"9629","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"454","target":"573","id":"9299","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"310","target":"313","id":"7525","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"11","target":"711","id":"1728","attributes":{"Weight":"1.0"},"color":"rgb(148,213,132)","size":1.0},{"source":"239","target":"512","id":"6397","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"588","target":"712","id":"10277","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"353","target":"548","id":"8120","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"180","target":"619","id":"5384","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"475","target":"517","id":"9514","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"616","target":"681","id":"10401","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"224","target":"436","id":"6152","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"480","target":"498","id":"9550","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"202","target":"608","id":"5782","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"279","target":"699","id":"7053","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"79","target":"442","id":"3288","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"434","target":"603","id":"9091","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"245","target":"529","id":"6488","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"99","target":"457","id":"3739","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"79","target":"327","id":"3283","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"130","target":"554","id":"4365","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"9","target":"489","id":"1676","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"150","target":"460","id":"4789","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"522","target":"527","id":"9864","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"131","target":"703","id":"4394","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"45","target":"482","id":"2511","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"227","target":"547","id":"6205","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"85","target":"376","id":"3419","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"525","target":"605","id":"9899","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"88","target":"693","id":"3509","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"276","target":"318","id":"6994","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"254","target":"558","id":"6642","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"602","target":"693","id":"10338","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"276","target":"581","id":"7002","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"425","target":"604","id":"8976","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"293","target":"733","id":"7292","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"319","target":"645","id":"7672","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"12","target":"487","id":"1745","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"613","target":"673","id":"10391","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"626","target":"627","id":"10440","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"380","target":"598","id":"8425","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"198","target":"302","id":"5700","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"313","target":"680","id":"7579","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"327","target":"498","id":"7767","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"15","target":"218","id":"1805","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"42","target":"216","id":"2419","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"400","target":"558","id":"8701","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"232","target":"308","id":"6283","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"129","target":"461","id":"4340","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"386","target":"677","id":"8529","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"119","target":"550","id":"4144","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"281","target":"730","id":"7093","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"493","target":"519","id":"9644","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"277","target":"601","id":"7016","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"196","target":"288","id":"5654","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"470","target":"686","id":"9466","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"277","target":"286","id":"7004","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"103","target":"510","id":"3818","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"378","target":"712","id":"8406","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"12","target":"451","id":"1743","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"115","target":"500","id":"4056","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"288","target":"594","id":"7215","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"573","target":"614","id":"10188","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"32","target":"251","id":"2188","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"193","target":"651","id":"5610","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"280","target":"600","id":"7069","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"141","target":"291","id":"4590","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"476","target":"502","id":"9525","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"383","target":"500","id":"8473","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"358","target":"608","id":"8167","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"659","target":"682","id":"10582","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"280","target":"469","id":"7063","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"7","target":"497","id":"1613","attributes":{"Weight":"1.0"},"color":"rgb(148,229,67)","size":1.0},{"source":"22","target":"732","id":"1976","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"224","target":"462","id":"6154","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"132","target":"361","id":"4408","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"322","target":"639","id":"7702","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"83","target":"146","id":"3372","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"152","target":"206","id":"4830","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"170","target":"400","id":"5176","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"449","target":"676","id":"9255","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"41","target":"284","id":"2400","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"78","target":"598","id":"3274","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"495","target":"599","id":"9666","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"147","target":"653","id":"4737","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"191","target":"711","id":"5581","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"214","target":"445","id":"5980","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"135","target":"331","id":"4460","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"282","target":"651","id":"7107","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"6","target":"459","id":"1590","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"256","target":"510","id":"6673","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"167","target":"461","id":"5123","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"195","target":"525","id":"5645","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"200","target":"574","id":"5740","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"511","target":"652","id":"9794","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"57","target":"589","id":"2786","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"358","target":"487","id":"8164","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"133","target":"714","id":"4433","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"80","target":"258","id":"3311","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"117","target":"513","id":"4106","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"26","target":"46","id":"2036","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"69","target":"465","id":"3069","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"455","target":"535","id":"9310","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"601","target":"618","id":"10327","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"618","target":"619","id":"10406","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"115","target":"259","id":"4050","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"202","target":"555","id":"5780","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"144","target":"238","id":"4652","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"174","target":"540","id":"5254","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"104","target":"592","id":"3840","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"491","target":"725","id":"9630","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"206","target":"388","id":"5843","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"244","target":"714","id":"6476","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"87","target":"622","id":"3477","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"25","target":"174","id":"2021","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"200","target":"379","id":"5734","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"437","target":"590","id":"9119","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"88","target":"218","id":"3485","attributes":{"Weight":"1.0"},"color":"rgb(115,196,148)","size":1.0},{"source":"3","target":"359","id":"1523","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"421","target":"425","id":"8914","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"20","target":"126","id":"1914","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"159","target":"297","id":"4964","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"79","target":"82","id":"3277","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"241","target":"665","id":"6426","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"49","target":"256","id":"2585","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"405","target":"414","id":"8756","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"76","target":"421","id":"3220","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"53","target":"697","id":"2689","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"108","target":"205","id":"3891","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"51","target":"732","id":"2644","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"118","target":"628","id":"4126","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"222","target":"552","id":"6127","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"521","target":"603","id":"9859","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"282","target":"382","id":"7098","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"40","target":"584","id":"2390","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"242","target":"476","id":"6438","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"273","target":"666","id":"6958","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"336","target":"712","id":"7909","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"654","target":"677","id":"10567","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"444","target":"698","id":"9218","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"330","target":"559","id":"7824","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"120","target":"293","id":"4156","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"299","target":"444","id":"7374","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"84","target":"278","id":"3394","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"75","target":"500","id":"3204","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"184","target":"198","id":"5440","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"488","target":"705","id":"9602","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"283","target":"560","id":"7132","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"573","target":"623","id":"10189","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"23","target":"292","id":"1985","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"83","target":"627","id":"3385","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"154","target":"643","id":"4880","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"39","target":"226","id":"2363","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"400","target":"674","id":"8704","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"111","target":"397","id":"3973","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"207","target":"262","id":"5858","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"126","target":"683","id":"4284","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"334","target":"368","id":"7872","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"323","target":"436","id":"7710","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"286","target":"428","id":"7168","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"93","target":"200","id":"3599","attributes":{"Weight":"1.0"},"color":"rgb(148,196,83)","size":1.0},{"source":"516","target":"684","id":"9819","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"209","target":"344","id":"5891","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"255","target":"696","id":"6662","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"378","target":"550","id":"8400","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"65","target":"199","id":"2977","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"511","target":"619","id":"9793","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"165","target":"607","id":"5091","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"280","target":"431","id":"7060","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"351","target":"372","id":"8090","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"20","target":"544","id":"1929","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"1","target":"435","id":"1474","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"364","target":"723","id":"8230","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"216","target":"511","id":"6015","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"103","target":"276","id":"3810","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"417","target":"507","id":"8870","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"250","target":"251","id":"6559","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"64","target":"112","id":"2947","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"41","target":"598","id":"2409","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"236","target":"429","id":"6347","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"294","target":"571","id":"7302","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"489","target":"499","id":"9603","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"105","target":"457","id":"3852","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"176","target":"549","id":"5295","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"235","target":"595","id":"6340","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"165","target":"166","id":"5076","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"385","target":"623","id":"8512","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"150","target":"349","id":"4785","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"345","target":"350","id":"8012","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"338","target":"682","id":"7936","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"17","target":"592","id":"1864","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"49","target":"592","id":"2600","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"52","target":"351","id":"2654","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"374","target":"454","id":"8336","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"222","target":"429","id":"6123","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"301","target":"703","id":"7416","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"32","target":"423","id":"2197","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"233","target":"323","id":"6298","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"630","target":"672","id":"10454","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"363","target":"706","id":"8215","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"498","target":"543","id":"9690","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"401","target":"696","id":"8718","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"141","target":"516","id":"4600","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"101","target":"239","id":"3771","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"314","target":"682","id":"7595","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"67","target":"184","id":"3015","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"61","target":"244","id":"2872","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"393","target":"394","id":"8607","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"71","target":"107","id":"3107","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"309","target":"672","id":"7523","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"419","target":"489","id":"8897","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"33","target":"64","id":"2208","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"154","target":"629","id":"4878","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"193","target":"729","id":"5614","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"337","target":"396","id":"7913","attributes":{"Weight":"1.0"},"color":"rgb(132,99,229)","size":1.0},{"source":"708","target":"733","id":"10671","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"42","target":"593","id":"2430","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"395","target":"411","id":"8634","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"207","target":"214","id":"5854","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"518","target":"611","id":"9835","attributes":{"Weight":"1.0"},"color":"rgb(148,164,115)","size":1.0},{"source":"7","target":"665","id":"1620","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"249","target":"478","id":"6551","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"257","target":"639","id":"6688","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"281","target":"285","id":"7077","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"438","target":"465","id":"9125","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"126","target":"265","id":"4272","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"240","target":"430","id":"6400","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"156","target":"341","id":"4911","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"116","target":"144","id":"4067","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"29","target":"459","id":"2132","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"347","target":"437","id":"8039","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"513","target":"681","id":"9799","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"406","target":"513","id":"8764","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"188","target":"716","id":"5527","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"494","target":"582","id":"9657","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"469","target":"669","id":"9455","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"263","target":"624","id":"6792","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"491","target":"735","id":"9634","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"144","target":"415","id":"4660","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"119","target":"501","id":"4142","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"140","target":"327","id":"4562","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"154","target":"227","id":"4863","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"396","target":"714","id":"8654","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"416","target":"482","id":"8863","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"8","target":"386","id":"1640","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"270","target":"684","id":"6914","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"436","target":"699","id":"9115","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"153","target":"304","id":"4849","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"245","target":"371","id":"6482","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"328","target":"464","id":"7785","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"64","target":"132","id":"2950","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"277","target":"716","id":"7022","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"109","target":"206","id":"3913","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"208","target":"479","id":"5878","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"321","target":"337","id":"7684","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"156","target":"683","id":"4921","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"139","target":"144","id":"4533","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"383","target":"403","id":"8472","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"226","target":"302","id":"6183","attributes":{"Weight":"1.0"},"color":"rgb(180,213,67)","size":1.0},{"source":"680","target":"686","id":"10629","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"398","target":"671","id":"8678","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"139","target":"713","id":"4555","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"70","target":"211","id":"3085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"363","target":"417","id":"8205","attributes":{"Weight":"1.0"},"color":"rgb(132,148,164)","size":1.0},{"source":"403","target":"702","id":"8738","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"372","target":"456","id":"8310","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"124","target":"239","id":"4235","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"471","target":"541","id":"9471","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"154","target":"308","id":"4866","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"22","target":"640","id":"1971","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"298","target":"541","id":"7365","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"249","target":"661","id":"6557","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"117","target":"681","id":"4109","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"472","target":"562","id":"9481","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"18","target":"437","id":"1878","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"286","target":"332","id":"7166","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"306","target":"570","id":"7479","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"214","target":"512","id":"5983","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"33","target":"489","id":"2237","attributes":{"Weight":"1.0"},"color":"rgb(229,99,99)","size":1.0},{"source":"131","target":"428","id":"4379","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"273","target":"570","id":"6954","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"3","target":"352","id":"1522","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"371","target":"720","id":"8307","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"359","target":"463","id":"8174","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"27","target":"232","id":"2063","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"83","target":"705","id":"3387","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"451","target":"642","id":"9272","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"596","target":"690","id":"10310","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"64","target":"362","id":"2965","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"444","target":"469","id":"9210","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"246","target":"398","id":"6500","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"160","target":"715","id":"4997","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"175","target":"511","id":"5273","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"217","target":"626","id":"6039","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"250","target":"545","id":"6570","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"432","target":"535","id":"9057","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"729","target":"735","id":"10687","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"491","target":"689","id":"9628","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"121","target":"359","id":"4182","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"242","target":"326","id":"6433","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"288","target":"425","id":"7200","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"89","target":"246","id":"3517","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"145","target":"577","id":"4696","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"259","target":"597","id":"6724","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"55","target":"142","id":"2723","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"20","target":"530","id":"1928","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"192","target":"598","id":"5593","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"150","target":"629","id":"4797","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"210","target":"579","id":"5907","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"526","target":"655","id":"9908","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"28","target":"71","id":"2089","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"184","target":"633","id":"5449","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"324","target":"334","id":"7720","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"184","target":"538","id":"5448","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"390","target":"411","id":"8569","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"308","target":"462","id":"7503","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"83","target":"278","id":"3376","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"629","target":"679","id":"10451","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"402","target":"558","id":"8724","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"384","target":"386","id":"8483","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"49","target":"267","id":"2586","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"467","target":"599","id":"9434","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"350","target":"673","id":"8086","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"105","target":"701","id":"3856","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"322","target":"638","id":"7701","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"34","target":"104","id":"2245","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"161","target":"638","id":"5009","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"255","target":"356","id":"6648","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"2","target":"304","id":"1498","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"187","target":"444","id":"5500","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"54","target":"600","id":"2716","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"138","target":"590","id":"4528","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"134","target":"242","id":"4436","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"30","target":"201","id":"2148","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"147","target":"301","id":"4727","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"70","target":"487","id":"3099","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"24","target":"568","id":"2009","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"76","target":"565","id":"3232","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"569","target":"644","id":"10160","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"69","target":"281","id":"3059","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"108","target":"173","id":"3889","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"647","target":"725","id":"10534","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"178","target":"492","id":"5338","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"496","target":"682","id":"9676","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"21","target":"22","id":"1932","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"48","target":"439","id":"2570","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"36","target":"467","id":"2298","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"124","target":"207","id":"4230","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"571","target":"652","id":"10175","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"37","target":"662","id":"2325","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"28","target":"579","id":"2116","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"338","target":"496","id":"7928","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"48","target":"695","id":"2575","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"110","target":"155","id":"3933","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"177","target":"422","id":"5312","attributes":{"Weight":"1.0"},"color":"rgb(132,229,99)","size":1.0},{"source":"579","target":"705","id":"10240","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"181","target":"234","id":"5389","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"291","target":"416","id":"7259","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"302","target":"637","id":"7425","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"205","target":"493","id":"5826","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"333","target":"578","id":"7860","attributes":{"Weight":"1.0"},"color":"rgb(196,196,67)","size":1.0},{"source":"654","target":"685","id":"10569","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"280","target":"323","id":"7057","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"271","target":"364","id":"6919","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"466","target":"650","id":"9421","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"449","target":"481","id":"9250","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"363","target":"587","id":"8210","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"129","target":"165","id":"4327","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"94","target":"496","id":"3629","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"307","target":"313","id":"7485","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"87","target":"196","id":"3456","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"522","target":"654","id":"9869","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"374","target":"480","id":"8338","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"81","target":"541","id":"3341","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"303","target":"575","id":"7441","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"340","target":"590","id":"7960","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"231","target":"603","id":"6273","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"269","target":"413","id":"6897","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"436","target":"696","id":"9114","attributes":{"Weight":"1.0"},"color":"rgb(229,67,148)","size":1.0},{"source":"578","target":"655","id":"10228","attributes":{"Weight":"1.0"},"color":"rgb(115,196,148)","size":1.0},{"source":"309","target":"701","id":"7524","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"363","target":"500","id":"8206","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"516","target":"635","id":"9816","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"475","target":"498","id":"9513","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"269","target":"561","id":"6901","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"500","target":"649","id":"9710","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"245","target":"429","id":"6486","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"394","target":"560","id":"8628","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"195","target":"582","id":"5647","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"492","target":"718","id":"9642","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"150","target":"316","id":"4783","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"554","target":"701","id":"10081","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"357","target":"581","id":"8157","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"638","target":"657","id":"10489","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"523","target":"728","id":"9884","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"130","target":"369","id":"4357","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"189","target":"333","id":"5536","attributes":{"Weight":"1.0"},"color":"rgb(229,148,67)","size":1.0},{"source":"321","target":"407","id":"7686","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"142","target":"300","id":"4611","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"17","target":"229","id":"1848","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"490","target":"622","id":"9616","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"431","target":"567","id":"9045","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"613","target":"659","id":"10390","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"503","target":"664","id":"9730","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"204","target":"497","id":"5809","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"532","target":"667","id":"9954","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"198","target":"697","id":"5713","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"360","target":"588","id":"8189","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"254","target":"656","id":"6643","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"492","target":"536","id":"9636","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"362","target":"512","id":"8201","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"75","target":"587","id":"3208","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"481","target":"622","id":"9563","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"290","target":"377","id":"7239","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"105","target":"304","id":"3847","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"179","target":"547","id":"5358","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"314","target":"606","id":"7591","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"374","target":"498","id":"8339","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"102","target":"429","id":"3796","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"307","target":"477","id":"7491","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"19","target":"422","id":"1901","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"281","target":"441","id":"7080","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"560","target":"658","id":"10111","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"511","target":"618","id":"9792","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"244","target":"566","id":"6469","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"287","target":"358","id":"7181","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"177","target":"693","id":"5326","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"299","target":"535","id":"7378","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"348","target":"713","id":"8060","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"407","target":"705","id":"8776","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"293","target":"568","id":"7285","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"572","target":"643","id":"10181","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"19","target":"249","id":"1896","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"53","target":"538","id":"2682","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"135","target":"431","id":"4466","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"534","target":"714","id":"9973","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"573","target":"629","id":"10190","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"213","target":"326","id":"5958","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"456","target":"464","id":"9321","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"399","target":"561","id":"8690","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"85","target":"567","id":"3426","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"679","target":"707","id":"10628","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"18","target":"118","id":"1867","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"294","target":"381","id":"7297","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"385","target":"648","id":"8513","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"280","target":"717","id":"7074","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"276","target":"317","id":"6993","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"11","target":"670","id":"1726","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"491","target":"734","id":"9633","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"463","target":"607","id":"9393","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"84","target":"210","id":"3392","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"61","target":"613","id":"2892","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"288","target":"543","id":"7210","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"88","target":"453","id":"3497","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"135","target":"490","id":"4470","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"127","target":"671","id":"4301","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"177","target":"654","id":"5321","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"35","target":"273","id":"2272","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"368","target":"499","id":"8268","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"245","target":"319","id":"6479","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"365","target":"406","id":"8233","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"188","target":"277","id":"5512","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"145","target":"431","id":"4686","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"369","target":"652","id":"8282","attributes":{"Weight":"1.0"},"color":"rgb(148,115,148)","size":1.0},{"source":"142","target":"653","id":"4622","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"479","target":"620","id":"9546","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"67","target":"183","id":"3014","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"271","target":"504","id":"6921","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"602","target":"661","id":"10334","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"417","target":"714","id":"8878","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"21","target":"289","id":"1942","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"201","target":"353","id":"5756","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"579","target":"662","id":"10239","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"177","target":"386","id":"5310","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"298","target":"313","id":"7355","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"81","target":"680","id":"3343","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"218","target":"582","id":"6059","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"80","target":"232","id":"3309","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"154","target":"183","id":"4861","attributes":{"Weight":"1.0"},"color":"rgb(180,148,132)","size":1.0},{"source":"279","target":"422","id":"7040","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"438","target":"491","id":"9127","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"379","target":"706","id":"8419","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"109","target":"727","id":"3928","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"525","target":"585","id":"9898","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"64","target":"445","id":"2968","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"221","target":"422","id":"6101","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"257","target":"485","id":"6683","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"474","target":"638","id":"9506","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"368","target":"552","id":"8271","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"242","target":"718","id":"6446","attributes":{"Weight":"1.0"},"color":"rgb(100,148,148)","size":1.0},{"source":"154","target":"164","id":"4860","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"58","target":"482","id":"2809","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"209","target":"361","id":"5893","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"59","target":"622","id":"2830","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"368","target":"643","id":"8274","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"93","target":"216","id":"3600","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"84","target":"488","id":"3399","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"306","target":"598","id":"7481","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"572","target":"591","id":"10179","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"490","target":"728","id":"9621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"53","target":"184","id":"2673","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"525","target":"631","id":"9900","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"149","target":"496","id":"4767","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"70","target":"450","id":"3096","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"135","target":"720","id":"4480","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"222","target":"489","id":"6124","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"469","target":"624","id":"9452","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"129","target":"685","id":"4347","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"6","target":"313","id":"1588","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"257","target":"657","id":"6689","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"522","target":"567","id":"9866","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"327","target":"577","id":"7770","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"113","target":"488","id":"4014","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"318","target":"446","id":"7640","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"15","target":"585","id":"1816","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"32","target":"694","id":"2205","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"58","target":"481","id":"2808","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"203","target":"442","id":"5790","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"258","target":"303","id":"6695","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"568","target":"640","id":"10148","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"529","target":"717","id":"9942","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"160","target":"246","id":"4981","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"333","target":"601","id":"7863","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"460","target":"685","id":"9371","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"147","target":"299","id":"4725","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"293","target":"640","id":"7286","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"298","target":"620","id":"7366","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"235","target":"552","id":"6339","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"291","target":"452","id":"7263","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"643","target":"644","id":"10514","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"503","target":"520","id":"9726","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"250","target":"401","id":"6565","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"11","target":"628","id":"1724","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"190","target":"379","id":"5556","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"99","target":"370","id":"3738","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"36","target":"137","id":"2289","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"45","target":"64","id":"2494","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"190","target":"259","id":"5553","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"366","target":"369","id":"8241","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"149","target":"396","id":"4765","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"468","target":"471","id":"9437","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"213","target":"502","id":"5964","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"265","target":"375","id":"6821","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"459","target":"468","id":"9346","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"273","target":"584","id":"6955","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"480","target":"573","id":"9552","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"40","target":"666","id":"2393","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"292","target":"640","id":"7276","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"63","target":"726","id":"2945","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"309","target":"366","id":"7516","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"445","target":"692","id":"9223","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"516","target":"637","id":"9818","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"151","target":"323","id":"4813","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"97","target":"526","id":"3698","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"28","target":"349","id":"2105","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"64","target":"252","id":"2959","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"418","target":"525","id":"8883","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"145","target":"490","id":"4692","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"86","target":"216","id":"3436","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"315","target":"599","id":"7604","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"18","target":"709","id":"1885","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"216","target":"333","id":"6010","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"224","target":"308","id":"6146","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"260","target":"422","id":"6736","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"651","target":"689","id":"10553","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"391","target":"658","id":"8591","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"190","target":"597","id":"5564","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"471","target":"550","id":"9472","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"330","target":"731","id":"7829","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"194","target":"706","id":"5634","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"58","target":"449","id":"2805","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"301","target":"624","id":"7412","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"116","target":"646","id":"4090","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"450","target":"642","id":"9264","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"363","target":"691","id":"8213","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"78","target":"599","id":"3275","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"140","target":"386","id":"4565","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"172","target":"679","id":"5228","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"384","target":"602","id":"8490","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"86","target":"528","id":"3444","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"77","target":"686","id":"3260","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"375","target":"454","id":"8352","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"37","target":"407","id":"2317","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"413","target":"561","id":"8838","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"219","target":"630","id":"6075","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"80","target":"231","id":"3308","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"239","target":"354","id":"6390","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"508","target":"589","id":"9772","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"6","target":"479","id":"1595","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"29","target":"541","id":"2140","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"310","target":"541","id":"7535","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"99","target":"304","id":"3734","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"538","target":"736","id":"10001","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"453","target":"693","id":"9291","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"188","target":"511","id":"5517","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"79","target":"678","id":"3301","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"408","target":"667","id":"8784","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"247","target":"666","id":"6527","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"82","target":"122","id":"3345","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"128","target":"727","id":"4324","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"238","target":"415","id":"6374","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"217","target":"579","id":"6037","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"543","target":"573","id":"10024","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"326","target":"476","id":"7751","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"578","target":"661","id":"10229","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"111","target":"316","id":"3967","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"445","target":"723","id":"9224","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"197","target":"609","id":"5694","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"641","target":"732","id":"10509","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"131","target":"593","id":"4387","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"86","target":"601","id":"3448","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"145","target":"547","id":"4694","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"329","target":"609","id":"7807","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"272","target":"590","id":"6942","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"101","target":"484","id":"3781","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"52","target":"549","id":"2663","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"640","target":"704","id":"10501","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"571","target":"593","id":"10169","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"59","target":"237","id":"2818","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"455","target":"653","id":"9315","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"85","target":"699","id":"3429","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"449","target":"622","id":"9253","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"646","target":"650","id":"10520","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"381","target":"589","id":"8443","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"234","target":"734","id":"6328","attributes":{"Weight":"1.0"},"color":"rgb(67,83,229)","size":1.0},{"source":"540","target":"695","id":"10010","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"549","target":"551","id":"10055","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"537","target":"636","id":"9989","attributes":{"Weight":"1.0"},"color":"rgb(99,229,83)","size":1.0},{"source":"398","target":"583","id":"8670","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"637","target":"697","id":"10486","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"527","target":"667","id":"9916","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"440","target":"565","id":"9157","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"238","target":"717","id":"6386","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"294","target":"373","id":"7296","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"389","target":"495","id":"8556","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"263","target":"653","id":"6793","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"84","target":"182","id":"3391","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"134","target":"156","id":"4434","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"33","target":"320","id":"2225","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"543","target":"565","id":"10023","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"238","target":"434","id":"6375","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"66","target":"247","id":"2996","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"474","target":"671","id":"9509","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"232","target":"258","id":"6281","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"29","target":"81","id":"2124","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"102","target":"120","id":"3783","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"302","target":"697","id":"7428","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"158","target":"243","id":"4946","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"21","target":"174","id":"1940","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"147","target":"300","id":"4726","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"183","target":"642","id":"5433","attributes":{"Weight":"1.0"},"color":"rgb(99,229,148)","size":1.0},{"source":"58","target":"537","id":"2811","attributes":{"Weight":"1.0"},"color":"rgb(132,229,83)","size":1.0},{"source":"90","target":"117","id":"3534","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"114","target":"649","id":"4041","attributes":{"Weight":"1.0"},"color":"rgb(115,148,164)","size":1.0},{"source":"303","target":"348","id":"7433","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"215","target":"693","id":"6003","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"704","target":"708","id":"10666","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"631","target":"722","id":"10457","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"59","target":"123","id":"2815","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"372","target":"464","id":"8311","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"135","target":"529","id":"4471","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"25","target":"641","id":"2029","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"131","target":"294","id":"4375","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"81","target":"686","id":"3344","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"188","target":"286","id":"5513","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"127","target":"690","id":"4302","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"152","target":"336","id":"4832","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"91","target":"476","id":"3566","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"7","target":"260","id":"1606","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"351","target":"700","id":"8101","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"598","target":"666","id":"10320","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"260","target":"364","id":"6734","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"133","target":"350","id":"4421","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"10","target":"219","id":"1691","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"307","target":"458","id":"7486","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"532","target":"625","id":"9952","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"558","target":"696","id":"10105","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"232","target":"575","id":"6288","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"427","target":"464","id":"8994","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"371","target":"644","id":"8303","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"418","target":"582","id":"8885","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"426","target":"536","id":"8986","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"382","target":"730","id":"8469","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"130","target":"670","id":"4367","attributes":{"Weight":"1.0"},"color":"rgb(67,148,213)","size":1.0},{"source":"229","target":"276","id":"6234","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"26","target":"481","id":"2052","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"311","target":"460","id":"7542","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"200","target":"691","id":"5746","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"576","target":"583","id":"10210","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"240","target":"634","id":"6410","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"118","target":"590","id":"4124","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"151","target":"717","id":"4828","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"343","target":"617","id":"8002","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"39","target":"167","id":"2359","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"118","target":"340","id":"4116","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"257","target":"692","id":"6691","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"299","target":"432","id":"7373","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"197","target":"426","id":"5686","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"88","target":"690","id":"3507","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"139","target":"603","id":"4550","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"302","target":"538","id":"7421","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"11","target":"447","id":"1720","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"158","target":"293","id":"4948","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"514","target":"539","id":"9802","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"621","target":"657","id":"10418","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"258","target":"576","id":"6705","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"404","target":"628","id":"8748","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"99","target":"219","id":"3731","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"569","target":"720","id":"10162","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"29","target":"148","id":"2125","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"435","target":"722","id":"9105","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"138","target":"272","id":"4518","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"91","target":"213","id":"3558","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"383","target":"702","id":"8481","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"183","target":"335","id":"5422","attributes":{"Weight":"1.0"},"color":"rgb(99,229,99)","size":1.0},{"source":"466","target":"491","id":"9418","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"377","target":"399","id":"8383","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"116","target":"583","id":"4086","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"498","target":"623","id":"9695","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"31","target":"630","id":"2182","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"183","target":"312","id":"5421","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"110","target":"720","id":"3958","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"163","target":"550","id":"5050","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"253","target":"660","id":"6628","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"1","target":"585","id":"1481","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"116","target":"238","id":"4071","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"298","target":"470","id":"7359","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"224","target":"376","id":"6150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"187","target":"432","id":"5499","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"30","target":"235","id":"2151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"421","target":"543","id":"8921","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"7","target":"215","id":"1604","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"200","target":"383","id":"5735","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"521","target":"663","id":"9861","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"164","target":"316","id":"5060","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"189","target":"214","id":"5530","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"79","target":"573","id":"3295","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"132","target":"239","id":"4403","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"117","target":"683","id":"4110","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"152","target":"360","id":"4834","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"101","target":"214","id":"3768","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"105","target":"181","id":"3844","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"374","target":"517","id":"8340","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"306","target":"389","id":"7476","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"501","target":"550","id":"9715","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"348","target":"398","id":"8047","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"621","target":"671","id":"10419","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"313","target":"470","id":"7571","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"83","target":"113","id":"3371","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"232","target":"616","id":"6292","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"633","target":"636","id":"10466","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"73","target":"198","id":"3152","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"357","target":"509","id":"8153","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"13","target":"495","id":"1767","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"136","target":"563","id":"4494","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"155","target":"572","id":"4898","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"260","target":"504","id":"6738","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"267","target":"546","id":"6857","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"59","target":"125","id":"2816","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"533","target":"579","id":"9961","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"112","target":"207","id":"3989","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"56","target":"685","id":"2765","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"277","target":"517","id":"7010","attributes":{"Weight":"1.0"},"color":"rgb(148,196,115)","size":1.0},{"source":"317","target":"581","id":"7635","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"626","target":"705","id":"10442","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"198","target":"658","id":"5710","attributes":{"Weight":"1.0"},"color":"rgb(180,148,115)","size":1.0},{"source":"229","target":"317","id":"6236","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"65","target":"118","id":"2975","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"124","target":"230","id":"4234","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"428","target":"618","id":"9011","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"574","target":"702","id":"10199","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"334","target":"489","id":"7875","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"97","target":"519","id":"3696","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"180","target":"703","id":"5386","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"497","target":"635","id":"9682","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"157","target":"455","id":"4932","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"442","target":"611","id":"9189","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"164","target":"572","id":"5067","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"122","target":"623","id":"4207","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"403","target":"706","id":"8739","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"111","target":"643","id":"3982","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"63","target":"621","id":"2937","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"141","target":"416","id":"4591","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"520","target":"664","id":"9850","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"585","target":"605","id":"10263","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"81","target":"313","id":"3330","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"18","target":"520","id":"1880","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"248","target":"550","id":"6536","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"167","target":"168","id":"5115","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"14","target":"640","id":"1794","attributes":{"Weight":"1.0"},"color":"rgb(148,148,83)","size":1.0},{"source":"14","target":"500","id":"1788","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"415","target":"603","id":"8850","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"369","target":"630","id":"8281","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"56","target":"140","id":"2747","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"145","target":"280","id":"4678","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"209","target":"214","id":"5885","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"26","target":"482","id":"2053","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"59","target":"675","id":"2831","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"45","target":"291","id":"2501","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"428","target":"528","id":"9004","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"88","target":"162","id":"3482","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"51","target":"243","id":"2633","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"544","target":"681","id":"10032","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"281","target":"734","id":"7094","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"543","target":"728","id":"10031","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"419","target":"645","id":"8905","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"426","target":"551","id":"8988","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"381","target":"472","id":"8434","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"76","target":"473","id":"3225","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"527","target":"567","id":"9912","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"356","target":"410","id":"8141","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"161","target":"485","id":"5005","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"283","target":"561","id":"7133","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"38","target":"39","id":"2328","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"51","target":"708","id":"2643","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"134","target":"341","id":"4439","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"201","target":"235","id":"5751","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"63","target":"264","id":"2930","attributes":{"Weight":"1.0"},"color":"rgb(115,83,229)","size":1.0},{"source":"676","target":"728","id":"10621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"286","target":"716","id":"7179","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"684","target":"697","id":"10633","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"358","target":"451","id":"8162","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"112","target":"361","id":"3999","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"335","target":"603","id":"7889","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"212","target":"642","id":"5951","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"412","target":"559","id":"8830","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"114","target":"726","id":"4046","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"146","target":"217","id":"4706","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"64","target":"189","id":"2951","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"244","target":"396","id":"6464","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"92","target":"456","id":"3585","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"80","target":"167","id":"3307","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"521","target":"565","id":"9856","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"109","target":"336","id":"3915","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"104","target":"509","id":"3835","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"226","target":"240","id":"6182","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"480","target":"611","id":"9554","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"305","target":"552","id":"7471","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"119","target":"152","id":"4132","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"317","target":"592","id":"7636","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"257","target":"297","id":"6678","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"514","target":"624","id":"9804","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"48","target":"243","id":"2567","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"372","target":"427","id":"8309","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"209","target":"239","id":"5888","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"381","target":"443","id":"8433","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"385","target":"577","id":"8509","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"165","target":"352","id":"5084","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"254","target":"660","id":"6644","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"10","target":"701","id":"1703","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"200","target":"259","id":"5731","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"409","target":"498","id":"8795","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"12","target":"287","id":"1737","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"14","target":"16","id":"1773","attributes":{"Weight":"1.0"},"color":"rgb(148,148,83)","size":1.0},{"source":"179","target":"227","id":"5346","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"245","target":"373","id":"6483","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"471","target":"477","id":"9467","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"575","target":"681","id":"10208","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"462","target":"645","id":"9388","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"83","target":"321","id":"3377","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"95","target":"136","id":"3642","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"252","target":"482","id":"6609","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"494","target":"722","id":"9662","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"171","target":"534","id":"5201","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"41","target":"599","id":"2410","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"438","target":"646","id":"9128","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"490","target":"529","id":"9612","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"393","target":"412","id":"8612","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"215","target":"661","id":"5999","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"100","target":"234","id":"3751","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"305","target":"489","id":"7468","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"136","target":"588","id":"4495","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"203","target":"518","id":"5796","attributes":{"Weight":"1.0"},"color":"rgb(148,164,115)","size":1.0},{"source":"475","target":"518","id":"9515","attributes":{"Weight":"1.0"},"color":"rgb(148,164,115)","size":1.0},{"source":"189","target":"320","id":"5535","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"268","target":"290","id":"6863","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"272","target":"387","id":"6937","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"66","target":"598","id":"3009","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"493","target":"585","id":"9648","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"216","target":"589","id":"6019","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"469","target":"653","id":"9454","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"292","target":"540","id":"7274","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"359","target":"531","id":"8176","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"14","target":"691","id":"1796","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"304","target":"526","id":"7456","attributes":{"Weight":"1.0"},"color":"rgb(67,115,229)","size":1.0},{"source":"97","target":"205","id":"3687","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"420","target":"533","id":"8908","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"618","target":"652","id":"10407","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"108","target":"526","id":"3901","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"692","target":"723","id":"10653","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"544","target":"683","id":"10033","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"103","target":"104","id":"3804","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"70","target":"555","id":"3100","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"274","target":"493","id":"6962","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"97","target":"631","id":"3702","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"46","target":"449","id":"2531","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"241","target":"721","id":"6430","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"185","target":"463","id":"5467","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"157","target":"535","id":"4937","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"25","target":"540","id":"2026","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"556","target":"660","id":"10091","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"471","target":"479","id":"9468","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"158","target":"708","id":"4956","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"221","target":"358","id":"6098","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"359","target":"685","id":"8180","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"12","target":"261","id":"1736","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"141","target":"478","id":"4597","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"548","target":"552","id":"10052","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"90","target":"683","id":"3553","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"68","target":"633","id":"3047","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"2","target":"106","id":"1492","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"191","target":"461","id":"5575","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"582","target":"605","id":"10250","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"7","target":"610","id":"1618","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"487","target":"600","id":"9591","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"237","target":"481","id":"6363","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"165","target":"185","id":"5079","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"690","target":"693","id":"10646","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"3","target":"191","id":"1519","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"323","target":"376","id":"7708","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"333","target":"511","id":"7857","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"132","target":"354","id":"4407","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"465","target":"466","id":"9405","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"576","target":"713","id":"10216","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"172","target":"179","id":"5212","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"206","target":"617","id":"5850","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"63","target":"297","id":"2931","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"98","target":"549","id":"3719","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"77","target":"459","id":"3249","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"318","target":"576","id":"7648","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"191","target":"430","id":"5574","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"442","target":"517","id":"9186","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"63","target":"127","id":"2924","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"555","target":"707","id":"10086","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"81","target":"298","id":"3327","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"311","target":"677","id":"7552","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"460","target":"562","id":"9361","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"131","target":"589","id":"4386","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"199","target":"709","id":"5730","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"290","target":"390","id":"7240","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"472","target":"682","id":"9488","attributes":{"Weight":"1.0"},"color":"rgb(213,67,229)","size":1.0},{"source":"98","target":"328","id":"3708","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"79","target":"454","id":"3289","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"55","target":"175","id":"2727","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"16","target":"704","id":"1839","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"593","target":"618","id":"10297","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"505","target":"587","id":"9746","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"249","target":"404","id":"6544","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"409","target":"594","id":"8804","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"175","target":"432","id":"5269","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"346","target":"670","id":"8035","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"221","target":"451","id":"6104","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"175","target":"325","id":"5268","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"220","target":"670","id":"6090","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"129","target":"430","id":"4339","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"58","target":"675","id":"2814","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"432","target":"623","id":"9062","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"185","target":"486","id":"5468","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"238","target":"342","id":"6372","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"657","target":"715","id":"10578","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"89","target":"161","id":"3516","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"652","target":"703","id":"10561","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"9","target":"368","id":"1674","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"253","target":"696","id":"6631","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"491","target":"729","id":"9631","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"259","target":"342","id":"6713","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"49","target":"103","id":"2580","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"6","target":"208","id":"1584","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"452","target":"478","id":"9274","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"437","target":"503","id":"9117","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"255","target":"545","id":"6654","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"162","target":"596","id":"5029","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"442","target":"475","id":"9183","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"47","target":"545","id":"2555","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"50","target":"154","id":"2606","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"116","target":"603","id":"4087","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"195","target":"526","id":"5646","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"141","target":"422","id":"4592","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"261","target":"451","id":"6761","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"193","target":"465","id":"5604","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"203","target":"433","id":"5789","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"123","target":"478","id":"4222","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"259","target":"403","id":"6717","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"322","target":"726","id":"7706","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"21","target":"641","id":"1951","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"241","target":"260","id":"6412","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"241","target":"497","id":"6419","attributes":{"Weight":"1.0"},"color":"rgb(148,229,67)","size":1.0},{"source":"225","target":"608","id":"6179","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"196","target":"473","id":"5664","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"480","target":"623","id":"9556","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"423","target":"696","id":"8950","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"472","target":"663","id":"9487","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"334","target":"353","id":"7870","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"99","target":"554","id":"3740","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"413","target":"731","id":"8840","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"74","target":"677","id":"3188","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"42","target":"486","id":"2425","attributes":{"Weight":"1.0"},"color":"rgb(229,180,67)","size":1.0},{"source":"200","target":"363","id":"5733","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"233","target":"717","id":"6311","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"502","target":"544","id":"9723","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"124","target":"344","id":"4239","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"53","target":"312","id":"2678","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"304","target":"309","id":"7450","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"339","target":"364","id":"7938","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"479","target":"518","id":"9544","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"124","target":"512","id":"4246","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"410","target":"423","id":"8810","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"236","target":"499","id":"6349","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"233","target":"331","id":"6299","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"82","target":"442","id":"3354","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"55","target":"535","id":"2739","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"1","target":"494","id":"1476","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"385","target":"433","id":"8500","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"27","target":"713","id":"2085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"103","target":"564","id":"3820","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"40","target":"66","id":"2376","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"697","target":"736","id":"10661","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"159","target":"657","id":"4975","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"583","target":"702","id":"10258","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"290","target":"405","id":"7247","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"267","target":"276","id":"6847","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"386","target":"654","id":"8527","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"139","target":"654","id":"4552","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"348","target":"430","id":"8049","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"244","target":"659","id":"6473","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"11","target":"59","id":"1706","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"466","target":"724","id":"9424","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"505","target":"597","id":"9747","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"241","target":"661","id":"6425","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"301","target":"698","id":"7415","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"70","target":"419","id":"3094","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"304","target":"352","id":"7451","attributes":{"Weight":"1.0"},"color":"rgb(148,132,148)","size":1.0},{"source":"369","target":"370","id":"8277","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"253","target":"255","id":"6616","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"113","target":"626","id":"4017","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"356","target":"660","id":"8148","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"184","target":"688","id":"5454","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"54","target":"211","id":"2694","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"606","target":"673","id":"10355","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"581","target":"592","id":"10248","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"636","target":"736","id":"10483","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"42","target":"332","id":"2422","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"150","target":"318","id":"4784","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"155","target":"677","id":"4903","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"405","target":"561","id":"8759","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"69","target":"646","id":"3073","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"191","target":"226","id":"5569","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"97","target":"108","id":"3684","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"299","target":"698","id":"7385","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"30","target":"236","id":"2152","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"150","target":"713","id":"4801","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"61","target":"507","id":"2887","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"110","target":"227","id":"3936","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"13","target":"41","id":"1754","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"458","target":"459","id":"9334","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"149","target":"338","id":"4762","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"96","target":"304","id":"3674","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"124","target":"209","id":"4231","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"50","target":"720","id":"2630","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"95","target":"501","id":"3655","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"179","target":"707","id":"5368","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"236","target":"489","id":"6348","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"258","target":"434","id":"6702","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"11","target":"18","id":"1704","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"430","target":"583","id":"9033","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"99","target":"181","id":"3730","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"423","target":"556","id":"8943","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"7","target":"721","id":"1624","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"64","target":"461","id":"2969","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"176","target":"197","id":"5283","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"196","target":"594","id":"5673","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"602","target":"690","id":"10336","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"327","target":"611","id":"7771","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"325","target":"682","id":"7745","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"171","target":"314","id":"5192","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"103","target":"267","id":"3808","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"35","target":"495","id":"2279","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"92","target":"178","id":"3576","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"225","target":"261","id":"6167","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"402","target":"660","id":"8726","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"296","target":"493","id":"7326","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"168","target":"185","id":"5130","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"211","target":"319","id":"5917","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"194","target":"383","id":"5623","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"92","target":"536","id":"3588","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"281","target":"282","id":"7076","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"365","target":"530","id":"8237","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"258","target":"616","id":"6708","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"3","target":"168","id":"1517","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"86","target":"188","id":"3435","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"234","target":"370","id":"6318","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"120","target":"489","id":"4163","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"120","target":"228","id":"4153","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"234","target":"457","id":"6319","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"620","target":"680","id":"10413","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"412","target":"560","id":"8831","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"316","target":"629","id":"7619","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"323","target":"547","id":"7714","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"135","target":"151","id":"4451","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"32","target":"557","id":"2200","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"88","target":"665","id":"3506","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"145","target":"455","id":"4691","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"346","target":"387","id":"8027","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"412","target":"731","id":"8834","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"230","target":"320","id":"6249","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"400","target":"401","id":"8694","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"335","target":"707","id":"7893","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"126","target":"134","id":"4268","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"112","target":"483","id":"4002","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"68","target":"538","id":"3045","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"5","target":"348","id":"1568","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"117","target":"365","id":"4101","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"589","target":"728","id":"10285","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"324","target":"489","id":"7724","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"285","target":"724","id":"7159","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"335","target":"462","id":"7884","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"89","target":"160","id":"3515","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"505","target":"706","id":"9751","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"419","target":"569","id":"8900","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"219","target":"701","id":"6077","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"53","target":"67","id":"2669","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"43","target":"65","id":"2437","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"439","target":"709","id":"9147","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"359","target":"634","id":"8178","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"81","target":"468","id":"3333","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"538","target":"697","id":"10000","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"304","target":"369","id":"7453","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"127","target":"621","id":"4296","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"28","target":"319","id":"2102","attributes":{"Weight":"1.0"},"color":"rgb(67,180,229)","size":1.0},{"source":"53","target":"516","id":"2680","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"163","target":"506","id":"5049","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"87","target":"490","id":"3467","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"50","target":"245","id":"2610","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"234","target":"701","id":"6327","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"138","target":"670","id":"4531","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"116","target":"335","id":"4076","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"29","target":"470","id":"2134","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"450","target":"487","id":"9259","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"75","target":"702","id":"3212","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"226","target":"352","id":"6184","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"11","target":"520","id":"1722","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"393","target":"658","id":"8618","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"352","target":"359","id":"8103","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"450","target":"619","id":"9263","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"268","target":"412","id":"6875","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"79","target":"203","id":"3281","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"213","target":"265","id":"5957","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"482","target":"675","id":"9568","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"61","target":"687","id":"2897","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"290","target":"399","id":"7246","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"539","target":"669","id":"10005","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"334","target":"355","id":"7871","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"62","target":"126","id":"2903","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"153","target":"181","id":"4846","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"188","target":"580","id":"5520","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"99","target":"153","id":"3729","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"232","target":"434","id":"6287","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"399","target":"559","id":"8688","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"316","target":"455","id":"7614","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"198","target":"516","id":"5703","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"132","target":"344","id":"4406","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"312","target":"633","id":"7560","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"439","target":"640","id":"9142","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"202","target":"419","id":"5773","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"602","target":"721","id":"10340","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"208","target":"477","id":"5877","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"145","target":"678","id":"4699","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"646","target":"725","id":"10525","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"194","target":"537","id":"5627","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"528","target":"652","id":"9931","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"598","target":"599","id":"10319","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"474","target":"639","id":"9507","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"32","target":"674","id":"2204","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"135","target":"443","id":"4468","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"90","target":"126","id":"3535","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"25","target":"695","id":"2030","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"568","target":"695","id":"10150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"220","target":"272","id":"6078","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"580","target":"619","id":"10244","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"519","target":"525","id":"9840","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"318","target":"528","id":"7644","attributes":{"Weight":"1.0"},"color":"rgb(148,196,67)","size":1.0},{"source":"173","target":"631","id":"5247","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"8","target":"172","id":"1633","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"72","target":"500","id":"3140","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"265","target":"681","id":"6828","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"220","target":"628","id":"6088","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"635","target":"684","id":"10475","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"321","target":"705","id":"7694","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"162","target":"610","id":"5031","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"74","target":"460","id":"3179","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"260","target":"261","id":"6729","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"78","target":"467","id":"3270","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"665","target":"721","id":"10600","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"69","target":"724","id":"3078","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"380","target":"389","id":"8420","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"468","target":"477","id":"9438","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"340","target":"670","id":"7963","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"359","target":"677","id":"8179","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"73","target":"302","id":"3155","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"156","target":"681","id":"4920","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"517","target":"636","id":"9830","attributes":{"Weight":"1.0"},"color":"rgb(99,229,115)","size":1.0},{"source":"369","target":"457","id":"8278","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"65","target":"272","id":"2979","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"319","target":"419","id":"7657","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"120","target":"186","id":"4150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"5","target":"434","id":"1570","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"290","target":"559","id":"7252","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"14","target":"383","id":"1786","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"110","target":"294","id":"3940","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"28","target":"37","id":"2087","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"556","target":"558","id":"10089","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"568","target":"641","id":"10149","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"218","target":"525","id":"6056","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"497","target":"636","id":"9683","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"92","target":"549","id":"3589","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"47","target":"423","id":"2554","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"538","target":"633","id":"9994","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"497","target":"637","id":"9684","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"69","target":"82","id":"3056","attributes":{"Weight":"1.0"},"color":"rgb(67,164,196)","size":1.0},{"source":"24","target":"25","id":"1998","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"416","target":"661","id":"8867","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"393","target":"405","id":"8610","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"349","target":"719","id":"8075","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"327","target":"442","id":"7762","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"303","target":"409","id":"7434","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"143","target":"300","id":"4632","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"285","target":"465","id":"7151","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"185","target":"359","id":"5462","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"316","target":"678","id":"7622","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"8","target":"532","id":"1646","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"29","target":"77","id":"2123","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"404","target":"461","id":"8742","attributes":{"Weight":"1.0"},"color":"rgb(148,213,132)","size":1.0},{"source":"15","target":"525","id":"1813","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"96","target":"186","id":"3671","attributes":{"Weight":"1.0"},"color":"rgb(148,67,180)","size":1.0},{"source":"62","target":"681","id":"2919","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"38","target":"167","id":"2334","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"193","target":"285","id":"5599","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"101","target":"445","id":"3778","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"172","target":"460","id":"5217","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"442","target":"480","id":"9184","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"327","target":"648","id":"7774","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"119","target":"563","id":"4145","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"88","target":"591","id":"3501","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"278","target":"407","id":"7025","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"388","target":"423","id":"8545","attributes":{"Weight":"1.0"},"color":"rgb(229,148,83)","size":1.0},{"source":"351","target":"427","id":"8092","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"25","target":"704","id":"2031","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"45","target":"125","id":"2496","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"471","target":"680","id":"9474","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"514","target":"698","id":"9807","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"43","target":"664","id":"2455","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"323","target":"490","id":"7712","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"341","target":"544","id":"7972","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"165","target":"531","id":"5090","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"254","target":"356","id":"6633","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"126","target":"530","id":"4281","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"586","target":"717","id":"10270","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"414","target":"731","id":"8845","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"400","target":"694","id":"8705","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"65","target":"404","id":"2984","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"294","target":"591","id":"7305","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"354","target":"483","id":"8127","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"67","target":"637","id":"3028","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"144","target":"348","id":"4658","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"82","target":"648","id":"3366","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"30","target":"353","id":"2156","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"24","target":"708","id":"2014","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"312","target":"524","id":"7558","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"220","target":"347","id":"6081","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"507","target":"682","id":"9764","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"440","target":"562","id":"9156","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"639","target":"726","id":"10498","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"108","target":"582","id":"3902","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"214","target":"361","id":"5978","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"474","target":"715","id":"9510","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"26","target":"452","id":"2050","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"520","target":"590","id":"9848","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"86","target":"652","id":"3451","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"510","target":"592","id":"9785","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"44","target":"374","id":"2470","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"123","target":"452","id":"4221","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"187","target":"469","id":"5502","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"115","target":"574","id":"4059","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"734","target":"735","id":"10691","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"206","target":"501","id":"5845","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"153","target":"369","id":"4852","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"151","target":"331","id":"4814","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"221","target":"462","id":"6105","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"125","target":"661","id":"4266","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"41","target":"666","id":"2411","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"118","target":"437","id":"4121","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"587","target":"706","id":"10275","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"374","target":"475","id":"8337","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"633","target":"684","id":"10468","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"60","target":"552","id":"2857","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"244","target":"606","id":"6470","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"577","target":"687","id":"10222","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"382","target":"670","id":"8464","attributes":{"Weight":"1.0"},"color":"rgb(67,164,213)","size":1.0},{"source":"4","target":"437","id":"1546","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"75","target":"706","id":"3213","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"287","target":"642","id":"7193","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"228","target":"595","id":"6229","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"34","target":"256","id":"2248","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"468","target":"479","id":"9439","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"206","target":"248","id":"5838","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"12","target":"212","id":"1733","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"464","target":"718","id":"9404","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"18","target":"590","id":"1881","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"103","target":"592","id":"3822","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"35","target":"41","id":"2266","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"130","target":"630","id":"4366","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"89","target":"474","id":"3522","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"318","target":"546","id":"7645","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"33","target":"207","id":"2216","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"392","target":"405","id":"8597","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"322","target":"553","id":"7698","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"26","target":"422","id":"2047","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"231","target":"717","id":"6278","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"137","target":"599","id":"4513","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"147","target":"263","id":"4724","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"562","target":"713","id":"10124","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"182","target":"579","id":"5409","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"511","target":"580","id":"9789","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"159","target":"474","id":"4968","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"93","target":"171","id":"3596","attributes":{"Weight":"1.0"},"color":"rgb(213,115,148)","size":1.0},{"source":"301","target":"431","id":"7402","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"35","target":"389","id":"2277","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"328","target":"426","id":"7782","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"528","target":"618","id":"9928","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"398","target":"668","id":"8677","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"55","target":"624","id":"2742","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"12","target":"419","id":"1740","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"415","target":"434","id":"8846","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"164","target":"685","id":"5073","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"366","target":"370","id":"8242","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"148","target":"515","id":"4752","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"130","target":"234","id":"4352","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"49","target":"318","id":"2591","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"140","target":"375","id":"4563","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"183","target":"198","id":"5415","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"262","target":"320","id":"6772","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"83","target":"337","id":"3378","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"636","target":"637","id":"10479","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"425","target":"622","id":"8977","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"308","target":"642","id":"7510","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"27","target":"231","id":"2062","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"231","target":"415","id":"6266","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"363","target":"649","id":"8212","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"119","target":"448","id":"4141","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"9","target":"334","id":"1672","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"38","target":"121","id":"2330","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"289","target":"331","id":"7220","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"8","target":"677","id":"1655","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"35","target":"315","id":"2275","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"417","target":"606","id":"8873","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"35","target":"284","id":"2273","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"13","target":"467","id":"1766","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"247","target":"570","id":"6523","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"28","target":"107","id":"2092","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"299","target":"539","id":"7379","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"56","target":"179","id":"2750","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"221","target":"319","id":"6097","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"306","target":"315","id":"7474","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"327","target":"678","id":"7775","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"323","target":"586","id":"7716","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"282","target":"285","id":"7096","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"183","target":"184","id":"5414","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"34","target":"49","id":"2243","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"45","target":"449","id":"2506","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"422","target":"452","id":"8933","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"449","target":"728","id":"9256","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"343","target":"550","id":"7999","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"167","target":"463","id":"5124","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"135","target":"643","id":"4476","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"138","target":"408","id":"4524","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"109","target":"550","id":"3923","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"290","target":"414","id":"7251","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"175","target":"469","id":"5272","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"14","target":"537","id":"1790","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"269","target":"414","id":"6898","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"124","target":"214","id":"4232","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"76","target":"87","id":"3214","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"481","target":"675","id":"9565","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"68","target":"242","id":"3038","attributes":{"Weight":"1.0"},"color":"rgb(116,229,67)","size":1.0},{"source":"140","target":"577","id":"4574","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"386","target":"679","id":"8530","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"531","target":"607","id":"9947","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"519","target":"722","id":"9847","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"105","target":"630","id":"3854","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"328","target":"351","id":"7779","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"487","target":"642","id":"9593","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"457","target":"554","id":"9330","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"140","target":"685","id":"4582","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"232","target":"348","id":"6285","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"237","target":"478","id":"6362","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"74","target":"540","id":"3183","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"191","target":"324","id":"5571","attributes":{"Weight":"1.0"},"color":"rgb(229,132,99)","size":1.0},{"source":"433","target":"573","id":"9076","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"34","target":"509","id":"2258","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"60","target":"368","id":"2849","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"186","target":"499","id":"5490","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"211","target":"450","id":"5921","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"146","target":"705","id":"4720","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"532","target":"732","id":"9960","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"392","target":"395","id":"8595","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"149","target":"350","id":"4764","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"8","target":"56","id":"1626","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"64","target":"209","id":"2953","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"25","target":"640","id":"2028","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"11","target":"503","id":"1721","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"160","target":"281","id":"4983","attributes":{"Weight":"1.0"},"color":"rgb(115,83,229)","size":1.0},{"source":"446","target":"581","id":"9229","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"376","target":"490","id":"8368","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"409","target":"604","id":"8805","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"45","target":"461","id":"2508","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"18","target":"664","id":"1883","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"9","target":"353","id":"1673","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"244","target":"507","id":"6467","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"198","target":"312","id":"5701","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"450","target":"451","id":"9257","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"360","target":"378","id":"8182","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"507","target":"673","id":"9763","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"297","target":"726","id":"7352","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"178","target":"328","id":"5329","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"488","target":"579","id":"9597","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"671","target":"715","id":"10610","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"148","target":"680","id":"4756","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"233","target":"490","id":"6304","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"526","target":"605","id":"9905","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"179","target":"625","id":"5361","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"441","target":"735","id":"9180","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"316","target":"375","id":"7610","attributes":{"Weight":"1.0"},"color":"rgb(164,148,132)","size":1.0},{"source":"33","target":"319","id":"2224","attributes":{"Weight":"1.0"},"color":"rgb(148,180,148)","size":1.0},{"source":"117","target":"242","id":"4097","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"350","target":"682","id":"8087","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"319","target":"424","id":"7658","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"463","target":"486","id":"9391","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"509","target":"564","id":"9779","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"376","target":"717","id":"8376","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"142","target":"263","id":"4609","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"174","target":"243","id":"5250","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"64","target":"565","id":"2973","attributes":{"Weight":"1.0"},"color":"rgb(229,99,148)","size":1.0},{"source":"324","target":"552","id":"7727","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"177","target":"260","id":"5304","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"427","target":"456","id":"8993","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"379","target":"649","id":"8416","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"120","target":"552","id":"4166","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"374","target":"387","id":"8332","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"458","target":"680","id":"9344","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"91","target":"265","id":"3560","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"254","target":"410","id":"6637","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"117","target":"406","id":"4103","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"97","target":"435","id":"3692","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"61","target":"133","id":"2867","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"255","target":"694","id":"6661","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"244","target":"345","id":"6462","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"382","target":"452","id":"8453","attributes":{"Weight":"1.0"},"color":"rgb(132,164,148)","size":1.0},{"source":"424","target":"462","id":"8953","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"52","target":"536","id":"2662","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"209","target":"354","id":"5892","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"309","target":"630","id":"7521","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"112","target":"362","id":"4000","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"145","target":"376","id":"4685","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"32","target":"253","id":"2189","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"164","target":"677","id":"5072","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"254","target":"694","id":"6646","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"159","target":"715","id":"4978","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"410","target":"656","id":"8815","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"66","target":"570","id":"3007","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"234","target":"369","id":"6317","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"105","target":"219","id":"3845","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"141","target":"436","id":"4593","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"21","target":"51","id":"1937","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"366","target":"554","id":"8245","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"93","target":"601","id":"3612","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"70","target":"319","id":"3092","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"32","target":"401","id":"2194","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"437","target":"709","id":"9123","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"271","target":"661","id":"6927","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"67","target":"688","id":"3030","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"279","target":"547","id":"7046","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"130","target":"153","id":"4349","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"11","target":"199","id":"1710","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"183","target":"635","id":"5430","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"38","target":"463","id":"2346","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"26","target":"478","id":"2051","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"121","target":"430","id":"4183","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"276","target":"592","id":"7003","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"169","target":"229","id":"5147","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"178","target":"536","id":"5339","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"325","target":"350","id":"7732","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"110","target":"717","id":"3956","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"95","target":"496","id":"3654","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"167","target":"352","id":"5120","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"178","target":"549","id":"5340","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"402","target":"674","id":"8727","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"426","target":"718","id":"8992","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"33","target":"214","id":"2218","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"612","target":"677","id":"10385","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"260","target":"690","id":"6747","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"73","target":"636","id":"3163","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"205","target":"418","id":"5824","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"364","target":"578","id":"8219","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"252","target":"422","id":"6602","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"263","target":"660","id":"6794","attributes":{"Weight":"1.0"},"color":"rgb(180,67,164)","size":1.0},{"source":"57","target":"728","id":"2791","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"180","target":"277","id":"5372","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"476","target":"544","id":"9528","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"450","target":"555","id":"9260","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"446","target":"546","id":"9227","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"105","target":"153","id":"3843","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"223","target":"483","id":"6139","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"390","target":"391","id":"8562","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"111","target":"720","id":"3985","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"377","target":"413","id":"8387","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"348","target":"583","id":"8054","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"110","target":"151","id":"3931","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"339","target":"578","id":"7942","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"74","target":"707","id":"3192","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"27","target":"258","id":"2065","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"285","target":"729","id":"7161","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"293","target":"695","id":"7288","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"405","target":"413","id":"8755","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"129","target":"167","id":"4329","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"302","target":"636","id":"7424","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"447","target":"711","id":"9238","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"26","target":"141","id":"2041","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"334","target":"446","id":"7874","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"283","target":"405","id":"7126","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"84","target":"420","id":"3398","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"17","target":"509","id":"1859","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"94","target":"350","id":"3626","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"250","target":"356","id":"6563","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"47","target":"356","id":"2549","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"37","target":"705","id":"2326","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"56","target":"522","id":"2756","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"107","target":"210","id":"3875","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"14","target":"597","id":"1793","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"300","target":"539","id":"7394","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"174","target":"641","id":"5257","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"287","target":"419","id":"7182","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"52","target":"372","id":"2656","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"84","target":"321","id":"3395","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"248","target":"378","id":"6531","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"164","target":"294","id":"5059","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"63","target":"159","id":"2925","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"310","target":"686","id":"7538","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"488","target":"533","id":"9595","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"403","target":"597","id":"8735","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"49","target":"446","id":"2594","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"302","target":"688","id":"7427","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"38","target":"352","id":"2341","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"438","target":"734","id":"9138","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"116","target":"258","id":"4072","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"184","target":"516","id":"5446","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"431","target":"717","id":"9051","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"131","target":"618","id":"4389","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"587","target":"691","id":"10273","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"348","target":"616","id":"8056","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"281","target":"647","id":"7086","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"123","target":"125","id":"4211","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"549","target":"718","id":"10059","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"158","target":"695","id":"4954","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"388","target":"588","id":"8551","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"282","target":"689","id":"7109","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"286","target":"652","id":"7177","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"504","target":"602","id":"9735","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"15","target":"493","id":"1810","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"88","target":"602","id":"3503","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"229","target":"357","id":"6239","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"446","target":"592","id":"9230","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"415","target":"575","id":"8847","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"590","target":"670","id":"10288","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"336","target":"401","id":"7901","attributes":{"Weight":"1.0"},"color":"rgb(229,148,83)","size":1.0},{"source":"178","target":"464","id":"5337","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"395","target":"731","id":"8642","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"377","target":"411","id":"8385","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"111","target":"319","id":"3968","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"390","target":"392","id":"8563","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"280","target":"567","id":"7067","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"507","target":"659","id":"9762","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"60","target":"499","id":"2854","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"531","target":"711","id":"9949","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"122","target":"678","id":"4209","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"111","target":"349","id":"3969","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"5","target":"576","id":"1574","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"135","target":"676","id":"4477","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"81","target":"458","id":"3331","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"339","target":"514","id":"7941","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"173","target":"493","id":"5239","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"271","target":"693","id":"6931","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"4","target":"18","id":"1533","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"419","target":"608","id":"8902","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"439","target":"641","id":"9143","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"409","target":"728","id":"8809","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"617","target":"712","id":"10404","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"156","target":"365","id":"4912","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"275","target":"369","id":"6981","attributes":{"Weight":"1.0"},"color":"rgb(67,148,148)","size":1.0},{"source":"428","target":"704","id":"9015","attributes":{"Weight":"1.0"},"color":"rgb(229,115,67)","size":1.0},{"source":"126","target":"341","id":"4274","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"77","target":"468","id":"3250","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"440","target":"604","id":"9161","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"50","target":"150","id":"2605","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"100","target":"309","id":"3753","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"691","target":"702","id":"10649","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"8","target":"625","id":"1651","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"24","target":"292","id":"2005","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"48","target":"568","id":"2572","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"112","target":"484","id":"4003","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"153","target":"554","id":"4855","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"318","target":"564","id":"7647","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"436","target":"443","id":"9106","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"96","target":"105","id":"3666","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"143","target":"539","id":"4642","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"148","target":"471","id":"4749","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"280","target":"529","id":"7065","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"557","target":"674","id":"10098","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"39","target":"191","id":"2362","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"452","target":"622","id":"9279","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"411","target":"414","id":"8822","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"393","target":"411","id":"8611","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"264","target":"651","id":"6809","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"465","target":"734","id":"9416","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"93","target":"188","id":"3598","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"429","target":"710","id":"9026","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"22","target":"174","id":"1964","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"83","target":"182","id":"3373","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"327","target":"433","id":"7761","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"210","target":"705","id":"5911","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"329","target":"427","id":"7799","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"120","target":"235","id":"4154","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"319","target":"489","id":"7664","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"139","target":"415","id":"4543","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"276","target":"510","id":"6999","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"39","target":"531","id":"2371","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"687","target":"721","id":"10636","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"441","target":"725","id":"9176","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"326","target":"502","id":"7752","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"129","target":"397","id":"4338","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"173","target":"218","id":"5234","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"353","target":"489","id":"8118","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"200","target":"706","id":"5748","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"233","target":"431","id":"6301","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"257","target":"671","id":"6690","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"168","target":"557","id":"5142","attributes":{"Weight":"1.0"},"color":"rgb(229,132,83)","size":1.0},{"source":"201","target":"305","id":"5753","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"65","target":"387","id":"2983","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"61","target":"442","id":"2883","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"197","target":"372","id":"5685","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"578","target":"693","id":"10233","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"373","target":"591","id":"8323","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"325","target":"566","id":"7740","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"140","target":"654","id":"4577","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"189","target":"601","id":"5546","attributes":{"Weight":"1.0"},"color":"rgb(229,148,67)","size":1.0},{"source":"259","target":"691","id":"6726","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"343","target":"501","id":"7997","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"211","target":"419","id":"5919","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"205","target":"559","id":"5831","attributes":{"Weight":"1.0"},"color":"rgb(148,115,196)","size":1.0},{"source":"211","target":"221","id":"5913","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"232","target":"603","id":"6291","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"169","target":"256","id":"5148","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"382","target":"503","id":"8458","attributes":{"Weight":"1.0"},"color":"rgb(67,164,213)","size":1.0},{"source":"478","target":"558","id":"9540","attributes":{"Weight":"1.0"},"color":"rgb(213,148,83)","size":1.0},{"source":"230","target":"361","id":"6252","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"583","target":"616","id":"10255","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"345","target":"396","id":"8013","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"101","target":"320","id":"3773","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"99","target":"100","id":"3725","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"59","target":"447","id":"2824","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"562","target":"576","id":"10117","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"342","target":"597","id":"7986","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"271","target":"602","id":"6924","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"166","target":"711","id":"5114","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"447","target":"482","id":"9235","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"99","target":"106","id":"3727","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"8","target":"612","id":"1650","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"226","target":"531","id":"6190","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"372","target":"700","id":"8318","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"553","target":"632","id":"10072","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"81","target":"208","id":"3326","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"234","target":"631","id":"6325","attributes":{"Weight":"1.0"},"color":"rgb(67,115,229)","size":1.0},{"source":"329","target":"615","id":"7808","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"116","target":"232","id":"4070","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"104","target":"256","id":"3825","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"179","target":"532","id":"5357","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"369","target":"672","id":"8284","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"167","target":"531","id":"5126","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"251","target":"356","id":"6584","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"303","target":"713","id":"7449","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"34","target":"446","id":"2257","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"295","target":"546","id":"7319","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"730","target":"735","id":"10689","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"171","target":"496","id":"5199","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"37","target":"420","id":"2318","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"184","target":"524","id":"5447","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"11","target":"138","id":"1709","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"327","target":"454","id":"7763","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"117","target":"326","id":"4099","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"144","target":"335","id":"4657","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"19","target":"291","id":"1898","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"274","target":"582","id":"6967","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"150","target":"227","id":"4780","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"193","target":"725","id":"5613","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"200","target":"505","id":"5738","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"462","target":"608","id":"9386","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"16","target":"640","id":"1836","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"479","target":"680","id":"9547","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"438","target":"735","id":"9139","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"257","target":"715","id":"6692","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"109","target":"128","id":"3909","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"157","target":"539","id":"4938","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"419","target":"450","id":"8893","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"227","target":"719","id":"6215","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"349","target":"572","id":"8070","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"14","target":"649","id":"1795","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"282","target":"364","id":"7097","attributes":{"Weight":"1.0"},"color":"rgb(115,164,148)","size":1.0},{"source":"38","target":"58","id":"2329","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"520","target":"709","id":"9852","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"220","target":"590","id":"6087","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"14","target":"505","id":"1789","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"69","target":"651","id":"3076","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"6","target":"29","id":"1580","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"111","target":"419","id":"3974","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"238","target":"547","id":"6376","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"371","target":"629","id":"8301","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"342","target":"363","id":"7975","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"35","target":"40","id":"2265","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"371","target":"397","id":"8292","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"55","target":"187","id":"2728","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"411","target":"559","id":"8823","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"108","target":"605","id":"3904","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"54","target":"462","id":"2711","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"190","target":"587","id":"5563","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"58","target":"59","id":"2792","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"434","target":"521","id":"9087","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"17","target":"275","id":"1851","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"190","target":"649","id":"5565","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"69","target":"734","id":"3082","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"139","target":"303","id":"4538","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"325","target":"511","id":"7737","attributes":{"Weight":"1.0"},"color":"rgb(213,115,148)","size":1.0},{"source":"196","target":"275","id":"5653","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"85","target":"289","id":"3416","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"347","target":"404","id":"8038","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"151","target":"567","id":"4823","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"224","target":"323","id":"6147","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"57","target":"565","id":"2785","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"80","target":"713","id":"3324","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"245","target":"316","id":"6478","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"491","target":"603","id":"9623","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"397","target":"685","id":"8662","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"14","target":"403","id":"1787","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"287","target":"424","id":"7183","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"551","target":"700","id":"10067","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"385","target":"498","id":"8505","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"172","target":"408","id":"5216","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"472","target":"589","id":"9483","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"350","target":"606","id":"8083","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"288","target":"440","id":"7201","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"261","target":"487","id":"6763","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"314","target":"673","id":"7594","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"136","target":"360","id":"4487","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"345","target":"496","id":"8015","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"206","target":"378","id":"5842","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"108","target":"722","id":"3907","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"466","target":"734","id":"9428","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"377","target":"658","id":"8392","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"66","target":"495","id":"3006","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"68","target":"204","id":"3037","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"314","target":"613","id":"7592","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"407","target":"420","id":"8769","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"318","target":"460","id":"7641","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"101","target":"223","id":"3769","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"287","target":"600","id":"7190","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"268","target":"399","id":"6872","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"523","target":"663","id":"9882","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"543","target":"679","id":"10030","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"61","target":"417","id":"2882","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"223","target":"320","id":"6133","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"58","target":"252","id":"2798","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"100","target":"370","id":"3756","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"143","target":"432","id":"4636","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"150","target":"562","id":"4791","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"54","target":"623","id":"2718","attributes":{"Weight":"1.0"},"color":"rgb(67,229,196)","size":1.0},{"source":"140","target":"454","id":"4568","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"490","target":"567","id":"9614","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"563","target":"617","id":"10127","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"517","target":"537","id":"9824","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"453","target":"578","id":"9283","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"413","target":"559","id":"8836","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"73","target":"497","id":"3157","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"144","target":"576","id":"4666","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"424","target":"450","id":"8951","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"446","target":"509","id":"9225","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"72","target":"505","id":"3141","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"249","target":"565","id":"6555","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"284","target":"666","id":"7147","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"110","target":"111","id":"3929","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"448","target":"550","id":"9242","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"316","target":"373","id":"7609","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"196","target":"521","id":"5666","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"164","target":"569","id":"5066","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"395","target":"412","id":"8635","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"4","target":"346","id":"1542","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"218","target":"422","id":"6051","attributes":{"Weight":"1.0"},"color":"rgb(132,196,148)","size":1.0},{"source":"36","target":"284","id":"2293","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"224","target":"707","id":"6164","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"8","target":"713","id":"1659","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"337","target":"374","id":"7911","attributes":{"Weight":"1.0"},"color":"rgb(67,180,196)","size":1.0},{"source":"320","target":"367","id":"7678","attributes":{"Weight":"1.0"},"color":"rgb(164,99,148)","size":1.0},{"source":"15","target":"173","id":"1802","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"221","target":"279","id":"6095","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"361","target":"362","id":"8193","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"571","target":"618","id":"10171","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"329","target":"456","id":"7800","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"417","target":"673","id":"8876","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"250","target":"653","id":"6574","attributes":{"Weight":"1.0"},"color":"rgb(180,67,164)","size":1.0},{"source":"309","target":"554","id":"7520","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"107","target":"217","id":"3876","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"140","target":"442","id":"4567","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"92","target":"464","id":"3586","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"86","target":"511","id":"3443","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"602","target":"703","id":"10339","attributes":{"Weight":"1.0"},"color":"rgb(196,196,67)","size":1.0},{"source":"302","target":"516","id":"7419","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"140","target":"625","id":"4576","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"494","target":"519","id":"9654","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"521","target":"589","id":"9857","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"149","target":"507","id":"4768","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"78","target":"584","id":"3273","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"17","target":"276","id":"1852","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"340","target":"709","id":"7964","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"19","target":"482","id":"1907","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"318","target":"713","id":"7653","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"180","target":"571","id":"5379","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"31","target":"304","id":"2175","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"12","target":"211","id":"1732","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"269","target":"411","id":"6895","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"81","target":"470","id":"3334","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"18","target":"503","id":"1879","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"322","target":"398","id":"7695","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"73","target":"270","id":"3154","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"12","target":"358","id":"1739","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"91","target":"683","id":"3573","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"247","target":"495","id":"6522","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"382","target":"466","id":"8455","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"433","target":"679","id":"9084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"382","target":"646","id":"8460","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"574","target":"597","id":"10196","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"51","target":"174","id":"2632","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"215","target":"690","id":"6001","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"411","target":"413","id":"8821","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"489","target":"710","id":"9610","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"10","target":"31","id":"1682","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"263","target":"469","id":"6787","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"218","target":"605","id":"6062","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"236","target":"368","id":"6346","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"367","target":"456","id":"8255","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"212","target":"600","id":"5948","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"86","target":"703","id":"3453","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"31","target":"234","id":"2174","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"183","target":"497","id":"5424","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"2","target":"96","id":"1488","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"114","target":"485","id":"4034","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"224","target":"586","id":"6160","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"133","target":"149","id":"4414","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"553","target":"726","id":"10078","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"403","target":"500","id":"8730","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"189","target":"362","id":"5540","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"233","target":"436","id":"6302","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"61","target":"566","id":"2889","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"42","target":"333","id":"2423","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"155","target":"371","id":"4894","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"426","target":"427","id":"8982","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"472","target":"594","id":"9484","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"152","target":"712","id":"4844","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"206","target":"336","id":"5839","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"507","target":"606","id":"9760","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"308","target":"668","id":"7511","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"651","target":"730","id":"10557","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"44","target":"498","id":"2477","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"61","target":"454","id":"2884","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"333","target":"655","id":"7867","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"517","target":"623","id":"9829","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"26","target":"58","id":"2037","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"110","target":"154","id":"3932","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"480","target":"648","id":"9557","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"396","target":"673","id":"8652","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"85","target":"147","id":"3409","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"47","target":"557","id":"2557","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"127","target":"632","id":"4297","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"163","target":"336","id":"5042","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"283","target":"566","id":"7134","attributes":{"Weight":"1.0"},"color":"rgb(213,67,196)","size":1.0},{"source":"85","target":"529","id":"3424","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"161","target":"621","id":"5007","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"197","target":"492","id":"5690","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"139","target":"232","id":"4535","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"252","target":"404","id":"6600","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"151","target":"627","id":"4825","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"185","target":"212","id":"5458","attributes":{"Weight":"1.0"},"color":"rgb(148,213,148)","size":1.0},{"source":"167","target":"486","id":"5125","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"311","target":"625","id":"7549","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"503","target":"534","id":"9727","attributes":{"Weight":"1.0"},"color":"rgb(132,148,213)","size":1.0},{"source":"333","target":"703","id":"7868","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"92","target":"367","id":"3581","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"60","target":"528","id":"2855","attributes":{"Weight":"1.0"},"color":"rgb(229,115,99)","size":1.0},{"source":"303","target":"668","id":"7447","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"45","target":"416","id":"2503","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"355","target":"509","id":"8132","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"118","target":"404","id":"4120","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"106","target":"672","id":"3870","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"463","target":"711","id":"9395","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"37","target":"278","id":"2314","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"162","target":"693","id":"5036","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"169","target":"526","id":"5163","attributes":{"Weight":"1.0"},"color":"rgb(67,196,148)","size":1.0},{"source":"294","target":"316","id":"7293","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"81","target":"474","id":"3336","attributes":{"Weight":"1.0"},"color":"rgb(196,83,148)","size":1.0},{"source":"62","target":"117","id":"2902","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"65","target":"220","id":"2978","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"290","target":"412","id":"7249","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"221","target":"261","id":"6094","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"264","target":"697","id":"6811","attributes":{"Weight":"1.0"},"color":"rgb(99,164,148)","size":1.0},{"source":"660","target":"674","id":"10584","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"54","target":"287","id":"2700","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"149","target":"171","id":"4758","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"87","target":"425","id":"3462","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"64","target":"484","id":"2971","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"390","target":"412","id":"8570","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"237","target":"447","id":"6359","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"342","target":"537","id":"7981","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"644","target":"719","id":"10517","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"29","target":"686","id":"2143","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"155","target":"373","id":"4895","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"117","target":"476","id":"4104","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"239","target":"483","id":"6395","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"206","target":"343","id":"5840","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"56","target":"532","id":"2758","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"207","target":"354","id":"5861","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"271","target":"665","id":"6928","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"684","target":"736","id":"10634","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"114","target":"621","id":"4037","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"153","target":"370","id":"4853","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"278","target":"420","id":"7026","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"10","target":"370","id":"1698","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"74","target":"140","id":"3169","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"49","target":"104","id":"2581","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"333","target":"580","id":"7861","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"384","target":"612","id":"8491","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"222","target":"368","id":"6122","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"101","target":"512","id":"3782","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"529","target":"567","id":"9936","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"127","target":"161","id":"4287","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"101","target":"189","id":"3765","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"168","target":"634","id":"5144","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"245","target":"419","id":"6485","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"191","target":"240","id":"5570","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"199","target":"628","id":"5727","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"346","target":"347","id":"8026","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"267","target":"357","id":"6852","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"15","target":"205","id":"1804","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"18","target":"346","id":"1873","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"234","target":"469","id":"6320","attributes":{"Weight":"1.0"},"color":"rgb(99,67,229)","size":1.0},{"source":"348","target":"576","id":"8053","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"151","target":"586","id":"4824","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"215","target":"596","id":"5995","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"177","target":"707","id":"5327","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"231","target":"342","id":"6264","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"330","target":"392","id":"7814","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"20","target":"326","id":"1920","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"351","target":"718","id":"8102","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"429","target":"499","id":"9019","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"523","target":"589","id":"9878","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"101","target":"344","id":"3774","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"128","target":"136","id":"4305","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"350","target":"714","id":"8088","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"135","target":"586","id":"4475","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"417","target":"682","id":"8877","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"67","target":"204","id":"3017","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"394","target":"561","id":"8629","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"333","target":"716","id":"7869","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"447","target":"449","id":"9231","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"528","target":"703","id":"9932","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"131","target":"571","id":"4384","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"137","target":"315","id":"4505","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"1","target":"493","id":"1475","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"224","target":"431","id":"6151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"341","target":"375","id":"7966","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"203","target":"475","id":"5792","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"441","target":"491","id":"9169","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"415","target":"681","id":"8854","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"14","target":"587","id":"1792","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"33","target":"429","id":"2233","attributes":{"Weight":"1.0"},"color":"rgb(229,99,99)","size":1.0},{"source":"277","target":"703","id":"7021","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"248","target":"727","id":"6541","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"270","target":"516","id":"6907","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"430","target":"654","id":"9036","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"87","target":"604","id":"3476","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"234","target":"309","id":"6315","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"204","target":"688","id":"5818","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"116","target":"318","id":"4075","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"375","target":"502","id":"8355","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"359","target":"461","id":"8173","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"294","target":"719","id":"7310","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"396","target":"659","id":"8651","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"162","target":"260","id":"5017","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"93","target":"511","id":"3606","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"85","target":"280","id":"3415","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"591","target":"643","id":"10291","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"463","target":"634","id":"9394","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"352","target":"430","id":"8105","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"199","target":"520","id":"5725","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"380","target":"467","id":"8421","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"86","target":"619","id":"3450","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"59","target":"291","id":"2821","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"169","target":"276","id":"5151","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"1","target":"418","id":"1473","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"297","target":"632","id":"7345","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"458","target":"479","id":"9339","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"223","target":"512","id":"6141","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"79","target":"374","id":"3284","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"47","target":"253","id":"2545","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"212","target":"225","id":"5933","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"186","target":"235","id":"5481","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"12","target":"225","id":"1735","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"128","target":"617","id":"4322","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"80","target":"415","id":"3316","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"193","target":"438","id":"5602","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"477","target":"686","id":"9537","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"308","target":"415","id":"7501","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"60","target":"318","id":"2845","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"572","target":"720","id":"10185","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"585","target":"631","id":"10264","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"275","target":"446","id":"6982","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"625","target":"677","id":"10436","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"182","target":"337","id":"5404","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"410","target":"660","id":"8816","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"21","target":"695","id":"1952","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"215","target":"504","id":"5993","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"132","target":"223","id":"4401","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"109","target":"712","id":"3927","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"40","target":"273","id":"2381","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"46","target":"123","id":"2520","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"8","target":"707","id":"1658","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"7","target":"364","id":"1610","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"408","target":"707","id":"8788","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"227","target":"572","id":"6207","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"89","target":"638","id":"3527","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"22","target":"704","id":"1974","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"193","target":"647","id":"5608","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"493","target":"526","id":"9646","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"218","target":"631","id":"6063","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"60","target":"548","id":"2856","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"162","target":"703","id":"5037","attributes":{"Weight":"1.0"},"color":"rgb(196,196,67)","size":1.0},{"source":"195","target":"722","id":"5652","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"129","target":"607","id":"4344","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"192","target":"273","id":"5583","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"63","target":"657","id":"2941","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"359","target":"711","id":"8181","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"240","target":"352","id":"6398","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"368","target":"419","id":"8265","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"125","target":"447","id":"4256","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"88","target":"221","id":"3486","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"425","target":"521","id":"8969","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"83","target":"626","id":"3384","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"13","target":"36","id":"1752","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"346","target":"437","id":"8029","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"231","target":"434","id":"6267","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"671","target":"726","id":"10611","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"72","target":"537","id":"3142","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"279","target":"586","id":"7049","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"121","target":"167","id":"4174","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"33","target":"569","id":"2240","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"120","target":"324","id":"4158","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"38","target":"636","id":"2353","attributes":{"Weight":"1.0"},"color":"rgb(180,213,67)","size":1.0},{"source":"472","target":"543","id":"9480","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"129","target":"168","id":"4330","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"4","target":"11","id":"1532","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"87","target":"508","id":"3468","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"421","target":"589","id":"8924","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"107","target":"627","id":"3886","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"39","target":"486","id":"2370","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"282","target":"646","id":"7104","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"47","target":"401","id":"2551","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"291","target":"382","id":"7258","attributes":{"Weight":"1.0"},"color":"rgb(132,164,148)","size":1.0},{"source":"393","target":"399","id":"8609","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"90","target":"91","id":"3533","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"89","target":"114","id":"3512","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"221","target":"260","id":"6093","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"54","target":"443","id":"2708","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"548","target":"595","id":"10053","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"202","target":"212","id":"5766","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"157","target":"542","id":"4939","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"228","target":"236","id":"6218","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"185","target":"607","id":"5471","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"333","target":"428","id":"7856","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"51","target":"293","id":"2635","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"62","target":"544","id":"2918","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"22","target":"243","id":"1965","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"157","target":"698","id":"4944","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"196","target":"440","id":"5662","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"152","target":"550","id":"4840","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"95","target":"563","id":"3658","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"269","target":"330","id":"6885","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"192","target":"467","id":"5589","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"182","target":"321","id":"5403","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"285","target":"730","id":"7162","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"604","target":"728","id":"10348","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"139","target":"348","id":"4541","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"177","target":"460","id":"5313","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"396","target":"507","id":"8645","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"170","target":"656","id":"5185","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"325","target":"534","id":"7738","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"321","target":"662","id":"7693","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"540","target":"733","id":"10014","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"646","target":"729","id":"10526","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"485","target":"553","id":"9575","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"28","target":"217","id":"2099","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"196","target":"409","id":"5659","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"105","target":"554","id":"3853","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"179","target":"342","id":"5350","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"125","target":"481","id":"4261","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"140","target":"408","id":"4566","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"188","target":"601","id":"5522","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"349","target":"371","id":"8062","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"64","target":"361","id":"2964","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"656","target":"694","id":"10575","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"66","target":"137","id":"2994","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"7","target":"162","id":"1603","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"51","target":"704","id":"2642","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"74","target":"408","id":"3177","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"72","target":"587","id":"3144","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"606","target":"659","id":"10354","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"212","target":"728","id":"5955","attributes":{"Weight":"1.0"},"color":"rgb(148,148,229)","size":1.0},{"source":"65","target":"628","id":"2989","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"283","target":"391","id":"7120","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"150","target":"569","id":"4792","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"149","target":"244","id":"4759","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"229","target":"275","id":"6233","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"166","target":"463","id":"5107","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"424","target":"555","id":"8957","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"126","target":"242","id":"4271","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"228","target":"235","id":"6217","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"175","target":"514","id":"5274","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"27","target":"543","id":"2075","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"535","target":"698","id":"9979","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"264","target":"735","id":"6817","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"358","target":"419","id":"8159","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"662","target":"705","id":"10593","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"266","target":"661","id":"6839","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"108","target":"493","id":"3897","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"519","target":"526","id":"9841","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"143","target":"514","id":"4640","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"460","target":"707","id":"9372","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"349","target":"373","id":"8063","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"440","target":"702","id":"9165","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"232","target":"303","id":"6282","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"328","target":"536","id":"7787","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"156","target":"326","id":"4910","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"153","target":"234","id":"4848","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"9","target":"548","id":"1678","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"221","target":"693","id":"6114","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"161","target":"297","id":"5001","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"419","target":"424","id":"8891","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"97","target":"582","id":"3699","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"145","target":"436","id":"4687","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"545","target":"660","id":"10038","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"186","target":"429","id":"5488","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"426","target":"549","id":"8987","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"381","target":"623","id":"8446","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"313","target":"515","id":"7575","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"538","target":"637","id":"9997","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"681","target":"683","id":"10630","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"345","target":"673","id":"8022","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"237","target":"291","id":"6356","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"62","target":"476","id":"2914","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"182","target":"217","id":"5401","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"532","target":"707","id":"9959","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"390","target":"414","id":"8572","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"139","target":"668","id":"4553","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"161","target":"639","id":"5010","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"71","target":"113","id":"3108","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"222","target":"324","id":"6119","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"6","target":"515","id":"1596","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"430","target":"463","id":"9030","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"165","target":"729","id":"5094","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"260","target":"279","id":"6732","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"421","target":"521","id":"8919","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"162","target":"241","id":"5016","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"40","target":"467","id":"2387","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"61","target":"396","id":"2881","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"397","target":"591","id":"8657","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"43","target":"628","id":"2454","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"227","target":"349","id":"6201","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"260","target":"692","id":"6748","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"11","target":"237","id":"1712","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"147","target":"542","id":"4735","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"81","target":"307","id":"3328","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"240","target":"463","id":"6403","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"380","target":"584","id":"8424","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"444","target":"539","id":"9213","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"282","target":"734","id":"7114","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"79","target":"498","id":"3293","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"11","target":"387","id":"1717","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"190","target":"500","id":"5559","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"171","target":"593","id":"5204","attributes":{"Weight":"1.0"},"color":"rgb(213,115,148)","size":1.0},{"source":"120","target":"353","id":"4160","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"340","target":"503","id":"7958","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"36","target":"247","id":"2291","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"57","target":"543","id":"2783","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"314","target":"396","id":"7585","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"102","target":"228","id":"3787","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"302","target":"684","id":"7426","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"603","target":"616","id":"10342","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"196","target":"352","id":"5656","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"612","target":"685","id":"10388","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"92","target":"351","id":"3580","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"218","target":"655","id":"6064","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"282","target":"729","id":"7112","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"13","target":"315","id":"1763","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"208","target":"313","id":"5871","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"42","target":"571","id":"2428","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"55","target":"370","id":"2733","attributes":{"Weight":"1.0"},"color":"rgb(99,67,229)","size":1.0},{"source":"168","target":"711","id":"5145","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"43","target":"220","id":"2441","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"221","target":"572","id":"6108","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"250","target":"253","id":"6560","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"29","target":"468","id":"2133","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"190","target":"194","id":"5548","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"159","target":"161","id":"4960","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"147","target":"624","id":"4736","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"249","target":"416","id":"6545","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"10","target":"304","id":"1693","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"172","target":"685","id":"5229","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"242","target":"530","id":"6441","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"33","target":"132","id":"2213","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"419","target":"529","id":"8898","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"95","target":"360","id":"3650","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"30","target":"60","id":"2144","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"487","target":"608","id":"9592","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"254","target":"255","id":"6632","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"178","target":"351","id":"5331","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"50","target":"569","id":"2623","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"475","target":"611","id":"9518","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"126","target":"365","id":"4275","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"71","target":"159","id":"3110","attributes":{"Weight":"1.0"},"color":"rgb(115,99,229)","size":1.0},{"source":"427","target":"615","id":"9000","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"58","target":"422","id":"2802","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"33","target":"189","id":"2215","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"302","target":"497","id":"7418","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"475","target":"656","id":"9522","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"367","target":"492","id":"8257","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"646","target":"689","id":"10522","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"334","target":"595","id":"7879","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"138","target":"340","id":"4519","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"201","target":"228","id":"5750","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"575","target":"713","id":"10209","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"71","target":"302","id":"3116","attributes":{"Weight":"1.0"},"color":"rgb(99,180,148)","size":1.0},{"source":"3","target":"167","id":"1516","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"285","target":"651","id":"7157","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"113","target":"182","id":"4006","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"223","target":"354","id":"6135","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"589","target":"594","id":"10279","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"431","target":"703","id":"9050","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"22","target":"293","id":"1967","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"337","target":"407","id":"7914","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"128","target":"563","id":"4320","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"88","target":"364","id":"3494","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"346","target":"709","id":"8036","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"26","target":"237","id":"2042","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"109","target":"617","id":"3926","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"198","target":"270","id":"5699","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"450","target":"600","id":"9261","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"338","target":"613","id":"7933","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"313","target":"686","id":"7580","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"569","target":"591","id":"10157","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"500","target":"587","id":"9708","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"390","target":"560","id":"8574","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"215","target":"665","id":"6000","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"274","target":"435","id":"6961","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"28","target":"245","id":"2100","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"6","target":"620","id":"1599","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"34","target":"357","id":"2256","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"6","target":"468","id":"1591","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"646","target":"647","id":"10519","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"513","target":"683","id":"9800","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"668","target":"702","id":"10606","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"468","target":"470","id":"9436","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"528","target":"716","id":"9934","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"465","target":"729","id":"9414","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"659","target":"673","id":"10581","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"139","target":"231","id":"4534","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"166","target":"486","id":"5108","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"77","target":"515","id":"3255","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"8","target":"522","id":"1643","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"331","target":"547","id":"7836","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"144","target":"371","id":"4659","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"196","target":"604","id":"5674","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"60","target":"371","id":"2850","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"42","target":"180","id":"2415","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"452","target":"670","id":"9280","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"497","target":"736","id":"9688","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"132","target":"445","id":"4410","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"487","target":"555","id":"9590","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"308","target":"726","id":"7514","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"573","target":"678","id":"10192","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"110","target":"627","id":"3952","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"74","target":"177","id":"3171","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"110","target":"643","id":"3954","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"442","target":"498","id":"9185","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"352","target":"652","id":"8113","attributes":{"Weight":"1.0"},"color":"rgb(229,180,67)","size":1.0},{"source":"216","target":"443","id":"6014","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"553","target":"638","id":"10073","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"289","target":"428","id":"7222","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"155","target":"644","id":"4902","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"477","target":"541","id":"9534","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"189","target":"209","id":"5529","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"281","target":"646","id":"7085","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"329","target":"549","id":"7804","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"71","target":"337","id":"3118","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"211","target":"424","id":"5920","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"260","target":"591","id":"6741","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"475","target":"648","id":"9521","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"46","target":"249","id":"2524","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"84","target":"337","id":"3396","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"285","target":"647","id":"7155","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"532","target":"654","id":"9953","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"451","target":"645","id":"9273","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"450","target":"645","id":"9265","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"254","target":"400","id":"6634","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"347","target":"387","id":"8037","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"242","target":"681","id":"6444","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"32","target":"170","id":"2186","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"31","target":"457","id":"2180","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"58","target":"424","id":"2803","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"3","target":"463","id":"1526","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"268","target":"393","id":"6869","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"92","target":"718","id":"3594","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"695","target":"708","id":"10658","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"524","target":"697","id":"9892","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"322","target":"657","id":"7703","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"381","target":"523","id":"8438","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"42","target":"511","id":"2426","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"58","target":"478","id":"2807","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"275","target":"581","id":"6988","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"155","target":"569","id":"4897","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"540","target":"704","id":"10011","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"82","target":"433","id":"3353","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"140","target":"677","id":"4579","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"433","target":"614","id":"9079","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"194","target":"574","id":"5628","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"62","target":"326","id":"2909","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"356","target":"694","id":"8150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"377","target":"412","id":"8386","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"342","target":"505","id":"7980","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"153","target":"701","id":"4858","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"278","target":"533","id":"7028","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"348","target":"668","id":"8058","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"336","target":"506","id":"7904","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"530","target":"544","id":"9944","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"310","target":"468","id":"7528","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"429","target":"595","id":"9024","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"207","target":"320","id":"5859","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"492","target":"700","id":"9641","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"23","target":"640","id":"1990","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"32","target":"400","id":"2193","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"232","target":"713","id":"6294","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"233","target":"676","id":"6309","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"45","target":"483","id":"2512","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"290","target":"658","id":"7255","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"383","target":"706","id":"8482","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"212","target":"675","id":"5953","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"490","target":"717","id":"9620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"261","target":"424","id":"6759","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"285","target":"646","id":"7154","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"480","target":"517","id":"9551","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"179","target":"717","id":"5369","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"481","target":"503","id":"9561","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"596","target":"610","id":"10307","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"399","target":"405","id":"8682","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"7","target":"88","id":"1602","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"593","target":"652","id":"10299","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"18","target":"347","id":"1874","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"542","target":"653","id":"10019","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"385","target":"518","id":"8507","attributes":{"Weight":"1.0"},"color":"rgb(148,164,115)","size":1.0},{"source":"285","target":"689","id":"7158","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"647","target":"650","id":"10530","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"75","target":"190","id":"3195","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"339","target":"665","id":"7947","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"36","target":"599","id":"2303","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"475","target":"573","id":"9516","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"453","target":"661","id":"9287","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"521","target":"562","id":"9855","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"189","target":"223","id":"5531","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"288","target":"525","id":"7208","attributes":{"Weight":"1.0"},"color":"rgb(148,115,229)","size":1.0},{"source":"468","target":"541","id":"9442","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"68","target":"183","id":"3034","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"237","target":"422","id":"6358","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"61","target":"659","id":"2893","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"226","target":"430","id":"6186","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"360","target":"501","id":"8185","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"646","target":"651","id":"10521","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"571","target":"623","id":"10173","attributes":{"Weight":"1.0"},"color":"rgb(148,196,115)","size":1.0},{"source":"454","target":"687","id":"9306","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"120","target":"733","id":"4170","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"407","target":"662","id":"8775","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"141","target":"246","id":"4587","attributes":{"Weight":"1.0"},"color":"rgb(180,148,148)","size":1.0},{"source":"464","target":"700","id":"9403","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"606","target":"714","id":"10358","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"500","target":"702","id":"9712","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"650","target":"730","id":"10550","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"43","target":"272","id":"2442","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"550","target":"727","id":"10064","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"247","target":"273","id":"6515","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"568","target":"732","id":"10154","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"67","target":"68","id":"3012","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"274","target":"722","id":"6972","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"61","target":"606","id":"2891","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"287","target":"645","id":"7194","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"602","target":"665","id":"10335","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"542","target":"698","id":"10021","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"135","target":"233","id":"4453","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"403","target":"691","id":"8737","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"327","target":"623","id":"7773","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"641","target":"704","id":"10506","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"530","target":"681","id":"9945","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"366","target":"672","id":"8249","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"50","target":"368","id":"2615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"33","target":"230","id":"2220","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"87","target":"472","id":"3465","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"99","target":"662","id":"3742","attributes":{"Weight":"1.0"},"color":"rgb(67,99,229)","size":1.0},{"source":"272","target":"520","id":"6941","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"194","target":"200","id":"5618","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"214","target":"223","id":"5971","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"162","target":"453","id":"5026","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"169","target":"304","id":"5153","attributes":{"Weight":"1.0"},"color":"rgb(67,148,148)","size":1.0},{"source":"304","target":"370","id":"7454","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"610","target":"721","id":"10373","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"260","target":"721","id":"6750","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"74","target":"612","id":"3184","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"38","target":"166","id":"2333","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"259","target":"505","id":"6719","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"591","target":"719","id":"10294","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"211","target":"225","id":"5914","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"114","target":"472","id":"4032","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"142","target":"669","id":"4624","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"159","target":"714","id":"4977","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"416","target":"452","id":"8859","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"125","target":"675","id":"4267","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"248","target":"506","id":"6535","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"593","target":"716","id":"10301","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"62","target":"242","id":"2907","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"299","target":"514","id":"7377","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"432","target":"624","id":"9063","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"74","target":"532","id":"3182","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"216","target":"601","id":"6021","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"47","target":"336","id":"2548","attributes":{"Weight":"1.0"},"color":"rgb(229,148,83)","size":1.0},{"source":"116","target":"575","id":"4084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"84","target":"731","id":"3406","attributes":{"Weight":"1.0"},"color":"rgb(148,99,196)","size":1.0},{"source":"2","target":"219","id":"1496","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"296","target":"605","id":"7333","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"208","target":"686","id":"5884","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"265","target":"365","id":"6820","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"428","target":"511","id":"9003","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"30","target":"334","id":"2155","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"321","target":"579","id":"7690","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"94","target":"714","id":"3638","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"419","target":"720","id":"8906","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"348","target":"434","id":"8050","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"461","target":"634","id":"9380","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"136","target":"378","id":"4488","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"8","target":"528","id":"1645","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"60","target":"116","id":"2834","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"312","target":"637","id":"7563","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"209","target":"445","id":"5895","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"440","target":"668","id":"9164","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"267","target":"318","id":"6850","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"628","target":"670","id":"10447","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"537","target":"587","id":"9987","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"154","target":"720","id":"4884","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"257","target":"621","id":"6685","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"132","target":"209","id":"4399","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"48","target":"293","id":"2569","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"58","target":"636","id":"2813","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"467","target":"495","id":"9430","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"450","target":"608","id":"9262","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"163","target":"727","id":"5055","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"268","target":"391","id":"6867","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"449","target":"452","id":"9248","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"580","target":"716","id":"10247","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"460","target":"576","id":"9362","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"574","target":"706","id":"10200","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"303","target":"543","id":"7439","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"19","target":"252","id":"1897","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"176","target":"426","id":"5289","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"585","target":"722","id":"10266","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"408","target":"460","id":"8777","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"72","target":"379","id":"3137","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"158","target":"540","id":"4950","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"514","target":"535","id":"9801","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"190","target":"574","id":"5562","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"297","target":"671","id":"7350","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"312","target":"636","id":"7562","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"100","target":"105","id":"3745","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"389","target":"666","id":"8561","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"374","target":"577","id":"8342","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"319","target":"569","id":"7667","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"260","target":"453","id":"6737","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"513","target":"530","id":"9797","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"123","target":"449","id":"4220","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"111","target":"155","id":"3962","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"77","target":"313","id":"3247","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"412","target":"658","id":"8833","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"469","target":"734","id":"9457","attributes":{"Weight":"1.0"},"color":"rgb(99,83,229)","size":1.0},{"source":"96","target":"219","id":"3672","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"302","target":"633","id":"7422","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"460","target":"532","id":"9360","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"385","target":"687","id":"8516","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"386","target":"667","id":"8528","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"363","target":"702","id":"8214","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"49","target":"275","id":"2587","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"270","target":"302","id":"6904","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"192","target":"570","id":"5591","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"35","target":"467","id":"2278","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"129","target":"166","id":"4328","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"50","target":"719","id":"2629","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"162","target":"578","id":"5028","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"215","target":"721","id":"6004","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"256","target":"592","id":"6677","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"527","target":"625","id":"9914","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"402","target":"557","id":"8723","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"119","target":"712","id":"4148","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"74","target":"311","id":"3174","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"62","target":"683","id":"2920","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"247","target":"467","id":"6521","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"284","target":"584","id":"7144","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"55","target":"263","id":"2729","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"24","target":"48","id":"1999","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"249","target":"422","id":"6546","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"243","target":"732","id":"6457","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"385","target":"611","id":"8510","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"198","target":"204","id":"5698","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"154","target":"397","id":"4872","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"172","target":"706","id":"5230","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"537","target":"702","id":"9992","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"56","target":"172","id":"2748","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"28","target":"626","id":"2117","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"225","target":"487","id":"6176","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"140","target":"316","id":"4561","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"376","target":"699","id":"8375","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"398","target":"639","id":"8674","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"80","target":"303","id":"3312","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"44","target":"433","id":"2472","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"497","target":"697","id":"9687","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"187","target":"542","id":"5506","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"196","target":"472","id":"5663","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"93","target":"716","id":"3617","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"313","target":"518","id":"7576","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"339","target":"721","id":"7951","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"9","target":"186","id":"1664","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"262","target":"354","id":"6774","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"23","target":"641","id":"1991","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"729","target":"730","id":"10685","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"212","target":"555","id":"5947","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"23","target":"439","id":"1987","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"517","target":"611","id":"9827","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"139","target":"238","id":"4536","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"94","target":"171","id":"3620","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"4","target":"709","id":"1553","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"690","target":"721","id":"10647","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"420","target":"488","id":"8907","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"114","target":"657","id":"4042","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"135","target":"349","id":"4461","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"140","target":"679","id":"4581","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"53","target":"684","id":"2687","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"600","target":"645","id":"10325","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"85","target":"443","id":"3422","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"673","target":"682","id":"10613","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"325","target":"417","id":"7734","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"73","target":"183","id":"3150","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"432","target":"469","id":"9055","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"431","target":"490","id":"9042","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"21","target":"48","id":"1936","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"4","target":"520","id":"1548","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"658","target":"731","id":"10580","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"282","target":"725","id":"7111","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"327","target":"517","id":"7768","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"689","target":"725","id":"10640","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"54","target":"319","id":"2702","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"272","target":"670","id":"6945","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"131","target":"180","id":"4370","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"77","target":"518","id":"3256","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"366","target":"591","id":"8247","attributes":{"Weight":"1.0"},"color":"rgb(148,67,213)","size":1.0},{"source":"128","target":"506","id":"4317","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"119","target":"506","id":"4143","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"692","target":"693","id":"10651","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"443","target":"547","id":"9198","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"66","target":"666","id":"3011","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"63","target":"474","id":"2934","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"188","target":"571","id":"5519","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"419","target":"600","id":"8901","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"269","target":"290","id":"6884","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"430","target":"461","id":"9029","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"147","target":"187","id":"4723","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"20","target":"91","id":"1912","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"488","target":"647","id":"9600","attributes":{"Weight":"1.0"},"color":"rgb(67,116,229)","size":1.0},{"source":"240","target":"711","id":"6411","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"618","target":"703","id":"10408","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"237","target":"449","id":"6360","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"351","target":"464","id":"8094","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"88","target":"692","id":"3508","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"459","target":"479","id":"9350","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"385","target":"656","id":"8514","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"638","target":"692","id":"10491","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"533","target":"705","id":"9965","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"318","target":"562","id":"7646","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"133","target":"345","id":"4420","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"171","target":"396","id":"5197","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"399","target":"412","id":"8684","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"439","target":"708","id":"9146","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"137","target":"273","id":"4502","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"82","target":"687","id":"3368","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"1","target":"525","id":"1478","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"231","target":"616","id":"6274","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"295","target":"318","id":"7313","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"110","target":"569","id":"3948","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"318","target":"355","id":"7637","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"26","target":"449","id":"2049","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"142","target":"147","id":"4605","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"168","target":"486","id":"5140","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"75","target":"403","id":"3203","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"72","target":"75","id":"3129","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"169","target":"267","id":"5149","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"103","target":"295","id":"3811","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"19","target":"416","id":"1900","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"103","target":"355","id":"3814","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"102","target":"305","id":"3791","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"90","target":"265","id":"3540","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"260","target":"596","id":"6742","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"135","target":"319","id":"4458","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"552","target":"595","id":"10069","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"43","target":"670","id":"2456","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"301","target":"469","id":"7406","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"567","target":"717","id":"10147","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"56","target":"527","id":"2757","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"150","target":"572","id":"4793","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"229","target":"355","id":"6238","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"111","target":"135","id":"3959","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"109","target":"378","id":"3918","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"86","target":"300","id":"3439","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"187","target":"263","id":"5495","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"335","target":"576","id":"7887","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"391","target":"559","id":"8588","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"164","target":"643","id":"5070","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"453","target":"723","id":"9293","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"378","target":"501","id":"8398","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"183","target":"684","id":"5434","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"58","target":"291","id":"2800","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"428","target":"732","id":"9017","attributes":{"Weight":"1.0"},"color":"rgb(229,115,67)","size":1.0},{"source":"34","target":"169","id":"2246","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"79","target":"480","id":"3292","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"228","target":"305","id":"6219","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"425","target":"523","id":"8970","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"260","target":"602","id":"6743","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"106","target":"630","id":"3869","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"314","target":"338","id":"7582","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"111","target":"294","id":"3966","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"36","target":"666","id":"2304","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"595","target":"710","id":"10305","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"376","target":"529","id":"8370","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"55","target":"514","id":"2738","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"330","target":"393","id":"7815","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"157","target":"669","id":"4943","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"438","target":"725","id":"9135","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"106","target":"181","id":"3859","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"400","target":"545","id":"8698","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"540","target":"641","id":"10009","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"130","target":"304","id":"4354","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"386","target":"527","id":"8521","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"316","target":"572","id":"7616","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"191","target":"531","id":"5578","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"169","target":"295","id":"5152","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"31","target":"554","id":"2181","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"122","target":"517","id":"4202","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"160","target":"621","id":"4991","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"267","target":"494","id":"6854","attributes":{"Weight":"1.0"},"color":"rgb(67,196,148)","size":1.0},{"source":"73","target":"204","id":"3153","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"47","target":"656","id":"2559","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"307","target":"680","id":"7497","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"527","target":"677","id":"9917","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"13","target":"584","id":"1769","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"495","target":"584","id":"9664","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"67","target":"516","id":"3022","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"227","target":"316","id":"6199","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"386","target":"522","id":"8520","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"464","target":"551","id":"9399","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"37","target":"107","id":"2308","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"273","target":"495","id":"6953","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"357","target":"564","id":"8156","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"591","target":"644","id":"10292","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"96","target":"100","id":"3665","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"263","target":"301","id":"6783","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"392","target":"561","id":"8604","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"422","target":"449","id":"8932","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"177","target":"408","id":"5311","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"101","target":"124","id":"3763","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"321","target":"626","id":"7691","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"344","target":"512","id":"8011","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"695","target":"733","id":"10660","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"289","target":"586","id":"7232","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"194","target":"702","id":"5633","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"76","target":"604","id":"3236","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"654","target":"702","id":"10570","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"428","target":"580","id":"9008","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"4","target":"118","id":"1536","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"169","target":"369","id":"5159","attributes":{"Weight":"1.0"},"color":"rgb(67,148,148)","size":1.0},{"source":"229","target":"295","id":"6235","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"537","target":"597","id":"9988","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"365","target":"513","id":"8236","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"2","target":"457","id":"1504","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"36","target":"306","id":"2294","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"23","target":"51","id":"1981","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"278","target":"705","id":"7033","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"257","target":"322","id":"6679","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"387","target":"590","id":"8539","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"300","target":"514","id":"7392","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"157","target":"514","id":"4935","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"106","target":"130","id":"3857","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"291","target":"503","id":"7267","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"288","target":"589","id":"7214","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"379","target":"702","id":"8418","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"322","target":"715","id":"7705","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"33","target":"484","id":"2236","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"202","target":"487","id":"5779","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"30","target":"186","id":"2147","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"55","target":"143","id":"2724","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"267","target":"295","id":"6848","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"3","target":"531","id":"1528","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"177","target":"612","id":"5319","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"81","target":"515","id":"3339","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"51","target":"695","id":"2641","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"304","target":"701","id":"7462","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"496","target":"673","id":"9675","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"380","target":"599","id":"8426","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"47","target":"674","id":"2561","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"392","target":"560","id":"8603","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"54","target":"294","id":"2701","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"251","target":"674","id":"6596","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"211","target":"212","id":"5912","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"166","target":"373","id":"5103","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"194","target":"500","id":"5625","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"303","target":"629","id":"7446","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"102","target":"353","id":"3794","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"654","target":"679","id":"10568","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"11","target":"404","id":"1718","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"180","target":"511","id":"5377","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"495","target":"570","id":"9663","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"81","target":"471","id":"3335","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"415","target":"583","id":"8849","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"268","target":"414","id":"6877","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"50","target":"319","id":"2613","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"76","target":"573","id":"3233","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"379","target":"537","id":"8412","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"368","target":"429","id":"8266","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"108","target":"274","id":"3893","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"254","target":"696","id":"6647","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"185","target":"634","id":"5473","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"369","target":"667","id":"8283","attributes":{"Weight":"1.0"},"color":"rgb(67,148,180)","size":1.0},{"source":"61","target":"496","id":"2886","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"165","target":"486","id":"5089","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"274","target":"526","id":"6966","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"65","target":"709","id":"2992","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"556","target":"656","id":"10090","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"455","target":"542","id":"9312","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"19","target":"481","id":"1906","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"153","target":"630","id":"4856","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"651","target":"729","id":"10556","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"195","target":"519","id":"5644","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"589","target":"719","id":"10284","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"90","target":"476","id":"3546","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"213","target":"513","id":"5965","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"260","target":"723","id":"6751","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"87","target":"728","id":"3481","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"52","target":"328","id":"2652","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"5","target":"240","id":"1563","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"374","target":"614","id":"8344","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"85","target":"151","id":"3410","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"186","target":"489","id":"5489","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"221","target":"645","id":"6113","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"78","target":"666","id":"3276","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"366","target":"693","id":"8250","attributes":{"Weight":"1.0"},"color":"rgb(115,148,148)","size":1.0},{"source":"365","target":"683","id":"8240","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"472","target":"521","id":"9478","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"176","target":"367","id":"5287","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"150","target":"576","id":"4794","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"227","target":"586","id":"6208","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"337","target":"633","id":"7921","attributes":{"Weight":"1.0"},"color":"rgb(99,180,148)","size":1.0},{"source":"10","target":"181","id":"1690","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"348","target":"654","id":"8057","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"136","target":"343","id":"4486","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"367","target":"464","id":"8256","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"301","target":"602","id":"7411","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"217","target":"278","id":"6030","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"140","target":"172","id":"4557","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"299","target":"301","id":"7370","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"590","target":"664","id":"10287","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"364","target":"683","id":"8225","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"70","target":"424","id":"3095","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"308","target":"575","id":"7505","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"166","target":"634","id":"5111","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"250","target":"557","id":"6572","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"594","target":"663","id":"10303","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"74","target":"384","id":"3175","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"61","target":"149","id":"2870","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"183","target":"633","id":"5429","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"260","target":"366","id":"6735","attributes":{"Weight":"1.0"},"color":"rgb(115,148,148)","size":1.0},{"source":"641","target":"695","id":"10505","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"144","target":"231","id":"4650","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"174","target":"293","id":"5252","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"373","target":"644","id":"8326","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"314","target":"507","id":"7588","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"427","target":"536","id":"8996","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"449","target":"482","id":"9251","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"320","target":"512","id":"7682","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"163","target":"501","id":"5048","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"261","target":"591","id":"6766","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"89","target":"257","id":"3518","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"648","target":"678","id":"10539","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"88","target":"339","id":"3493","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"217","target":"420","id":"6034","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"332","target":"580","id":"7847","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"362","target":"484","id":"8200","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"230","target":"344","id":"6250","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"319","target":"643","id":"7671","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"188","target":"332","id":"5514","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"129","target":"191","id":"4332","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"499","target":"552","id":"9702","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"144","target":"528","id":"4663","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"49","target":"355","id":"2592","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"210","target":"321","id":"5901","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"625","target":"667","id":"10435","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"233","target":"279","id":"6295","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"283","target":"412","id":"7128","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"75","target":"505","id":"3205","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"283","target":"290","id":"7116","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"206","target":"727","id":"5852","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"469","target":"539","id":"9448","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"283","target":"390","id":"7119","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"4","target":"43","id":"1534","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"20","target":"90","id":"1911","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"199","target":"220","id":"5715","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"238","target":"583","id":"6379","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"165","target":"168","id":"5078","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"442","target":"614","id":"9190","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"29","target":"313","id":"2130","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"146","target":"337","id":"4711","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"97","target":"274","id":"3689","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"287","target":"319","id":"7180","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"472","target":"565","id":"9482","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"55","target":"698","id":"2745","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"268","target":"411","id":"6874","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"156","target":"544","id":"4919","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"646","target":"734","id":"10528","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"610","target":"661","id":"10368","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"61","target":"682","id":"2896","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"325","target":"396","id":"7733","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"265","target":"341","id":"6819","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"87","target":"594","id":"3475","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"386","target":"681","id":"8531","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"372","target":"551","id":"8315","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"285","target":"735","id":"7164","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"476","target":"681","id":"9529","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"112","target":"223","id":"3992","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"541","target":"680","id":"10016","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"1","target":"173","id":"1467","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"204","target":"270","id":"5806","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"578","target":"723","id":"10235","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"424","target":"487","id":"8954","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"243","target":"293","id":"6448","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"269","target":"395","id":"6892","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"246","target":"436","id":"6501","attributes":{"Weight":"1.0"},"color":"rgb(196,67,213)","size":1.0},{"source":"277","target":"511","id":"7009","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"183","target":"688","id":"5435","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"443","target":"719","id":"9208","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"99","target":"630","id":"3741","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"497","target":"633","id":"9681","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"460","target":"527","id":"9358","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"377","target":"392","id":"8379","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"137","target":"284","id":"4503","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"74","target":"685","id":"3190","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"423","target":"674","id":"8948","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"589","target":"644","id":"10282","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"77","target":"479","id":"3254","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"17","target":"546","id":"1861","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"216","target":"381","id":"6011","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"600","target":"734","id":"10326","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"271","target":"615","id":"6926","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"253","target":"656","id":"6627","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"268","target":"561","id":"6880","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"358","target":"424","id":"8160","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"638","target":"639","id":"10488","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"179","target":"627","id":"5362","attributes":{"Weight":"1.0"},"color":"rgb(67,180,180)","size":1.0},{"source":"456","target":"551","id":"9325","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"138","target":"387","id":"4522","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"501","target":"563","id":"9716","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"82","target":"577","id":"3361","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"387","target":"628","id":"8540","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"194","target":"597","id":"5630","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"63","target":"715","id":"2944","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"325","target":"606","id":"7741","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"335","target":"555","id":"7885","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"135","target":"569","id":"4474","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"562","target":"604","id":"10120","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"232","target":"335","id":"6284","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"272","target":"628","id":"6943","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"194","target":"363","id":"5621","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"308","target":"335","id":"7499","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"291","target":"622","id":"7269","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"386","target":"616","id":"8525","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"123","target":"237","id":"4213","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"20","target":"265","id":"1919","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"55","target":"301","id":"2732","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"110","target":"629","id":"3953","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"528","target":"713","id":"9933","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"316","target":"569","id":"7615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"105","target":"366","id":"3849","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"152","target":"448","id":"4837","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"456","target":"609","id":"9326","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"310","target":"515","id":"7533","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"158","target":"732","id":"4957","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"109","target":"388","id":"3919","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"96","target":"181","id":"3670","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"71","target":"182","id":"3111","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"202","target":"600","id":"5781","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"286","target":"618","id":"7175","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"100","target":"153","id":"3748","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"307","target":"518","id":"7494","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"201","target":"595","id":"5763","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"273","target":"380","id":"6950","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"181","target":"630","id":"5397","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"576","target":"616","id":"10213","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"465","target":"647","id":"9408","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"64","target":"320","id":"2961","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"279","target":"376","id":"7039","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"140","target":"667","id":"4578","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"266","target":"504","id":"6834","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"239","target":"320","id":"6388","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"76","target":"679","id":"3239","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"162","target":"271","id":"5019","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"40","target":"247","id":"2380","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"20","target":"242","id":"1918","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"352","target":"711","id":"8115","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"54","target":"358","id":"2703","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"9","target":"595","id":"1680","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"244","target":"496","id":"6466","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"401","target":"423","id":"8709","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"382","target":"724","id":"8466","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"31","target":"105","id":"2168","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"40","target":"78","id":"2377","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"498","target":"687","id":"9700","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"298","target":"518","id":"7364","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"10","target":"341","id":"1695","attributes":{"Weight":"1.0"},"color":"rgb(83,148,148)","size":1.0},{"source":"184","target":"204","id":"5441","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"335","target":"642","id":"7891","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"45","target":"252","id":"2500","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"205","target":"605","id":"5834","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"47","target":"410","id":"2553","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"237","target":"249","id":"6354","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"312","target":"516","id":"7557","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"123","target":"447","id":"4219","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"183","target":"270","id":"5418","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"214","target":"362","id":"5979","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"75","target":"691","id":"3211","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"6","target":"541","id":"1598","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"62","target":"365","id":"2911","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"356","target":"545","id":"8143","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"27","target":"415","id":"2071","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"140","target":"532","id":"4573","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"50","target":"397","id":"2618","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"249","target":"291","id":"6543","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"508","target":"594","id":"9773","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"70","target":"358","id":"3093","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"294","target":"623","id":"7306","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"322","target":"474","id":"7696","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"402","target":"423","id":"8720","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"143","target":"157","id":"4627","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"699","target":"717","id":"10662","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"15","target":"526","id":"1814","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"274","target":"525","id":"6965","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"8","target":"144","id":"1631","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"522","target":"525","id":"9863","attributes":{"Weight":"1.0"},"color":"rgb(67,196,180)","size":1.0},{"source":"22","target":"51","id":"1961","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"91","target":"365","id":"3563","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"221","target":"424","id":"6102","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"615","target":"718","id":"10399","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"447","target":"622","id":"9236","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"96","target":"106","id":"3667","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"404","target":"520","id":"8745","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"22","target":"23","id":"1957","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"34","target":"276","id":"2251","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"16","target":"641","id":"1837","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"460","target":"646","id":"9366","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"400","target":"410","id":"8696","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"488","target":"662","id":"9601","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"168","target":"463","id":"5139","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"636","target":"688","id":"10481","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"175","target":"542","id":"5277","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"327","target":"721","id":"7777","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"71","target":"217","id":"3113","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"231","target":"335","id":"6263","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"302","target":"524","id":"7420","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"28","target":"210","id":"2098","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"48","target":"51","id":"2564","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"133","target":"566","id":"4427","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"89","target":"159","id":"3514","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"157","target":"491","id":"4934","attributes":{"Weight":"1.0"},"color":"rgb(99,83,229)","size":1.0},{"source":"232","target":"238","id":"6279","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"262","target":"512","id":"6780","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"574","target":"649","id":"10197","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"109","target":"506","id":"3922","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"257","target":"726","id":"6694","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"123","target":"252","id":"4215","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"583","target":"713","id":"10259","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"466","target":"689","id":"9423","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"440","target":"728","id":"9166","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"63","target":"102","id":"2922","attributes":{"Weight":"1.0"},"color":"rgb(196,67,180)","size":1.0},{"source":"216","target":"719","id":"6029","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"459","target":"541","id":"9353","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"192","target":"389","id":"5588","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"95","target":"506","id":"3656","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"28","target":"50","id":"2088","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"377","target":"405","id":"8384","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"404","target":"590","id":"8747","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"506","target":"617","id":"9755","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"311","target":"532","id":"7546","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"408","target":"522","id":"8778","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"8","target":"179","id":"1635","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"96","target":"309","id":"3675","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"146","target":"488","id":"4714","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"291","target":"482","id":"7266","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"378","target":"561","id":"8401","attributes":{"Weight":"1.0"},"color":"rgb(229,148,115)","size":1.0},{"source":"121","target":"129","id":"4171","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"377","target":"560","id":"8390","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"32","target":"545","id":"2198","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"368","target":"529","id":"8269","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"511","target":"539","id":"9787","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"439","target":"704","id":"9145","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"420","target":"662","id":"8912","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"647","target":"724","id":"10533","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"278","target":"337","id":"7024","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"292","target":"708","id":"7280","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"373","target":"629","id":"8324","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"361","target":"512","id":"8197","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"97","target":"585","id":"3700","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"177","target":"179","id":"5301","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"331","target":"431","id":"7831","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"80","target":"238","id":"3310","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"256","target":"564","id":"6675","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"380","target":"570","id":"8423","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"49","target":"564","id":"2598","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"622","target":"675","id":"10423","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"413","target":"414","id":"8835","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"29","target":"620","id":"2141","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"193","target":"730","id":"5615","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"70","target":"221","id":"3088","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"146","target":"420","id":"4713","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"69","target":"725","id":"3079","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"508","target":"523","id":"9768","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"69","target":"374","id":"3063","attributes":{"Weight":"1.0"},"color":"rgb(67,164,196)","size":1.0},{"source":"357","target":"510","id":"8154","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"214","target":"484","id":"5982","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"186","target":"236","id":"5482","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"419","target":"487","id":"8896","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"498","target":"611","id":"9693","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"664","target":"670","id":"10595","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"266","target":"453","id":"6833","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"288","target":"521","id":"7205","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"132","target":"483","id":"4411","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"72","target":"597","id":"3145","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"139","target":"335","id":"4540","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"102","target":"548","id":"3799","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"185","target":"675","id":"5474","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"198","target":"684","id":"5711","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"209","target":"484","id":"5897","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"597","target":"702","id":"10317","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"92","target":"551","id":"3590","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"89","target":"671","id":"3530","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"216","target":"528","id":"6016","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"106","target":"366","id":"3864","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"185","target":"490","id":"5469","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"383","target":"574","id":"8476","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"330","target":"405","id":"7819","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"308","target":"707","id":"7512","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"9","target":"30","id":"1660","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"82","target":"387","id":"3351","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"110","target":"342","id":"3942","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"74","target":"522","id":"3180","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"589","target":"663","id":"10283","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"300","target":"653","id":"7397","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"380","target":"495","id":"8422","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"75","target":"597","id":"3209","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"221","target":"450","id":"6103","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"358","target":"462","id":"8163","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"338","target":"417","id":"7927","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"704","target":"732","id":"10667","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"358","target":"555","id":"8165","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"281","target":"438","id":"7079","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"144","target":"318","id":"4656","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"200","target":"702","id":"5747","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"21","target":"293","id":"1944","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"313","target":"541","id":"7577","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"44","target":"342","id":"2469","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"305","target":"548","id":"7470","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"438","target":"683","id":"9132","attributes":{"Weight":"1.0"},"color":"rgb(83,164,148)","size":1.0},{"source":"556","target":"696","id":"10094","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"408","target":"677","id":"8785","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"179","target":"384","id":"5351","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"282","target":"438","id":"7099","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"213","target":"406","id":"5962","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"137","target":"495","id":"4509","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"18","target":"340","id":"1872","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"258","target":"308","id":"6696","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"76","target":"433","id":"3222","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"1","target":"296","id":"1472","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"145","target":"233","id":"4676","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"90","target":"365","id":"3543","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"22","target":"540","id":"1969","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"165","target":"463","id":"5088","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"412","target":"561","id":"8832","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"193","target":"282","id":"5598","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"218","target":"221","id":"6043","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"210","target":"627","id":"5909","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"20","target":"117","id":"1913","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"119","target":"163","id":"4133","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"93","target":"286","id":"3602","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"34","target":"103","id":"2244","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"256","target":"546","id":"6674","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"28","target":"146","id":"2096","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"375","target":"681","id":"8361","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"103","target":"546","id":"3819","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"195","target":"418","id":"5639","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"54","target":"644","id":"2720","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"371","target":"460","id":"8293","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"169","target":"196","id":"5146","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"178","target":"551","id":"5341","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"87","target":"676","id":"3480","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"566","target":"682","id":"10142","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"122","target":"573","id":"4203","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"472","target":"523","id":"9479","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"212","target":"490","id":"5946","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"293","target":"439","id":"7283","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"17","target":"355","id":"1856","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"350","target":"396","id":"8077","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"472","target":"728","id":"9489","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"369","target":"701","id":"8285","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"338","target":"534","id":"7930","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"98","target":"609","id":"3721","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"179","target":"460","id":"5354","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"331","target":"529","id":"7835","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"218","target":"296","id":"6048","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"400","target":"556","id":"8699","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"292","target":"733","id":"7282","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"638","target":"726","id":"10494","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"122","target":"648","id":"4208","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"70","target":"261","id":"3090","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"450","target":"716","id":"9266","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"44","target":"110","id":"2460","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"41","target":"495","id":"2406","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"183","target":"516","id":"5425","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"124","target":"262","id":"4236","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"381","target":"663","id":"8448","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"170","target":"694","id":"5188","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"214","target":"239","id":"5973","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"171","target":"507","id":"5200","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"116","target":"348","id":"4077","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"292","target":"641","id":"7277","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"580","target":"601","id":"10242","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"327","target":"475","id":"7765","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"83","target":"84","id":"3369","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"442","target":"454","id":"9181","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"129","target":"185","id":"4331","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"256","target":"275","id":"6664","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"87","target":"543","id":"3471","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"164","target":"371","id":"5063","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"382","target":"729","id":"8468","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"562","target":"589","id":"10118","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"348","target":"415","id":"8048","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"433","target":"480","id":"9072","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"89","target":"553","id":"3524","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"386","target":"625","id":"8526","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"41","target":"306","id":"2401","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"405","target":"559","id":"8757","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"34","target":"564","id":"2261","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"54","target":"642","id":"2719","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"79","target":"122","id":"3278","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"55","target":"300","id":"2731","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"724","target":"725","id":"10676","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"665","target":"690","id":"10597","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"57","target":"196","id":"2770","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"159","target":"726","id":"4979","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"465","target":"651","id":"9410","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"282","target":"724","id":"7110","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"325","target":"673","id":"7744","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"504","target":"596","id":"9734","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"94","target":"325","id":"3623","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"113","target":"579","id":"4016","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"409","target":"543","id":"8799","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"253","target":"401","id":"6619","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"311","target":"386","id":"7540","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"462","target":"642","id":"9387","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"504","target":"723","id":"9743","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"514","target":"653","id":"9805","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"367","target":"615","id":"8262","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"423","target":"694","id":"8949","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"157","target":"263","id":"4925","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"160","target":"398","id":"4986","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"114","target":"474","id":"4033","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"143","target":"653","id":"4646","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"563","target":"588","id":"10126","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"504","target":"721","id":"9742","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"289","target":"490","id":"7226","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"135","target":"245","id":"4454","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"104","target":"169","id":"3823","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"12","target":"555","id":"1746","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"307","target":"471","id":"7490","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"25","target":"48","id":"2017","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"114","target":"159","id":"4023","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"328","target":"427","id":"7783","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"657","target":"671","id":"10577","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"522","target":"667","id":"9870","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"467","target":"570","id":"9431","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"441","target":"647","id":"9171","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"534","target":"670","id":"9970","attributes":{"Weight":"1.0"},"color":"rgb(132,148,213)","size":1.0},{"source":"465","target":"730","id":"9415","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"201","target":"499","id":"5760","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"29","target":"518","id":"2139","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"550","target":"563","id":"10060","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"254","target":"402","id":"6636","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"204","target":"736","id":"5820","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"133","target":"496","id":"4424","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"255","target":"401","id":"6650","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"388","target":"550","id":"8549","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"114","target":"638","id":"4039","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"193","target":"735","id":"5617","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"117","target":"502","id":"4105","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"41","target":"247","id":"2398","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"152","target":"563","id":"4841","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"32","target":"356","id":"2192","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"32","target":"402","id":"2195","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"142","target":"698","id":"4625","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"413","target":"560","id":"8837","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"456","target":"492","id":"9322","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"91","target":"681","id":"3572","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"240","target":"434","id":"6401","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"610","target":"665","id":"10369","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"76","target":"521","id":"3228","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"204","target":"684","id":"5817","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"210","target":"420","id":"5904","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"145","target":"279","id":"4677","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"536","target":"615","id":"9983","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"63","target":"246","id":"2928","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"170","target":"660","id":"5186","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"475","target":"687","id":"9524","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"13","target":"598","id":"1770","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"315","target":"570","id":"7601","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"151","target":"231","id":"4807","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0}],"nodes":[{"label":"Ha Dae-sung","x":1235.4569091796875,"y":1551.8240966796875,"id":"268","attributes":{"Eigenvector Centrality":"0.2315255949886878","Betweenness Centrality":"0.0","Appearances":"13","No":"8","Country":"South Korea","Club Country":"China","Club":"Beijing Guoan","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"2 March 1985 (aged 29)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Maxi Pereira","x":-192.70481872558594,"y":101.33695220947266,"id":"486","attributes":{"Eigenvector Centrality":"0.445244561946227","Betweenness Centrality":"0.002622941975601633","Appearances":"90","No":"16","Country":"Uruguay","Club Country":"Portugal","Club":"Benfica","Weighted Degree":"26.0","Modularity Class":"6","Date of birth / Age":"8 June 1984 (aged 30)","Degree":"26","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.32096069868995636"},"color":"rgb(229,197,67)","size":15.333333969116211},{"label":"Manabu Saito","x":700.6929931640625,"y":617.4116821289062,"id":"441","attributes":{"Eigenvector Centrality":"0.3171815377783478","Betweenness Centrality":"0.0","Appearances":"5","No":"20","Country":"Japan","Club Country":"Japan","Club":"Yokohama F. Marinos","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"4 April 1990 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Augusto Fernández","x":-1096.7728271484375,"y":332.52386474609375,"id":"70","attributes":{"Eigenvector Centrality":"0.4883294167498835","Betweenness Centrality":"0.0013747511405558612","Appearances":"9","No":"13","Country":"Argentina","Club Country":"Spain","Club":"Celta Vigo","Weighted Degree":"23.0","Modularity Class":"19","Date of birth / Age":"10 April 1986 (aged 28)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3013530135301353"},"color":"rgb(67,229,229)","size":11.333333015441895},{"label":"Edinson Cavani","x":-109.81510162353516,"y":97.26505279541016,"id":"185","attributes":{"Eigenvector Centrality":"0.5745311470651605","Betweenness Centrality":"0.003956184981235499","Appearances":"62","No":"21","Country":"Uruguay","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"31.0","Modularity Class":"6","Date of birth / Age":"14 February 1987 (aged 27)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.328125"},"color":"rgb(229,197,67)","size":22.0},{"label":"Matthias Ginter","x":444.2855224609375,"y":-312.178466796875,"id":"480","attributes":{"Eigenvector Centrality":"0.5180768997288345","Betweenness Centrality":"0.0023990924168658203","Appearances":"2","No":"3","Country":"Germany","Club Country":"Germany","Club":"SC Freiburg","Weighted Degree":"25.0","Modularity Class":"13","Date of birth / Age":"19 January 1994 (aged 20)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3188720173535792"},"color":"rgb(67,229,164)","size":14.0},{"label":"Ki Sung-yueng","x":1168.5513916015625,"y":1424.8240966796875,"id":"390","attributes":{"Eigenvector Centrality":"0.24281665265392566","Betweenness Centrality":"0.0038744127800200497","Appearances":"58","No":"16","Country":"South Korea","Club Country":"England","Club":"Sunderland","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"24 January 1989 (aged 25)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.2628755364806867"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Johan Djourou","x":57.069740295410156,"y":323.0292663574219,"id":"339","attributes":{"Eigenvector Centrality":"0.39804740593626875","Betweenness Centrality":"7.203079250750265E-4","Appearances":"44","No":"20","Country":"Switzerland","Club Country":"Germany","Club":"Hamburger SV","Weighted Degree":"23.0","Modularity Class":"0","Date of birth / Age":"18 January 1987 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3002450980392157"},"color":"rgb(164,229,67)","size":11.333333015441895},{"label":"Ogenyi Onazi","x":-33.87162780761719,"y":-1294.2327880859375,"id":"537","attributes":{"Eigenvector Centrality":"0.4166984434880051","Betweenness Centrality":"0.01153289479646615","Appearances":"21","No":"17","Country":"Nigeria","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"14","Date of birth / Age":"25 December 1992 (aged 21)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3336359509759419"},"color":"rgb(67,229,100)","size":18.0},{"label":"Noel Valladares (c)","x":1633.689697265625,"y":-1230.439697265625,"id":"536","attributes":{"Eigenvector Centrality":"0.2366488794633179","Betweenness Centrality":"0.0","Appearances":"122","No":"18","Country":"Honduras","Club Country":"Honduras","Club":"Olimpia","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"3 May 1977 (aged 37)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Jackson Martínez","x":-870.146240234375,"y":947.0243530273438,"id":"304","attributes":{"Eigenvector Centrality":"0.446466126398784","Betweenness Centrality":"0.007655587436909223","Appearances":"27","No":"21","Country":"Colombia","Club Country":"Portugal","Club":"Porto","Weighted Degree":"29.0","Modularity Class":"11","Date of birth / Age":"3 October 1986 (aged 27)","Degree":"29","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(67,67,229)","size":19.333332061767578},{"label":"Shkodran Mustafi","x":459.89215087890625,"y":-438.27008056640625,"id":"648","attributes":{"Eigenvector Centrality":"0.4748329217376384","Betweenness Centrality":"0.0","Appearances":"1","No":"21","Country":"Germany","Club Country":"Italy","Club":"Sampdoria","Weighted Degree":"22.0","Modularity Class":"13","Date of birth / Age":"17 April 1992 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2955367913148371"},"color":"rgb(67,229,164)","size":10.0},{"label":"Leonardo Bonucci","x":125.05670928955078,"y":766.1940307617188,"id":"416","attributes":{"Eigenvector Centrality":"0.5455496050511396","Betweenness Centrality":"0.0016215443882875223","Appearances":"37","No":"19","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"1 May 1987 (aged 27)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Eugenio Mena","x":-294.9122009277344,"y":1499.1805419921875,"id":"209","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"25","No":"2","Country":"Chile","Club Country":"Brazil","Club":"Santos","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"18 July 1988 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Rafael Márquez (c)","x":-2148.71923828125,"y":446.01300048828125,"id":"581","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"120","No":"4","Country":"Mexico","Club Country":"Mexico","Club":"León","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"13 February 1979 (aged 35)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Glen Johnson","x":-77.03864288330078,"y":-917.1484985351562,"id":"258","attributes":{"Eigenvector Centrality":"0.6237674591008824","Betweenness Centrality":"0.0010635550306756442","Appearances":"52","No":"2","Country":"England","Club Country":"England","Club":"Liverpool","Weighted Degree":"27.0","Modularity Class":"28","Date of birth / Age":"23 August 1984 (aged 29)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(67,229,132)","size":16.666667938232422},{"label":"Kunle Odunlami","x":-51.50978469848633,"y":-1656.866943359375,"id":"403","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"11","No":"12","Country":"Nigeria","Club Country":"Nigeria","Club":"Sunshine Stars","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"5 March 1990 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Jerry Bengtson","x":1590.51611328125,"y":-1207.114501953125,"id":"328","attributes":{"Eigenvector Centrality":"0.23664887946331797","Betweenness Centrality":"0.0","Appearances":"44","No":"11","Country":"Honduras","Club Country":"United States","Club":"New England Revolution","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"8 April 1987 (aged 27)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Park Chu-young","x":1047.7447509765625,"y":1576.7559814453125,"id":"559","attributes":{"Eigenvector Centrality":"0.2434948987926026","Betweenness Centrality":"0.005100478514823181","Appearances":"64","No":"10","Country":"South Korea","Club Country":"England","Club":"Watford","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"10 July 1985 (aged 28)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.26649746192893403"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Sergey Ryzhikov","x":-1292.9913330078125,"y":-1369.3878173828125,"id":"641","attributes":{"Eigenvector Centrality":"0.2784495406871368","Betweenness Centrality":"0.0019868644316807485","Appearances":"1","No":"16","Country":"Russia","Club Country":"Russia","Club":"Rubin Kazan","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"19 September 1980 (aged 33)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.256186824677588"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Sammir","x":-386.4237060546875,"y":741.6884155273438,"id":"624","attributes":{"Eigenvector Centrality":"0.3564884604564037","Betweenness Centrality":"0.0013005076523818384","Appearances":"6","No":"19","Country":"Croatia","Club Country":"Spain","Club":"Getafe","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"23 April 1987 (aged 27)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30209617755856966"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Milan Badelj","x":-271.9816589355469,"y":685.1373901367188,"id":"514","attributes":{"Eigenvector Centrality":"0.3589573457329694","Betweenness Centrality":"6.712739342317829E-4","Appearances":"9","No":"15","Country":"Croatia","Club Country":"Germany","Club":"Hamburger SV","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"25 February 1989 (aged 25)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3008595988538682"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"José María Basanta","x":-1144.7310791015625,"y":286.07470703125,"id":"358","attributes":{"Eigenvector Centrality":"0.4756507714516443","Betweenness Centrality":"0.0","Appearances":"10","No":"23","Country":"Argentina","Club Country":"Mexico","Club":"Monterrey","Weighted Degree":"22.0","Modularity Class":"19","Date of birth / Age":"3 April 1984 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,229)","size":10.0},{"label":"Raúl Albiol","x":-934.9326782226562,"y":-101.35684204101562,"id":"591","attributes":{"Eigenvector Centrality":"0.9188656127061582","Betweenness Centrality":"0.004836935094169011","Appearances":"46","No":"2","Country":"Spain","Club Country":"Italy","Club":"Napoli","Weighted Degree":"32.0","Modularity Class":"23","Date of birth / Age":"4 September 1985 (aged 28)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.34249767008387694"},"color":"rgb(229,67,197)","size":23.33333396911621},{"label":"Jordan Henderson","x":-137.00108337402344,"y":-918.7854614257812,"id":"348","attributes":{"Eigenvector Centrality":"0.6237674591008823","Betweenness Centrality":"0.0010635550306756442","Appearances":"11","No":"14","Country":"England","Club Country":"England","Club":"Liverpool","Weighted Degree":"27.0","Modularity Class":"28","Date of birth / Age":"17 June 1990 (aged 23)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(67,229,132)","size":16.666667938232422},{"label":"Masoud Shojaei","x":2059.234375,"y":1154.055419921875,"id":"467","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"50","No":"7","Country":"Iran","Club Country":"Spain","Club":"Las Palmas","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"9 June 1984 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Eden Hazard","x":-567.4556884765625,"y":-819.4087524414062,"id":"179","attributes":{"Eigenvector Centrality":"0.8054480780736979","Betweenness Centrality":"0.004148263742758199","Appearances":"45","No":"10","Country":"Belgium","Club Country":"England","Club":"Chelsea","Weighted Degree":"33.0","Modularity Class":"28","Date of birth / Age":"7 January 1991 (aged 23)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34950071326676174"},"color":"rgb(67,229,132)","size":24.666667938232422},{"label":"Victor Moses","x":-114.1285629272461,"y":-1433.164306640625,"id":"702","attributes":{"Eigenvector Centrality":"0.4988980810402226","Betweenness Centrality":"0.0059333803012395","Appearances":"22","No":"11","Country":"Nigeria","Club Country":"England","Club":"Liverpool","Weighted Degree":"31.0","Modularity Class":"14","Date of birth / Age":"12 December 1990 (aged 23)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3206806282722513"},"color":"rgb(67,229,100)","size":22.0},{"label":"Gotoku Sakai","x":626.2552490234375,"y":448.10638427734375,"id":"264","attributes":{"Eigenvector Centrality":"0.3583261950704595","Betweenness Centrality":"0.006133180800190253","Appearances":"12","No":"3","Country":"Japan","Club Country":"Germany","Club":"VfB Stuttgart","Weighted Degree":"25.0","Modularity Class":"27","Date of birth / Age":"14 March 1991 (aged 23)","Degree":"25","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.33669262482821805"},"color":"rgb(67,100,229)","size":14.0},{"label":"Jung Sung-ryong","x":1253.423583984375,"y":1593.709716796875,"id":"377","attributes":{"Eigenvector Centrality":"0.2315255949886878","Betweenness Centrality":"0.0","Appearances":"61","No":"1","Country":"South Korea","Club Country":"South Korea","Club":"Suwon Bluewings","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"4 January 1985 (aged 29)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Giorgos Samaras","x":1468.084716796875,"y":290.1719665527344,"id":"254","attributes":{"Eigenvector Centrality":"0.3022386539935686","Betweenness Centrality":"0.015975933226232208","Appearances":"74","No":"7","Country":"Greece","Club Country":"Scotland","Club":"Celtic","Weighted Degree":"25.0","Modularity Class":"15","Date of birth / Age":"21 February 1985 (aged 29)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30523255813953487"},"color":"rgb(229,67,100)","size":14.0},{"label":"Fabrice Olinga","x":342.7852783203125,"y":88.49571228027344,"id":"217","attributes":{"Eigenvector Centrality":"0.3410519410379994","Betweenness Centrality":"0.0014859748176380408","Appearances":"8","No":"19","Country":"Cameroon","Club Country":"Belgium","Club":"Zulte Waregem","Weighted Degree":"23.0","Modularity Class":"17","Date of birth / Age":"12 May 1996 (aged 18)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(67,132,229)","size":11.333333015441895},{"label":"Maxim Choupo-Moting","x":590.2083740234375,"y":305.8430480957031,"id":"488","attributes":{"Eigenvector Centrality":"0.37131553578083376","Betweenness Centrality":"0.01444381785094054","Appearances":"26","No":"13","Country":"Cameroon","Club Country":"Germany","Club":"Mainz 05","Weighted Degree":"26.0","Modularity Class":"17","Date of birth / Age":"23 March 1989 (aged 25)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3319783197831978"},"color":"rgb(67,132,229)","size":15.333333969116211},{"label":"Jermaine Jones","x":734.7730102539062,"y":-1356.2696533203125,"id":"326","attributes":{"Eigenvector Centrality":"0.30080819732983394","Betweenness Centrality":"0.005869237175578168","Appearances":"42","No":"13","Country":"United States","Club Country":"Turkey","Club":"Be?ikta?","Weighted Degree":"24.0","Modularity Class":"26","Date of birth / Age":"3 November 1981 (aged 32)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3057404326123128"},"color":"rgb(100,229,67)","size":12.666666984558105},{"label":"Viktor Fayzulin","x":-1257.4415283203125,"y":-1320.703125,"id":"704","attributes":{"Eigenvector Centrality":"0.34982465542448266","Betweenness Centrality":"0.004583905120882726","Appearances":"19","No":"20","Country":"Russia","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"26.0","Modularity Class":"2","Date of birth / Age":"22 April 1986 (aged 28)","Degree":"26","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.27904328018223234"},"color":"rgb(229,67,67)","size":15.333333969116211},{"label":"Ghasem Haddadifar","x":1942.61962890625,"y":1184.328125,"id":"247","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"17","No":"11","Country":"Iran","Club Country":"Iran","Club":"Zob Ahan","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"12 July 1983 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Mamadou Sakho","x":-55.28839874267578,"y":-503.58740234375,"id":"440","attributes":{"Eigenvector Centrality":"0.6719226159356836","Betweenness Centrality":"0.0030924546628977845","Appearances":"19","No":"5","Country":"France","Club Country":"England","Club":"Liverpool","Weighted Degree":"31.0","Modularity Class":"16","Date of birth / Age":"13 February 1990 (aged 24)","Degree":"31","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3309320126069338"},"color":"rgb(229,67,229)","size":22.0},{"label":"Majeed Waris","x":324.3560485839844,"y":1417.5355224609375,"id":"437","attributes":{"Eigenvector Centrality":"0.30228653977349984","Betweenness Centrality":"0.002131225990650735","Appearances":"13","No":"18","Country":"Ghana","Club Country":"France","Club":"Valenciennes","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"19 September 1991 (aged 22)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.29708973322554566"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"Jaime Ayoví","x":-1695.57470703125,"y":-675.8545532226562,"id":"305","attributes":{"Eigenvector Centrality":"0.3623062182068215","Betweenness Centrality":"0.0","Appearances":"30","No":"17","Country":"Ecuador","Club Country":"Mexico","Club":"Tijuana","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"21 February 1988 (aged 26)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Christian Atsu","x":298.6339111328125,"y":1290.552734375,"id":"118","attributes":{"Eigenvector Centrality":"0.3040272220343691","Betweenness Centrality":"0.0033363298478359237","Appearances":"23","No":"7","Country":"Ghana","Club Country":"Netherlands","Club":"Vitesse","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"10 January 1992 (aged 22)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2960128876359243"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"Albert Adomah","x":449.0231628417969,"y":1183.720458984375,"id":"18","attributes":{"Eigenvector Centrality":"0.3025700565824491","Betweenness Centrality":"0.003289744732058429","Appearances":"15","No":"14","Country":"Ghana","Club Country":"England","Club":"Middlesbrough","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"13 December 1987 (aged 26)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2973300970873787"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"João Moutinho","x":-709.1241455078125,"y":410.86029052734375,"id":"332","attributes":{"Eigenvector Centrality":"0.45621028793672236","Betweenness Centrality":"0.0015929309060191388","Appearances":"68","No":"8","Country":"Portugal","Club Country":"France","Club":"AS Monaco","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"8 September 1986 (aged 27)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(229,164,67)","size":14.0},{"label":"Neymar","x":-688.3394775390625,"y":-195.9782257080078,"id":"529","attributes":{"Eigenvector Centrality":"0.9475639715704524","Betweenness Centrality":"0.005368122690024312","Appearances":"49","No":"10","Country":"Brazil","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"36.0","Modularity Class":"23","Date of birth / Age":"5 February 1992 (aged 22)","Degree":"36","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.34249767008387694"},"color":"rgb(229,67,197)","size":28.66666603088379},{"label":"Giannis Fetfatzidis","x":1469.207275390625,"y":587.9270629882812,"id":"250","attributes":{"Eigenvector Centrality":"0.2880961103470562","Betweenness Centrality":"0.004458743060852615","Appearances":"19","No":"18","Country":"Greece","Club Country":"Italy","Club":"Genoa","Weighted Degree":"24.0","Modularity Class":"15","Date of birth / Age":"21 December 1990 (aged 23)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2996331023236853"},"color":"rgb(229,67,100)","size":12.666666984558105},{"label":"Axel Witsel","x":-844.521240234375,"y":-894.0247192382812,"id":"74","attributes":{"Eigenvector Centrality":"0.6174086302888657","Betweenness Centrality":"0.006770928561410678","Appearances":"48","No":"6","Country":"Belgium","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"28.0","Modularity Class":"28","Date of birth / Age":"12 January 1989 (aged 25)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3343949044585987"},"color":"rgb(67,229,132)","size":18.0},{"label":"Gary Medel","x":-135.52125549316406,"y":1534.207275390625,"id":"239","attributes":{"Eigenvector Centrality":"0.32635320504193394","Betweenness Centrality":"0.006690023717310697","Appearances":"61","No":"17","Country":"Chile","Club Country":"Wales","Club":"Cardiff City","Weighted Degree":"23.0","Modularity Class":"18","Date of birth / Age":"3 August 1987 (aged 26)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,132,67)","size":11.333333015441895},{"label":"Eyong Enoh","x":420.9879455566406,"y":149.03363037109375,"id":"210","attributes":{"Eigenvector Centrality":"0.3227718779440803","Betweenness Centrality":"0.0","Appearances":"38","No":"18","Country":"Cameroon","Club Country":"Turkey","Club":"Antalyaspor","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"23 March 1986 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Reza Haghighi","x":1912.50830078125,"y":1151.8526611328125,"id":"599","attributes":{"Eigenvector Centrality":"0.21274429344229642","Betweenness Centrality":"0.0","Appearances":"8","No":"8","Country":"Iran","Club Country":"Iran","Club":"Persepolis","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"1 February 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Rahman Ahmadi","x":2011.62890625,"y":1143.9183349609375,"id":"584","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"10","No":"1","Country":"Iran","Club Country":"Iran","Club":"Sepahan","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"30 July 1980 (aged 33)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Landry N\u0027Guémo","x":380.334228515625,"y":127.53271484375,"id":"407","attributes":{"Eigenvector Centrality":"0.3227718779440803","Betweenness Centrality":"0.0","Appearances":"40","No":"7","Country":"Cameroon","Club Country":"France","Club":"Bordeaux","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"28 November 1985 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Omar Gonzalez","x":770.2596435546875,"y":-1596.33251953125,"id":"544","attributes":{"Eigenvector Centrality":"0.27181518429351065","Betweenness Centrality":"0.0","Appearances":"20","No":"3","Country":"United States","Club Country":"United States","Club":"Los Angeles Galaxy","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"11 October 1988 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Mauricio Isla","x":-142.6880340576172,"y":1330.8896484375,"id":"483","attributes":{"Eigenvector Centrality":"0.5204561062047254","Betweenness Centrality":"0.00860736609402208","Appearances":"47","No":"4","Country":"Chile","Club Country":"Italy","Club":"Juventus","Weighted Degree":"32.0","Modularity Class":"18","Date of birth / Age":"12 June 1988 (aged 26)","Degree":"32","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.31599312123817713"},"color":"rgb(229,132,67)","size":23.33333396911621},{"label":"Marco Ureña","x":2171.260498046875,"y":406.7074890136719,"id":"448","attributes":{"Eigenvector Centrality":"0.24681597010360032","Betweenness Centrality":"0.007576013866204986","Appearances":"24","No":"21","Country":"Costa Rica","Club Country":"Russia","Club":"Kuban Krasnodar","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"5 March 1990 (aged 24)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.27212143650499815"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Alireza Haghighi","x":1910.173095703125,"y":1066.8309326171875,"id":"35","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"6","No":"12","Country":"Iran","Club Country":"Portugal","Club":"Sporting Covilhã","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"2 May 1988 (aged 26)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Nabil Ghilas","x":-1331.1390380859375,"y":965.755126953125,"id":"526","attributes":{"Eigenvector Centrality":"0.4451346192495991","Betweenness Centrality":"0.00948599580264796","Appearances":"5","No":"9","Country":"Algeria","Club Country":"Portugal","Club":"Porto","Weighted Degree":"30.0","Modularity Class":"24","Date of birth / Age":"20 April 1990 (aged 24)","Degree":"30","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.32608695652173914"},"color":"rgb(67,164,229)","size":20.666667938232422},{"label":"Ejike Uzoenyi","x":-90.41376495361328,"y":-1613.627685546875,"id":"194","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"21","No":"3","Country":"Nigeria","Club Country":"Nigeria","Club":"Enugu Rangers","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"23 March 1988 (aged 26)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Giancarlo González","x":2265.36669921875,"y":299.92572021484375,"id":"248","attributes":{"Eigenvector Centrality":"0.23496944760866384","Betweenness Centrality":"0.0","Appearances":"35","No":"3","Country":"Costa Rica","Club Country":"United States","Club":"Columbus Crew","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"8 February 1988 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Ezequiel Lavezzi","x":-846.7564697265625,"y":254.6559600830078,"id":"212","attributes":{"Eigenvector Centrality":"0.6719025529242287","Betweenness Centrality":"0.0033630652398584098","Appearances":"31","No":"22","Country":"Argentina","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"31.0","Modularity Class":"19","Date of birth / Age":"3 May 1985 (aged 29)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3173575129533679"},"color":"rgb(67,229,229)","size":22.0},{"label":"Mats Hummels","x":607.8975219726562,"y":-421.7085876464844,"id":"475","attributes":{"Eigenvector Centrality":"0.500680986024227","Betweenness Centrality":"0.008472576600609625","Appearances":"30","No":"5","Country":"Germany","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"24.0","Modularity Class":"13","Date of birth / Age":"16 December 1988 (aged 25)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.310126582278481"},"color":"rgb(67,229,164)","size":12.666666984558105},{"label":"Lee Keun-ho","x":1296.3543701171875,"y":1607.599609375,"id":"413","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"63","No":"11","Country":"South Korea","Club Country":"South Korea","Club":"Sangju Sangmu","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"11 April 1985 (aged 29)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Giovanni Sio","x":405.2397155761719,"y":-662.28076171875,"id":"257","attributes":{"Eigenvector Centrality":"0.37146876286160685","Betweenness Centrality":"0.004611725554141086","Appearances":"7","No":"21","Country":"Ivory Coast","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"26.0","Modularity Class":"9","Date of birth / Age":"31 March 1989 (aged 25)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(164,67,229)","size":15.333333969116211},{"label":"Yuri Lodygin","x":-1301.04150390625,"y":-1265.7510986328125,"id":"732","attributes":{"Eigenvector Centrality":"0.34982465542448254","Betweenness Centrality":"0.004583905120882726","Appearances":"3","No":"12","Country":"Russia","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"26.0","Modularity Class":"2","Date of birth / Age":"26 May 1990 (aged 24)","Degree":"26","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.27904328018223234"},"color":"rgb(229,67,67)","size":15.333333969116211},{"label":"Sol Bamba","x":570.6759033203125,"y":-908.820556640625,"id":"657","attributes":{"Eigenvector Centrality":"0.30966117600400694","Betweenness Centrality":"0.0","Appearances":"43","No":"22","Country":"Ivory Coast","Club Country":"Turkey","Club":"Trabzonspor","Weighted Degree":"22.0","Modularity Class":"9","Date of birth / Age":"13 January 1985 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(164,67,229)","size":10.0},{"label":"Aïssa Mandi","x":-1380.8287353515625,"y":1169.2930908203125,"id":"15","attributes":{"Eigenvector Centrality":"0.2958935568628798","Betweenness Centrality":"0.0","Appearances":"2","No":"20","Country":"Algeria","Club Country":"France","Club":"Reims","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"22 October 1991 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Ognjen Vukojevic","x":-265.94671630859375,"y":620.2861938476562,"id":"539","attributes":{"Eigenvector Centrality":"0.37500667699203727","Betweenness Centrality":"0.0014678886642237275","Appearances":"55","No":"8","Country":"Croatia","Club Country":"Ukraine","Club":"Dynamo Kyiv","Weighted Degree":"24.0","Modularity Class":"25","Date of birth / Age":"20 December 1983 (aged 30)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31450577663671375"},"color":"rgb(132,67,229)","size":12.666666984558105},{"label":"Lucas Digne","x":-18.41677474975586,"y":-111.03685760498047,"id":"425","attributes":{"Eigenvector Centrality":"0.6370473545952836","Betweenness Centrality":"0.001865102966313942","Appearances":"2","No":"17","Country":"France","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"20 July 1993 (aged 20)","Degree":"29","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Christian Noboa","x":-1672.23583984375,"y":-885.3366088867188,"id":"120","attributes":{"Eigenvector Centrality":"0.4300722628882676","Betweenness Centrality":"0.01081726782351466","Appearances":"42","No":"6","Country":"Ecuador","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"28.0","Modularity Class":"4","Date of birth / Age":"9 April 1985 (aged 29)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29317909852413243"},"color":"rgb(229,67,132)","size":18.0},{"label":"Koo Ja-cheol (c)","x":1210.030029296875,"y":1383.635498046875,"id":"399","attributes":{"Eigenvector Centrality":"0.2716656711357499","Betweenness Centrality":"0.007710065459146181","Appearances":"37","No":"13","Country":"South Korea","Club Country":"Germany","Club":"Mainz 05","Weighted Degree":"25.0","Modularity Class":"10","Date of birth / Age":"27 February 1989 (aged 25)","Degree":"25","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.28846153846153844"},"color":"rgb(229,67,164)","size":14.0},{"label":"Adnan Januzaj","x":-638.5029907226562,"y":-663.0790405273438,"id":"8","attributes":{"Eigenvector Centrality":"0.8465738555476343","Betweenness Centrality":"0.005671820760248386","Appearances":"1","No":"20","Country":"Belgium","Club Country":"England","Club":"Manchester United","Weighted Degree":"34.0","Modularity Class":"28","Date of birth / Age":"5 February 1995 (aged 19)","Degree":"34","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3554158607350097"},"color":"rgb(67,229,132)","size":26.0},{"label":"Rúben Amorim","x":-743.581787109375,"y":322.57769775390625,"id":"618","attributes":{"Eigenvector Centrality":"0.4623139362600413","Betweenness Centrality":"0.0011159545915913598","Appearances":"13","No":"20","Country":"Portugal","Club Country":"Portugal","Club":"Benfica","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"27 January 1985 (aged 29)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31722054380664655"},"color":"rgb(229,164,67)","size":14.0},{"label":"Daniel Van Buyten","x":-361.6231994628906,"y":-626.7444458007812,"id":"140","attributes":{"Eigenvector Centrality":"0.835724321534549","Betweenness Centrality":"0.008695741941330284","Appearances":"79","No":"15","Country":"Belgium","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"28","Date of birth / Age":"7 February 1978 (aged 36)","Degree":"35","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.35627726611730487"},"color":"rgb(67,229,132)","size":27.33333396911621},{"label":"Cristian Gamboa","x":2154.08251953125,"y":199.01004028320312,"id":"128","attributes":{"Eigenvector Centrality":"0.24626357410920513","Betweenness Centrality":"0.004369178047589387","Appearances":"25","No":"16","Country":"Costa Rica","Club Country":"Norway","Club":"Rosenborg","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"24 October 1989 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.26717557251908397"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Luiz Gustavo","x":-456.71649169921875,"y":-142.21359252929688,"id":"431","attributes":{"Eigenvector Centrality":"0.6500423521794667","Betweenness Centrality":"0.002644490835880301","Appearances":"19","No":"17","Country":"Brazil","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"28.0","Modularity Class":"23","Date of birth / Age":"23 July 1987 (aged 26)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33242876526458615"},"color":"rgb(229,67,197)","size":18.0},{"label":"Haris Seferovic","x":141.21534729003906,"y":262.27655029296875,"id":"271","attributes":{"Eigenvector Centrality":"0.4282958634195428","Betweenness Centrality":"0.006035628087924649","Appearances":"11","No":"9","Country":"Switzerland","Club Country":"Spain","Club":"Real Sociedad","Weighted Degree":"25.0","Modularity Class":"0","Date of birth / Age":"22 February 1992 (aged 22)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.317083692838654"},"color":"rgb(164,229,67)","size":14.0},{"label":"Bruno Martins Indi","x":870.9440307617188,"y":71.02484130859375,"id":"94","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"16","No":"4","Country":"Netherlands","Club Country":"Netherlands","Club":"Feyenoord","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"8 February 1992 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Harrison Afful","x":468.0885314941406,"y":1387.692626953125,"id":"272","attributes":{"Eigenvector Centrality":"0.2902743690727881","Betweenness Centrality":"0.0","Appearances":"41","No":"23","Country":"Ghana","Club Country":"Tunisia","Club":"Espérance","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"24 June 1986 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Pedro","x":-1064.4056396484375,"y":-381.1362609863281,"id":"569","attributes":{"Eigenvector Centrality":"0.9370904429273632","Betweenness Centrality":"0.0017384725186443504","Appearances":"40","No":"11","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"28 July 1987 (aged 26)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Marcos Rojo","x":-1169.275390625,"y":359.34051513671875,"id":"450","attributes":{"Eigenvector Centrality":"0.5206596128107512","Betweenness Centrality":"0.0012988089193429497","Appearances":"22","No":"16","Country":"Argentina","Club Country":"Portugal","Club":"Sporting CP","Weighted Degree":"25.0","Modularity Class":"19","Date of birth / Age":"20 March 1990 (aged 24)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31038851351351354"},"color":"rgb(67,229,229)","size":14.0},{"label":"Rony Martínez","x":1436.8521728515625,"y":-978.241455078125,"id":"615","attributes":{"Eigenvector Centrality":"0.2843426001461682","Betweenness Centrality":"0.011544965385101183","Appearances":"12","No":"16","Country":"Honduras","Club Country":"Honduras","Club":"Real Sociedad","Weighted Degree":"25.0","Modularity Class":"7","Date of birth / Age":"16 October 1988 (aged 25)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2986590816741162"},"color":"rgb(100,67,229)","size":14.0},{"label":"Marcelo","x":-546.0523071289062,"y":-181.72265625,"id":"443","attributes":{"Eigenvector Centrality":"0.8244385370187147","Betweenness Centrality":"0.002939462204472773","Appearances":"31","No":"6","Country":"Brazil","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"33.0","Modularity Class":"23","Date of birth / Age":"12 May 1988 (aged 26)","Degree":"33","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3394919168591224"},"color":"rgb(229,67,197)","size":24.666667938232422},{"label":"Lukas Podolski","x":202.08969116210938,"y":-446.2755126953125,"id":"433","attributes":{"Eigenvector Centrality":"0.6437896004097903","Betweenness Centrality":"0.002673471053911242","Appearances":"114","No":"10","Country":"Germany","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"4 June 1985 (aged 29)","Degree":"29","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3219448094612352"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Diego Lugano (c)","x":-32.81373596191406,"y":-13.45755386352539,"id":"167","attributes":{"Eigenvector Centrality":"0.3938483696056438","Betweenness Centrality":"5.998164097045359E-4","Appearances":"94","No":"2","Country":"Uruguay","Club Country":"England","Club":"West Bromwich Albion","Weighted Degree":"23.0","Modularity Class":"6","Date of birth / Age":"2 November 1980 (aged 33)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31831961888263316"},"color":"rgb(229,197,67)","size":11.333333015441895},{"label":"Bryan Ruiz (c)","x":2006.2958984375,"y":332.363525390625,"id":"95","attributes":{"Eigenvector Centrality":"0.27578394718697025","Betweenness Centrality":"0.017798712465968473","Appearances":"63","No":"10","Country":"Costa Rica","Club Country":"Netherlands","Club":"PSV","Weighted Degree":"25.0","Modularity Class":"29","Date of birth / Age":"18 August 1985 (aged 28)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2892561983471074"},"color":"rgb(229,229,67)","size":14.0},{"label":"Jerry Palacios","x":1713.39697265625,"y":-1049.36083984375,"id":"329","attributes":{"Eigenvector Centrality":"0.2572578722910379","Betweenness Centrality":"0.007827260909354134","Appearances":"24","No":"9","Country":"Honduras","Club Country":"Costa Rica","Club":"Alajuelense","Weighted Degree":"24.0","Modularity Class":"7","Date of birth / Age":"1 November 1981 (aged 32)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2768361581920904"},"color":"rgb(100,67,229)","size":12.666666984558105},{"label":"Emilio Izaguirre","x":1455.924072265625,"y":-1104.433837890625,"id":"197","attributes":{"Eigenvector Centrality":"0.2813611118856367","Betweenness Centrality":"0.011679703221250124","Appearances":"68","No":"7","Country":"Honduras","Club Country":"Scotland","Club":"Celtic","Weighted Degree":"25.0","Modularity Class":"7","Date of birth / Age":"10 May 1986 (aged 28)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2968497576736672"},"color":"rgb(100,67,229)","size":14.0},{"label":"Nicolás Lodeiro","x":-54.9222297668457,"y":16.616008758544922,"id":"531","attributes":{"Eigenvector Centrality":"0.37564528732258246","Betweenness Centrality":"0.0","Appearances":"26","No":"14","Country":"Uruguay","Club Country":"Brazil","Club":"Corinthians","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"21 March 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Raphaël Varane","x":-176.20541381835938,"y":-169.9130401611328,"id":"589","attributes":{"Eigenvector Centrality":"0.742488542981204","Betweenness Centrality":"0.0035273454232103265","Appearances":"6","No":"4","Country":"France","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"32.0","Modularity Class":"16","Date of birth / Age":"25 April 1993 (aged 21)","Degree":"32","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.33576975788031066"},"color":"rgb(229,67,229)","size":23.33333396911621},{"label":"Mattia Perin","x":272.2126770019531,"y":763.703857421875,"id":"482","attributes":{"Eigenvector Centrality":"0.44532305932946153","Betweenness Centrality":"0.0034549672499168743","Appearances":"0","No":"13","Country":"Italy","Club Country":"Italy","Club":"Genoa","Weighted Degree":"24.0","Modularity Class":"3","Date of birth / Age":"10 November 1992 (aged 21)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31183708103521424"},"color":"rgb(197,229,67)","size":12.666666984558105},{"label":"Šime Vrsaljko","x":-183.1659393310547,"y":697.4119873046875,"id":"653","attributes":{"Eigenvector Centrality":"0.3720817713091997","Betweenness Centrality":"0.0039034450268718027","Appearances":"7","No":"2","Country":"Croatia","Club Country":"Italy","Club":"Genoa","Weighted Degree":"24.0","Modularity Class":"25","Date of birth / Age":"10 January 1992 (aged 22)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(132,67,229)","size":12.666666984558105},{"label":"Paulinho","x":-575.74462890625,"y":-298.09417724609375,"id":"567","attributes":{"Eigenvector Centrality":"0.6368676039157191","Betweenness Centrality":"0.002227988166518949","Appearances":"26","No":"8","Country":"Brazil","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"27.0","Modularity Class":"23","Date of birth / Age":"25 July 1988 (aged 25)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3327297419646899"},"color":"rgb(229,67,197)","size":16.666667938232422},{"label":"Medhi Lacen","x":-1321.0677490234375,"y":1173.3302001953125,"id":"493","attributes":{"Eigenvector Centrality":"0.30926248352056784","Betweenness Centrality":"0.0011823348492373809","Appearances":"30","No":"8","Country":"Algeria","Club Country":"Spain","Club":"Getafe","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"15 May 1984 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2950622240064231"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Ahmed Musa","x":-341.6416320800781,"y":-1640.5048828125,"id":"14","attributes":{"Eigenvector Centrality":"0.36203263260642976","Betweenness Centrality":"0.009769556368358679","Appearances":"35","No":"7","Country":"Nigeria","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"27.0","Modularity Class":"14","Date of birth / Age":"14 October 1992 (aged 21)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,100)","size":16.666667938232422},{"label":"Max Gradel","x":486.3621826171875,"y":-849.3237915039062,"id":"485","attributes":{"Eigenvector Centrality":"0.32737398677050034","Betweenness Centrality":"5.067313329973086E-4","Appearances":"26","No":"15","Country":"Ivory Coast","Club Country":"France","Club":"Saint-Étienne","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"30 November 1987 (aged 26)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30548628428927677"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Yoichiro Kakitani","x":646.9409790039062,"y":622.2392578125,"id":"729","attributes":{"Eigenvector Centrality":"0.33192039229134085","Betweenness Centrality":"0.0010231003820519223","Appearances":"12","No":"11","Country":"Japan","Club Country":"Japan","Club":"Cerezo Osaka","Weighted Degree":"23.0","Modularity Class":"27","Date of birth / Age":"3 January 1990 (aged 24)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3190104166666667"},"color":"rgb(67,100,229)","size":11.333333015441895},{"label":"Jefferson","x":-426.4915771484375,"y":-267.5847473144531,"id":"323","attributes":{"Eigenvector Centrality":"0.5425650576268322","Betweenness Centrality":"0.0","Appearances":"9","No":"1","Country":"Brazil","Club Country":"Brazil","Club":"Botafogo","Weighted Degree":"22.0","Modularity Class":"23","Date of birth / Age":"2 January 1983 (aged 31)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3158573270305114"},"color":"rgb(229,67,197)","size":10.0},{"label":"Reuben Gabriel","x":-132.04296875,"y":-1684.207275390625,"id":"597","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"11","No":"4","Country":"Nigeria","Club Country":"Belgium","Club":"Waasland-Beveren","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"25 September 1990 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Adam Kwarasey","x":427.3985290527344,"y":1398.171875,"id":"4","attributes":{"Eigenvector Centrality":"0.2902743690727881","Betweenness Centrality":"0.0","Appearances":"21","No":"12","Country":"Ghana","Club Country":"Norway","Club":"Strømsgodset","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"12 December 1987 (aged 26)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Sergio Busquets","x":-999.5798950195312,"y":-234.14259338378906,"id":"643","attributes":{"Eigenvector Centrality":"0.9370904429273632","Betweenness Centrality":"0.0017384725186443504","Appearances":"65","No":"16","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"16 July 1988 (aged 25)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"James Milner","x":-219.63795471191406,"y":-778.5797119140625,"id":"308","attributes":{"Eigenvector Centrality":"0.7015324384017535","Betweenness Centrality":"0.003652191896387035","Appearances":"47","No":"17","Country":"England","Club Country":"England","Club":"Manchester City","Weighted Degree":"30.0","Modularity Class":"28","Date of birth / Age":"4 January 1986 (aged 28)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3316787003610108"},"color":"rgb(67,229,132)","size":20.666667938232422},{"label":"Kyle Beckerman","x":814.4154052734375,"y":-1616.4197998046875,"id":"406","attributes":{"Eigenvector Centrality":"0.2718151842935107","Betweenness Centrality":"0.0","Appearances":"37","No":"15","Country":"United States","Club Country":"United States","Club":"Real Salt Lake","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"23 April 1982 (aged 32)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Charles Itandje","x":514.8746337890625,"y":203.30963134765625,"id":"113","attributes":{"Eigenvector Centrality":"0.3337787545251496","Betweenness Centrality":"0.0034398247134625596","Appearances":"9","No":"16","Country":"Cameroon","Club Country":"Turkey","Club":"Konyaspor","Weighted Degree":"23.0","Modularity Class":"17","Date of birth / Age":"2 November 1982 (aged 31)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(67,132,229)","size":11.333333015441895},{"label":"Javad Nekounam (c)","x":1956.9619140625,"y":1077.9049072265625,"id":"315","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"140","No":"6","Country":"Iran","Club Country":"Kuwait","Club":"Al-Kuwait","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"7 October 1980 (aged 33)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Oleg Shatov","x":-1223.315185546875,"y":-1368.6673583984375,"id":"540","attributes":{"Eigenvector Centrality":"0.34982465542448277","Betweenness Centrality":"0.004583905120882726","Appearances":"7","No":"17","Country":"Russia","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"26.0","Modularity Class":"2","Date of birth / Age":"29 July 1990 (aged 23)","Degree":"26","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.27904328018223234"},"color":"rgb(229,67,67)","size":15.333333969116211},{"label":"Park Joo-ho","x":1252.9921875,"y":1424.8128662109375,"id":"561","attributes":{"Eigenvector Centrality":"0.2716656711357499","Betweenness Centrality":"0.007710065459146181","Appearances":"14","No":"22","Country":"South Korea","Club Country":"Germany","Club":"Mainz 05","Weighted Degree":"25.0","Modularity Class":"10","Date of birth / Age":"16 January 1987 (aged 27)","Degree":"25","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.28846153846153844"},"color":"rgb(229,67,164)","size":14.0},{"label":"James Troisi","x":2041.552490234375,"y":-703.1470336914062,"id":"310","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"11","No":"14","Country":"Australia","Club Country":"Australia","Club":"Melbourne Victory","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"3 July 1988 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"José Holebas","x":1657.004638671875,"y":513.2495727539062,"id":"356","attributes":{"Eigenvector Centrality":"0.269759009750252","Betweenness Centrality":"0.0018881692306353887","Appearances":"22","No":"20","Country":"Greece","Club Country":"Greece","Club":"Olympiacos","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"27 June 1984 (aged 29)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Cristián Zapata","x":-503.78399658203125,"y":1159.0504150390625,"id":"130","attributes":{"Eigenvector Centrality":"0.43182337544263927","Betweenness Centrality":"0.007566531908575593","Appearances":"24","No":"2","Country":"Colombia","Club Country":"Italy","Club":"Milan","Weighted Degree":"29.0","Modularity Class":"11","Date of birth / Age":"30 September 1986 (aged 27)","Degree":"29","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.32054077627562144"},"color":"rgb(67,67,229)","size":19.333332061767578},{"label":"José María Giménez","x":-198.00405883789062,"y":-82.70488739013672,"id":"359","attributes":{"Eigenvector Centrality":"0.5243629945948548","Betweenness Centrality":"0.0015151368839237088","Appearances":"6","No":"13","Country":"Uruguay","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"28.0","Modularity Class":"6","Date of birth / Age":"20 January 1995 (aged 19)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3236459709379128"},"color":"rgb(229,197,67)","size":18.0},{"label":"Brayan Beckeles","x":1616.7569580078125,"y":-1172.5592041015625,"id":"92","attributes":{"Eigenvector Centrality":"0.23664887946331797","Betweenness Centrality":"0.0","Appearances":"23","No":"21","Country":"Honduras","Club Country":"Honduras","Club":"Olimpia","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"28 November 1985 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Cheick Tioté","x":389.42742919921875,"y":-827.5474853515625,"id":"114","attributes":{"Eigenvector Centrality":"0.3955908250789612","Betweenness Centrality":"0.0038844035920882927","Appearances":"43","No":"9","Country":"Ivory Coast","Club Country":"England","Club":"Newcastle United","Weighted Degree":"27.0","Modularity Class":"9","Date of birth / Age":"21 June 1986 (aged 27)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3215223097112861"},"color":"rgb(164,67,229)","size":16.666667938232422},{"label":"Bakhtiar Rahmani","x":2063.09375,"y":1033.573974609375,"id":"78","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"4","No":"18","Country":"Iran","Club Country":"Iran","Club":"Foolad","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"23 September 1991 (aged 22)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Lucas Biglia","x":-845.6185913085938,"y":161.40000915527344,"id":"424","attributes":{"Eigenvector Centrality":"0.5820067449262724","Betweenness Centrality":"0.006925465581949424","Appearances":"18","No":"6","Country":"Argentina","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"19","Date of birth / Age":"30 January 1986 (aged 28)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3346994535519126"},"color":"rgb(67,229,229)","size":18.0},{"label":"Ben Halloran","x":1954.241943359375,"y":-623.5980834960938,"id":"81","attributes":{"Eigenvector Centrality":"0.23369288429660703","Betweenness Centrality":"0.013237904694991245","Appearances":"2","No":"10","Country":"Australia","Club Country":"Germany","Club":"Fortuna Düsseldorf","Weighted Degree":"23.0","Modularity Class":"12","Date of birth / Age":"14 June 1992 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.25008506294658045"},"color":"rgb(229,100,67)","size":11.333333015441895},{"label":"Vladimir Granat","x":-1378.149658203125,"y":-1417.718994140625,"id":"708","attributes":{"Eigenvector Centrality":"0.2816622746350613","Betweenness Centrality":"6.368705012250895E-4","Appearances":"5","No":"13","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"22 May 1987 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Loukas Vyntra","x":1712.4525146484375,"y":526.8307495117188,"id":"423","attributes":{"Eigenvector Centrality":"0.2684383531644051","Betweenness Centrality":"0.0025456380080491328","Appearances":"50","No":"11","Country":"Greece","Club Country":"Spain","Club":"Levante","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"5 February 1981 (aged 33)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Mark Milligan","x":2173.81640625,"y":-588.3220825195312,"id":"459","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"29","No":"5","Country":"Australia","Club Country":"Australia","Club":"Melbourne Victory","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"4 August 1985 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Ermin Bicakcic","x":1292.2596435546875,"y":-362.4537353515625,"id":"204","attributes":{"Eigenvector Centrality":"0.2936293974441563","Betweenness Centrality":"0.03700993584936544","Appearances":"7","No":"3","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"Eintracht Braunschweig","Weighted Degree":"23.0","Modularity Class":"20","Date of birth / Age":"24 January 1990 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(132,229,67)","size":11.333333015441895},{"label":"Wilfried Bony","x":607.7100219726562,"y":-803.1463012695312,"id":"715","attributes":{"Eigenvector Centrality":"0.3359593705908816","Betweenness Centrality":"0.0021532541982020393","Appearances":"24","No":"12","Country":"Ivory Coast","Club Country":"Wales","Club":"Swansea City","Weighted Degree":"24.0","Modularity Class":"9","Date of birth / Age":"10 December 1988 (aged 25)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(164,67,229)","size":12.666666984558105},{"label":"Hélder Postiga","x":-469.88958740234375,"y":192.2259979248047,"id":"277","attributes":{"Eigenvector Centrality":"0.5176962646733128","Betweenness Centrality":"0.009650096557354645","Appearances":"69","No":"23","Country":"Portugal","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"8","Date of birth / Age":"2 August 1982 (aged 31)","Degree":"28","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3437792329279701"},"color":"rgb(229,164,67)","size":18.0},{"label":"Jorge Valdivia","x":-250.01519775390625,"y":1428.5059814453125,"id":"354","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"57","No":"10","Country":"Chile","Club Country":"Brazil","Club":"Palmeiras","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"3 October 1983 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Beto","x":-614.7037963867188,"y":392.89617919921875,"id":"86","attributes":{"Eigenvector Centrality":"0.45178798123360137","Betweenness Centrality":"0.00215629425092769","Appearances":"7","No":"22","Country":"Portugal","Club Country":"Spain","Club":"Sevilla","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"1 May 1982 (aged 32)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3278322925958965"},"color":"rgb(229,164,67)","size":14.0},{"label":"Cesc Fàbregas","x":-1070.073486328125,"y":-271.4660339355469,"id":"111","attributes":{"Eigenvector Centrality":"0.9370904429273634","Betweenness Centrality":"0.0017384725186443504","Appearances":"89","No":"10","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"4 May 1987 (aged 27)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Josip Drmic","x":179.95460510253906,"y":206.55291748046875,"id":"364","attributes":{"Eigenvector Centrality":"0.42346070544921693","Betweenness Centrality":"0.005301782677055976","Appearances":"7","No":"19","Country":"Switzerland","Club Country":"Germany","Club":"1. FC Nürnberg","Weighted Degree":"25.0","Modularity Class":"0","Date of birth / Age":"8 August 1992 (aged 21)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3111769686706181"},"color":"rgb(164,229,67)","size":14.0},{"label":"André Ayew","x":486.661865234375,"y":1226.37353515625,"id":"43","attributes":{"Eigenvector Centrality":"0.32139173401751836","Betweenness Centrality":"0.003044413609568673","Appearances":"49","No":"10","Country":"Ghana","Club Country":"France","Club":"Marseille","Weighted Degree":"24.0","Modularity Class":"5","Date of birth / Age":"17 December 1989 (aged 24)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31025749261291685"},"color":"rgb(67,229,197)","size":12.666666984558105},{"label":"Stéphane Mbia","x":284.8869934082031,"y":226.59521484375,"id":"662","attributes":{"Eigenvector Centrality":"0.36731258194731503","Betweenness Centrality":"0.006208857054612341","Appearances":"49","No":"17","Country":"Cameroon","Club Country":"Spain","Club":"Sevilla","Weighted Degree":"25.0","Modularity Class":"17","Date of birth / Age":"20 May 1986 (aged 28)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33182844243792325"},"color":"rgb(67,132,229)","size":14.0},{"label":"Michael Babatunde","x":-143.01881408691406,"y":-1634.2734375,"id":"500","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"5","No":"18","Country":"Nigeria","Club Country":"Ukraine","Club":"Volyn Lutsk","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"24 December 1992 (aged 21)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Peter Odemwingie","x":110.87254333496094,"y":-1595.626953125,"id":"574","attributes":{"Eigenvector Centrality":"0.3422176819910441","Betweenness Centrality":"0.008219781078795195","Appearances":"61","No":"8","Country":"Nigeria","Club Country":"England","Club":"Stoke City","Weighted Degree":"25.0","Modularity Class":"14","Date of birth / Age":"15 July 1981 (aged 32)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.315450643776824"},"color":"rgb(67,229,100)","size":14.0},{"label":"Aron Jóhannsson","x":819.320068359375,"y":-1520.021240234375,"id":"62","attributes":{"Eigenvector Centrality":"0.27181518429351065","Betweenness Centrality":"0.0","Appearances":"8","No":"9","Country":"United States","Club Country":"Netherlands","Club":"AZ","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"10 November 1990 (aged 23)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Gianluigi Buffon (c)","x":152.25355529785156,"y":824.187744140625,"id":"249","attributes":{"Eigenvector Centrality":"0.5455496050511397","Betweenness Centrality":"0.0016215443882875223","Appearances":"140","No":"1","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"28 January 1978 (aged 36)","Degree":"28","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Leighton Baines","x":-237.56211853027344,"y":-998.0780029296875,"id":"415","attributes":{"Eigenvector Centrality":"0.5738583419916762","Betweenness Centrality":"0.0013664563333722465","Appearances":"24","No":"3","Country":"England","Club Country":"England","Club":"Everton","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"11 December 1984 (aged 29)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31183708103521424"},"color":"rgb(67,229,132)","size":14.0},{"label":"Mathis Bolly","x":651.6246337890625,"y":-893.9707641601562,"id":"474","attributes":{"Eigenvector Centrality":"0.3195851154336105","Betweenness Centrality":"0.014729679390309034","Appearances":"4","No":"6","Country":"Ivory Coast","Club Country":"Germany","Club":"Fortuna Düsseldorf","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"14 November 1990 (aged 23)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2979327117957033"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Fidel Martínez","x":-1762.245361328125,"y":-617.6648559570312,"id":"228","attributes":{"Eigenvector Centrality":"0.3623062182068215","Betweenness Centrality":"0.0","Appearances":"8","No":"20","Country":"Ecuador","Club Country":"Mexico","Club":"Tijuana","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"15 February 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Bernard","x":-458.79998779296875,"y":-206.65052795410156,"id":"85","attributes":{"Eigenvector Centrality":"0.5696754174200716","Betweenness Centrality":"0.0013333964544832435","Appearances":"11","No":"20","Country":"Brazil","Club Country":"Ukraine","Club":"Shakhtar Donetsk","Weighted Degree":"24.0","Modularity Class":"23","Date of birth / Age":"8 September 1992 (aged 21)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3202614379084967"},"color":"rgb(229,67,197)","size":12.666666984558105},{"label":"Michael Essien","x":376.83282470703125,"y":1298.3724365234375,"id":"503","attributes":{"Eigenvector Centrality":"0.3941490291913924","Betweenness Centrality":"0.004358888803155806","Appearances":"57","No":"5","Country":"Ghana","Club Country":"Italy","Club":"Milan","Weighted Degree":"28.0","Modularity Class":"5","Date of birth / Age":"3 December 1982 (aged 31)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31223449447748514"},"color":"rgb(67,229,197)","size":18.0},{"label":"Luis Garrido","x":1665.724609375,"y":-1263.9407958984375,"id":"426","attributes":{"Eigenvector Centrality":"0.23664887946331803","Betweenness Centrality":"0.0","Appearances":"20","No":"19","Country":"Honduras","Club Country":"Honduras","Club":"Olimpia","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"5 November 1990 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"David Myrie","x":2254.470947265625,"y":256.6007080078125,"id":"152","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"10","No":"8","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Herediano","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"1 June 1988 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Anthony Vanden Borre","x":-577.663330078125,"y":-888.8426513671875,"id":"56","attributes":{"Eigenvector Centrality":"0.532050214639082","Betweenness Centrality":"0.006584182583039559","Appearances":"25","No":"21","Country":"Belgium","Club Country":"Belgium","Club":"Anderlecht","Weighted Degree":"23.0","Modularity Class":"28","Date of birth / Age":"24 October 1987 (aged 26)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3321283325802079"},"color":"rgb(67,229,132)","size":11.333333015441895},{"label":"Jasper Cillessen","x":884.7673950195312,"y":31.96728515625,"id":"314","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"8","No":"1","Country":"Netherlands","Club Country":"Netherlands","Club":"Ajax","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"22 April 1989 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Fraser Forster","x":12.960638999938965,"y":-928.6837768554688,"id":"232","attributes":{"Eigenvector Centrality":"0.5560882486054125","Betweenness Centrality":"0.010448734894018583","Appearances":"2","No":"22","Country":"England","Club Country":"Scotland","Club":"Celtic","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"17 March 1988 (aged 26)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3197042192257503"},"color":"rgb(67,229,132)","size":14.0},{"label":"Andrés Iniesta","x":-1067.9244384765625,"y":-187.44284057617188,"id":"50","attributes":{"Eigenvector Centrality":"0.9370904429273634","Betweenness Centrality":"0.0017384725186443504","Appearances":"97","No":"6","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"11 May 1984 (aged 30)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Santi Cazorla","x":-670.4064331054688,"y":-383.8587951660156,"id":"629","attributes":{"Eigenvector Centrality":"0.8894294715329176","Betweenness Centrality":"0.002430245927643242","Appearances":"64","No":"20","Country":"Spain","Club Country":"England","Club":"Arsenal","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"13 December 1984 (aged 29)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3287119856887299"},"color":"rgb(229,67,197)","size":22.0},{"label":"Henri Bedimo","x":380.5469665527344,"y":174.65756225585938,"id":"278","attributes":{"Eigenvector Centrality":"0.3227718779440803","Betweenness Centrality":"0.0","Appearances":"31","No":"12","Country":"Cameroon","Club Country":"France","Club":"Lyon","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"4 June 1984 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Koke","x":-921.220947265625,"y":-304.28424072265625,"id":"397","attributes":{"Eigenvector Centrality":"0.7852248920099726","Betweenness Centrality":"7.220203040676876E-4","Appearances":"8","No":"17","Country":"Spain","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"27.0","Modularity Class":"23","Date of birth / Age":"8 January 1992 (aged 22)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3215223097112861"},"color":"rgb(229,67,197)","size":16.666667938232422},{"label":"Vedran Corluka","x":-415.46148681640625,"y":539.5565185546875,"id":"698","attributes":{"Eigenvector Centrality":"0.35564443225400655","Betweenness Centrality":"0.004616126670181397","Appearances":"72","No":"5","Country":"Croatia","Club Country":"Russia","Club":"Lokomotiv Moscow","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"5 February 1986 (aged 28)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2995110024449878"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Salomon Kalou","x":392.3309326171875,"y":-927.29150390625,"id":"621","attributes":{"Eigenvector Centrality":"0.3612323923614013","Betweenness Centrality":"0.0028479267154006356","Appearances":"67","No":"8","Country":"Ivory Coast","Club Country":"France","Club":"Lille","Weighted Degree":"25.0","Modularity Class":"9","Date of birth / Age":"5 August 1985 (aged 28)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.31722054380664655"},"color":"rgb(164,67,229)","size":14.0},{"label":"Maya Yoshida","x":540.3438720703125,"y":427.262451171875,"id":"491","attributes":{"Eigenvector Centrality":"0.43319192924031613","Betweenness Centrality":"0.006300072262103494","Appearances":"41","No":"22","Country":"Japan","Club Country":"England","Club":"Southampton","Weighted Degree":"28.0","Modularity Class":"27","Date of birth / Age":"24 August 1988 (aged 25)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3331822302810517"},"color":"rgb(67,100,229)","size":18.0},{"label":"Luis López","x":1610.1837158203125,"y":-1129.569091796875,"id":"427","attributes":{"Eigenvector Centrality":"0.23664887946331797","Betweenness Centrality":"0.0","Appearances":"0","No":"1","Country":"Honduras","Club Country":"Honduras","Club":"Real España","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"13 September 1993 (aged 20)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Kolo Touré","x":297.0413513183594,"y":-918.4600830078125,"id":"398","attributes":{"Eigenvector Centrality":"0.5026225442560357","Betweenness Centrality":"0.006800410251941604","Appearances":"107","No":"4","Country":"Ivory Coast","Club Country":"England","Club":"Liverpool","Weighted Degree":"31.0","Modularity Class":"9","Date of birth / Age":"19 March 1981 (aged 33)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3237885462555066"},"color":"rgb(164,67,229)","size":22.0},{"label":"Fernando Gago","x":-1147.2889404296875,"y":214.82017517089844,"id":"225","attributes":{"Eigenvector Centrality":"0.4756507714516442","Betweenness Centrality":"0.0","Appearances":"49","No":"5","Country":"Argentina","Club Country":"Argentina","Club":"Boca Juniors","Weighted Degree":"22.0","Modularity Class":"19","Date of birth / Age":"10 April 1986 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,229)","size":10.0},{"label":"Juan Guillermo Cuadrado","x":-683.1348266601562,"y":1184.008056640625,"id":"370","attributes":{"Eigenvector Centrality":"0.343991844651082","Betweenness Centrality":"0.0018381218571182874","Appearances":"28","No":"11","Country":"Colombia","Club Country":"Italy","Club":"Fiorentina","Weighted Degree":"24.0","Modularity Class":"11","Date of birth / Age":"26 May 1988 (aged 26)","Degree":"24","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3115727002967359"},"color":"rgb(67,67,229)","size":12.666666984558105},{"label":"Arjen Robben","x":630.8056640625,"y":-143.44236755371094,"id":"61","attributes":{"Eigenvector Centrality":"0.6544203740928541","Betweenness Centrality":"0.013375499273402567","Appearances":"75","No":"11","Country":"Netherlands","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"22","Date of birth / Age":"23 January 1984 (aged 30)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34834123222748814"},"color":"rgb(197,67,229)","size":27.33333396911621},{"label":"Mitchell Langerak","x":1759.883544921875,"y":-484.94677734375,"id":"518","attributes":{"Eigenvector Centrality":"0.30472064669130067","Betweenness Centrality":"0.03540110990626156","Appearances":"3","No":"12","Country":"Australia","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"27.0","Modularity Class":"12","Date of birth / Age":"22 August 1988 (aged 25)","Degree":"27","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.2609158679446219"},"color":"rgb(229,100,67)","size":16.666667938232422},{"label":"Yohan Cabaye","x":-73.94801330566406,"y":-145.8044891357422,"id":"728","attributes":{"Eigenvector Centrality":"0.6370473545952837","Betweenness Centrality":"0.001865102966313942","Appearances":"30","No":"6","Country":"France","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"14 January 1986 (aged 28)","Degree":"29","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Jonathan Mensah","x":461.7189025878906,"y":1342.453125,"id":"346","attributes":{"Eigenvector Centrality":"0.2902743690727881","Betweenness Centrality":"0.0","Appearances":"27","No":"19","Country":"Ghana","Club Country":"France","Club":"Évian","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"13 July 1990 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Cristopher Toselli","x":-291.25885009765625,"y":1453.383056640625,"id":"132","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"4","No":"12","Country":"Chile","Club Country":"Chile","Club":"Universidad Católica","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"22 June 1988 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Claudio Marchisio","x":71.69534301757812,"y":813.5997924804688,"id":"125","attributes":{"Eigenvector Centrality":"0.5455496050511397","Betweenness Centrality":"0.0016215443882875223","Appearances":"44","No":"8","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"19 January 1986 (aged 28)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Phil Jones","x":-300.3230285644531,"y":-774.0247192382812,"id":"576","attributes":{"Eigenvector Centrality":"0.7938188270448314","Betweenness Centrality":"0.0038886080479693477","Appearances":"10","No":"16","Country":"England","Club Country":"England","Club":"Manchester United","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"21 February 1992 (aged 22)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3393351800554017"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Jack Wilshere","x":-130.01361083984375,"y":-811.2896728515625,"id":"303","attributes":{"Eigenvector Centrality":"0.7063239842607693","Betweenness Centrality":"0.001711566637513174","Appearances":"18","No":"7","Country":"England","Club Country":"England","Club":"Arsenal","Weighted Degree":"30.0","Modularity Class":"28","Date of birth / Age":"1 January 1992 (aged 22)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3199825859817153"},"color":"rgb(67,229,132)","size":20.666667938232422},{"label":"Stephen Adams","x":502.8428955078125,"y":1418.3192138671875,"id":"664","attributes":{"Eigenvector Centrality":"0.2902743690727881","Betweenness Centrality":"0.0","Appearances":"7","No":"1","Country":"Ghana","Club Country":"Ghana","Club":"Aduana Stars","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"28 September 1989 (aged 24)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Randall Brenes","x":2309.687255859375,"y":299.45452880859375,"id":"588","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"39","No":"14","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Cartaginés","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"13 August 1983 (aged 30)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Darijo Srna (c)","x":-317.2035827636719,"y":580.4688720703125,"id":"147","attributes":{"Eigenvector Centrality":"0.36375321381526937","Betweenness Centrality":"2.8773715502087595E-4","Appearances":"112","No":"11","Country":"Croatia","Club Country":"Ukraine","Club":"Shakhtar Donetsk","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"1 May 1982 (aged 32)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30246913580246915"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Carlos Bacca","x":-687.1920776367188,"y":1106.895751953125,"id":"99","attributes":{"Eigenvector Centrality":"0.3586902689991431","Betweenness Centrality":"0.004048504558302689","Appearances":"11","No":"17","Country":"Colombia","Club Country":"Spain","Club":"Sevilla","Weighted Degree":"25.0","Modularity Class":"11","Date of birth / Age":"8 September 1986 (aged 27)","Degree":"25","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.31928757602085145"},"color":"rgb(67,67,229)","size":14.0},{"label":"Dejan Lovren","x":-235.10853576660156,"y":422.8890686035156,"id":"157","attributes":{"Eigenvector Centrality":"0.45972067931258953","Betweenness Centrality":"0.007199493511865955","Appearances":"25","No":"6","Country":"Croatia","Club Country":"England","Club":"Southampton","Weighted Degree":"28.0","Modularity Class":"25","Date of birth / Age":"5 July 1989 (aged 24)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(132,67,229)","size":18.0},{"label":"Mario Götze","x":301.4177551269531,"y":-338.4355163574219,"id":"454","attributes":{"Eigenvector Centrality":"0.6585766805388434","Betweenness Centrality":"0.0026429368589338613","Appearances":"29","No":"19","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"3 June 1992 (aged 22)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Danny Welbeck","x":-294.47705078125,"y":-689.566650390625,"id":"144","attributes":{"Eigenvector Centrality":"0.793818827044831","Betweenness Centrality":"0.0038886080479693477","Appearances":"24","No":"11","Country":"England","Club Country":"England","Club":"Manchester United","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"26 November 1990 (aged 23)","Degree":"32","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3393351800554017"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Óscar Boniek García","x":1554.068359375,"y":-1285.441650390625,"id":"549","attributes":{"Eigenvector Centrality":"0.24794367045748955","Betweenness Centrality":"0.0014579941476906906","Appearances":"92","No":"14","Country":"Honduras","Club Country":"United States","Club":"Houston Dynamo","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"4 September 1984 (aged 29)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2750748502994012"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Jorge Fucile","x":-342.37835693359375,"y":145.5472869873047,"id":"352","attributes":{"Eigenvector Centrality":"0.5227167128747061","Betweenness Centrality":"0.009620495110563395","Appearances":"42","No":"4","Country":"Uruguay","Club Country":"Portugal","Club":"Porto","Weighted Degree":"30.0","Modularity Class":"6","Date of birth / Age":"19 November 1984 (aged 29)","Degree":"30","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.34154275092936803"},"color":"rgb(229,197,67)","size":20.666667938232422},{"label":"Rickie Lambert","x":-64.72023010253906,"y":-747.4366455078125,"id":"603","attributes":{"Eigenvector Centrality":"0.5904515327423896","Betweenness Centrality":"0.0016054547217210155","Appearances":"6","No":"18","Country":"England","Club Country":"England","Club":"Southampton","Weighted Degree":"26.0","Modularity Class":"28","Date of birth / Age":"16 February 1982 (aged 32)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(67,229,132)","size":15.333333969116211},{"label":"Ignazio Abate","x":229.4017333984375,"y":946.2020263671875,"id":"291","attributes":{"Eigenvector Centrality":"0.4999140209709583","Betweenness Centrality":"0.003073405743850096","Appearances":"20","No":"7","Country":"Italy","Club Country":"Italy","Club":"Milan","Weighted Degree":"27.0","Modularity Class":"3","Date of birth / Age":"12 November 1986 (aged 27)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31928757602085145"},"color":"rgb(197,229,67)","size":16.666667938232422},{"label":"Antoine Griezmann","x":63.922183990478516,"y":-173.6581573486328,"id":"57","attributes":{"Eigenvector Centrality":"0.5246495592217708","Betweenness Centrality":"0.008309679999517289","Appearances":"4","No":"11","Country":"France","Club Country":"Spain","Club":"Real Sociedad","Weighted Degree":"25.0","Modularity Class":"16","Date of birth / Age":"21 March 1991 (aged 23)","Degree":"25","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.32695729537366547"},"color":"rgb(229,67,229)","size":14.0},{"label":"Asmir Begovic","x":1126.9224853515625,"y":-656.7363891601562,"id":"68","attributes":{"Eigenvector Centrality":"0.320955391099679","Betweenness Centrality":"0.010086360119179452","Appearances":"30","No":"1","Country":"Bosnia and Herzegovina","Club Country":"England","Club":"Stoke City","Weighted Degree":"25.0","Modularity Class":"20","Date of birth / Age":"20 June 1987 (aged 26)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.32666666666666666"},"color":"rgb(132,229,67)","size":14.0},{"label":"Gervinho","x":560.3703002929688,"y":-680.4623413085938,"id":"246","attributes":{"Eigenvector Centrality":"0.3739231420118122","Betweenness Centrality":"0.008762525083432785","Appearances":"53","No":"10","Country":"Ivory Coast","Club Country":"Italy","Club":"Roma","Weighted Degree":"26.0","Modularity Class":"9","Date of birth / Age":"27 May 1987 (aged 27)","Degree":"26","Position":"FW","Eccentricity":"4.0","Closeness Centrality":"0.329006266786034"},"color":"rgb(164,67,229)","size":15.333333969116211},{"label":"Shinji Kagawa","x":282.6526184082031,"y":314.0347900390625,"id":"646","attributes":{"Eigenvector Centrality":"0.6754701881349925","Betweenness Centrality":"0.015603619215489676","Appearances":"57","No":"10","Country":"Japan","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"27","Date of birth / Age":"17 March 1989 (aged 25)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3491686460807601"},"color":"rgb(67,100,229)","size":27.33333396911621},{"label":"Leroy Fer","x":837.33251953125,"y":-102.8897476196289,"id":"417","attributes":{"Eigenvector Centrality":"0.34753754509962104","Betweenness Centrality":"0.0017622038238311907","Appearances":"6","No":"18","Country":"Netherlands","Club Country":"England","Club":"Norwich City","Weighted Degree":"23.0","Modularity Class":"22","Date of birth / Age":"5 January 1990 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.317083692838654"},"color":"rgb(197,67,229)","size":11.333333015441895},{"label":"Abel Hernández","x":-85.60250091552734,"y":-6.678264617919922,"id":"3","attributes":{"Eigenvector Centrality":"0.37564528732258257","Betweenness Centrality":"0.0","Appearances":"12","No":"8","Country":"Uruguay","Club Country":"Italy","Club":"Palermo","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"8 August 1990 (aged 23)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Aurélien Chedjou","x":479.9815979003906,"y":42.06589126586914,"id":"71","attributes":{"Eigenvector Centrality":"0.38111818720911783","Betweenness Centrality":"0.007567747700183238","Appearances":"31","No":"14","Country":"Cameroon","Club Country":"Turkey","Club":"Galatasaray","Weighted Degree":"26.0","Modularity Class":"17","Date of birth / Age":"20 June 1985 (aged 28)","Degree":"26","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3423381462505822"},"color":"rgb(67,132,229)","size":15.333333969116211},{"label":"Mateo Kovacic","x":-492.02667236328125,"y":654.4241943359375,"id":"469","attributes":{"Eigenvector Centrality":"0.47619962944812927","Betweenness Centrality":"0.0057313310683672425","Appearances":"10","No":"20","Country":"Croatia","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"29.0","Modularity Class":"25","Date of birth / Age":"6 May 1994 (aged 20)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32608695652173914"},"color":"rgb(132,67,229)","size":19.333332061767578},{"label":"Vasilis Torosidis","x":1423.180908203125,"y":425.19268798828125,"id":"696","attributes":{"Eigenvector Centrality":"0.32379379672378844","Betweenness Centrality":"0.015251801587601078","Appearances":"66","No":"15","Country":"Greece","Club Country":"Italy","Club":"Roma","Weighted Degree":"26.0","Modularity Class":"15","Date of birth / Age":"10 June 1985 (aged 29)","Degree":"26","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.31928757602085145"},"color":"rgb(229,67,100)","size":15.333333969116211},{"label":"Matteo Darmian","x":332.641357421875,"y":846.0514526367188,"id":"478","attributes":{"Eigenvector Centrality":"0.43196054419267377","Betweenness Centrality":"0.0018820457212751422","Appearances":"1","No":"4","Country":"Italy","Club Country":"Italy","Club":"Torino","Weighted Degree":"23.0","Modularity Class":"3","Date of birth / Age":"2 December 1989 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30497925311203317"},"color":"rgb(197,229,67)","size":11.333333015441895},{"label":"Fernando Muslera","x":73.75354766845703,"y":-37.718238830566406,"id":"226","attributes":{"Eigenvector Centrality":"0.43253266088929565","Betweenness Centrality":"0.00796097224898124","Appearances":"58","No":"1","Country":"Uruguay","Club Country":"Turkey","Club":"Galatasaray","Weighted Degree":"26.0","Modularity Class":"6","Date of birth / Age":"16 June 1986 (aged 27)","Degree":"26","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.34249767008387694"},"color":"rgb(229,197,67)","size":15.333333969116211},{"label":"Rio Mavuba","x":-65.83039093017578,"y":-421.9732971191406,"id":"604","attributes":{"Eigenvector Centrality":"0.5305324640410493","Betweenness Centrality":"0.0017087585037009543","Appearances":"12","No":"12","Country":"France","Club Country":"France","Club":"Lille","Weighted Degree":"25.0","Modularity Class":"16","Date of birth / Age":"8 March 1984 (aged 30)","Degree":"25","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.32579787234042556"},"color":"rgb(229,67,229)","size":14.0},{"label":"Didier Ya Konan","x":543.8720092773438,"y":-767.3469848632812,"id":"160","attributes":{"Eigenvector Centrality":"0.34039082013140126","Betweenness Centrality":"0.003415370768047869","Appearances":"25","No":"13","Country":"Ivory Coast","Club Country":"Germany","Club":"Hannover 96","Weighted Degree":"24.0","Modularity Class":"9","Date of birth / Age":"22 May 1984 (aged 30)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.31370038412291934"},"color":"rgb(164,67,229)","size":12.666666984558105},{"label":"Islam Slimani","x":-1357.2412109375,"y":1056.663818359375,"id":"296","attributes":{"Eigenvector Centrality":"0.34570611332658036","Betweenness Centrality":"0.00227391237436229","Appearances":"20","No":"13","Country":"Algeria","Club Country":"Portugal","Club":"Sporting CP","Weighted Degree":"25.0","Modularity Class":"24","Date of birth / Age":"18 June 1988 (aged 25)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30246913580246915"},"color":"rgb(67,164,229)","size":14.0},{"label":"Brad Guzan","x":829.8171997070312,"y":-1411.882568359375,"id":"91","attributes":{"Eigenvector Centrality":"0.28491855645503317","Betweenness Centrality":"0.0014353729751920106","Appearances":"25","No":"12","Country":"United States","Club Country":"England","Club":"Aston Villa","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"9 September 1984 (aged 29)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"José Pedro Fuenzalida","x":-198.39776611328125,"y":1545.63720703125,"id":"361","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"23","No":"19","Country":"Chile","Club Country":"Chile","Club":"Colo-Colo","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"22 February 1985 (aged 29)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Luís Neto","x":-787.0558471679688,"y":-14.597501754760742,"id":"428","attributes":{"Eigenvector Centrality":"0.5291116763411419","Betweenness Centrality":"0.007266376231630914","Appearances":"9","No":"14","Country":"Portugal","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"29.0","Modularity Class":"8","Date of birth / Age":"26 May 1988 (aged 26)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3223684210526316"},"color":"rgb(229,164,67)","size":19.333332061767578},{"label":"Dries Mertens","x":-646.4434204101562,"y":-473.26361083984375,"id":"177","attributes":{"Eigenvector Centrality":"0.7906646703428208","Betweenness Centrality":"0.007893651717681398","Appearances":"25","No":"14","Country":"Belgium","Club Country":"Italy","Club":"Napoli","Weighted Degree":"33.0","Modularity Class":"28","Date of birth / Age":"6 May 1987 (aged 27)","Degree":"33","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3531955790485344"},"color":"rgb(67,229,132)","size":24.666667938232422},{"label":"Jan Vertonghen","x":-726.4645385742188,"y":-735.5794067382812,"id":"311","attributes":{"Eigenvector Centrality":"0.5781054780643132","Betweenness Centrality":"0.0013899483715746057","Appearances":"56","No":"5","Country":"Belgium","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"24 April 1987 (aged 27)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33638443935926776"},"color":"rgb(67,229,132)","size":14.0},{"label":"Joao Rojas","x":-1776.6961669921875,"y":-531.8544921875,"id":"334","attributes":{"Eigenvector Centrality":"0.38534499087839263","Betweenness Centrality":"0.003660717358574628","Appearances":"30","No":"9","Country":"Ecuador","Club Country":"Mexico","Club":"Cruz Azul","Weighted Degree":"24.0","Modularity Class":"4","Date of birth / Age":"14 June 1989 (aged 24)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2942353883106485"},"color":"rgb(229,67,132)","size":12.666666984558105},{"label":"Ben Foster","x":-170.4840545654297,"y":-869.5690307617188,"id":"80","attributes":{"Eigenvector Centrality":"0.5333561865660762","Betweenness Centrality":"4.2496140393833733E-4","Appearances":"7","No":"13","Country":"England","Club Country":"England","Club":"West Bromwich Albion","Weighted Degree":"23.0","Modularity Class":"28","Date of birth / Age":"3 May 1983 (aged 31)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.30624999999999997"},"color":"rgb(67,229,132)","size":11.333333015441895},{"label":"Reza Ghoochannejhad","x":2037.90625,"y":1109.2969970703125,"id":"598","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"14","No":"16","Country":"Iran","Club Country":"England","Club":"Charlton Athletic","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"20 September 1987 (aged 26)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Ivan Perišic","x":-294.8162841796875,"y":494.7712097167969,"id":"299","attributes":{"Eigenvector Centrality":"0.44148422896622697","Betweenness Centrality":"0.0021210911790253153","Appearances":"29","No":"4","Country":"Croatia","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"27.0","Modularity Class":"25","Date of birth / Age":"2 February 1989 (aged 25)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.317083692838654"},"color":"rgb(132,67,229)","size":16.666667938232422},{"label":"Frank Lampard","x":-247.65232849121094,"y":-855.8526000976562,"id":"231","attributes":{"Eigenvector Centrality":"0.7775723533806831","Betweenness Centrality":"0.0029928487399309587","Appearances":"105","No":"8","Country":"England","Club Country":"England","Club":"Chelsea","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"20 June 1978 (aged 35)","Degree":"32","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Yasuhito Endo","x":785.9192504882812,"y":586.3290405273438,"id":"724","attributes":{"Eigenvector Centrality":"0.31718153777834773","Betweenness Centrality":"0.0","Appearances":"144","No":"7","Country":"Japan","Club Country":"Japan","Club":"Gamba Osaka","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"28 January 1980 (aged 34)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Kevin Mirallas","x":-563.9285278320312,"y":-964.3165893554688,"id":"386","attributes":{"Eigenvector Centrality":"0.5945562042887822","Betweenness Centrality":"0.0024227939394388456","Appearances":"44","No":"11","Country":"Belgium","Club Country":"England","Club":"Everton","Weighted Degree":"26.0","Modularity Class":"28","Date of birth / Age":"5 October 1987 (aged 26)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3330312641594925"},"color":"rgb(67,229,132)","size":15.333333969116211},{"label":"Johnny Acosta","x":2202.927978515625,"y":222.98760986328125,"id":"343","attributes":{"Eigenvector Centrality":"0.24571486118323416","Betweenness Centrality":"0.003463283566079935","Appearances":"25","No":"2","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Alajuelense","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"21 July 1983 (aged 30)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.26601520086862107"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Vincent Enyeama","x":-105.49050903320312,"y":-1519.4764404296875,"id":"706","attributes":{"Eigenvector Centrality":"0.3575079291455913","Betweenness Centrality":"0.0026743855225904787","Appearances":"91","No":"1","Country":"Nigeria","Club Country":"France","Club":"Lille","Weighted Degree":"25.0","Modularity Class":"14","Date of birth / Age":"29 August 1982 (aged 31)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31437125748503"},"color":"rgb(67,229,100)","size":14.0},{"label":"Rodrigo Muñoz","x":-20.128692626953125,"y":28.408824920654297,"id":"607","attributes":{"Eigenvector Centrality":"0.37564528732258257","Betweenness Centrality":"0.0","Appearances":"0","No":"12","Country":"Uruguay","Club Country":"Paraguay","Club":"Libertad","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"22 January 1982 (aged 32)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Laurent Koscielny","x":-15.055593490600586,"y":-387.5162048339844,"id":"409","attributes":{"Eigenvector Centrality":"0.6518193073443905","Betweenness Centrality":"0.0017629955601543275","Appearances":"17","No":"21","Country":"France","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"10 September 1985 (aged 28)","Degree":"29","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3262316910785619"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Steven Gerrard (c)","x":-159.652099609375,"y":-980.668701171875,"id":"668","attributes":{"Eigenvector Centrality":"0.6237674591008822","Betweenness Centrality":"0.0010635550306756442","Appearances":"111","No":"4","Country":"England","Club Country":"England","Club":"Liverpool","Weighted Degree":"27.0","Modularity Class":"28","Date of birth / Age":"30 May 1980 (aged 34)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(67,229,132)","size":16.666667938232422},{"label":"Andrea Pirlo","x":108.05339813232422,"y":870.1171264648438,"id":"46","attributes":{"Eigenvector Centrality":"0.5455496050511397","Betweenness Centrality":"0.0016215443882875223","Appearances":"109","No":"21","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"19 May 1979 (aged 35)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Aleksei Kozlov","x":-1463.252685546875,"y":-1376.61376953125,"id":"25","attributes":{"Eigenvector Centrality":"0.28166227463506127","Betweenness Centrality":"6.368705012250895E-4","Appearances":"11","No":"2","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"16 November 1986 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Yeltsin Tejeda","x":2354.937255859375,"y":330.5636291503906,"id":"727","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"22","No":"17","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Saprissa","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"17 March 1992 (aged 22)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"John Brooks","x":729.48095703125,"y":-1409.59375,"id":"341","attributes":{"Eigenvector Centrality":"0.2843366476001853","Betweenness Centrality":"0.0036883088645504737","Appearances":"4","No":"6","Country":"United States","Club Country":"Germany","Club":"Hertha BSC","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"28 January 1993 (aged 21)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2979327117957033"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Kwadwo Asamoah","x":285.1675720214844,"y":1193.169677734375,"id":"404","attributes":{"Eigenvector Centrality":"0.5138638941206055","Betweenness Centrality":"0.013451953978807028","Appearances":"62","No":"20","Country":"Ghana","Club Country":"Italy","Club":"Juventus","Weighted Degree":"33.0","Modularity Class":"5","Date of birth / Age":"9 December 1988 (aged 25)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3225098727512067"},"color":"rgb(67,229,197)","size":24.666667938232422},{"label":"Andrei Semyonov","x":-1427.725830078125,"y":-1522.6015625,"id":"48","attributes":{"Eigenvector Centrality":"0.26569304291819806","Betweenness Centrality":"0.0","Appearances":"1","No":"5","Country":"Russia","Club Country":"Russia","Club":"Terek Grozny","Weighted Degree":"22.0","Modularity Class":"2","Date of birth / Age":"24 March 1989 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.23244781783681215"},"color":"rgb(229,67,67)","size":10.0},{"label":"Geoff Cameron","x":820.3438720703125,"y":-1464.11474609375,"id":"242","attributes":{"Eigenvector Centrality":"0.3091550505336035","Betweenness Centrality":"0.007189506868566205","Appearances":"27","No":"20","Country":"United States","Club Country":"England","Club":"Stoke City","Weighted Degree":"25.0","Modularity Class":"26","Date of birth / Age":"11 July 1985 (aged 28)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3090832632464256"},"color":"rgb(100,229,67)","size":14.0},{"label":"Juan Camilo Zúñiga","x":-759.6773071289062,"y":893.1192626953125,"id":"366","attributes":{"Eigenvector Centrality":"0.5886662376124554","Betweenness Centrality":"0.01051159651060277","Appearances":"50","No":"18","Country":"Colombia","Club Country":"Italy","Club":"Napoli","Weighted Degree":"33.0","Modularity Class":"11","Date of birth / Age":"14 December 1985 (aged 28)","Degree":"33","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3333333333333333"},"color":"rgb(67,67,229)","size":24.666667938232422},{"label":"Julian Green","x":627.960205078125,"y":-1176.4527587890625,"id":"375","attributes":{"Eigenvector Centrality":"0.592763148395897","Betweenness Centrality":"0.018661873881244673","Appearances":"2","No":"16","Country":"United States","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"26","Date of birth / Age":"6 June 1995 (aged 19)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3327297419646899"},"color":"rgb(100,229,67)","size":27.33333396911621},{"label":"Yuya Osako","x":806.6990356445312,"y":633.545654296875,"id":"735","attributes":{"Eigenvector Centrality":"0.31718153777834784","Betweenness Centrality":"0.0","Appearances":"9","No":"18","Country":"Japan","Club Country":"Germany","Club":"1860 München","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"18 May 1990 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Sammy N\u0027Djock","x":341.5248107910156,"y":155.8591766357422,"id":"626","attributes":{"Eigenvector Centrality":"0.32277187794408035","Betweenness Centrality":"0.0","Appearances":"3","No":"23","Country":"Cameroon","Club Country":"Turkey","Club":"Fethiyespor","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"25 February 1990 (aged 24)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"João Pereira","x":-649.9645385742188,"y":448.8273620605469,"id":"333","attributes":{"Eigenvector Centrality":"0.4540996988101742","Betweenness Centrality":"0.0033859990894464925","Appearances":"36","No":"21","Country":"Portugal","Club Country":"Spain","Club":"Valencia","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"25 February 1984 (aged 30)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.32507739938080493"},"color":"rgb(229,164,67)","size":14.0},{"label":"Ron-Robert Zieler","x":479.21453857421875,"y":-376.45037841796875,"id":"614","attributes":{"Eigenvector Centrality":"0.5011578446474096","Betweenness Centrality":"0.0032324185183237805","Appearances":"3","No":"12","Country":"Germany","Club Country":"Germany","Club":"Hannover 96","Weighted Degree":"24.0","Modularity Class":"13","Date of birth / Age":"12 February 1989 (aged 25)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31599312123817713"},"color":"rgb(67,229,164)","size":12.666666984558105},{"label":"Éder Álvarez Balanta","x":-862.3296508789062,"y":1190.236083984375,"id":"181","attributes":{"Eigenvector Centrality":"0.313949251078916","Betweenness Centrality":"0.0","Appearances":"3","No":"16","Country":"Colombia","Club Country":"Argentina","Club":"River Plate","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"28 February 1993 (aged 21)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Martín Demichelis","x":-893.08544921875,"y":82.94781494140625,"id":"462","attributes":{"Eigenvector Centrality":"0.6398902783818312","Betweenness Centrality":"0.003598075368399343","Appearances":"38","No":"15","Country":"Argentina","Club Country":"England","Club":"Manchester City","Weighted Degree":"29.0","Modularity Class":"19","Date of birth / Age":"20 December 1980 (aged 33)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3316787003610108"},"color":"rgb(67,229,229)","size":19.333332061767578},{"label":"Mattia De Sciglio","x":304.86956787109375,"y":920.4893798828125,"id":"481","attributes":{"Eigenvector Centrality":"0.49991402097095844","Betweenness Centrality":"0.003073405743850096","Appearances":"11","No":"2","Country":"Italy","Club Country":"Italy","Club":"Milan","Weighted Degree":"27.0","Modularity Class":"3","Date of birth / Age":"20 October 1992 (aged 21)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31928757602085145"},"color":"rgb(197,229,67)","size":16.666667938232422},{"label":"Silvestre Varela","x":-839.6356811523438,"y":400.2161865234375,"id":"652","attributes":{"Eigenvector Centrality":"0.5557776384808136","Betweenness Centrality":"0.006533778730302813","Appearances":"24","No":"18","Country":"Portugal","Club Country":"Portugal","Club":"Porto","Weighted Degree":"30.0","Modularity Class":"8","Date of birth / Age":"2 February 1985 (aged 29)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3387096774193548"},"color":"rgb(229,164,67)","size":20.666667938232422},{"label":"Sergei Ignashevich","x":-1314.4222412109375,"y":-1444.7847900390625,"id":"640","attributes":{"Eigenvector Centrality":"0.27975304502942105","Betweenness Centrality":"8.329697214751982E-4","Appearances":"96","No":"4","Country":"Russia","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"14 July 1979 (aged 34)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2544132917964694"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Masato Morishige","x":677.7444458007812,"y":664.5134887695312,"id":"466","attributes":{"Eigenvector Centrality":"0.3171815377783477","Betweenness Centrality":"0.0","Appearances":"10","No":"6","Country":"Japan","Club Country":"Japan","Club":"F.C. Tokyo","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"21 May 1987 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Daniele De Rossi","x":294.1720886230469,"y":656.4853515625,"id":"141","attributes":{"Eigenvector Centrality":"0.4810207457061944","Betweenness Centrality":"0.006374040778649005","Appearances":"95","No":"16","Country":"Italy","Club Country":"Italy","Club":"Roma","Weighted Degree":"26.0","Modularity Class":"3","Date of birth / Age":"24 July 1983 (aged 30)","Degree":"26","Position":"MF","Eccentricity":"4.0","Closeness Centrality":"0.32754010695187163"},"color":"rgb(197,229,67)","size":15.333333969116211},{"label":"Asamoah Gyan (c)","x":384.49658203125,"y":1385.8724365234375,"id":"65","attributes":{"Eigenvector Centrality":"0.29027436907278803","Betweenness Centrality":"0.0","Appearances":"79","No":"3","Country":"Ghana","Club Country":"United Arab Emirates","Club":"Al-Ain","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"22 November 1985 (aged 28)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Eduardo dos Reis Carvalho","x":-685.5633544921875,"y":299.7951965332031,"id":"188","attributes":{"Eigenvector Centrality":"0.40962360528145036","Betweenness Centrality":"0.0","Appearances":"34","No":"1","Country":"Portugal","Club Country":"Portugal","Club":"Braga","Weighted Degree":"22.0","Modularity Class":"8","Date of birth / Age":"19 September 1982 (aged 31)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(229,164,67)","size":10.0},{"label":"Claudio Bravo (c)","x":-193.7080078125,"y":1267.75439453125,"id":"124","attributes":{"Eigenvector Centrality":"0.36167758865639443","Betweenness Centrality":"0.00416233990960059","Appearances":"79","No":"1","Country":"Chile","Club Country":"Spain","Club":"Real Sociedad","Weighted Degree":"25.0","Modularity Class":"18","Date of birth / Age":"13 April 1983 (aged 31)","Degree":"25","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.30561330561330563"},"color":"rgb(229,132,67)","size":14.0},{"label":"Mickaël Landreau","x":-46.635650634765625,"y":-207.5623779296875,"id":"508","attributes":{"Eigenvector Centrality":"0.4836397599249273","Betweenness Centrality":"0.0","Appearances":"11","No":"23","Country":"France","Club Country":"France","Club":"Bastia","Weighted Degree":"22.0","Modularity Class":"16","Date of birth / Age":"14 May 1979 (aged 35)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.3037190082644628"},"color":"rgb(229,67,229)","size":10.0},{"label":"Carlos Valdés","x":-788.6849365234375,"y":1186.095947265625,"id":"106","attributes":{"Eigenvector Centrality":"0.313949251078916","Betweenness Centrality":"0.0","Appearances":"14","No":"23","Country":"Colombia","Club Country":"Argentina","Club":"San Lorenzo","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"22 May 1985 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Reto Ziegler","x":3.86130690574646,"y":248.17929077148438,"id":"596","attributes":{"Eigenvector Centrality":"0.384616160215653","Betweenness Centrality":"0.0","Appearances":"35","No":"3","Country":"Switzerland","Club Country":"Italy","Club":"Sassuolo","Weighted Degree":"22.0","Modularity Class":"0","Date of birth / Age":"16 January 1986 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2922465208747515"},"color":"rgb(164,229,67)","size":10.0},{"label":"Diego Benaglio","x":-65.3055419921875,"y":256.201171875,"id":"162","attributes":{"Eigenvector Centrality":"0.4795399294217994","Betweenness Centrality":"0.0025216888133772915","Appearances":"57","No":"1","Country":"Switzerland","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"27.0","Modularity Class":"0","Date of birth / Age":"8 September 1983 (aged 30)","Degree":"27","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31942633637548895"},"color":"rgb(164,229,67)","size":16.666667938232422},{"label":"Mario Martínez","x":1689.1534423828125,"y":-1223.1529541015625,"id":"456","attributes":{"Eigenvector Centrality":"0.23664887946331803","Betweenness Centrality":"0.0","Appearances":"37","No":"10","Country":"Honduras","Club Country":"Honduras","Club":"Real España","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"30 July 1989 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"DeAndre Yedlin","x":776.4466552734375,"y":-1500.7615966796875,"id":"156","attributes":{"Eigenvector Centrality":"0.2718151842935107","Betweenness Centrality":"0.0","Appearances":"4","No":"2","Country":"United States","Club Country":"United States","Club":"Seattle Sounders FC","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"9 July 1993 (aged 20)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Alex Wilkinson","x":2120.3818359375,"y":-724.7479858398438,"id":"29","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"3","No":"22","Country":"Australia","Club Country":"South Korea","Club":"Jeonbuk Hyundai Motors","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"13 August 1984 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Yuri Zhirkov","x":-1464.4825439453125,"y":-1475.711669921875,"id":"733","attributes":{"Eigenvector Centrality":"0.2816622746350614","Betweenness Centrality":"6.368705012250895E-4","Appearances":"60","No":"18","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"20 August 1983 (aged 30)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Alan Dzagoev","x":-1268.1650390625,"y":-1469.7052001953125,"id":"16","attributes":{"Eigenvector Centrality":"0.27975304502942094","Betweenness Centrality":"8.329697214751982E-4","Appearances":"32","No":"10","Country":"Russia","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"17 June 1990 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.2544132917964694"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Rui Patrício","x":-770.5219116210938,"y":432.8207702636719,"id":"619","attributes":{"Eigenvector Centrality":"0.4410475661612916","Betweenness Centrality":"0.001075874410151188","Appearances":"30","No":"12","Country":"Portugal","Club Country":"Portugal","Club":"Sporting CP","Weighted Degree":"24.0","Modularity Class":"8","Date of birth / Age":"15 February 1988 (aged 26)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3185955786736021"},"color":"rgb(229,164,67)","size":12.666666984558105},{"label":"Kostas Katsouranis","x":1625.112060546875,"y":590.2659301757812,"id":"400","attributes":{"Eigenvector Centrality":"0.2581333696341679","Betweenness Centrality":"0.0","Appearances":"111","No":"21","Country":"Greece","Club Country":"Greece","Club":"PAOK","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"21 June 1979 (aged 34)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"Jozy Altidore","x":866.4315185546875,"y":-1353.639892578125,"id":"365","attributes":{"Eigenvector Centrality":"0.282018657273756","Betweenness Centrality":"0.004513119899770913","Appearances":"70","No":"17","Country":"United States","Club Country":"England","Club":"Sunderland","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"6 November 1989 (aged 24)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Yacine Brahimi","x":-1176.72509765625,"y":1144.9345703125,"id":"722","attributes":{"Eigenvector Centrality":"0.3206186598118753","Betweenness Centrality":"0.011120766403752676","Appearances":"6","No":"11","Country":"Algeria","Club Country":"Spain","Club":"Granada","Weighted Degree":"24.0","Modularity Class":"24","Date of birth / Age":"8 February 1990 (aged 24)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3125"},"color":"rgb(67,164,229)","size":12.666666984558105},{"label":"Lee Bum-young","x":1190.99267578125,"y":1637.5755615234375,"id":"411","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"0","No":"23","Country":"South Korea","Club Country":"South Korea","Club":"Busan IPark","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"2 April 1989 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Juan Carlos Paredes","x":-1452.1322021484375,"y":-446.3980712890625,"id":"368","attributes":{"Eigenvector Centrality":"0.7525405481416904","Betweenness Centrality":"0.006691544296226193","Appearances":"38","No":"4","Country":"Ecuador","Club Country":"Ecuador","Club":"Barcelona","Weighted Degree":"35.0","Modularity Class":"4","Date of birth / Age":"8 July 1987 (aged 26)","Degree":"35","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,132)","size":27.33333396911621},{"label":"Eduardo da Silva","x":-364.40460205078125,"y":586.625732421875,"id":"187","attributes":{"Eigenvector Centrality":"0.36375321381526937","Betweenness Centrality":"2.8773715502087595E-4","Appearances":"63","No":"22","Country":"Croatia","Club Country":"Ukraine","Club":"Shakhtar Donetsk","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"25 February 1983 (aged 31)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30246913580246915"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Giorgos Karagounis (c)","x":1659.2034912109375,"y":651.7564086914062,"id":"253","attributes":{"Eigenvector Centrality":"0.26821419599108537","Betweenness Centrality":"0.011764360515140076","Appearances":"135","No":"10","Country":"Greece","Club Country":"England","Club":"Fulham","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"6 March 1977 (aged 37)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2784090909090909"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Fernandinho","x":-442.978759765625,"y":-336.26580810546875,"id":"224","attributes":{"Eigenvector Centrality":"0.7476247846505292","Betweenness Centrality":"0.004586029475076887","Appearances":"7","No":"5","Country":"Brazil","Club Country":"England","Club":"Manchester City","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"4 May 1985 (aged 29)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34653465346534656"},"color":"rgb(229,67,197)","size":22.0},{"label":"Willian","x":-440.7384338378906,"y":-410.82391357421875,"id":"717","attributes":{"Eigenvector Centrality":"0.7525362816963489","Betweenness Centrality":"0.002196566654268722","Appearances":"7","No":"19","Country":"Brazil","Club Country":"England","Club":"Chelsea","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"9 August 1988 (aged 25)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3471894189891356"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"Ricardo Rodríguez","x":-71.6590805053711,"y":197.1143798828125,"id":"602","attributes":{"Eigenvector Centrality":"0.47953992942179946","Betweenness Centrality":"0.0025216888133772915","Appearances":"21","No":"13","Country":"Switzerland","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"27.0","Modularity Class":"0","Date of birth / Age":"25 August 1992 (aged 21)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31942633637548895"},"color":"rgb(164,229,67)","size":16.666667938232422},{"label":"Brad Davis","x":915.6695556640625,"y":-1565.895263671875,"id":"90","attributes":{"Eigenvector Centrality":"0.282163463180194","Betweenness Centrality":"0.0017638995236230006","Appearances":"16","No":"14","Country":"United States","Club Country":"United States","Club":"Houston Dynamo","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"8 November 1981 (aged 32)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2877838684416601"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Xavi","x":-1013.392822265625,"y":-319.8654479980469,"id":"720","attributes":{"Eigenvector Centrality":"0.9370904429273632","Betweenness Centrality":"0.0017384725186443504","Appearances":"132","No":"8","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"25 January 1980 (aged 34)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Yaya Touré","x":251.69076538085938,"y":-758.7758178710938,"id":"726","attributes":{"Eigenvector Centrality":"0.5209154819658625","Betweenness Centrality":"0.009566975454863513","Appearances":"82","No":"19","Country":"Ivory Coast","Club Country":"England","Club":"Manchester City","Weighted Degree":"31.0","Modularity Class":"9","Date of birth / Age":"13 May 1983 (aged 31)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3330312641594925"},"color":"rgb(164,67,229)","size":22.0},{"label":"Kevin De Bruyne","x":-581.4454956054688,"y":-583.9620971679688,"id":"384","attributes":{"Eigenvector Centrality":"0.6295071279602001","Betweenness Centrality":"0.0038293176434487024","Appearances":"21","No":"7","Country":"Belgium","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"28.0","Modularity Class":"28","Date of birth / Age":"28 June 1991 (aged 22)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3380864765409384"},"color":"rgb(67,229,132)","size":18.0},{"label":"Oswaldo Minda","x":-1549.43017578125,"y":-719.5339965820312,"id":"552","attributes":{"Eigenvector Centrality":"0.37271345847500326","Betweenness Centrality":"0.005310330072733828","Appearances":"18","No":"14","Country":"Ecuador","Club Country":"United States","Club":"Chivas USA","Weighted Degree":"23.0","Modularity Class":"4","Date of birth / Age":"July 26, 1983 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3006134969325153"},"color":"rgb(229,67,132)","size":11.333333015441895},{"label":"Raheem Sterling","x":-93.5101089477539,"y":-985.4642944335938,"id":"583","attributes":{"Eigenvector Centrality":"0.6237674591008822","Betweenness Centrality":"0.0010635550306756442","Appearances":"4","No":"19","Country":"England","Club Country":"England","Club":"Liverpool","Weighted Degree":"27.0","Modularity Class":"28","Date of birth / Age":"8 December 1994 (aged 19)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(67,229,132)","size":16.666667938232422},{"label":"Chigozie Agbim","x":-67.00606536865234,"y":-1575.5159912109375,"id":"115","attributes":{"Eigenvector Centrality":"0.3058149002352039","Betweenness Centrality":"0.0","Appearances":"11","No":"21","Country":"Nigeria","Club Country":"Nigeria","Club":"Gombe United","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"28 November 1984 (aged 29)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Bacary Sagna","x":-102.57307434082031,"y":-365.2166442871094,"id":"76","attributes":{"Eigenvector Centrality":"0.6518193073443906","Betweenness Centrality":"0.0017629955601543275","Appearances":"41","No":"15","Country":"France","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"14 February 1983 (aged 31)","Degree":"29","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3262316910785619"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Timothy Chandler","x":803.3570556640625,"y":-1282.82470703125,"id":"683","attributes":{"Eigenvector Centrality":"0.3137272348985455","Betweenness Centrality":"0.005346568845878015","Appearances":"13","No":"21","Country":"United States","Club Country":"Germany","Club":"1. FC Nürnberg","Weighted Degree":"25.0","Modularity Class":"26","Date of birth / Age":"29 March 1990 (aged 24)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30284301606922126"},"color":"rgb(100,229,67)","size":14.0},{"label":"Muhamed Bešic","x":1194.709228515625,"y":-510.0015563964844,"id":"524","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"9","No":"7","Country":"Bosnia and Herzegovina","Club Country":"Hungary","Club":"Ferencváros","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"10 September 1992 (aged 21)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Patrice Evra","x":-226.57672119140625,"y":-327.58880615234375,"id":"562","attributes":{"Eigenvector Centrality":"0.8374426942127946","Betweenness Centrality":"0.008276091758701315","Appearances":"58","No":"3","Country":"France","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"16","Date of birth / Age":"15 May 1981 (aged 33)","Degree":"35","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3441011235955056"},"color":"rgb(229,67,229)","size":27.33333396911621},{"label":"Edgar Salli","x":416.1859130859375,"y":196.34884643554688,"id":"182","attributes":{"Eigenvector Centrality":"0.3227718779440803","Betweenness Centrality":"0.0","Appearances":"9","No":"20","Country":"Cameroon","Club Country":"France","Club":"Lens","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"17 August 1992 (aged 21)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"José de Jesús Corona","x":-2099.093994140625,"y":287.1224670410156,"id":"355","attributes":{"Eigenvector Centrality":"0.29131873163694544","Betweenness Centrality":"0.0012783129193471678","Appearances":"34","No":"1","Country":"Mexico","Club Country":"Mexico","Club":"Cruz Azul","Weighted Degree":"23.0","Modularity Class":"21","Date of birth / Age":"26 January 1981 (aged 33)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.2744585511575803"},"color":"rgb(67,229,67)","size":11.333333015441895},{"label":"Óscar Bagüí","x":-1773.5125732421875,"y":-705.2896118164062,"id":"548","attributes":{"Eigenvector Centrality":"0.3623062182068213","Betweenness Centrality":"0.0","Appearances":"21","No":"18","Country":"Ecuador","Club Country":"Ecuador","Club":"Emelec","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"10 December 1982 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Djamel Mesbah","x":-1360.75830078125,"y":1211.451904296875,"id":"173","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"26","No":"6","Country":"Algeria","Club Country":"Italy","Club":"Livorno","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"9 October 1984 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Austin Ejide","x":-127.88009643554688,"y":-1587.7188720703125,"id":"72","attributes":{"Eigenvector Centrality":"0.3058149002352039","Betweenness Centrality":"0.0","Appearances":"31","No":"16","Country":"Nigeria","Club Country":"Israel","Club":"Hapoel Be\u0027er Sheva","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"8 April 1984 (aged 30)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Daniel Sturridge","x":-202.59893798828125,"y":-933.4009399414062,"id":"139","attributes":{"Eigenvector Centrality":"0.6237674591008823","Betweenness Centrality":"0.0010635550306756442","Appearances":"12","No":"9","Country":"England","Club Country":"England","Club":"Liverpool","Weighted Degree":"27.0","Modularity Class":"28","Date of birth / Age":"1 September 1989 (aged 24)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(67,229,132)","size":16.666667938232422},{"label":"Toby Alderweireld","x":-719.4182739257812,"y":-665.7479858398438,"id":"685","attributes":{"Eigenvector Centrality":"0.6799862056462357","Betweenness Centrality":"0.0018763771735177332","Appearances":"34","No":"2","Country":"Belgium","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"29.0","Modularity Class":"28","Date of birth / Age":"2 March 1989 (aged 25)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(67,229,132)","size":19.333332061767578},{"label":"Christoph Kramer","x":422.9450988769531,"y":-364.4662170410156,"id":"122","attributes":{"Eigenvector Centrality":"0.4894396183916067","Betweenness Centrality":"6.915469095936232E-4","Appearances":"2","No":"23","Country":"Germany","Club Country":"Germany","Club":"Borussia Mönchengladbach","Weighted Degree":"23.0","Modularity Class":"13","Date of birth / Age":"12 February 1991 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30599500416319736"},"color":"rgb(67,229,164)","size":11.333333015441895},{"label":"Esteban Granados","x":2281.050048828125,"y":393.7303161621094,"id":"206","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"11","No":"13","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Herediano","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"25 October 1985 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Gary Cahill","x":-301.79718017578125,"y":-918.284912109375,"id":"238","attributes":{"Eigenvector Centrality":"0.7775723533806831","Betweenness Centrality":"0.0029928487399309587","Appearances":"24","No":"5","Country":"England","Club Country":"England","Club":"Chelsea","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"19 December 1985 (aged 28)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Jonathan de Guzmán","x":917.8981323242188,"y":-45.65421676635742,"id":"345","attributes":{"Eigenvector Centrality":"0.3481568776699336","Betweenness Centrality":"0.0010475901113017954","Appearances":"10","No":"8","Country":"Netherlands","Club Country":"Wales","Club":"Swansea City","Weighted Degree":"23.0","Modularity Class":"22","Date of birth / Age":"13 September 1987 (aged 26)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31873373807458805"},"color":"rgb(197,67,229)","size":11.333333015441895},{"label":"Senijad Ibricic","x":1235.974853515625,"y":-497.09393310546875,"id":"637","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"42","No":"17","Country":"Bosnia and Herzegovina","Club Country":"Turkey","Club":"Kayseri Erciyesspor","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"26 September 1985 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Héctor Herrera","x":-1799.6182861328125,"y":372.85076904296875,"id":"275","attributes":{"Eigenvector Centrality":"0.4116885255313005","Betweenness Centrality":"0.009305549137125925","Appearances":"13","No":"6","Country":"Mexico","Club Country":"Portugal","Club":"Porto","Weighted Degree":"29.0","Modularity Class":"21","Date of birth / Age":"19 April 1990 (aged 24)","Degree":"29","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3128991060025543"},"color":"rgb(67,229,67)","size":19.333332061767578},{"label":"Mario Gavranovic","x":52.757667541503906,"y":247.96585083007812,"id":"453","attributes":{"Eigenvector Centrality":"0.384616160215653","Betweenness Centrality":"0.0","Appearances":"11","No":"17","Country":"Switzerland","Club Country":"Switzerland","Club":"Zürich","Weighted Degree":"22.0","Modularity Class":"0","Date of birth / Age":"24 November 1989 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2922465208747515"},"color":"rgb(164,229,67)","size":10.0},{"label":"Fabian Schär","x":38.15908432006836,"y":161.535400390625,"id":"215","attributes":{"Eigenvector Centrality":"0.4279165187640593","Betweenness Centrality":"0.0017015426628181239","Appearances":"6","No":"22","Country":"Switzerland","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"25.0","Modularity Class":"0","Date of birth / Age":"20 December 1991 (aged 22)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31038851351351354"},"color":"rgb(164,229,67)","size":14.0},{"label":"Faryd Mondragón","x":-825.1312255859375,"y":1158.5755615234375,"id":"219","attributes":{"Eigenvector Centrality":"0.313949251078916","Betweenness Centrality":"0.0","Appearances":"50","No":"22","Country":"Colombia","Club Country":"Colombia","Club":"Deportivo Cali","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"21 June 1971 (aged 42)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Agustín Orión","x":-1115.8746337890625,"y":250.34307861328125,"id":"12","attributes":{"Eigenvector Centrality":"0.47565077145164436","Betweenness Centrality":"0.0","Appearances":"3","No":"12","Country":"Argentina","Club Country":"Argentina","Club":"Boca Juniors","Weighted Degree":"22.0","Modularity Class":"19","Date of birth / Age":"26 July 1981 (aged 32)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,229)","size":10.0},{"label":"Lazaros Christodoulopoulos","x":1501.577880859375,"y":504.683837890625,"id":"410","attributes":{"Eigenvector Centrality":"0.27279029487191714","Betweenness Centrality":"0.003339511771537693","Appearances":"19","No":"16","Country":"Greece","Club Country":"Italy","Club":"Bologna","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"19 December 1986 (aged 27)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2955367913148371"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Gökhan Inler (c)","x":-228.7349853515625,"y":213.2960662841797,"id":"260","attributes":{"Eigenvector Centrality":"0.6153709092825858","Betweenness Centrality":"0.004199284588766183","Appearances":"73","No":"8","Country":"Switzerland","Club Country":"Italy","Club":"Napoli","Weighted Degree":"31.0","Modularity Class":"0","Date of birth / Age":"27 June 1984 (aged 29)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3331822302810517"},"color":"rgb(164,229,67)","size":22.0},{"label":"Makoto Hasebe (c)","x":672.8050537109375,"y":505.12762451171875,"id":"438","attributes":{"Eigenvector Centrality":"0.34512034913799255","Betweenness Centrality":"0.003186055679065411","Appearances":"78","No":"17","Country":"Japan","Club Country":"Germany","Club":"1. FC Nürnberg","Weighted Degree":"24.0","Modularity Class":"27","Date of birth / Age":"18 January 1984 (aged 30)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3237885462555066"},"color":"rgb(67,100,229)","size":12.666666984558105},{"label":"Pierre Webó","x":292.5826721191406,"y":67.77238464355469,"id":"579","attributes":{"Eigenvector Centrality":"0.3844635752484932","Betweenness Centrality":"0.004484998410532358","Appearances":"56","No":"15","Country":"Cameroon","Club Country":"Turkey","Club":"Fenerbahçe","Weighted Degree":"26.0","Modularity Class":"17","Date of birth / Age":"20 January 1982 (aged 32)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3312302839116719"},"color":"rgb(67,132,229)","size":15.333333969116211},{"label":"Philipp Lahm (c)","x":350.3982849121094,"y":-483.0366516113281,"id":"577","attributes":{"Eigenvector Centrality":"0.6585766805388437","Betweenness Centrality":"0.0026429368589338613","Appearances":"106","No":"16","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"11 November 1983 (aged 30)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Senad Lulic","x":921.6593627929688,"y":-424.2279052734375,"id":"636","attributes":{"Eigenvector Centrality":"0.39543615259664133","Betweenness Centrality":"0.012993279574519087","Appearances":"33","No":"16","Country":"Bosnia and Herzegovina","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"20","Date of birth / Age":"18 January 1986 (aged 28)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3447467166979362"},"color":"rgb(132,229,67)","size":18.0},{"label":"Benedikt Höwedes","x":472.64324951171875,"y":-229.064208984375,"id":"82","attributes":{"Eigenvector Centrality":"0.5529715553555452","Betweenness Centrality":"0.006227653676219969","Appearances":"21","No":"4","Country":"Germany","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"27.0","Modularity Class":"13","Date of birth / Age":"29 February 1988 (aged 26)","Degree":"27","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.3353102189781022"},"color":"rgb(67,229,164)","size":16.666667938232422},{"label":"Kostas Manolas","x":1643.82080078125,"y":458.0362854003906,"id":"401","attributes":{"Eigenvector Centrality":"0.26975900975025197","Betweenness Centrality":"0.0018881692306353887","Appearances":"9","No":"4","Country":"Greece","Club Country":"Greece","Club":"Olympiacos","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"14 June 1991 (aged 22)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Fabián Orellana","x":-331.134033203125,"y":1411.263916015625,"id":"214","attributes":{"Eigenvector Centrality":"0.3330736796416985","Betweenness Centrality":"0.001077331406628747","Appearances":"26","No":"14","Country":"Chile","Club Country":"Spain","Club":"Celta Vigo","Weighted Degree":"23.0","Modularity Class":"18","Date of birth / Age":"27 January 1986 (aged 28)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.2851047323506594"},"color":"rgb(229,132,67)","size":11.333333015441895},{"label":"Donis Escober","x":1653.1510009765625,"y":-1192.211181640625,"id":"176","attributes":{"Eigenvector Centrality":"0.23664887946331797","Betweenness Centrality":"0.0","Appearances":"26","No":"22","Country":"Honduras","Club Country":"Honduras","Club":"Olimpia","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"3 February 1980 (aged 34)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Ricardo Costa","x":-699.53125,"y":481.9271545410156,"id":"601","attributes":{"Eigenvector Centrality":"0.4540996988101741","Betweenness Centrality":"0.0033859990894464925","Appearances":"19","No":"13","Country":"Portugal","Club Country":"Spain","Club":"Valencia","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"16 May 1981 (aged 33)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.32507739938080493"},"color":"rgb(229,164,67)","size":14.0},{"label":"Ezequiel Garay","x":-1064.4405517578125,"y":219.3739471435547,"id":"211","attributes":{"Eigenvector Centrality":"0.5249878217996955","Betweenness Centrality":"8.46487079105798E-4","Appearances":"18","No":"2","Country":"Argentina","Club Country":"Portugal","Club":"Benfica","Weighted Degree":"25.0","Modularity Class":"19","Date of birth / Age":"10 October 1986 (aged 27)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3084347461183382"},"color":"rgb(67,229,229)","size":14.0},{"label":"Alexis Sánchez","x":-613.0529174804688,"y":828.0868530273438,"id":"33","attributes":{"Eigenvector Centrality":"0.7577535645406533","Betweenness Centrality":"0.017626870894997412","Appearances":"67","No":"7","Country":"Chile","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"37.0","Modularity Class":"18","Date of birth / Age":"19 December 1988 (aged 25)","Degree":"37","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.31599312123817713"},"color":"rgb(229,132,67)","size":30.0},{"label":"Fernando Torres","x":-744.5380249023438,"y":-446.9110107421875,"id":"227","attributes":{"Eigenvector Centrality":"0.9333483233206638","Betweenness Centrality":"0.002581134642452991","Appearances":"107","No":"9","Country":"Spain","Club Country":"England","Club":"Chelsea","Weighted Degree":"32.0","Modularity Class":"23","Date of birth / Age":"20 March 1984 (aged 30)","Degree":"32","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.34186046511627904"},"color":"rgb(229,67,197)","size":23.33333396911621},{"label":"Gonzalo Higuaín","x":-976.8049926757812,"y":255.48199462890625,"id":"261","attributes":{"Eigenvector Centrality":"0.7220713713108181","Betweenness Centrality":"0.003097438956551802","Appearances":"36","No":"9","Country":"Argentina","Club Country":"Italy","Club":"Napoli","Weighted Degree":"32.0","Modularity Class":"19","Date of birth / Age":"10 December 1987 (aged 26)","Degree":"32","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(67,229,229)","size":23.33333396911621},{"label":"Ehsan Hajsafi","x":1992.868408203125,"y":1102.4462890625,"id":"192","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"62","No":"3","Country":"Iran","Club Country":"Iran","Club":"Sepahan","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"25 February 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Bruno Alves","x":-538.8344116210938,"y":183.03184509277344,"id":"93","attributes":{"Eigenvector Centrality":"0.45315937558107916","Betweenness Centrality":"0.0029488481093627983","Appearances":"72","No":"2","Country":"Portugal","Club Country":"Turkey","Club":"Fenerbahçe","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"27 November 1981 (aged 32)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3295964125560538"},"color":"rgb(229,164,67)","size":14.0},{"label":"Nicolas N\u0027Koulou","x":368.8940734863281,"y":227.7928924560547,"id":"533","attributes":{"Eigenvector Centrality":"0.3530552378369678","Betweenness Centrality":"0.004082717349656557","Appearances":"48","No":"3","Country":"Cameroon","Club Country":"France","Club":"Marseille","Weighted Degree":"24.0","Modularity Class":"17","Date of birth / Age":"27 March 1990 (aged 24)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.32856504246759055"},"color":"rgb(67,132,229)","size":12.666666984558105},{"label":"Olivier Giroud","x":-51.68798065185547,"y":-320.7739562988281,"id":"543","attributes":{"Eigenvector Centrality":"0.6518193073443905","Betweenness Centrality":"0.0017629955601543275","Appearances":"30","No":"9","Country":"France","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"30 September 1986 (aged 27)","Degree":"29","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.3262316910785619"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Carlo Costly","x":1569.5697021484375,"y":-1167.26904296875,"id":"98","attributes":{"Eigenvector Centrality":"0.23664887946331803","Betweenness Centrality":"0.0","Appearances":"70","No":"13","Country":"Honduras","Club Country":"Honduras","Club":"Real España","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"18 July 1982 (aged 31)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Joseph Yobo (c)","x":3.398852586746216,"y":-1540.3546142578125,"id":"363","attributes":{"Eigenvector Centrality":"0.31894295086009894","Betweenness Centrality":"0.001459927835720332","Appearances":"97","No":"2","Country":"Nigeria","Club Country":"England","Club":"Norwich City","Weighted Degree":"23.0","Modularity Class":"14","Date of birth / Age":"6 September 1980 (aged 33)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30359355638166047"},"color":"rgb(67,229,100)","size":11.333333015441895},{"label":"Ángel di María","x":-968.576416015625,"y":161.4849395751953,"id":"54","attributes":{"Eigenvector Centrality":"0.7593130725565046","Betweenness Centrality":"0.0038213005480664053","Appearances":"47","No":"7","Country":"Argentina","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"33.0","Modularity Class":"19","Date of birth / Age":"14 February 1988 (aged 26)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32450331125827814"},"color":"rgb(67,229,229)","size":24.666667938232422},{"label":"Jordy Clasie","x":920.4804077148438,"y":7.3684821128845215,"id":"350","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"8","No":"16","Country":"Netherlands","Club Country":"Netherlands","Club":"Feyenoord","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"27 June 1991 (aged 22)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Steve von Bergen","x":10.285480499267578,"y":206.5318145751953,"id":"665","attributes":{"Eigenvector Centrality":"0.384616160215653","Betweenness Centrality":"0.0","Appearances":"41","No":"5","Country":"Switzerland","Club Country":"Switzerland","Club":"Young Boys","Weighted Degree":"22.0","Modularity Class":"0","Date of birth / Age":"10 June 1983 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2922465208747515"},"color":"rgb(164,229,67)","size":10.0},{"label":"Jorge Claros","x":1693.2894287109375,"y":-1172.8018798828125,"id":"351","attributes":{"Eigenvector Centrality":"0.23664887946331803","Betweenness Centrality":"0.0","Appearances":"49","No":"20","Country":"Honduras","Club Country":"Honduras","Club":"Motagua","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"8 January 1986 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Afriyie Acquah","x":358.2573547363281,"y":1238.4801025390625,"id":"11","attributes":{"Eigenvector Centrality":"0.3547601242424494","Betweenness Centrality":"0.0031553330963140233","Appearances":"5","No":"6","Country":"Ghana","Club Country":"Italy","Club":"Parma","Weighted Degree":"26.0","Modularity Class":"5","Date of birth / Age":"5 January 1992 (aged 22)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3001224989791752"},"color":"rgb(67,229,197)","size":15.333333969116211},{"label":"Godfrey Oboabona","x":9.590389251708984,"y":-1597.5946044921875,"id":"259","attributes":{"Eigenvector Centrality":"0.3182459136756436","Betweenness Centrality":"0.0012640880568401147","Appearances":"35","No":"14","Country":"Nigeria","Club Country":"Turkey","Club":"Çaykur Rizespor","Weighted Degree":"23.0","Modularity Class":"14","Date of birth / Age":"16 August 1990 (aged 23)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3007364975450082"},"color":"rgb(67,229,100)","size":11.333333015441895},{"label":"Chris Smalling","x":-375.0207214355469,"y":-737.6563720703125,"id":"116","attributes":{"Eigenvector Centrality":"0.7938188270448313","Betweenness Centrality":"0.0038886080479693477","Appearances":"12","No":"12","Country":"England","Club Country":"England","Club":"Manchester United","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"22 November 1989 (aged 24)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3393351800554017"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Shinji Okazaki","x":873.31982421875,"y":703.7589721679688,"id":"647","attributes":{"Eigenvector Centrality":"0.3658451426994684","Betweenness Centrality":"0.01364644508084283","Appearances":"76","No":"9","Country":"Japan","Club Country":"Germany","Club":"Mainz 05","Weighted Degree":"26.0","Modularity Class":"27","Date of birth / Age":"16 April 1986 (aged 28)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(67,100,229)","size":15.333333969116211},{"label":"Panagiotis Kone","x":1535.2935791015625,"y":466.85699462890625,"id":"557","attributes":{"Eigenvector Centrality":"0.27279029487191714","Betweenness Centrality":"0.003339511771537693","Appearances":"16","No":"8","Country":"Greece","Club Country":"Italy","Club":"Bologna","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"26 July 1987 (aged 26)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2955367913148371"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Michel Vorm","x":868.7987060546875,"y":-56.30570602416992,"id":"507","attributes":{"Eigenvector Centrality":"0.34815687766993364","Betweenness Centrality":"0.0010475901113017954","Appearances":"14","No":"22","Country":"Netherlands","Club Country":"Wales","Club":"Swansea City","Weighted Degree":"23.0","Modularity Class":"22","Date of birth / Age":"3 October 1983 (aged 30)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31873373807458805"},"color":"rgb(197,67,229)","size":11.333333015441895},{"label":"Moussa Sissoko","x":49.93161392211914,"y":-364.4847106933594,"id":"523","attributes":{"Eigenvector Centrality":"0.5292224497836602","Betweenness Centrality":"0.0019647591823339743","Appearances":"17","No":"18","Country":"France","Club Country":"England","Club":"Newcastle United","Weighted Degree":"25.0","Modularity Class":"16","Date of birth / Age":"16 August 1989 (aged 24)","Degree":"25","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(229,67,229)","size":14.0},{"label":"Haris Medunjanin","x":1200.25390625,"y":-418.5536193847656,"id":"270","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"35","No":"18","Country":"Bosnia and Herzegovina","Club Country":"Turkey","Club":"Gaziantepspor","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"8 March 1985 (aged 29)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Jasmin Fejzic","x":1170.343505859375,"y":-544.86572265625,"id":"312","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"0","No":"12","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"VfR Aalen","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"15 May 1986 (aged 28)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Mohammed Rabiu","x":577.3356323242188,"y":1315.146484375,"id":"520","attributes":{"Eigenvector Centrality":"0.3006021575032019","Betweenness Centrality":"0.008146054895944195","Appearances":"17","No":"17","Country":"Ghana","Club Country":"Russia","Club":"Kuban Krasnodar","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"31 December 1989 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29720986655883547"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"Morgan Schneiderlin","x":8.893564224243164,"y":-207.0862274169922,"id":"521","attributes":{"Eigenvector Centrality":"0.5951644353181168","Betweenness Centrality":"0.003380555121507494","Appearances":"1","No":"22","Country":"France","Club Country":"England","Club":"Southampton","Weighted Degree":"28.0","Modularity Class":"16","Date of birth / Age":"8 November 1989 (aged 24)","Degree":"28","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.32989228007181326"},"color":"rgb(229,67,229)","size":18.0},{"label":"Xabi Alonso","x":-899.6201171875,"y":-193.28744506835938,"id":"719","attributes":{"Eigenvector Centrality":"0.904011259559127","Betweenness Centrality":"0.001687861941424018","Appearances":"111","No":"14","Country":"Spain","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"25 November 1981 (aged 32)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3350045578851413"},"color":"rgb(229,67,197)","size":22.0},{"label":"Sergio Ramos","x":-838.3143310546875,"y":-237.3342742919922,"id":"644","attributes":{"Eigenvector Centrality":"0.9040112595591273","Betweenness Centrality":"0.001687861941424018","Appearances":"117","No":"15","Country":"Spain","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"30 March 1986 (aged 28)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3350045578851413"},"color":"rgb(229,67,197)","size":22.0},{"label":"Mauricio Pinilla","x":-356.00860595703125,"y":1526.689208984375,"id":"484","attributes":{"Eigenvector Centrality":"0.32867119536836353","Betweenness Centrality":"0.0016022418362757359","Appearances":"27","No":"9","Country":"Chile","Club Country":"Italy","Club":"Cagliari","Weighted Degree":"23.0","Modularity Class":"18","Date of birth / Age":"4 February 1984 (aged 30)","Degree":"23","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2854368932038835"},"color":"rgb(229,132,67)","size":11.333333015441895},{"label":"Giovani dos Santos","x":-2058.406494140625,"y":426.6941833496094,"id":"256","attributes":{"Eigenvector Centrality":"0.2771264523867947","Betweenness Centrality":"0.0","Appearances":"76","No":"10","Country":"Mexico","Club Country":"Spain","Club":"Villarreal","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"11 May 1989 (aged 25)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Sebastián Coates","x":-52.67010498046875,"y":55.84718322753906,"id":"634","attributes":{"Eigenvector Centrality":"0.37564528732258257","Betweenness Centrality":"0.0","Appearances":"15","No":"19","Country":"Uruguay","Club Country":"Uruguay","Club":"Nacional","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"7 October 1990 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Rodrigo Palacio","x":-1056.1539306640625,"y":433.82733154296875,"id":"608","attributes":{"Eigenvector Centrality":"0.5658107599692683","Betweenness Centrality":"0.0025393109943757006","Appearances":"22","No":"18","Country":"Argentina","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"27.0","Modularity Class":"19","Date of birth / Age":"5 February 1982 (aged 32)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3272484416740873"},"color":"rgb(67,229,229)","size":16.666667938232422},{"label":"Pejman Montazeri","x":2022.994140625,"y":1015.429931640625,"id":"570","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"22","No":"15","Country":"Iran","Club Country":"Qatar","Club":"Umm Salal","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"6 September 1983 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Osman Chávez","x":1657.87158203125,"y":-1139.41357421875,"id":"551","attributes":{"Eigenvector Centrality":"0.23664887946331795","Betweenness Centrality":"0.0","Appearances":"54","No":"2","Country":"Honduras","Club Country":"China","Club":"Qingdao Jonoon","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"29 July 1984 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Kim Shin-wook","x":1231.204833984375,"y":1679.30859375,"id":"394","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"27","No":"18","Country":"South Korea","Club Country":"South Korea","Club":"Ulsan Hyundai","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"14 April 1988 (aged 26)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Khosro Heydari","x":2085.276611328125,"y":1118.5545654296875,"id":"389","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"49","No":"2","Country":"Iran","Club Country":"Iran","Club":"Esteghlal","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"14 September 1983 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Diego Costa","x":-946.3432006835938,"y":-379.19134521484375,"id":"164","attributes":{"Eigenvector Centrality":"0.7852248920099726","Betweenness Centrality":"7.220203040676876E-4","Appearances":"2","No":"19","Country":"Spain","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"27.0","Modularity Class":"23","Date of birth / Age":"7 October 1988 (aged 25)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3215223097112861"},"color":"rgb(229,67,197)","size":16.666667938232422},{"label":"Hiroki Sakai","x":714.5648803710938,"y":462.325927734375,"id":"281","attributes":{"Eigenvector Centrality":"0.3477183857332478","Betweenness Centrality":"0.0032794346304893863","Appearances":"18","No":"21","Country":"Japan","Club Country":"Germany","Club":"Hannover 96","Weighted Degree":"24.0","Modularity Class":"27","Date of birth / Age":"12 April 1990 (aged 24)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(67,100,229)","size":12.666666984558105},{"label":"Mario Mandžukic","x":-149.63389587402344,"y":325.6033020019531,"id":"455","attributes":{"Eigenvector Centrality":"0.663406558743265","Betweenness Centrality":"0.010037273598114245","Appearances":"50","No":"17","Country":"Croatia","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"25","Date of birth / Age":"21 May 1986 (aged 28)","Degree":"35","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(132,67,229)","size":27.33333396911621},{"label":"Ashkan Dejagah","x":1842.160400390625,"y":978.629150390625,"id":"66","attributes":{"Eigenvector Centrality":"0.23463431563555487","Betweenness Centrality":"0.021760525958165706","Appearances":"14","No":"21","Country":"Iran","Club Country":"England","Club":"Fulham","Weighted Degree":"24.0","Modularity Class":"1","Date of birth / Age":"5 July 1986 (aged 27)","Degree":"24","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.2317880794701987"},"color":"rgb(67,197,229)","size":12.666666984558105},{"label":"Philippe Senderos","x":-84.25211334228516,"y":385.70135498046875,"id":"578","attributes":{"Eigenvector Centrality":"0.44557482377385943","Betweenness Centrality":"0.0032141732482156185","Appearances":"53","No":"4","Country":"Switzerland","Club Country":"Spain","Club":"Valencia","Weighted Degree":"26.0","Modularity Class":"0","Date of birth / Age":"14 February 1985 (aged 29)","Degree":"26","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31558608844997854"},"color":"rgb(164,229,67)","size":15.333333969116211},{"label":"Massimo Luongo","x":2135.375244140625,"y":-676.9358520507812,"id":"468","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"1","No":"21","Country":"Australia","Club Country":"England","Club":"Swindon Town","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"25 September 1992 (aged 21)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Ivan Franjic","x":2090.4951171875,"y":-571.4816284179688,"id":"298","attributes":{"Eigenvector Centrality":"0.22132294330055013","Betweenness Centrality":"0.0","Appearances":"9","No":"2","Country":"Australia","Club Country":"Australia","Club":"Brisbane Roar","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"10 September 1987 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Joël Matip","x":540.7796630859375,"y":139.5815887451172,"id":"337","attributes":{"Eigenvector Centrality":"0.4237417749913705","Betweenness Centrality":"0.007099320902674921","Appearances":"23","No":"21","Country":"Cameroon","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"28.0","Modularity Class":"17","Date of birth / Age":"8 August 1991 (aged 22)","Degree":"28","Position":"MF","Eccentricity":"4.0","Closeness Centrality":"0.3452325035227807"},"color":"rgb(67,132,229)","size":18.0},{"label":"Michael Bradley","x":721.9478759765625,"y":-1477.4307861328125,"id":"502","attributes":{"Eigenvector Centrality":"0.29057372512473595","Betweenness Centrality":"0.0021113417181140752","Appearances":"86","No":"4","Country":"United States","Club Country":"Canada","Club":"Toronto FC","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"31 July 1987 (aged 26)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29829545454545453"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Fredy Guarín","x":-787.8544311523438,"y":1018.7176513671875,"id":"234","attributes":{"Eigenvector Centrality":"0.44651895950904885","Betweenness Centrality":"0.006124835129264176","Appearances":"49","No":"13","Country":"Colombia","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"29.0","Modularity Class":"11","Date of birth / Age":"30 June 1986 (aged 27)","Degree":"29","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.32579787234042556"},"color":"rgb(67,67,229)","size":19.333332061767578},{"label":"Júlio César","x":-374.46234130859375,"y":-336.2733154296875,"id":"376","attributes":{"Eigenvector Centrality":"0.554070122482655","Betweenness Centrality":"0.002682419843539279","Appearances":"80","No":"12","Country":"Brazil","Club Country":"Canada","Club":"Toronto FC","Weighted Degree":"23.0","Modularity Class":"23","Date of birth / Age":"3 September 1979 (aged 34)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.32579787234042556"},"color":"rgb(229,67,197)","size":11.333333015441895},{"label":"Robin van Persie (c)","x":425.4057312011719,"y":-117.818603515625,"id":"606","attributes":{"Eigenvector Centrality":"0.6930127535568564","Betweenness Centrality":"0.016157179699501083","Appearances":"85","No":"9","Country":"Netherlands","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"22","Date of birth / Age":"6 August 1983 (aged 30)","Degree":"35","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.349002849002849"},"color":"rgb(197,67,229)","size":27.33333396911621},{"label":"Mariano Andújar","x":-1186.145263671875,"y":246.04403686523438,"id":"451","attributes":{"Eigenvector Centrality":"0.47565077145164436","Betweenness Centrality":"0.0","Appearances":"10","No":"21","Country":"Argentina","Club Country":"Italy","Club":"Catania","Weighted Degree":"22.0","Modularity Class":"19","Date of birth / Age":"30 July 1983 (aged 30)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,229)","size":10.0},{"label":"Lee Chung-yong","x":1146.0408935546875,"y":1647.960205078125,"id":"412","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"55","No":"17","Country":"South Korea","Club Country":"England","Club":"Bolton Wanderers","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"2 July 1988 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Andranik Teymourian","x":1940.65771484375,"y":1114.891357421875,"id":"41","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"79","No":"14","Country":"Iran","Club Country":"Iran","Club":"Esteghlal","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"6 March 1983 (aged 31)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Sammy Bossut","x":-665.6251831054688,"y":-835.4097900390625,"id":"625","attributes":{"Eigenvector Centrality":"0.5344280608201899","Betweenness Centrality":"0.001607259967508427","Appearances":"0","No":"13","Country":"Belgium","Club Country":"Belgium","Club":"Zulte Waregem","Weighted Degree":"23.0","Modularity Class":"28","Date of birth / Age":"11 August 1985 (aged 28)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3343949044585987"},"color":"rgb(67,229,132)","size":11.333333015441895},{"label":"Juan Mata","x":-837.1373291015625,"y":-428.5978088378906,"id":"371","attributes":{"Eigenvector Centrality":"1.0","Betweenness Centrality":"0.005194225936839837","Appearances":"33","No":"13","Country":"Spain","Club Country":"England","Club":"Manchester United","Weighted Degree":"34.0","Modularity Class":"23","Date of birth / Age":"28 April 1988 (aged 26)","Degree":"34","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3478466635115949"},"color":"rgb(229,67,197)","size":26.0},{"label":"Faouzi Ghoulam","x":-1163.78857421875,"y":887.729736328125,"id":"218","attributes":{"Eigenvector Centrality":"0.571120930615696","Betweenness Centrality":"0.011614602667759096","Appearances":"6","No":"3","Country":"Algeria","Club Country":"Italy","Club":"Napoli","Weighted Degree":"33.0","Modularity Class":"24","Date of birth / Age":"1 February 1991 (aged 23)","Degree":"33","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3282715497990174"},"color":"rgb(67,164,229)","size":24.666667938232422},{"label":"Kenneth Omeruo","x":-33.326751708984375,"y":-1484.3856201171875,"id":"383","attributes":{"Eigenvector Centrality":"0.3177111385028752","Betweenness Centrality":"0.0033306119897154834","Appearances":"17","No":"22","Country":"Nigeria","Club Country":"England","Club":"Middlesbrough","Weighted Degree":"23.0","Modularity Class":"14","Date of birth / Age":"17 October 1993 (aged 20)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30222039473684215"},"color":"rgb(67,229,100)","size":11.333333015441895},{"label":"Yann Sommer","x":110.02254486083984,"y":216.66073608398438,"id":"723","attributes":{"Eigenvector Centrality":"0.4279165187640593","Betweenness Centrality":"0.0017015426628181239","Appearances":"6","No":"12","Country":"Switzerland","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"25.0","Modularity Class":"0","Date of birth / Age":"17 December 1988 (aged 25)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31038851351351354"},"color":"rgb(164,229,67)","size":14.0},{"label":"Park Jong-woo","x":1236.085205078125,"y":1634.40380859375,"id":"560","attributes":{"Eigenvector Centrality":"0.2315255949886878","Betweenness Centrality":"0.0","Appearances":"10","No":"15","Country":"South Korea","Club Country":"China","Club":"Guangzhou R\u0026F","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"10 March 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Arthur Boka","x":447.86834716796875,"y":-798.1806030273438,"id":"63","attributes":{"Eigenvector Centrality":"0.35099862946861243","Betweenness Centrality":"0.008388572053063042","Appearances":"78","No":"3","Country":"Ivory Coast","Club Country":"Germany","Club":"VfB Stuttgart","Weighted Degree":"25.0","Modularity Class":"9","Date of birth / Age":"2 April 1983 (aged 31)","Degree":"25","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(164,67,229)","size":14.0},{"label":"Eiji Kawashima","x":599.2489624023438,"y":588.3504638671875,"id":"193","attributes":{"Eigenvector Centrality":"0.34852679481914073","Betweenness Centrality":"0.0021785252251571444","Appearances":"56","No":"1","Country":"Japan","Club Country":"Belgium","Club":"Standard Liège","Weighted Degree":"24.0","Modularity Class":"27","Date of birth / Age":"20 March 1983 (aged 31)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3249336870026525"},"color":"rgb(67,100,229)","size":12.666666984558105},{"label":"Javier Hernández","x":-1606.5635986328125,"y":123.67082214355469,"id":"318","attributes":{"Eigenvector Centrality":"0.6365445749365468","Betweenness Centrality":"0.02191152925089069","Appearances":"62","No":"14","Country":"Mexico","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"21","Date of birth / Age":"1 June 1988 (aged 26)","Degree":"35","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.3211009174311927"},"color":"rgb(67,229,67)","size":27.33333396911621},{"label":"Terence Kongolo","x":966.4187622070312,"y":-4.162721157073975,"id":"673","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"1","No":"14","Country":"Netherlands","Club Country":"Netherlands","Club":"Feyenoord","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"14 February 1994 (aged 20)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Fabian Johnson","x":879.2975463867188,"y":-1453.8760986328125,"id":"213","attributes":{"Eigenvector Centrality":"0.28349810265891734","Betweenness Centrality":"0.002395894042282543","Appearances":"22","No":"23","Country":"United States","Club Country":"Germany","Club":"1899 Hoffenheim","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"11 December 1987 (aged 26)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2973300970873787"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Mehdi Mostefa","x":-1480.4698486328125,"y":1115.907470703125,"id":"494","attributes":{"Eigenvector Centrality":"0.30735480949810884","Betweenness Centrality":"0.001735065078748807","Appearances":"23","No":"22","Country":"Algeria","Club Country":"France","Club":"Ajaccio","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"30 August 1983 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29178245335450576"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Andrés Guardado","x":-1822.0682373046875,"y":449.0326232910156,"id":"49","attributes":{"Eigenvector Centrality":"0.2999622703453746","Betweenness Centrality":"0.009651872776145686","Appearances":"104","No":"18","Country":"Mexico","Club Country":"Germany","Club":"Bayer Leverkusen","Weighted Degree":"24.0","Modularity Class":"21","Date of birth / Age":"28 September 1986 (aged 27)","Degree":"24","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.28982649842271296"},"color":"rgb(67,229,67)","size":12.666666984558105},{"label":"Maksim Kanunnikov","x":-1315.3818359375,"y":-1323.4705810546875,"id":"439","attributes":{"Eigenvector Centrality":"0.2784495406871368","Betweenness Centrality":"0.0019868644316807485","Appearances":"2","No":"6","Country":"Russia","Club Country":"Russia","Club":"Rubin Kazan","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"14 July 1991 (aged 22)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.256186824677588"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Edin Višca","x":1198.7845458984375,"y":-465.6673889160156,"id":"184","attributes":{"Eigenvector Centrality":"0.28396954172011374","Betweenness Centrality":"0.0","Appearances":"10","No":"19","Country":"Bosnia and Herzegovina","Club Country":"Turkey","Club":"?stanbul Ba?ak?ehir","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"17 February 1990 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Pablo Armero","x":-854.2186889648438,"y":1249.3016357421875,"id":"554","attributes":{"Eigenvector Centrality":"0.31394925107891597","Betweenness Centrality":"0.0","Appearances":"53","No":"7","Country":"Colombia","Club Country":"England","Club":"West Ham United","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"2 November 1986 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Dario Vidošic","x":2016.283203125,"y":-666.3252563476562,"id":"148","attributes":{"Eigenvector Centrality":"0.22132294330055013","Betweenness Centrality":"0.0","Appearances":"23","No":"20","Country":"Australia","Club Country":"Switzerland","Club":"Sion","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"8 April 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Theofanis Gekas","x":1527.901123046875,"y":552.6124267578125,"id":"674","attributes":{"Eigenvector Centrality":"0.27085145055391363","Betweenness Centrality":"0.002908370966594667","Appearances":"72","No":"17","Country":"Greece","Club Country":"Turkey","Club":"Konyaspor","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"23 May 1980 (aged 34)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2961321514907333"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Paul Aguilar","x":-2114.9287109375,"y":482.1558532714844,"id":"564","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"30","No":"22","Country":"Mexico","Club Country":"Mexico","Club":"América","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"6 March 1986 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Karim Benzema","x":-255.21575927734375,"y":-165.30316162109375,"id":"381","attributes":{"Eigenvector Centrality":"0.7424885429812043","Betweenness Centrality":"0.0035273454232103265","Appearances":"66","No":"10","Country":"France","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"32.0","Modularity Class":"16","Date of birth / Age":"19 December 1987 (aged 26)","Degree":"32","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.33576975788031066"},"color":"rgb(229,67,229)","size":23.33333396911621},{"label":"Vedad Ibiševic","x":1011.349853515625,"y":-507.7367248535156,"id":"697","attributes":{"Eigenvector Centrality":"0.32601187536143794","Betweenness Centrality":"0.009130368482483735","Appearances":"55","No":"9","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"VfB Stuttgart","Weighted Degree":"25.0","Modularity Class":"20","Date of birth / Age":"6 August 1984 (aged 29)","Degree":"25","Position":"FW","Eccentricity":"4.0","Closeness Centrality":"0.3321283325802079"},"color":"rgb(132,229,67)","size":14.0},{"label":"Jefferson Montero","x":-1599.2291259765625,"y":-622.9718627929688,"id":"324","attributes":{"Eigenvector Centrality":"0.37658875098697026","Betweenness Centrality":"0.0026941239537997667","Appearances":"40","No":"7","Country":"Ecuador","Club Country":"Mexico","Club":"Morelia","Weighted Degree":"23.0","Modularity Class":"4","Date of birth / Age":"1 September 1989 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30110610405571486"},"color":"rgb(229,67,132)","size":11.333333015441895},{"label":"Marco Parolo","x":223.34402465820312,"y":798.16845703125,"id":"447","attributes":{"Eigenvector Centrality":"0.44952910121457834","Betweenness Centrality":"4.3533065978638123E-4","Appearances":"4","No":"18","Country":"Italy","Club Country":"Italy","Club":"Parma","Weighted Degree":"24.0","Modularity Class":"3","Date of birth / Age":"25 January 1985 (aged 29)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(197,229,67)","size":12.666666984558105},{"label":"José Rojas","x":-307.82147216796875,"y":1544.14697265625,"id":"362","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"19","No":"13","Country":"Chile","Club Country":"Chile","Club":"Universidad de Chile","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"3 June 1983 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Thiago Motta","x":60.09503936767578,"y":671.3873291015625,"id":"675","attributes":{"Eigenvector Centrality":"0.5779444332967031","Betweenness Centrality":"0.001710601263663759","Appearances":"20","No":"5","Country":"Italy","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"3","Date of birth / Age":"28 August 1982 (aged 31)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3166738474795347"},"color":"rgb(197,229,67)","size":19.333332061767578},{"label":"Masahiko Inoha","x":730.9411010742188,"y":583.111083984375,"id":"465","attributes":{"Eigenvector Centrality":"0.3171815377783478","Betweenness Centrality":"0.0","Appearances":"21","No":"19","Country":"Japan","Club Country":"Japan","Club":"Jubilo Iwata","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"28 August 1983 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Dani Alves","x":-742.1677856445312,"y":-271.697998046875,"id":"135","attributes":{"Eigenvector Centrality":"0.947563971570452","Betweenness Centrality":"0.005368122690024312","Appearances":"75","No":"2","Country":"Brazil","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"36.0","Modularity Class":"23","Date of birth / Age":"6 May 1983 (aged 31)","Degree":"36","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.34249767008387694"},"color":"rgb(229,67,197)","size":28.66666603088379},{"label":"Ryan McGowan","x":2185.520263671875,"y":-671.7802124023438,"id":"620","attributes":{"Eigenvector Centrality":"0.22132294330055013","Betweenness Centrality":"0.0","Appearances":"9","No":"19","Country":"Australia","Club Country":"China","Club":"Shandong Luneng Taishan","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"15 August 1989 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Lee Yong","x":1208.6063232421875,"y":1598.1090087890625,"id":"414","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"12","No":"12","Country":"South Korea","Club Country":"South Korea","Club":"Ulsan Hyundai","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"24 December 1986 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Antonio Candreva","x":180.96414184570312,"y":574.769287109375,"id":"58","attributes":{"Eigenvector Centrality":"0.5275205103981985","Betweenness Centrality":"0.00895640114460652","Appearances":"20","No":"6","Country":"Italy","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"28 February 1987 (aged 27)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33424283765347884"},"color":"rgb(197,229,67)","size":18.0},{"label":"Walter Gargano","x":-40.0959358215332,"y":145.01853942871094,"id":"711","attributes":{"Eigenvector Centrality":"0.4378381017420734","Betweenness Centrality":"0.0029785823951134294","Appearances":"63","No":"5","Country":"Uruguay","Club Country":"Italy","Club":"Parma","Weighted Degree":"26.0","Modularity Class":"6","Date of birth / Age":"23 July 1984 (aged 29)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3204010462074978"},"color":"rgb(229,197,67)","size":15.333333969116211},{"label":"Steven Defour","x":-855.4899291992188,"y":-553.7450561523438,"id":"667","attributes":{"Eigenvector Centrality":"0.6646783589767196","Betweenness Centrality":"0.008614529247819509","Appearances":"43","No":"16","Country":"Belgium","Club Country":"Portugal","Club":"Porto","Weighted Degree":"30.0","Modularity Class":"28","Date of birth / Age":"15 April 1988 (aged 26)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.35083532219570407"},"color":"rgb(67,229,132)","size":20.666667938232422},{"label":"Maxi Rodríguez","x":-1193.765625,"y":294.735595703125,"id":"487","attributes":{"Eigenvector Centrality":"0.47565077145164436","Betweenness Centrality":"0.0","Appearances":"55","No":"11","Country":"Argentina","Club Country":"Argentina","Club":"Newell\u0027s Old Boys","Weighted Degree":"22.0","Modularity Class":"19","Date of birth / Age":"2 January 1981 (aged 33)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,229)","size":10.0},{"label":"Tranquillo Barnetta","x":73.72463989257812,"y":117.78337097167969,"id":"690","attributes":{"Eigenvector Centrality":"0.3971021212364907","Betweenness Centrality":"9.117937878248679E-4","Appearances":"74","No":"7","Country":"Switzerland","Club Country":"Germany","Club":"Eintracht Frankfurt","Weighted Degree":"23.0","Modularity Class":"0","Date of birth / Age":"22 May 1985 (aged 29)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3053593685085168"},"color":"rgb(164,229,67)","size":11.333333015441895},{"label":"Constant Djakpa","x":513.1433715820312,"y":-809.9959106445312,"id":"127","attributes":{"Eigenvector Centrality":"0.32415574535906994","Betweenness Centrality":"8.776465884449839E-4","Appearances":"5","No":"18","Country":"Ivory Coast","Club Country":"Germany","Club":"Eintracht Frankfurt","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"17 October 1986 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30523255813953487"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Carlos Carbonero","x":-742.2178344726562,"y":1199.126220703125,"id":"100","attributes":{"Eigenvector Centrality":"0.3139492510789159","Betweenness Centrality":"0.0","Appearances":"1","No":"5","Country":"Colombia","Club Country":"Argentina","Club":"River Plate","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"25 July 1990 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Thiago Silva (c)","x":-361.4657287597656,"y":-169.6861114501953,"id":"676","attributes":{"Eigenvector Centrality":"0.7136149540335622","Betweenness Centrality":"0.0035076449501830744","Appearances":"46","No":"3","Country":"Brazil","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"22 September 1984 (aged 29)","Degree":"30","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3336359509759419"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"Miroslav Klose","x":293.1423645019531,"y":-267.2074890136719,"id":"517","attributes":{"Eigenvector Centrality":"0.5811899312198234","Betweenness Centrality":"0.010562454139187511","Appearances":"132","No":"11","Country":"Germany","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"13","Date of birth / Age":"9 June 1978 (aged 36)","Degree":"28","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.33746556473829203"},"color":"rgb(67,229,164)","size":18.0},{"label":"Xherdan Shaqiri","x":141.72509765625,"y":12.289528846740723,"id":"721","attributes":{"Eigenvector Centrality":"0.7024966189465659","Betweenness Centrality":"0.009639109401232904","Appearances":"33","No":"23","Country":"Switzerland","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"0","Date of birth / Age":"10 October 1991 (aged 22)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3383977900552486"},"color":"rgb(164,229,67)","size":27.33333396911621},{"label":"Roman Weidenfeller","x":605.18408203125,"y":-360.4881896972656,"id":"611","attributes":{"Eigenvector Centrality":"0.5006809860242267","Betweenness Centrality":"0.008472576600609625","Appearances":"3","No":"22","Country":"Germany","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"24.0","Modularity Class":"13","Date of birth / Age":"6 August 1980 (aged 33)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.310126582278481"},"color":"rgb(67,229,164)","size":12.666666984558105},{"label":"Javier Mascherano","x":-1221.532470703125,"y":91.2391586303711,"id":"319","attributes":{"Eigenvector Centrality":"0.884141666517999","Betweenness Centrality":"0.004626645517321425","Appearances":"98","No":"14","Country":"Argentina","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"36.0","Modularity Class":"19","Date of birth / Age":"8 June 1984 (aged 30)","Degree":"36","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3273942093541203"},"color":"rgb(67,229,229)","size":28.66666603088379},{"label":"Carlos Carmona","x":-345.68072509765625,"y":1473.065185546875,"id":"101","attributes":{"Eigenvector Centrality":"0.3286711953683635","Betweenness Centrality":"0.0016022418362757356","Appearances":"44","No":"6","Country":"Chile","Club Country":"Italy","Club":"Atalanta","Weighted Degree":"23.0","Modularity Class":"18","Date of birth / Age":"21 February 1987 (aged 27)","Degree":"23","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2854368932038835"},"color":"rgb(229,132,67)","size":11.333333015441895},{"label":"Liassine Cadamuro-Bentaïba","x":-1424.95849609375,"y":1185.5799560546875,"id":"418","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"7","No":"17","Country":"Algeria","Club Country":"Spain","Club":"Mallorca","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"5 March 1988 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Alex Oxlade-Chamberlain","x":-56.5023193359375,"y":-825.344482421875,"id":"27","attributes":{"Eigenvector Centrality":"0.706323984260769","Betweenness Centrality":"0.001711566637513174","Appearances":"15","No":"15","Country":"England","Club Country":"England","Club":"Arsenal","Weighted Degree":"30.0","Modularity Class":"28","Date of birth / Age":"15 August 1993 (aged 20)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3199825859817153"},"color":"rgb(67,229,132)","size":20.666667938232422},{"label":"Jalal Hosseini","x":2076.03515625,"y":1075.61083984375,"id":"306","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"85","No":"4","Country":"Iran","Club Country":"Iran","Club":"Persepolis","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"3 February 1982 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Johnny Herrera","x":-225.40228271484375,"y":1509.60302734375,"id":"344","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"8","No":"23","Country":"Chile","Club Country":"Chile","Club":"Universidad de Chile","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"9 May 1981 (aged 33)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Rafik Halliche","x":-1426.09912109375,"y":1266.290771484375,"id":"582","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"29","No":"5","Country":"Algeria","Club Country":"Portugal","Club":"Académica","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"2 September 1986 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Kim Seung-gyu","x":1189.895751953125,"y":1559.8544921875,"id":"393","attributes":{"Eigenvector Centrality":"0.23152559498868777","Betweenness Centrality":"0.0","Appearances":"5","No":"21","Country":"South Korea","Club Country":"South Korea","Club":"Ulsan Hyundai","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"30 September 1990 (aged 23)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"William Carvalho","x":-772.361083984375,"y":375.0953674316406,"id":"716","attributes":{"Eigenvector Centrality":"0.4410475661612916","Betweenness Centrality":"0.001075874410151188","Appearances":"4","No":"6","Country":"Portugal","Club Country":"Portugal","Club":"Sporting CP","Weighted Degree":"24.0","Modularity Class":"8","Date of birth / Age":"7 April 1992 (aged 22)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3185955786736021"},"color":"rgb(229,164,67)","size":12.666666984558105},{"label":"Gabriel Paletta","x":206.93821716308594,"y":845.000732421875,"id":"237","attributes":{"Eigenvector Centrality":"0.4495291012145782","Betweenness Centrality":"4.3533065978638123E-4","Appearances":"2","No":"20","Country":"Italy","Club Country":"Italy","Club":"Parma","Weighted Degree":"24.0","Modularity Class":"3","Date of birth / Age":"15 February 1986 (aged 28)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(197,229,67)","size":12.666666984558105},{"label":"Keylor Navas","x":2179.6376953125,"y":330.6126708984375,"id":"388","attributes":{"Eigenvector Centrality":"0.24591596591658982","Betweenness Centrality":"0.0020809246802811297","Appearances":"53","No":"1","Country":"Costa Rica","Club Country":"Spain","Club":"Levante","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"15 December 1986 (aged 27)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.26844411979547117"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Martín Silva","x":-0.6348667740821838,"y":1.9825427532196045,"id":"463","attributes":{"Eigenvector Centrality":"0.37564528732258246","Betweenness Centrality":"0.0","Appearances":"4","No":"23","Country":"Uruguay","Club Country":"Brazil","Club":"Vasco da Gama","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"25 March 1983 (aged 31)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Mathieu Valbuena","x":44.39426040649414,"y":-119.34598541259766,"id":"473","attributes":{"Eigenvector Centrality":"0.5095573508334031","Betweenness Centrality":"0.0046278408281149215","Appearances":"34","No":"8","Country":"France","Club Country":"France","Club":"Marseille","Weighted Degree":"24.0","Modularity Class":"16","Date of birth / Age":"28 September 1984 (aged 29)","Degree":"24","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(229,67,229)","size":12.666666984558105},{"label":"Ante Rebic","x":-308.12176513671875,"y":744.3989868164062,"id":"55","attributes":{"Eigenvector Centrality":"0.37367251459016204","Betweenness Centrality":"0.002289273069692677","Appearances":"5","No":"16","Country":"Croatia","Club Country":"Italy","Club":"Fiorentina","Weighted Degree":"24.0","Modularity Class":"25","Date of birth / Age":"21 September 1993 (aged 20)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3125"},"color":"rgb(132,67,229)","size":12.666666984558105},{"label":"Danijel Pranjic","x":-193.00035095214844,"y":612.0997924804688,"id":"142","attributes":{"Eigenvector Centrality":"0.35596191653510817","Betweenness Centrality":"0.00248185018192758","Appearances":"50","No":"3","Country":"Croatia","Club Country":"Greece","Club":"Panathinaikos","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"2 December 1981 (aged 32)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30676126878130217"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Andrey Yeshchenko","x":-1412.1168212890625,"y":-1477.236083984375,"id":"51","attributes":{"Eigenvector Centrality":"0.2656930429181982","Betweenness Centrality":"0.0","Appearances":"12","No":"22","Country":"Russia","Club Country":"Russia","Club":"Anzhi Makhachkala","Weighted Degree":"22.0","Modularity Class":"2","Date of birth / Age":"9 February 1984 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.23244781783681215"},"color":"rgb(229,67,67)","size":10.0},{"label":"Atsuto Uchida","x":789.1749877929688,"y":479.1142272949219,"id":"69","attributes":{"Eigenvector Centrality":"0.4182713819100073","Betweenness Centrality":"0.00731168207978959","Appearances":"68","No":"2","Country":"Japan","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"28.0","Modularity Class":"27","Date of birth / Age":"27 March 1988 (aged 26)","Degree":"28","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.34329752452125173"},"color":"rgb(67,100,229)","size":18.0},{"label":"Thibaut Courtois","x":-784.1881713867188,"y":-694.4415893554688,"id":"677","attributes":{"Eigenvector Centrality":"0.6799862056462357","Betweenness Centrality":"0.0018763771735177332","Appearances":"17","No":"1","Country":"Belgium","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"29.0","Modularity Class":"28","Date of birth / Age":"11 May 1992 (aged 22)","Degree":"29","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(67,229,132)","size":19.333332061767578},{"label":"John Boye","x":493.59832763671875,"y":1298.4100341796875,"id":"340","attributes":{"Eigenvector Centrality":"0.30301525489271036","Betweenness Centrality":"0.0013356812076157393","Appearances":"30","No":"21","Country":"Ghana","Club Country":"France","Club":"Rennes","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"23 April 1987 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2984165651644336"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"Lionel Messi (c)","x":-1133.2008056640625,"y":55.981807708740234,"id":"419","attributes":{"Eigenvector Centrality":"0.884141666517999","Betweenness Centrality":"0.004626645517321425","Appearances":"86","No":"10","Country":"Argentina","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"36.0","Modularity Class":"19","Date of birth / Age":"24 June 1987 (aged 26)","Degree":"36","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3273942093541203"},"color":"rgb(67,229,229)","size":28.66666603088379},{"label":"Mathieu Debuchy","x":14.882935523986816,"y":-313.2035827636719,"id":"472","attributes":{"Eigenvector Centrality":"0.5292224497836601","Betweenness Centrality":"0.0019647591823339743","Appearances":"21","No":"2","Country":"France","Club Country":"England","Club":"Newcastle United","Weighted Degree":"25.0","Modularity Class":"16","Date of birth / Age":"28 July 1985 (aged 28)","Degree":"25","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(229,67,229)","size":14.0},{"label":"Blaise Matuidi","x":-108.93384552001953,"y":-90.56800842285156,"id":"87","attributes":{"Eigenvector Centrality":"0.6370473545952838","Betweenness Centrality":"0.001865102966313942","Appearances":"23","No":"14","Country":"France","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"9 April 1987 (aged 27)","Degree":"29","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Lorenzo Insigne","x":-68.64961242675781,"y":680.9847412109375,"id":"422","attributes":{"Eigenvector Centrality":"0.6915881955717977","Betweenness Centrality":"0.008719166745740005","Appearances":"5","No":"22","Country":"Italy","Club Country":"Italy","Club":"Napoli","Weighted Degree":"33.0","Modularity Class":"3","Date of birth / Age":"4 June 1991 (aged 23)","Degree":"33","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3322784810126582"},"color":"rgb(197,229,67)","size":24.666667938232422},{"label":"Diego Calvo","x":2308.55810546875,"y":341.5826416015625,"id":"163","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"10","No":"20","Country":"Costa Rica","Club Country":"Norway","Club":"Vålerenga","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"25 March 1991 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Hiroshi Kiyotake","x":729.6253662109375,"y":516.7271728515625,"id":"282","attributes":{"Eigenvector Centrality":"0.34512034913799255","Betweenness Centrality":"0.003186055679065411","Appearances":"25","No":"8","Country":"Japan","Club Country":"Germany","Club":"1. FC Nürnberg","Weighted Degree":"24.0","Modularity Class":"27","Date of birth / Age":"12 November 1989 (aged 24)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3237885462555066"},"color":"rgb(67,100,229)","size":12.666666984558105},{"label":"Renato Ibarra","x":-1613.8062744140625,"y":-545.0514526367188,"id":"595","attributes":{"Eigenvector Centrality":"0.3742367393926188","Betweenness Centrality":"0.003419150984977221","Appearances":"18","No":"5","Country":"Ecuador","Club Country":"Netherlands","Club":"Vitesse","Weighted Degree":"23.0","Modularity Class":"4","Date of birth / Age":"20 January 1991 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3"},"color":"rgb(229,67,132)","size":11.333333015441895},{"label":"Miralem Pjanic","x":1103.220947265625,"y":-385.4655456542969,"id":"516","attributes":{"Eigenvector Centrality":"0.3489363879046361","Betweenness Centrality":"0.008708846173341396","Appearances":"48","No":"8","Country":"Bosnia and Herzegovina","Club Country":"Italy","Club":"Roma","Weighted Degree":"26.0","Modularity Class":"20","Date of birth / Age":"2 April 1990 (aged 24)","Degree":"26","Position":"MF","Eccentricity":"4.0","Closeness Centrality":"0.3385536619069553"},"color":"rgb(132,229,67)","size":15.333333969116211},{"label":"Charles Aránguiz","x":-251.59664916992188,"y":1476.45458984375,"id":"112","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"21","No":"20","Country":"Chile","Club Country":"Brazil","Club":"Internacional","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"17 April 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"César Azpilicueta","x":-780.8587646484375,"y":-518.6594848632812,"id":"110","attributes":{"Eigenvector Centrality":"0.9333483233206638","Betweenness Centrality":"0.002581134642452991","Appearances":"6","No":"22","Country":"Spain","Club Country":"England","Club":"Chelsea","Weighted Degree":"32.0","Modularity Class":"23","Date of birth / Age":"28 August 1989 (aged 24)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.34186046511627904"},"color":"rgb(229,67,197)","size":23.33333396911621},{"label":"Rémy Cabella","x":-28.49822998046875,"y":-252.28802490234375,"id":"594","attributes":{"Eigenvector Centrality":"0.48363975992492747","Betweenness Centrality":"0.0","Appearances":"1","No":"7","Country":"France","Club Country":"France","Club":"Montpellier","Weighted Degree":"22.0","Modularity Class":"16","Date of birth / Age":"8 March 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.3037190082644628"},"color":"rgb(229,67,229)","size":10.0},{"label":"Aleksei Ionov","x":-1428.007080078125,"y":-1427.2176513671875,"id":"24","attributes":{"Eigenvector Centrality":"0.2816622746350613","Betweenness Centrality":"6.368705012250895E-4","Appearances":"5","No":"21","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"18 February 1989 (aged 25)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Vieirinha","x":-584.5398559570312,"y":300.7301940917969,"id":"703","attributes":{"Eigenvector Centrality":"0.5206064074642943","Betweenness Centrality":"0.0029301281450007945","Appearances":"9","No":"10","Country":"Portugal","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"28.0","Modularity Class":"8","Date of birth / Age":"24 January 1986 (aged 28)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32565352237483386"},"color":"rgb(229,164,67)","size":18.0},{"label":"Joel Campbell","x":2111.1640625,"y":365.17755126953125,"id":"336","attributes":{"Eigenvector Centrality":"0.2789506377156212","Betweenness Centrality":"0.00832814736706791","Appearances":"33","No":"9","Country":"Costa Rica","Club Country":"Greece","Club":"Olympiacos","Weighted Degree":"26.0","Modularity Class":"29","Date of birth / Age":"26 June 1992 (aged 21)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2687385740402194"},"color":"rgb(229,229,67)","size":15.333333969116211},{"label":"Carlos Salcido","x":-2011.8602294921875,"y":347.6936340332031,"id":"104","attributes":{"Eigenvector Centrality":"0.2771264523867947","Betweenness Centrality":"0.0","Appearances":"122","No":"3","Country":"Mexico","Club Country":"Mexico","Club":"UANL","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"2 April 1980 (aged 34)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Mathew Ryan","x":2056.780517578125,"y":-519.5844116210938,"id":"471","attributes":{"Eigenvector Centrality":"0.2315995769978225","Betweenness Centrality":"0.0038336165219305914","Appearances":"7","No":"1","Country":"Australia","Club Country":"Belgium","Club":"Club Brugge","Weighted Degree":"23.0","Modularity Class":"12","Date of birth / Age":"8 April 1992 (aged 22)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.23535062439961577"},"color":"rgb(229,100,67)","size":11.333333015441895},{"label":"Samuel Inkoom","x":406.61175537109375,"y":1441.41943359375,"id":"628","attributes":{"Eigenvector Centrality":"0.29027436907278803","Betweenness Centrality":"0.0","Appearances":"46","No":"2","Country":"Ghana","Club Country":"Greece","Club":"Platanias","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"1 June 1989 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Granit Xhaka","x":60.45975875854492,"y":205.4804229736328,"id":"266","attributes":{"Eigenvector Centrality":"0.4016189697530195","Betweenness Centrality":"6.451424399991758E-4","Appearances":"26","No":"10","Country":"Switzerland","Club Country":"Germany","Club":"Borussia Mönchengladbach","Weighted Degree":"23.0","Modularity Class":"0","Date of birth / Age":"27 September 1992 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30222039473684215"},"color":"rgb(164,229,67)","size":11.333333015441895},{"label":"Carl Medjani","x":-1275.965087890625,"y":1205.1011962890625,"id":"97","attributes":{"Eigenvector Centrality":"0.30778242364802144","Betweenness Centrality":"0.002125132721118146","Appearances":"26","No":"12","Country":"Algeria","Club Country":"France","Club":"Valenciennes","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"15 May 1985 (aged 29)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2980535279805353"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Ramon Azeez","x":-83.1539077758789,"y":-1703.900634765625,"id":"587","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"2","No":"15","Country":"Nigeria","Club Country":"Spain","Club":"Almería","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"12 December 1992 (aged 21)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Didier Zokora","x":526.2356567382812,"y":-881.0933227539062,"id":"161","attributes":{"Eigenvector Centrality":"0.30966117600400694","Betweenness Centrality":"0.0","Appearances":"119","No":"5","Country":"Ivory Coast","Club Country":"Turkey","Club":"Trabzonspor","Weighted Degree":"22.0","Modularity Class":"9","Date of birth / Age":"14 December 1980 (aged 33)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(164,67,229)","size":10.0},{"label":"Yasuyuki Konno","x":772.3632202148438,"y":672.5744018554688,"id":"725","attributes":{"Eigenvector Centrality":"0.31718153777834784","Betweenness Centrality":"0.0","Appearances":"81","No":"15","Country":"Japan","Club Country":"Japan","Club":"Gamba Osaka","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"25 January 1983 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Phil Jagielka","x":-210.36138916015625,"y":-1046.0340576171875,"id":"575","attributes":{"Eigenvector Centrality":"0.5738583419916762","Betweenness Centrality":"0.0013664563333722465","Appearances":"26","No":"6","Country":"England","Club Country":"England","Club":"Everton","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"17 August 1982 (aged 31)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31183708103521424"},"color":"rgb(67,229,132)","size":14.0},{"label":"Michael Uchebo","x":-95.68781280517578,"y":-1656.3585205078125,"id":"505","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"4","No":"20","Country":"Nigeria","Club Country":"Belgium","Club":"Cercle Brugge","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"2 February 1990 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Andreas Samaris","x":1692.9754638671875,"y":475.92816162109375,"id":"47","attributes":{"Eigenvector Centrality":"0.2697590097502519","Betweenness Centrality":"0.0018881692306353887","Appearances":"4","No":"22","Country":"Greece","Club Country":"Greece","Club":"Olympiacos","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"13 June 1989 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Emmanuel Agyemang-Badu","x":311.23797607421875,"y":1367.975341796875,"id":"199","attributes":{"Eigenvector Centrality":"0.30228653977349984","Betweenness Centrality":"0.002131225990650736","Appearances":"49","No":"8","Country":"Ghana","Club Country":"Italy","Club":"Udinese","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"2 December 1990 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29708973322554566"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"Michael Lang","x":29.4794864654541,"y":282.8443908691406,"id":"504","attributes":{"Eigenvector Centrality":"0.3846161602156529","Betweenness Centrality":"0.0","Appearances":"6","No":"6","Country":"Switzerland","Club Country":"Switzerland","Club":"Grasshopper","Weighted Degree":"22.0","Modularity Class":"0","Date of birth / Age":"8 February 1991 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2922465208747515"},"color":"rgb(164,229,67)","size":10.0},{"label":"Shuichi Gonda","x":757.8242797851562,"y":624.099853515625,"id":"650","attributes":{"Eigenvector Centrality":"0.31718153777834773","Betweenness Centrality":"0.0","Appearances":"2","No":"23","Country":"Japan","Club Country":"Japan","Club":"F.C. Tokyo","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"3 March 1989 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Celso Borges","x":2214.53955078125,"y":283.7978820800781,"id":"109","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"63","No":"5","Country":"Costa Rica","Club Country":"Sweden","Club":"AIK","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"27 May 1988 (aged 26)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Javi Martínez","x":-549.7433471679688,"y":-388.08502197265625,"id":"316","attributes":{"Eigenvector Centrality":"0.9931923382141185","Betweenness Centrality":"0.008269325861106165","Appearances":"17","No":"4","Country":"Spain","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"23","Date of birth / Age":"2 September 1988 (aged 25)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34653465346534656"},"color":"rgb(229,67,197)","size":27.33333396911621},{"label":"Sylvain Gbohouo","x":531.5452880859375,"y":-936.862060546875,"id":"671","attributes":{"Eigenvector Centrality":"0.30966117600400694","Betweenness Centrality":"0.0","Appearances":"2","No":"16","Country":"Ivory Coast","Club Country":"Ivory Coast","Club":"Séwé Sport","Weighted Degree":"22.0","Modularity Class":"9","Date of birth / Age":"29 October 1988 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(164,67,229)","size":10.0},{"label":"Sead Kolašinac","x":1107.5244140625,"y":-303.2990417480469,"id":"633","attributes":{"Eigenvector Centrality":"0.3859570622009839","Betweenness Centrality":"0.013926412977704486","Appearances":"4","No":"5","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"28.0","Modularity Class":"20","Date of birth / Age":"20 June 1993 (aged 20)","Degree":"28","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.34090909090909094"},"color":"rgb(132,229,67)","size":18.0},{"label":"Vangelis Moras","x":1602.7227783203125,"y":488.2573547363281,"id":"694","attributes":{"Eigenvector Centrality":"0.25813336963416805","Betweenness Centrality":"0.0","Appearances":"19","No":"5","Country":"Greece","Club Country":"Italy","Club":"Verona","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"26 August 1981 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"Mesut Özil","x":266.2100524902344,"y":-466.7005310058594,"id":"498","attributes":{"Eigenvector Centrality":"0.6437896004097903","Betweenness Centrality":"0.002673471053911242","Appearances":"55","No":"8","Country":"Germany","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"15 October 1988 (aged 25)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3219448094612352"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Daniel Cambronero","x":2228.9765625,"y":327.57440185546875,"id":"136","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"4","No":"23","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Herediano","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"8 January 1986 (aged 28)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Alberto Aquilani","x":51.16946029663086,"y":883.6702880859375,"id":"19","attributes":{"Eigenvector Centrality":"0.446913802610424","Betweenness Centrality":"0.00214616718692594","Appearances":"35","No":"14","Country":"Italy","Club Country":"Italy","Club":"Fiorentina","Weighted Degree":"24.0","Modularity Class":"3","Date of birth / Age":"7 July 1984 (aged 29)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.310126582278481"},"color":"rgb(197,229,67)","size":12.666666984558105},{"label":"Matthew Špiranovic","x":2061.166748046875,"y":-656.2603149414062,"id":"479","attributes":{"Eigenvector Centrality":"0.2213229433005502","Betweenness Centrality":"0.0","Appearances":"18","No":"6","Country":"Australia","Club Country":"Australia","Club":"Western Sydney Wanderers","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"27 June 1988 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Thomas Müller","x":396.2323913574219,"y":-434.3363952636719,"id":"678","attributes":{"Eigenvector Centrality":"0.6585766805388439","Betweenness Centrality":"0.0026429368589338613","Appearances":"49","No":"13","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"13 September 1989 (aged 24)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Riyad Mahrez","x":-1375.4896240234375,"y":1263.62109375,"id":"605","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"2","No":"21","Country":"Algeria","Club Country":"England","Club":"Leicester City","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"21 February 1991 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Alireza Jahanbakhsh","x":1942.0732421875,"y":1034.900146484375,"id":"36","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"7","No":"9","Country":"Iran","Club Country":"Netherlands","Club":"NEC","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"11 August 1993 (aged 20)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Hotaru Yamaguchi","x":665.15576171875,"y":571.1557006835938,"id":"285","attributes":{"Eigenvector Centrality":"0.33192039229134085","Betweenness Centrality":"0.0010231003820519223","Appearances":"12","No":"16","Country":"Japan","Club Country":"Japan","Club":"Cerezo Osaka","Weighted Degree":"23.0","Modularity Class":"27","Date of birth / Age":"6 October 1990 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3190104166666667"},"color":"rgb(67,100,229)","size":11.333333015441895},{"label":"Hugo Campagnaro","x":-1030.6343994140625,"y":363.070556640625,"id":"287","attributes":{"Eigenvector Centrality":"0.5658107599692684","Betweenness Centrality":"0.0025393109943757006","Appearances":"15","No":"3","Country":"Argentina","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"27.0","Modularity Class":"19","Date of birth / Age":"27 June 1980 (aged 33)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3272484416740873"},"color":"rgb(67,229,229)","size":16.666667938232422},{"label":"Diego Godín","x":-229.68458557128906,"y":-28.488847732543945,"id":"166","attributes":{"Eigenvector Centrality":"0.5243629945948549","Betweenness Centrality":"0.0015151368839237088","Appearances":"77","No":"3","Country":"Uruguay","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"28.0","Modularity Class":"6","Date of birth / Age":"16 February 1986 (aged 28)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3236459709379128"},"color":"rgb(229,197,67)","size":18.0},{"label":"Roman Bürki","x":84.80470275878906,"y":279.10205078125,"id":"610","attributes":{"Eigenvector Centrality":"0.3846161602156529","Betweenness Centrality":"0.0","Appearances":"0","No":"21","Country":"Switzerland","Club Country":"Switzerland","Club":"Grasshopper","Weighted Degree":"22.0","Modularity Class":"0","Date of birth / Age":"14 November 1990 (aged 23)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2922465208747515"},"color":"rgb(164,229,67)","size":10.0},{"label":"Didier Drogba (c)","x":598.4851684570312,"y":-735.1734008789062,"id":"159","attributes":{"Eigenvector Centrality":"0.3683202285259076","Betweenness Centrality":"0.006250022365764094","Appearances":"101","No":"11","Country":"Ivory Coast","Club Country":"Turkey","Club":"Galatasaray","Weighted Degree":"26.0","Modularity Class":"9","Date of birth / Age":"11 March 1978 (aged 36)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3276861346411057"},"color":"rgb(164,67,229)","size":15.333333969116211},{"label":"Sejad Salihovic","x":1178.591064453125,"y":-598.7509765625,"id":"635","attributes":{"Eigenvector Centrality":"0.29529844322499244","Betweenness Centrality":"0.0028150615386489113","Appearances":"42","No":"23","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"1899 Hoffenheim","Weighted Degree":"23.0","Modularity Class":"20","Date of birth / Age":"8 October 1984 (aged 29)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31518010291595194"},"color":"rgb(132,229,67)","size":11.333333015441895},{"label":"Christian Bolaños","x":2234.70166015625,"y":376.90460205078125,"id":"119","attributes":{"Eigenvector Centrality":"0.23496944760866384","Betweenness Centrality":"0.0","Appearances":"55","No":"7","Country":"Costa Rica","Club Country":"Denmark","Club":"Copenhagen","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"17 May 1984 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Carlos Peña","x":-2037.2489013671875,"y":386.7759704589844,"id":"103","attributes":{"Eigenvector Centrality":"0.2771264523867947","Betweenness Centrality":"0.0","Appearances":"16","No":"21","Country":"Mexico","Club Country":"Mexico","Club":"León","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"29 March 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Izet Hajrovic","x":1073.4324951171875,"y":-468.6595458984375,"id":"302","attributes":{"Eigenvector Centrality":"0.3433334744187318","Betweenness Centrality":"0.0069532743678391755","Appearances":"7","No":"20","Country":"Bosnia and Herzegovina","Club Country":"Turkey","Club":"Galatasaray","Weighted Degree":"26.0","Modularity Class":"20","Date of birth / Age":"4 August 1991 (aged 22)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3359232175502742"},"color":"rgb(132,229,67)","size":15.333333969116211},{"label":"Joël Veltman","x":921.6832885742188,"y":59.57893753051758,"id":"338","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"2","No":"13","Country":"Netherlands","Club Country":"Netherlands","Club":"Ajax","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"15 January 1992 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"David Silva","x":-782.8482666015625,"y":-359.30230712890625,"id":"154","attributes":{"Eigenvector Centrality":"0.8845575771108349","Betweenness Centrality":"0.006629652754318272","Appearances":"80","No":"21","Country":"Spain","Club Country":"England","Club":"Manchester City","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"8 January 1986 (aged 28)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3407510431154381"},"color":"rgb(229,67,197)","size":22.0},{"label":"Manuel Neuer","x":362.2953186035156,"y":-299.9522399902344,"id":"442","attributes":{"Eigenvector Centrality":"0.6585766805388434","Betweenness Centrality":"0.0026429368589338613","Appearances":"45","No":"1","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"27 March 1986 (aged 28)","Degree":"29","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Kim Bo-kyung","x":1094.657470703125,"y":1613.0086669921875,"id":"391","attributes":{"Eigenvector Centrality":"0.24403600463458192","Betweenness Centrality":"0.006087158361550197","Appearances":"28","No":"7","Country":"South Korea","Club Country":"Wales","Club":"Cardiff City","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"6 October 1989 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.26785714285714285"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Eugene Galekovic","x":2152.16015625,"y":-634.9464721679688,"id":"208","attributes":{"Eigenvector Centrality":"0.22132294330055013","Betweenness Centrality":"0.0","Appearances":"8","No":"18","Country":"Australia","Club Country":"Australia","Club":"Adelaide United","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"12 June 1981 (aged 33)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Emmanuel Emenike","x":-64.24840545654297,"y":-1362.014404296875,"id":"200","attributes":{"Eigenvector Centrality":"0.36794115334947153","Betweenness Centrality":"0.005599744925127154","Appearances":"23","No":"9","Country":"Nigeria","Club Country":"Turkey","Club":"Fenerbahçe","Weighted Degree":"26.0","Modularity Class":"14","Date of birth / Age":"10 May 1987 (aged 27)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3168103448275862"},"color":"rgb(67,229,100)","size":15.333333969116211},{"label":"Wesley Sneijder","x":805.6671752929688,"y":-40.13237762451172,"id":"714","attributes":{"Eigenvector Centrality":"0.39319035954961806","Betweenness Centrality":"0.006544290321462833","Appearances":"99","No":"10","Country":"Netherlands","Club Country":"Turkey","Club":"Galatasaray","Weighted Degree":"26.0","Modularity Class":"22","Date of birth / Age":"9 June 1984 (aged 30)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.337620578778135"},"color":"rgb(197,67,229)","size":15.333333969116211},{"label":"Walter Ayoví","x":-1792.04833984375,"y":-657.5009155273438,"id":"710","attributes":{"Eigenvector Centrality":"0.36230621820682135","Betweenness Centrality":"0.0","Appearances":"90","No":"10","Country":"Ecuador","Club Country":"Mexico","Club":"Pachuca","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"11 August 1979 (aged 34)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Valentin Stocker","x":93.9429931640625,"y":165.77862548828125,"id":"692","attributes":{"Eigenvector Centrality":"0.4279165187640592","Betweenness Centrality":"0.0017015426628181239","Appearances":"24","No":"14","Country":"Switzerland","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"25.0","Modularity Class":"0","Date of birth / Age":"12 April 1989 (aged 25)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31038851351351354"},"color":"rgb(164,229,67)","size":14.0},{"label":"David Villa","x":-854.8253784179688,"y":-313.9442443847656,"id":"155","attributes":{"Eigenvector Centrality":"0.7852248920099724","Betweenness Centrality":"7.220203040676876E-4","Appearances":"96","No":"7","Country":"Spain","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"27.0","Modularity Class":"23","Date of birth / Age":"3 December 1981 (aged 32)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3215223097112861"},"color":"rgb(229,67,197)","size":16.666667938232422},{"label":"Sergio Agüero","x":-986.2796630859375,"y":70.57652282714844,"id":"642","attributes":{"Eigenvector Centrality":"0.6398902783818313","Betweenness Centrality":"0.003598075368399343","Appearances":"51","No":"20","Country":"Argentina","Club Country":"England","Club":"Manchester City","Weighted Degree":"29.0","Modularity Class":"19","Date of birth / Age":"2 June 1988 (aged 26)","Degree":"29","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3316787003610108"},"color":"rgb(67,229,229)","size":19.333332061767578},{"label":"Kim Young-gwon","x":1284.3221435546875,"y":1556.894775390625,"id":"395","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"21","No":"5","Country":"South Korea","Club Country":"China","Club":"Guangzhou Evergrande","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"27 February 1990 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Adrián Bone","x":-1657.1593017578125,"y":-645.242919921875,"id":"9","attributes":{"Eigenvector Centrality":"0.36230621820682135","Betweenness Centrality":"0.0","Appearances":"3","No":"12","Country":"Ecuador","Club Country":"Ecuador","Club":"El Nacional","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"8 September 1988 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Benoît Assou-Ekotto","x":484.17120361328125,"y":273.5126953125,"id":"84","attributes":{"Eigenvector Centrality":"0.3330106718881068","Betweenness Centrality":"0.0036584595528713027","Appearances":"22","No":"2","Country":"Cameroon","Club Country":"England","Club":"Queens Park Rangers","Weighted Degree":"23.0","Modularity Class":"17","Date of birth / Age":"24 March 1984 (aged 30)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3190104166666667"},"color":"rgb(67,132,229)","size":11.333333015441895},{"label":"Efe Ambrose","x":91.53675842285156,"y":-1502.422119140625,"id":"190","attributes":{"Eigenvector Centrality":"0.3486435360657821","Betweenness Centrality":"0.008270857775066283","Appearances":"37","No":"5","Country":"Nigeria","Club Country":"Scotland","Club":"Celtic","Weighted Degree":"25.0","Modularity Class":"14","Date of birth / Age":"18 October 1988 (aged 25)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31518010291595194"},"color":"rgb(67,229,100)","size":14.0},{"label":"Oliver Bozanic","x":2198.375732421875,"y":-627.1802368164062,"id":"541","attributes":{"Eigenvector Centrality":"0.22132294330055013","Betweenness Centrality":"0.0","Appearances":"3","No":"13","Country":"Australia","Club Country":"Switzerland","Club":"Luzern","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"8 January 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Eduardo Vargas","x":-348.89111328125,"y":1339.4359130859375,"id":"189","attributes":{"Eigenvector Centrality":"0.3789565490107093","Betweenness Centrality":"0.006733824897676562","Appearances":"30","No":"11","Country":"Chile","Club Country":"Spain","Club":"Valencia","Weighted Degree":"26.0","Modularity Class":"18","Date of birth / Age":"20 November 1989 (aged 24)","Degree":"26","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.30359355638166047"},"color":"rgb(229,132,67)","size":15.333333969116211},{"label":"Azubuike Egwuekwe","x":-40.1948127746582,"y":-1612.722900390625,"id":"75","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"31","No":"6","Country":"Nigeria","Club Country":"Nigeria","Club":"Warri Wolves","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"16 July 1989 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Giannis Maniatis","x":1675.661376953125,"y":562.7532958984375,"id":"251","attributes":{"Eigenvector Centrality":"0.269759009750252","Betweenness Centrality":"0.0018881692306353887","Appearances":"30","No":"2","Country":"Greece","Club Country":"Greece","Club":"Olympiacos","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"12 October 1986 (aged 27)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Víctor Bernárdez","x":1542.3271484375,"y":-1230.5048828125,"id":"700","attributes":{"Eigenvector Centrality":"0.24794367045748958","Betweenness Centrality":"0.0014579941476906906","Appearances":"78","No":"5","Country":"Honduras","Club Country":"United States","Club":"San Jose Earthquakes","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"24 May 1982 (aged 32)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2750748502994012"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Asmir Avdukic","x":1126.556396484375,"y":-529.686279296875,"id":"67","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"3","No":"22","Country":"Bosnia and Herzegovina","Club Country":"Bosnia and Herzegovina","Club":"Borac Banja Luka","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"13 May 1981 (aged 33)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Avdija Vršajevic","x":1155.9981689453125,"y":-446.0126647949219,"id":"73","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"13","No":"2","Country":"Bosnia and Herzegovina","Club Country":"Croatia","Club":"Hajduk Split","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"6 March 1986 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Carlos Sánchez","x":-775.6780395507812,"y":1232.408935546875,"id":"105","attributes":{"Eigenvector Centrality":"0.31394925107891597","Betweenness Centrality":"0.0","Appearances":"44","No":"6","Country":"Colombia","Club Country":"Spain","Club":"Elche","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"6 February 1986 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Diego Reyes","x":-1751.081298828125,"y":432.3384704589844,"id":"169","attributes":{"Eigenvector Centrality":"0.41168852553130064","Betweenness Centrality":"0.009305549137125925","Appearances":"14","No":"5","Country":"Mexico","Club Country":"Portugal","Club":"Porto","Weighted Degree":"29.0","Modularity Class":"21","Date of birth / Age":"19 September 1992 (aged 21)","Degree":"29","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3128991060025543"},"color":"rgb(67,229,67)","size":19.333332061767578},{"label":"Serge Aurier","x":471.92193603515625,"y":-746.9190673828125,"id":"639","attributes":{"Eigenvector Centrality":"0.3226876976851504","Betweenness Centrality":"0.002014868000803819","Appearances":"8","No":"17","Country":"Ivory Coast","Club Country":"France","Club":"Toulouse","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"24 December 1992 (aged 21)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30817610062893086"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Juan Fernando Quintero","x":-908.9094848632812,"y":1006.1945190429688,"id":"369","attributes":{"Eigenvector Centrality":"0.446466126398784","Betweenness Centrality":"0.007655587436909223","Appearances":"4","No":"20","Country":"Colombia","Club Country":"Portugal","Club":"Porto","Weighted Degree":"29.0","Modularity Class":"11","Date of birth / Age":"18 January 1993 (aged 21)","Degree":"29","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(67,67,229)","size":19.333332061767578},{"label":"Vasili Berezutski (c)","x":-1323.1439208984375,"y":-1494.270751953125,"id":"695","attributes":{"Eigenvector Centrality":"0.2797530450294211","Betweenness Centrality":"8.329697214751982E-4","Appearances":"78","No":"14","Country":"Russia","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"20 June 1982 (aged 31)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2544132917964694"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Patrick Pemberton","x":2230.439208984375,"y":179.53189086914062,"id":"563","attributes":{"Eigenvector Centrality":"0.24571486118323413","Betweenness Centrality":"0.003463283566079935","Appearances":"21","No":"18","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Alajuelense","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"24 April 1982 (aged 32)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.26601520086862107"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Alessio Cerci","x":276.6270751953125,"y":826.5160522460938,"id":"26","attributes":{"Eigenvector Centrality":"0.4319605441926736","Betweenness Centrality":"0.0018820457212751422","Appearances":"12","No":"11","Country":"Italy","Club Country":"Italy","Club":"Torino","Weighted Degree":"23.0","Modularity Class":"3","Date of birth / Age":"23 July 1987 (aged 26)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30497925311203317"},"color":"rgb(197,229,67)","size":11.333333015441895},{"label":"Hulk","x":-676.1294555664062,"y":-547.0525512695312,"id":"289","attributes":{"Eigenvector Centrality":"0.6585476210563139","Betweenness Centrality":"0.00902132999561875","Appearances":"35","No":"7","Country":"Brazil","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"29.0","Modularity Class":"23","Date of birth / Age":"25 July 1986 (aged 27)","Degree":"29","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.33018867924528306"},"color":"rgb(229,67,197)","size":19.333332061767578},{"label":"Juan Carlos García","x":1576.5137939453125,"y":-1044.39697265625,"id":"367","attributes":{"Eigenvector Centrality":"0.2495870836760396","Betweenness Centrality":"0.00224748146417088","Appearances":"34","No":"6","Country":"Honduras","Club Country":"England","Club":"Wigan Athletic","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"8 March 1988 (aged 26)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Miguel Layún","x":-2150.14892578125,"y":351.6337890625,"id":"510","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"15","No":"7","Country":"Mexico","Club Country":"Mexico","Club":"América","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"25 June 1988 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Kwak Tae-hwi","x":1276.581298828125,"y":1652.844970703125,"id":"405","attributes":{"Eigenvector Centrality":"0.23152559498868777","Betweenness Centrality":"0.0","Appearances":"35","No":"4","Country":"South Korea","Club Country":"Saudi Arabia","Club":"Al-Hilal","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"8 July 1981 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Graham Zusi","x":821.1793823242188,"y":-1568.8907470703125,"id":"265","attributes":{"Eigenvector Centrality":"0.2718151842935107","Betweenness Centrality":"0.0","Appearances":"23","No":"19","Country":"United States","Club Country":"United States","Club":"Sporting Kansas City","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"18 August 1986 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Gastón Ramírez","x":-52.539005279541016,"y":-56.3730354309082,"id":"240","attributes":{"Eigenvector Centrality":"0.49007679600185783","Betweenness Centrality":"0.004586755672605624","Appearances":"29","No":"18","Country":"Uruguay","Club Country":"England","Club":"Southampton","Weighted Degree":"28.0","Modularity Class":"6","Date of birth / Age":"2 December 1990 (aged 23)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3339391185824625"},"color":"rgb(229,197,67)","size":18.0},{"label":"Gerard Piqué","x":-1126.433837890625,"y":-326.654052734375,"id":"245","attributes":{"Eigenvector Centrality":"0.9370904429273632","Betweenness Centrality":"0.0017384725186443504","Appearances":"60","No":"3","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"2 February 1987 (aged 27)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Bailey Wright","x":2074.923095703125,"y":-613.9719848632812,"id":"77","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"0","No":"8","Country":"Australia","Club Country":"England","Club":"Preston North End","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"28 July 1992 (aged 21)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Toni Šunjic","x":1221.8553466796875,"y":-554.8410034179688,"id":"688","attributes":{"Eigenvector Centrality":"0.28396954172011374","Betweenness Centrality":"0.0","Appearances":"8","No":"15","Country":"Bosnia and Herzegovina","Club Country":"Ukraine","Club":"Zorya Luhansk","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"15 December 1988 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Sergio Romero","x":-1110.6038818359375,"y":391.8827819824219,"id":"645","attributes":{"Eigenvector Centrality":"0.52052076818968","Betweenness Centrality":"0.00163007937425408","Appearances":"47","No":"1","Country":"Argentina","Club Country":"France","Club":"AS Monaco","Weighted Degree":"25.0","Modularity Class":"19","Date of birth / Age":"22 February 1987 (aged 27)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3168103448275862"},"color":"rgb(67,229,229)","size":14.0},{"label":"David Luiz","x":-401.1297607421875,"y":-483.5873107910156,"id":"151","attributes":{"Eigenvector Centrality":"0.7525362816963485","Betweenness Centrality":"0.002196566654268722","Appearances":"36","No":"4","Country":"Brazil","Club Country":"England","Club":"Chelsea","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"22 April 1987 (aged 27)","Degree":"30","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3471894189891356"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"Sulley Muntari","x":435.7590026855469,"y":1263.3812255859375,"id":"670","attributes":{"Eigenvector Centrality":"0.39414902919139266","Betweenness Centrality":"0.004358888803155806","Appearances":"82","No":"11","Country":"Ghana","Club Country":"Italy","Club":"Milan","Weighted Degree":"28.0","Modularity Class":"5","Date of birth / Age":"27 August 1984 (aged 29)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31223449447748514"},"color":"rgb(67,229,197)","size":18.0},{"label":"Yoshito Okubo","x":717.3280639648438,"y":699.9623413085938,"id":"730","attributes":{"Eigenvector Centrality":"0.31718153777834784","Betweenness Centrality":"0.0","Appearances":"57","No":"13","Country":"Japan","Club Country":"Japan","Club":"Kawasaki Frontale","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"9 June 1982 (aged 32)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Francisco Javier Rodríguez","x":-2058.64453125,"y":342.1274719238281,"id":"229","attributes":{"Eigenvector Centrality":"0.2771264523867947","Betweenness Centrality":"0.0","Appearances":"95","No":"2","Country":"Mexico","Club Country":"Mexico","Club":"América","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"20 October 1981 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Tim Howard","x":597.1010131835938,"y":-1458.6304931640625,"id":"681","attributes":{"Eigenvector Centrality":"0.37125489722394445","Betweenness Centrality":"0.007200099994456211","Appearances":"100","No":"1","Country":"United States","Club Country":"England","Club":"Everton","Weighted Degree":"27.0","Modularity Class":"26","Date of birth / Age":"6 March 1979 (aged 35)","Degree":"27","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.30359355638166047"},"color":"rgb(100,229,67)","size":16.666667938232422},{"label":"Kim Chang-soo","x":1182.64794921875,"y":1681.892333984375,"id":"392","attributes":{"Eigenvector Centrality":"0.23152559498868777","Betweenness Centrality":"0.0","Appearances":"9","No":"2","Country":"South Korea","Club Country":"Japan","Club":"Kashiwa Reysol","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"12 September 1985 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Igor Akinfeev","x":-1278.8709716796875,"y":-1521.6795654296875,"id":"292","attributes":{"Eigenvector Centrality":"0.27975304502942094","Betweenness Centrality":"8.329697214751982E-4","Appearances":"68","No":"1","Country":"Russia","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"8 April 1986 (aged 28)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.2544132917964694"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Anel Hadžic","x":1149.517822265625,"y":-490.4151306152344,"id":"53","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"2","No":"21","Country":"Bosnia and Herzegovina","Club Country":"Austria","Club":"Sturm Graz","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"16 August 1989 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Jordi Alba","x":-1139.678955078125,"y":-237.86505126953125,"id":"349","attributes":{"Eigenvector Centrality":"0.9370904429273634","Betweenness Centrality":"0.0017384725186443504","Appearances":"26","No":"18","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"21 March 1989 (aged 25)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Teófilo Gutiérrez","x":-811.0554809570312,"y":1271.3983154296875,"id":"672","attributes":{"Eigenvector Centrality":"0.31394925107891597","Betweenness Centrality":"0.0","Appearances":"30","No":"9","Country":"Colombia","Club Country":"Argentina","Club":"River Plate","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"17 May 1985 (aged 29)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Daniel Davari","x":1905.60986328125,"y":955.88916015625,"id":"137","attributes":{"Eigenvector Centrality":"0.22438444470902533","Betweenness Centrality":"0.034852343427392886","Appearances":"4","No":"22","Country":"Iran","Club Country":"Germany","Club":"Eintracht Braunschweig","Weighted Degree":"23.0","Modularity Class":"1","Date of birth / Age":"6 January 1988 (aged 26)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.24739145069000334"},"color":"rgb(67,197,229)","size":11.333333015441895},{"label":"Serey Die","x":467.3825988769531,"y":-653.703857421875,"id":"638","attributes":{"Eigenvector Centrality":"0.37146876286160685","Betweenness Centrality":"0.004611725554141086","Appearances":"7","No":"20","Country":"Ivory Coast","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"26.0","Modularity Class":"9","Date of birth / Age":"7 November 1984 (aged 29)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(164,67,229)","size":15.333333969116211},{"label":"Yun Suk-young","x":1131.668212890625,"y":1494.437255859375,"id":"731","attributes":{"Eigenvector Centrality":"0.2442236139118131","Betweenness Centrality":"0.002477907299557519","Appearances":"4","No":"3","Country":"South Korea","Club Country":"England","Club":"Queens Park Rangers","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"13 February 1990 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.27242401779095626"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Wilson Palacios","x":1475.9537353515625,"y":-1233.8828125,"id":"718","attributes":{"Eigenvector Centrality":"0.2749352578108993","Betweenness Centrality":"0.008565859408081519","Appearances":"95","No":"8","Country":"Honduras","Club Country":"England","Club":"Stoke City","Weighted Degree":"25.0","Modularity Class":"7","Date of birth / Age":"29 July 1984 (aged 29)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29672991522002423"},"color":"rgb(100,67,229)","size":14.0},{"label":"Steven Beitashour","x":1978.978515625,"y":1007.80078125,"id":"666","attributes":{"Eigenvector Centrality":"0.21274429344229642","Betweenness Centrality":"0.0","Appearances":"6","No":"20","Country":"Iran","Club Country":"Canada","Club":"Vancouver Whitecaps FC","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"1 February 1987 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Nicolas Lombaerts","x":-803.9263916015625,"y":-951.1397705078125,"id":"532","attributes":{"Eigenvector Centrality":"0.6174086302888655","Betweenness Centrality":"0.006770928561410678","Appearances":"25","No":"18","Country":"Belgium","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"28.0","Modularity Class":"28","Date of birth / Age":"20 March 1985 (aged 29)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3343949044585987"},"color":"rgb(67,229,132)","size":18.0},{"label":"Victor","x":-504.1156921386719,"y":-310.5911865234375,"id":"699","attributes":{"Eigenvector Centrality":"0.5425650576268322","Betweenness Centrality":"0.0","Appearances":"6","No":"22","Country":"Brazil","Club Country":"Brazil","Club":"Atlético Mineiro","Weighted Degree":"22.0","Modularity Class":"23","Date of birth / Age":"21 January 1983 (aged 31)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3158573270305114"},"color":"rgb(229,67,197)","size":10.0},{"label":"Mikkel Diskerud","x":941.4994506835938,"y":-1436.3448486328125,"id":"513","attributes":{"Eigenvector Centrality":"0.2821282119717931","Betweenness Centrality":"0.00491295354819868","Appearances":"20","No":"10","Country":"United States","Club Country":"Norway","Club":"Rosenborg","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"2 October 1990 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28857479387514723"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Dante","x":-212.989501953125,"y":-416.6596374511719,"id":"145","attributes":{"Eigenvector Centrality":"0.856259545753813","Betweenness Centrality":"0.008027278474858441","Appearances":"12","No":"13","Country":"Brazil","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"23","Date of birth / Age":"18 October 1983 (aged 30)","Degree":"35","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3510028653295129"},"color":"rgb(229,67,197)","size":27.33333396911621},{"label":"Emir Spahic (c)","x":1039.750244140625,"y":-336.38665771484375,"id":"198","attributes":{"Eigenvector Centrality":"0.30657356383479545","Betweenness Centrality":"0.01353674285470377","Appearances":"74","No":"4","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"Bayer Leverkusen","Weighted Degree":"24.0","Modularity Class":"20","Date of birth / Age":"18 August 1980 (aged 33)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3225098727512067"},"color":"rgb(132,229,67)","size":12.666666984558105},{"label":"Tim Krul","x":749.574951171875,"y":-122.82310485839844,"id":"682","attributes":{"Eigenvector Centrality":"0.42046095610267226","Betweenness Centrality":"0.005581921144737077","Appearances":"5","No":"23","Country":"Netherlands","Club Country":"England","Club":"Newcastle United","Weighted Degree":"27.0","Modularity Class":"22","Date of birth / Age":"3 April 1988 (aged 26)","Degree":"27","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(197,67,229)","size":16.666667938232422},{"label":"Edder Delgado","x":1622.098388671875,"y":-1283.4814453125,"id":"178","attributes":{"Eigenvector Centrality":"0.23664887946331803","Betweenness Centrality":"0.0","Appearances":"26","No":"12","Country":"Honduras","Club Country":"Honduras","Club":"Real España","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"20 November 1986 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Chris Wondolowski","x":915.552978515625,"y":-1512.6751708984375,"id":"117","attributes":{"Eigenvector Centrality":"0.282163463180194","Betweenness Centrality":"0.0017638995236230008","Appearances":"21","No":"18","Country":"United States","Club Country":"United States","Club":"San Jose Earthquakes","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"28 January 1983 (aged 31)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2877838684416601"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Memphis Depay","x":929.3518676757812,"y":119.25907897949219,"id":"496","attributes":{"Eigenvector Centrality":"0.36016990192205894","Betweenness Centrality":"0.005645297467686556","Appearances":"6","No":"21","Country":"Netherlands","Club Country":"Netherlands","Club":"PSV","Weighted Degree":"24.0","Modularity Class":"22","Date of birth / Age":"13 February 1994 (aged 20)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3273942093541203"},"color":"rgb(197,67,229)","size":12.666666984558105},{"label":"Jérôme Boateng","x":313.90338134765625,"y":-414.4244689941406,"id":"327","attributes":{"Eigenvector Centrality":"0.6585766805388437","Betweenness Centrality":"0.0026429368589338613","Appearances":"39","No":"20","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"3 September 1988 (aged 25)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Nani","x":-646.500244140625,"y":40.37836456298828,"id":"528","attributes":{"Eigenvector Centrality":"0.7654159805026451","Betweenness Centrality":"0.010494679938814755","Appearances":"75","No":"17","Country":"Portugal","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"8","Date of birth / Age":"17 November 1986 (aged 27)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34702549575070823"},"color":"rgb(229,164,67)","size":27.33333396911621},{"label":"Michael Barrantes","x":2300.956298828125,"y":256.1389465332031,"id":"501","attributes":{"Eigenvector Centrality":"0.23496944760866373","Betweenness Centrality":"0.0","Appearances":"50","No":"11","Country":"Costa Rica","Club Country":"Norway","Club":"Aalesund","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"4 October 1983 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Gelson Fernandes","x":151.718017578125,"y":158.9506072998047,"id":"241","attributes":{"Eigenvector Centrality":"0.41564407300864686","Betweenness Centrality":"0.0029131326818128433","Appearances":"47","No":"16","Country":"Switzerland","Club Country":"Germany","Club":"SC Freiburg","Weighted Degree":"24.0","Modularity Class":"0","Date of birth / Age":"2 September 1986 (aged 27)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3150450064294899"},"color":"rgb(164,229,67)","size":12.666666984558105},{"label":"Oscar","x":-364.28692626953125,"y":-412.46795654296875,"id":"547","attributes":{"Eigenvector Centrality":"0.7525362816963487","Betweenness Centrality":"0.002196566654268722","Appearances":"31","No":"11","Country":"Brazil","Club Country":"England","Club":"Chelsea","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"9 September 1991 (aged 22)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3471894189891356"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"El Arbi Hillel Soudani","x":-1331.9407958984375,"y":1124.369873046875,"id":"195","attributes":{"Eigenvector Centrality":"0.3092624835205678","Betweenness Centrality":"0.0011823348492373815","Appearances":"22","No":"15","Country":"Algeria","Club Country":"Croatia","Club":"Dinamo Zagreb","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"25 November 1987 (aged 26)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2950622240064231"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Vincent Aboubakar","x":458.3448486328125,"y":202.27162170410156,"id":"705","attributes":{"Eigenvector Centrality":"0.32277187794408035","Betweenness Centrality":"0.0","Appearances":"24","No":"10","Country":"Cameroon","Club Country":"France","Club":"Lorient","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"22 January 1992 (aged 22)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Paul Pogba","x":8.138252258300781,"y":94.41950225830078,"id":"565","attributes":{"Eigenvector Centrality":"0.7020295109364902","Betweenness Centrality":"0.00827672737020524","Appearances":"11","No":"19","Country":"France","Club Country":"Italy","Club":"Juventus","Weighted Degree":"33.0","Modularity Class":"16","Date of birth / Age":"15 March 1993 (aged 21)","Degree":"33","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.33424283765347884"},"color":"rgb(229,67,229)","size":24.666667938232422},{"label":"Alejandro Bedoya","x":784.4288940429688,"y":-1547.6514892578125,"id":"20","attributes":{"Eigenvector Centrality":"0.27181518429351065","Betweenness Centrality":"0.0","Appearances":"28","No":"11","Country":"United States","Club Country":"France","Club":"Nantes","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"29 April 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Hossein Mahini","x":1969.51806640625,"y":1144.54345703125,"id":"284","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"22","No":"13","Country":"Iran","Club Country":"Iran","Club":"Persepolis","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"16 September 1986 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Aleksandr Kerzhakov","x":-1228.88916015625,"y":-1267.0670166015625,"id":"21","attributes":{"Eigenvector Centrality":"0.3498246554244825","Betweenness Centrality":"0.004583905120882726","Appearances":"80","No":"11","Country":"Russia","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"26.0","Modularity Class":"2","Date of birth / Age":"27 November 1982 (aged 31)","Degree":"26","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.27904328018223234"},"color":"rgb(229,67,67)","size":15.333333969116211},{"label":"Frickson Erazo","x":-1740.312255859375,"y":-668.1109619140625,"id":"235","attributes":{"Eigenvector Centrality":"0.3623062182068215","Betweenness Centrality":"0.0","Appearances":"37","No":"3","Country":"Ecuador","Club Country":"Brazil","Club":"Flamengo","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"5 May 1988 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Ousmane Viera","x":474.08282470703125,"y":-965.5185546875,"id":"553","attributes":{"Eigenvector Centrality":"0.3219703768914536","Betweenness Centrality":"0.0013416368447328885","Appearances":"1","No":"2","Country":"Ivory Coast","Club Country":"Turkey","Club":"Çaykur Rizespor","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"21 December 1986 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30334296326867516"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Shusaku Nishikawa","x":727.420166015625,"y":656.2659301757812,"id":"651","attributes":{"Eigenvector Centrality":"0.31718153777834773","Betweenness Centrality":"0.0","Appearances":"13","No":"12","Country":"Japan","Club Country":"Japan","Club":"Urawa Red Diamonds","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"18 June 1986 (aged 27)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Andrea Barzagli","x":109.97048950195312,"y":937.1626586914062,"id":"45","attributes":{"Eigenvector Centrality":"0.5455496050511397","Betweenness Centrality":"0.0016215443882875223","Appearances":"47","No":"15","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"8 May 1981 (aged 33)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Oliver Zelenika","x":-310.13934326171875,"y":653.3941040039062,"id":"542","attributes":{"Eigenvector Centrality":"0.34443939620173625","Betweenness Centrality":"0.0","Appearances":"0","No":"12","Country":"Croatia","Club Country":"Croatia","Club":"Lokomotiva","Weighted Degree":"22.0","Modularity Class":"25","Date of birth / Age":"14 May 1993 (aged 21)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.29178245335450576"},"color":"rgb(132,67,229)","size":10.0},{"label":"Alan Pulido","x":-2016.3092041015625,"y":442.1366271972656,"id":"17","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"6","No":"11","Country":"Mexico","Club Country":"Mexico","Club":"UANL","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"8 March 1991 (aged 23)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Ivica Olic","x":-356.2250061035156,"y":503.7689208984375,"id":"301","attributes":{"Eigenvector Centrality":"0.4414842289662269","Betweenness Centrality":"0.0021210911790253153","Appearances":"92","No":"18","Country":"Croatia","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"27.0","Modularity Class":"25","Date of birth / Age":"14 September 1979 (aged 34)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.317083692838654"},"color":"rgb(132,67,229)","size":16.666667938232422},{"label":"Divock Origi","x":-634.9317016601562,"y":-895.1273803710938,"id":"172","attributes":{"Eigenvector Centrality":"0.567406470826805","Betweenness Centrality":"0.002778667740909008","Appearances":"2","No":"17","Country":"Belgium","Club Country":"France","Club":"Lille","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"18 April 1995 (aged 19)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3383977900552486"},"color":"rgb(67,229,132)","size":14.0},{"label":"Han Kook-young","x":1158.830810546875,"y":1599.3704833984375,"id":"269","attributes":{"Eigenvector Centrality":"0.2315255949886878","Betweenness Centrality":"0.0","Appearances":"10","No":"14","Country":"South Korea","Club Country":"Japan","Club":"Kashiwa Reysol","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"19 April 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Tommy Oar","x":2165.022705078125,"y":-713.5425415039062,"id":"686","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"15","No":"11","Country":"Australia","Club Country":"Netherlands","Club":"Utrecht","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"10 December 1991 (aged 22)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Raúl Jiménez","x":-2167.43408203125,"y":400.8553161621094,"id":"592","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"25","No":"9","Country":"Mexico","Club Country":"Mexico","Club":"América","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"5 May 1991 (aged 23)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Luka Modric","x":-410.41796875,"y":416.6111145019531,"id":"432","attributes":{"Eigenvector Centrality":"0.6315855500081669","Betweenness Centrality":"0.005842271062684167","Appearances":"75","No":"10","Country":"Croatia","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"33.0","Modularity Class":"25","Date of birth / Age":"9 September 1985 (aged 28)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3262316910785619"},"color":"rgb(132,67,229)","size":24.666667938232422},{"label":"Georginio Wijnaldum","x":874.0654907226562,"y":135.7948455810547,"id":"244","attributes":{"Eigenvector Centrality":"0.36016990192205894","Betweenness Centrality":"0.005645297467686556","Appearances":"5","No":"20","Country":"Netherlands","Club Country":"Netherlands","Club":"PSV","Weighted Degree":"24.0","Modularity Class":"22","Date of birth / Age":"11 November 1990 (aged 23)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3273942093541203"},"color":"rgb(197,67,229)","size":12.666666984558105},{"label":"Alfredo Talavera","x":-1995.7100830078125,"y":401.94842529296875,"id":"34","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"14","No":"12","Country":"Mexico","Club Country":"Mexico","Club":"Toluca","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"18 September 1982 (aged 31)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Esteban Paredes","x":-262.22747802734375,"y":1531.853271484375,"id":"207","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"35","No":"22","Country":"Chile","Club Country":"Chile","Club":"Colo-Colo","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"1 August 1980 (aged 33)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Enzo Pérez","x":-1057.39599609375,"y":279.5024719238281,"id":"202","attributes":{"Eigenvector Centrality":"0.5249878217996955","Betweenness Centrality":"8.46487079105798E-4","Appearances":"7","No":"8","Country":"Argentina","Club Country":"Portugal","Club":"Benfica","Weighted Degree":"25.0","Modularity Class":"19","Date of birth / Age":"22 February 1986 (aged 28)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3084347461183382"},"color":"rgb(67,229,229)","size":14.0},{"label":"Martín Cáceres","x":-21.211044311523438,"y":343.7950439453125,"id":"461","attributes":{"Eigenvector Centrality":"0.5969418716202328","Betweenness Centrality":"0.009327834149799673","Appearances":"57","No":"22","Country":"Uruguay","Club Country":"Italy","Club":"Juventus","Weighted Degree":"33.0","Modularity Class":"6","Date of birth / Age":"7 April 1987 (aged 27)","Degree":"33","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33731069297843047"},"color":"rgb(229,197,67)","size":24.666667938232422},{"label":"Thomas Vermaelen","x":-482.7641296386719,"y":-771.1542358398438,"id":"679","attributes":{"Eigenvector Centrality":"0.7319614548533502","Betweenness Centrality":"0.0031592253025152935","Appearances":"47","No":"3","Country":"Belgium","Club Country":"England","Club":"Arsenal","Weighted Degree":"31.0","Modularity Class":"28","Date of birth / Age":"14 November 1985 (aged 28)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33731069297843047"},"color":"rgb(67,229,132)","size":22.0},{"label":"Matt Besler","x":861.9520874023438,"y":-1604.162841796875,"id":"476","attributes":{"Eigenvector Centrality":"0.2718151842935107","Betweenness Centrality":"0.0","Appearances":"17","No":"5","Country":"United States","Club Country":"United States","Club":"Sporting Kansas City","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"11 February 1987 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Benjamin Moukandjo","x":415.3848876953125,"y":99.65612030029297,"id":"83","attributes":{"Eigenvector Centrality":"0.3227718779440804","Betweenness Centrality":"0.0","Appearances":"17","No":"8","Country":"Cameroon","Club Country":"France","Club":"Nancy","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"12 November 1988 (aged 25)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"David Ospina","x":-821.8875122070312,"y":1214.61767578125,"id":"153","attributes":{"Eigenvector Centrality":"0.3139492510789159","Betweenness Centrality":"0.0","Appearances":"44","No":"1","Country":"Colombia","Club Country":"France","Club":"Nice","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"31 August 1988 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Felipe Caicedo","x":-1726.1597900390625,"y":-587.7854614257812,"id":"222","attributes":{"Eigenvector Centrality":"0.3623062182068215","Betweenness Centrality":"0.0","Appearances":"50","No":"11","Country":"Ecuador","Club Country":"United Arab Emirates","Club":"Al-Jazira","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"5 September 1988 (aged 25)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Kevin Großkreutz","x":553.7317504882812,"y":-380.0992126464844,"id":"385","attributes":{"Eigenvector Centrality":"0.500680986024227","Betweenness Centrality":"0.008472576600609625","Appearances":"5","No":"2","Country":"Germany","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"24.0","Modularity Class":"13","Date of birth / Age":"19 July 1988 (aged 25)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.310126582278481"},"color":"rgb(67,229,164)","size":12.666666984558105},{"label":"Jô","x":-470.48614501953125,"y":-271.3874816894531,"id":"331","attributes":{"Eigenvector Centrality":"0.5425650576268322","Betweenness Centrality":"0.0","Appearances":"17","No":"21","Country":"Brazil","Club Country":"Brazil","Club":"Atlético Mineiro","Weighted Degree":"22.0","Modularity Class":"23","Date of birth / Age":"20 March 1987 (aged 27)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3158573270305114"},"color":"rgb(229,67,197)","size":10.0},{"label":"Pavel Mogilevets","x":-1357.9305419921875,"y":-1289.38330078125,"id":"568","attributes":{"Eigenvector Centrality":"0.2784495406871368","Betweenness Centrality":"0.0019868644316807485","Appearances":"1","No":"15","Country":"Russia","Club Country":"Russia","Club":"Rubin Kazan","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"25 January 1993 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.256186824677588"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Raïs M\u0027Bolhi","x":-1459.36083984375,"y":1229.281982421875,"id":"585","attributes":{"Eigenvector Centrality":"0.2958935568628797","Betweenness Centrality":"0.0","Appearances":"28","No":"23","Country":"Algeria","Club Country":"Bulgaria","Club":"CSKA Sofia","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"25 April 1986 (aged 28)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Henrique","x":-572.6226806640625,"y":-84.16056823730469,"id":"279","attributes":{"Eigenvector Centrality":"0.8111998945620833","Betweenness Centrality":"0.00493020854872855","Appearances":"5","No":"15","Country":"Brazil","Club Country":"Italy","Club":"Napoli","Weighted Degree":"33.0","Modularity Class":"23","Date of birth / Age":"14 October 1986 (aged 27)","Degree":"33","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3458823529411765"},"color":"rgb(229,67,197)","size":24.666667938232422},{"label":"Daryl Janmaat","x":832.5292358398438,"y":28.84025001525879,"id":"149","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"16","No":"7","Country":"Netherlands","Club Country":"Netherlands","Club":"Feyenoord","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"22 July 1989 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Álvaro González","x":13.41373348236084,"y":-43.777435302734375,"id":"38","attributes":{"Eigenvector Centrality":"0.4846353390672056","Betweenness Centrality":"0.006932977102729991","Appearances":"43","No":"20","Country":"Uruguay","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"6","Date of birth / Age":"29 October 1984 (aged 29)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34507042253521125"},"color":"rgb(229,197,67)","size":18.0},{"label":"Essaïd Belkalem","x":-1238.16552734375,"y":1250.7357177734375,"id":"205","attributes":{"Eigenvector Centrality":"0.30611433682396827","Betweenness Centrality":"0.005838443339718533","Appearances":"13","No":"4","Country":"Algeria","Club Country":"England","Club":"Watford","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"1 January 1989 (aged 25)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.29388244702119154"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Adrián Ramos","x":-712.1338500976562,"y":1053.31591796875,"id":"10","attributes":{"Eigenvector Centrality":"0.3252993880084764","Betweenness Centrality":"0.003909094271768691","Appearances":"26","No":"19","Country":"Colombia","Club Country":"Germany","Club":"Hertha BSC","Weighted Degree":"23.0","Modularity Class":"11","Date of birth / Age":"22 January 1986 (aged 28)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.3080469404861693"},"color":"rgb(67,67,229)","size":11.333333015441895},{"label":"José Miguel Cubero","x":2268.583740234375,"y":346.56884765625,"id":"360","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"35","No":"22","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Herediano","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"14 February 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Yuto Nagatomo","x":395.0039367675781,"y":607.56591796875,"id":"734","attributes":{"Eigenvector Centrality":"0.44967087937585604","Betweenness Centrality":"0.011059526851986908","Appearances":"70","No":"5","Country":"Japan","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"29.0","Modularity Class":"27","Date of birth / Age":"12 September 1986 (aged 27)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33731069297843047"},"color":"rgb(67,100,229)","size":19.333332061767578},{"label":"Hassan Yebda","x":-1303.48681640625,"y":1254.45166015625,"id":"274","attributes":{"Eigenvector Centrality":"0.30778242364802144","Betweenness Centrality":"0.0021251327211181483","Appearances":"25","No":"7","Country":"Algeria","Club Country":"Italy","Club":"Udinese","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"14 May 1984 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2980535279805353"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Mensur Mujdža","x":1039.0458984375,"y":-418.0989685058594,"id":"497","attributes":{"Eigenvector Centrality":"0.3323231211056512","Betweenness Centrality":"0.006714488569703231","Appearances":"24","No":"13","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"SC Freiburg","Weighted Degree":"25.0","Modularity Class":"20","Date of birth / Age":"28 March 1984 (aged 30)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(132,229,67)","size":14.0},{"label":"Matt McKay","x":2090.569580078125,"y":-687.9733276367188,"id":"477","attributes":{"Eigenvector Centrality":"0.2213229433005502","Betweenness Centrality":"0.0","Appearances":"47","No":"17","Country":"Australia","Club Country":"Australia","Club":"Brisbane Roar","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"11 January 1983 (aged 31)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Dany Nounkeu","x":382.61639404296875,"y":41.81476974487305,"id":"146","attributes":{"Eigenvector Centrality":"0.3503932506862968","Betweenness Centrality":"0.003969104553989964","Appearances":"16","No":"5","Country":"Cameroon","Club Country":"Turkey","Club":"Be?ikta?","Weighted Degree":"24.0","Modularity Class":"17","Date of birth / Age":"11 April 1986 (aged 28)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3272484416740873"},"color":"rgb(67,132,229)","size":12.666666984558105},{"label":"Toshihiro Aoyama","x":774.469970703125,"y":733.8078002929688,"id":"689","attributes":{"Eigenvector Centrality":"0.327417913267161","Betweenness Centrality":"0.0034073119067962805","Appearances":"6","No":"14","Country":"Japan","Club Country":"Japan","Club":"Sanfrecce Hiroshima","Weighted Degree":"23.0","Modularity Class":"27","Date of birth / Age":"22 February 1986 (aged 28)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.315450643776824"},"color":"rgb(67,100,229)","size":11.333333015441895},{"label":"Pablo Zabaleta","x":-933.6387939453125,"y":24.648056030273438,"id":"555","attributes":{"Eigenvector Centrality":"0.6398902783818313","Betweenness Centrality":"0.003598075368399343","Appearances":"36","No":"4","Country":"Argentina","Club Country":"England","Club":"Manchester City","Weighted Degree":"29.0","Modularity Class":"19","Date of birth / Age":"16 January 1985 (aged 29)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3316787003610108"},"color":"rgb(67,229,229)","size":19.333332061767578},{"label":"Luis Saritama","x":-1546.898681640625,"y":-441.077392578125,"id":"429","attributes":{"Eigenvector Centrality":"0.7525405481416904","Betweenness Centrality":"0.006691544296226193","Appearances":"49","No":"19","Country":"Ecuador","Club Country":"Ecuador","Club":"Barcelona","Weighted Degree":"35.0","Modularity Class":"4","Date of birth / Age":"20 October 1983 (aged 30)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,132)","size":27.33333396911621},{"label":"Orestis Karnezis","x":1393.8565673828125,"y":576.5565795898438,"id":"545","attributes":{"Eigenvector Centrality":"0.28385897578556757","Betweenness Centrality":"0.01153344916312804","Appearances":"19","No":"1","Country":"Greece","Club Country":"Spain","Club":"Granada","Weighted Degree":"24.0","Modularity Class":"15","Date of birth / Age":"11 July 1985 (aged 28)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.30624999999999997"},"color":"rgb(229,67,100)","size":12.666666984558105},{"label":"Abel Aguilar","x":-660.8257446289062,"y":1009.1897583007812,"id":"2","attributes":{"Eigenvector Centrality":"0.33885801794641307","Betweenness Centrality":"0.004574685606976985","Appearances":"49","No":"8","Country":"Colombia","Club Country":"France","Club":"Toulouse","Weighted Degree":"24.0","Modularity Class":"11","Date of birth / Age":"6 January 1985 (aged 29)","Degree":"24","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(67,67,229)","size":12.666666984558105},{"label":"Panagiotis Glykos","x":1575.4261474609375,"y":522.7161865234375,"id":"556","attributes":{"Eigenvector Centrality":"0.2581333696341679","Betweenness Centrality":"0.0","Appearances":"2","No":"12","Country":"Greece","Club Country":"Greece","Club":"PAOK","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"3 June 1986 (aged 28)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"José Juan Vázquez","x":-2102.5595703125,"y":434.6721496582031,"id":"357","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"5","No":"23","Country":"Mexico","Club Country":"Mexico","Club":"León","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"14 March 1988 (aged 26)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Vincent Kompany (c)","x":-575.3739013671875,"y":-726.921630859375,"id":"707","attributes":{"Eigenvector Centrality":"0.7270895604312667","Betweenness Centrality":"0.008072864238933854","Appearances":"59","No":"4","Country":"Belgium","Club Country":"England","Club":"Manchester City","Weighted Degree":"31.0","Modularity Class":"28","Date of birth / Age":"10 April 1986 (aged 28)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3506679389312977"},"color":"rgb(67,229,132)","size":22.0},{"label":"Mehrdad Pouladi","x":1894.86376953125,"y":1109.2691650390625,"id":"495","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"20","No":"23","Country":"Iran","Club Country":"Iran","Club":"Persepolis","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"26 February 1987 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Marcelo Brozovic","x":-406.1941833496094,"y":695.7294311523438,"id":"444","attributes":{"Eigenvector Centrality":"0.35648846045640376","Betweenness Centrality":"0.0013005076523818384","Appearances":"1","No":"14","Country":"Croatia","Club Country":"Croatia","Club":"Dinamo Zagreb","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"16 October 1992 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30209617755856966"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Laurent Ciman","x":-542.019287109375,"y":-660.8407592773438,"id":"408","attributes":{"Eigenvector Centrality":"0.5473733076826977","Betweenness Centrality":"0.004841485029495745","Appearances":"8","No":"23","Country":"Belgium","Club Country":"Belgium","Club":"Standard Liège","Weighted Degree":"24.0","Modularity Class":"28","Date of birth / Age":"5 August 1985 (aged 28)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3359232175502742"},"color":"rgb(67,229,132)","size":12.666666984558105},{"label":"Isaác Brizuela","x":-2104.457275390625,"y":342.27984619140625,"id":"295","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"7","No":"17","Country":"Mexico","Club Country":"Mexico","Club":"Toluca","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"28 August 1990 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Mario Yepes (c)","x":-719.3209838867188,"y":1256.8892822265625,"id":"457","attributes":{"Eigenvector Centrality":"0.326518739989132","Betweenness Centrality":"0.0018851206504077599","Appearances":"98","No":"3","Country":"Colombia","Club Country":"Italy","Club":"Atalanta","Weighted Degree":"23.0","Modularity Class":"11","Date of birth / Age":"13 January 1976 (aged 38)","Degree":"23","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2995110024449878"},"color":"rgb(67,67,229)","size":11.333333015441895},{"label":"Ramires","x":-481.0262451171875,"y":-469.7139587402344,"id":"586","attributes":{"Eigenvector Centrality":"0.7525362816963487","Betweenness Centrality":"0.002196566654268722","Appearances":"42","No":"16","Country":"Brazil","Club Country":"England","Club":"Chelsea","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"24 March 1987 (aged 27)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3471894189891356"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"Cédric Djeugoué","x":458.0302734375,"y":113.75821685791016,"id":"107","attributes":{"Eigenvector Centrality":"0.32277187794408035","Betweenness Centrality":"0.0","Appearances":"3","No":"4","Country":"Cameroon","Club Country":"Cameroon","Club":"Coton Sport","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"28 August 1992 (aged 21)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Igor Denisov","x":-1478.451904296875,"y":-1427.125244140625,"id":"293","attributes":{"Eigenvector Centrality":"0.28166227463506127","Betweenness Centrality":"6.368705012250895E-4","Appearances":"43","No":"7","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"17 May 1984 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Marco Fabián","x":-2042.7996826171875,"y":288.5499267578125,"id":"446","attributes":{"Eigenvector Centrality":"0.29131873163694544","Betweenness Centrality":"0.0012783129193471678","Appearances":"15","No":"8","Country":"Mexico","Club Country":"Mexico","Club":"Cruz Azul","Weighted Degree":"23.0","Modularity Class":"21","Date of birth / Age":"21 July 1989 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.2744585511575803"},"color":"rgb(67,229,67)","size":11.333333015441895},{"label":"Kevin-Prince Boateng","x":528.2719116210938,"y":1086.7677001953125,"id":"387","attributes":{"Eigenvector Centrality":"0.3920782711719237","Betweenness Centrality":"0.013927046623876642","Appearances":"13","No":"9","Country":"Ghana","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"28.0","Modularity Class":"5","Date of birth / Age":"6 March 1987 (aged 27)","Degree":"28","Position":"FW","Eccentricity":"4.0","Closeness Centrality":"0.3287119856887299"},"color":"rgb(67,229,197)","size":18.0},{"label":"Shola Ameobi","x":18.68687629699707,"y":-1408.741943359375,"id":"649","attributes":{"Eigenvector Centrality":"0.39186636186315155","Betweenness Centrality":"0.004728167800452107","Appearances":"7","No":"23","Country":"Nigeria","Club Country":"England","Club":"Newcastle United","Weighted Degree":"27.0","Modularity Class":"14","Date of birth / Age":"12 October 1981 (aged 32)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.31873373807458805"},"color":"rgb(67,229,100)","size":16.666667938232422},{"label":"Oribe Peralta","x":-2123.54345703125,"y":394.2029113769531,"id":"546","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"33","No":"19","Country":"Mexico","Club Country":"Mexico","Club":"Santos Laguna","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"12 January 1984 (aged 30)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Marouane Fellaini","x":-655.5911865234375,"y":-756.7737426757812,"id":"460","attributes":{"Eigenvector Centrality":"0.8465738555476342","Betweenness Centrality":"0.005671820760248386","Appearances":"50","No":"8","Country":"Belgium","Club Country":"England","Club":"Manchester United","Weighted Degree":"34.0","Modularity Class":"28","Date of birth / Age":"22 November 1987 (aged 26)","Degree":"34","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3554158607350097"},"color":"rgb(67,229,132)","size":26.0},{"label":"Mark Bresciano","x":2122.005615234375,"y":-604.5106811523438,"id":"458","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"74","No":"23","Country":"Australia","Club Country":"Qatar","Club":"Al-Gharafa","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"11 February 1980 (aged 34)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Juan Pablo Montes","x":1592.6820068359375,"y":-1250.384033203125,"id":"372","attributes":{"Eigenvector Centrality":"0.23664887946331797","Betweenness Centrality":"0.0","Appearances":"11","No":"4","Country":"Honduras","Club Country":"Honduras","Club":"Motagua","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"26 October 1985 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Sokratis Papastathopoulos","x":1506.5098876953125,"y":339.672119140625,"id":"656","attributes":{"Eigenvector Centrality":"0.34048353254028174","Betweenness Centrality":"0.015463773824795727","Appearances":"47","No":"19","Country":"Greece","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"27.0","Modularity Class":"15","Date of birth / Age":"9 June 1988 (aged 26)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.29178245335450576"},"color":"rgb(229,67,100)","size":16.666667938232422},{"label":"Blerim Džemaili","x":-243.03868103027344,"y":290.1379699707031,"id":"88","attributes":{"Eigenvector Centrality":"0.6153709092825856","Betweenness Centrality":"0.004199284588766183","Appearances":"34","No":"15","Country":"Switzerland","Club Country":"Italy","Club":"Napoli","Weighted Degree":"31.0","Modularity Class":"0","Date of birth / Age":"12 April 1986 (aged 28)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3331822302810517"},"color":"rgb(164,229,67)","size":22.0},{"label":"Mario Balotelli","x":253.78076171875,"y":886.2698364257812,"id":"452","attributes":{"Eigenvector Centrality":"0.49991402097095833","Betweenness Centrality":"0.003073405743850096","Appearances":"30","No":"9","Country":"Italy","Club Country":"Italy","Club":"Milan","Weighted Degree":"27.0","Modularity Class":"3","Date of birth / Age":"12 August 1990 (aged 23)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.31928757602085145"},"color":"rgb(197,229,67)","size":16.666667938232422},{"label":"Ivan Rakitic","x":-359.27825927734375,"y":645.7860717773438,"id":"300","attributes":{"Eigenvector Centrality":"0.38837093893822316","Betweenness Centrality":"0.003900575726937713","Appearances":"62","No":"7","Country":"Croatia","Club Country":"Spain","Club":"Sevilla","Weighted Degree":"25.0","Modularity Class":"25","Date of birth / Age":"10 March 1988 (aged 26)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31873373807458805"},"color":"rgb(132,67,229)","size":14.0},{"label":"Denis Glushakov","x":-1381.390869140625,"y":-1518.66748046875,"id":"158","attributes":{"Eigenvector Centrality":"0.26569304291819806","Betweenness Centrality":"0.0","Appearances":"26","No":"8","Country":"Russia","Club Country":"Russia","Club":"Spartak Moscow","Weighted Degree":"22.0","Modularity Class":"2","Date of birth / Age":"27 January 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.23244781783681215"},"color":"rgb(229,67,67)","size":10.0},{"label":"Alexander Mejía","x":-761.3262329101562,"y":1152.329833984375,"id":"31","attributes":{"Eigenvector Centrality":"0.31394925107891597","Betweenness Centrality":"0.0","Appearances":"8","No":"15","Country":"Colombia","Club Country":"Colombia","Club":"Atlético Nacional","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"11 July 1988 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Iker Casillas (c)","x":-800.6239624023438,"y":-169.28741455078125,"id":"294","attributes":{"Eigenvector Centrality":"0.9040112595591265","Betweenness Centrality":"0.001687861941424018","Appearances":"154","No":"1","Country":"Spain","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"20 May 1981 (aged 33)","Degree":"31","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3350045578851413"},"color":"rgb(229,67,197)","size":22.0},{"label":"Bastian Schweinsteiger","x":244.85414123535156,"y":-373.9827575683594,"id":"79","attributes":{"Eigenvector Centrality":"0.6585766805388439","Betweenness Centrality":"0.0026429368589338613","Appearances":"102","No":"7","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"1 August 1984 (aged 29)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Héctor Moreno","x":-1943.870849609375,"y":364.6249694824219,"id":"276","attributes":{"Eigenvector Centrality":"0.2913525846132968","Betweenness Centrality":"0.0014244038755752933","Appearances":"53","No":"15","Country":"Mexico","Club Country":"Spain","Club":"Espanyol","Weighted Degree":"23.0","Modularity Class":"21","Date of birth / Age":"17 January 1988 (aged 26)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2797868290826037"},"color":"rgb(67,229,67)","size":11.333333015441895},{"label":"Enner Valencia","x":-1712.62646484375,"y":-633.4451293945312,"id":"201","attributes":{"Eigenvector Centrality":"0.3623062182068215","Betweenness Centrality":"0.0","Appearances":"10","No":"13","Country":"Ecuador","Club Country":"Mexico","Club":"Pachuca","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"11 April 1989 (aged 25)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Miiko Albornoz","x":-282.7862243652344,"y":1583.49462890625,"id":"512","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"2","No":"3","Country":"Chile","Club Country":"Sweden","Club":"Malmö FF","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"30 November 1990 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Nigel de Jong","x":764.1231689453125,"y":266.0992126464844,"id":"534","attributes":{"Eigenvector Centrality":"0.4525178607313098","Betweenness Centrality":"0.007743435699427788","Appearances":"71","No":"6","Country":"Netherlands","Club Country":"Italy","Club":"Milan","Weighted Degree":"29.0","Modularity Class":"22","Date of birth / Age":"13 November 1984 (aged 29)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3300404131118096"},"color":"rgb(197,67,229)","size":19.333332061767578},{"label":"Diego Forlán","x":22.54448699951172,"y":32.10325241088867,"id":"165","attributes":{"Eigenvector Centrality":"0.40103485022538","Betweenness Centrality":"0.0023543724845431786","Appearances":"110","No":"10","Country":"Uruguay","Club Country":"Japan","Club":"Cerezo Osaka","Weighted Degree":"24.0","Modularity Class":"6","Date of birth / Age":"19 May 1979 (aged 35)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3220858895705521"},"color":"rgb(229,197,67)","size":12.666666984558105},{"label":"Marco Verratti","x":74.62252044677734,"y":597.4002075195312,"id":"449","attributes":{"Eigenvector Centrality":"0.577944433296703","Betweenness Centrality":"0.001710601263663759","Appearances":"6","No":"23","Country":"Italy","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"3","Date of birth / Age":"5 November 1992 (aged 21)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3166738474795347"},"color":"rgb(197,229,67)","size":19.333332061767578},{"label":"Joe Hart","x":-212.69390869140625,"y":-704.6478271484375,"id":"335","attributes":{"Eigenvector Centrality":"0.7015324384017536","Betweenness Centrality":"0.003652191896387035","Appearances":"41","No":"1","Country":"England","Club Country":"England","Club":"Manchester City","Weighted Degree":"30.0","Modularity Class":"28","Date of birth / Age":"19 May 1987 (aged 27)","Degree":"30","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3316787003610108"},"color":"rgb(67,229,132)","size":20.666667938232422},{"label":"Loïc Feudjou","x":464.741943359375,"y":157.33299255371094,"id":"420","attributes":{"Eigenvector Centrality":"0.3227718779440803","Betweenness Centrality":"0.0","Appearances":"2","No":"1","Country":"Cameroon","Club Country":"Cameroon","Club":"Coton Sport","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"14 April 1992 (aged 22)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Wakaso Mubarak","x":209.4365234375,"y":1057.447998046875,"id":"709","attributes":{"Eigenvector Centrality":"0.32387682859035066","Betweenness Centrality":"0.009270286480100764","Appearances":"17","No":"22","Country":"Ghana","Club Country":"Russia","Club":"Rubin Kazan","Weighted Degree":"25.0","Modularity Class":"5","Date of birth / Age":"25 July 1990 (aged 23)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2897122585731179"},"color":"rgb(67,229,197)","size":14.0},{"label":"Alexander Domínguez","x":-1643.0283203125,"y":-689.7501831054688,"id":"30","attributes":{"Eigenvector Centrality":"0.3623062182068214","Betweenness Centrality":"0.0","Appearances":"18","No":"22","Country":"Ecuador","Club Country":"Ecuador","Club":"LDU Quito","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"5 June 1987 (aged 27)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Camilo Vargas","x":-870.7738037109375,"y":1102.7423095703125,"id":"96","attributes":{"Eigenvector Centrality":"0.32771831640802235","Betweenness Centrality":"0.0031253464825959647","Appearances":"0","No":"12","Country":"Colombia","Club Country":"Colombia","Club":"Santa Fe","Weighted Degree":"23.0","Modularity Class":"11","Date of birth / Age":"9 March 1989 (aged 25)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.3046000828843763"},"color":"rgb(67,67,229)","size":11.333333015441895},{"label":"Gordon Schildenfeld","x":-217.73817443847656,"y":655.733154296875,"id":"263","attributes":{"Eigenvector Centrality":"0.35596191653510817","Betweenness Centrality":"0.00248185018192758","Appearances":"21","No":"13","Country":"Croatia","Club Country":"Greece","Club":"Panathinaikos","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"18 March 1985 (aged 29)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30676126878130217"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Miguel Ángel Ponce","x":-2068.725830078125,"y":475.1539306640625,"id":"509","attributes":{"Eigenvector Centrality":"0.2771264523867947","Betweenness Centrality":"0.0","Appearances":"8","No":"16","Country":"Mexico","Club Country":"Mexico","Club":"Toluca","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"12 April 1989 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Klaas-Jan Huntelaar","x":809.1665649414062,"y":91.84487915039062,"id":"396","attributes":{"Eigenvector Centrality":"0.4358139473318699","Betweenness Centrality":"0.00591887145222094","Appearances":"62","No":"19","Country":"Netherlands","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"28.0","Modularity Class":"22","Date of birth / Age":"12 August 1983 (aged 30)","Degree":"28","Position":"FW","Eccentricity":"4.0","Closeness Centrality":"0.34106728538283065"},"color":"rgb(197,67,229)","size":18.0},{"label":"Adam Lallana","x":-133.68426513671875,"y":-732.5047607421875,"id":"5","attributes":{"Eigenvector Centrality":"0.5904515327423898","Betweenness Centrality":"0.0016054547217210155","Appearances":"6","No":"20","Country":"England","Club Country":"England","Club":"Southampton","Weighted Degree":"26.0","Modularity Class":"28","Date of birth / Age":"10 May 1988 (aged 26)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(67,229,132)","size":15.333333969116211},{"label":"Ognjen Vranješ","x":1242.7872314453125,"y":-442.58514404296875,"id":"538","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"13","No":"6","Country":"Bosnia and Herzegovina","Club Country":"Turkey","Club":"Elaz??spor","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"24 October 1989 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Nabil Bentaleb","x":-1282.9583740234375,"y":861.7017822265625,"id":"525","attributes":{"Eigenvector Centrality":"0.3967886399693337","Betweenness Centrality":"0.0057727171211353545","Appearances":"3","No":"14","Country":"Algeria","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"27.0","Modularity Class":"24","Date of birth / Age":"24 November 1994 (aged 19)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3127659574468085"},"color":"rgb(67,164,229)","size":16.666667938232422},{"label":"Christian Stuani","x":-159.97439575195312,"y":40.9938850402832,"id":"121","attributes":{"Eigenvector Centrality":"0.38716306457328087","Betweenness Centrality":"0.002173292405131628","Appearances":"10","No":"11","Country":"Uruguay","Club Country":"Spain","Club":"Espanyol","Weighted Degree":"23.0","Modularity Class":"6","Date of birth / Age":"12 October 1986 (aged 27)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3169469598965071"},"color":"rgb(229,197,67)","size":11.333333015441895},{"label":"Wayne Rooney","x":-356.8543395996094,"y":-834.0883178710938,"id":"713","attributes":{"Eigenvector Centrality":"0.7938188270448313","Betweenness Centrality":"0.0038886080479693477","Appearances":"92","No":"10","Country":"England","Club Country":"England","Club":"Manchester United","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"24 October 1985 (aged 28)","Degree":"32","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3393351800554017"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Víctor Ibarbo","x":-760.33837890625,"y":1293.089111328125,"id":"701","attributes":{"Eigenvector Centrality":"0.32651873998913206","Betweenness Centrality":"0.0018851206504077605","Appearances":"9","No":"14","Country":"Colombia","Club Country":"Italy","Club":"Cagliari","Weighted Degree":"23.0","Modularity Class":"11","Date of birth / Age":"19 May 1990 (aged 24)","Degree":"23","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2995110024449878"},"color":"rgb(67,67,229)","size":11.333333015441895},{"label":"Stephan Lichtsteiner","x":67.66877746582031,"y":456.6788330078125,"id":"661","attributes":{"Eigenvector Centrality":"0.6056758151342643","Betweenness Centrality":"0.009695316861352839","Appearances":"63","No":"2","Country":"Switzerland","Club Country":"Italy","Club":"Juventus","Weighted Degree":"33.0","Modularity Class":"0","Date of birth / Age":"16 January 1984 (aged 30)","Degree":"33","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3272484416740873"},"color":"rgb(164,229,67)","size":24.666667938232422},{"label":"Stefanos Kapino","x":1427.728271484375,"y":531.8199462890625,"id":"660","attributes":{"Eigenvector Centrality":"0.28485567017526575","Betweenness Centrality":"0.005086946710578289","Appearances":"2","No":"13","Country":"Greece","Club Country":"Greece","Club":"Panathinaikos","Weighted Degree":"24.0","Modularity Class":"15","Date of birth / Age":"18 March 1994 (aged 20)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.29108910891089107"},"color":"rgb(229,67,100)","size":12.666666984558105},{"label":"Daley Blind","x":865.136962890625,"y":-4.895512104034424,"id":"133","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"12","No":"5","Country":"Netherlands","Club Country":"Netherlands","Club":"Ajax","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"9 March 1990 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Domagoj Vida","x":-257.2379455566406,"y":568.6809692382812,"id":"175","attributes":{"Eigenvector Centrality":"0.3750066769920371","Betweenness Centrality":"0.0014678886642237275","Appearances":"23","No":"21","Country":"Croatia","Club Country":"Ukraine","Club":"Dynamo Kyiv","Weighted Degree":"24.0","Modularity Class":"25","Date of birth / Age":"29 April 1989 (aged 25)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31450577663671375"},"color":"rgb(132,67,229)","size":12.666666984558105},{"label":"DaMarcus Beasley","x":860.4318237304688,"y":-1509.4605712890625,"id":"134","attributes":{"Eigenvector Centrality":"0.2718151842935107","Betweenness Centrality":"0.0","Appearances":"116","No":"7","Country":"United States","Club Country":"Mexico","Club":"Puebla","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"24 May 1982 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Guillermo Ochoa","x":-2012.4979248046875,"y":495.5871276855469,"id":"267","attributes":{"Eigenvector Centrality":"0.2891264231632272","Betweenness Centrality":"0.0013552426869013025","Appearances":"59","No":"13","Country":"Mexico","Club Country":"France","Club":"Ajaccio","Weighted Degree":"23.0","Modularity Class":"21","Date of birth / Age":"13 July 1985 (aged 28)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.2753840389659048"},"color":"rgb(67,229,67)","size":11.333333015441895},{"label":"Gonzalo Jara","x":-235.43576049804688,"y":1571.703369140625,"id":"262","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"65","No":"18","Country":"Chile","Club Country":"England","Club":"Nottingham Forest","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"29 August 1985 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Julian Draxler","x":528.5164184570312,"y":-263.5556335449219,"id":"374","attributes":{"Eigenvector Centrality":"0.5529715553555452","Betweenness Centrality":"0.006227653676219969","Appearances":"11","No":"14","Country":"Germany","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"27.0","Modularity Class":"13","Date of birth / Age":"20 September 1993 (aged 20)","Degree":"27","Position":"MF","Eccentricity":"4.0","Closeness Centrality":"0.3353102189781022"},"color":"rgb(67,229,164)","size":16.666667938232422},{"label":"André Almeida","x":-733.0572509765625,"y":266.98699951171875,"id":"42","attributes":{"Eigenvector Centrality":"0.4623139362600412","Betweenness Centrality":"0.0011159545915913598","Appearances":"5","No":"19","Country":"Portugal","Club Country":"Portugal","Club":"Benfica","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"10 September 1990 (aged 23)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31722054380664655"},"color":"rgb(229,164,67)","size":14.0},{"label":"Aleksandr Kokorin","x":-1414.3739013671875,"y":-1377.2596435546875,"id":"22","attributes":{"Eigenvector Centrality":"0.2816622746350614","Betweenness Centrality":"6.368705012250895E-4","Appearances":"21","No":"9","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"19 March 1991 (aged 23)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Felipe Gutiérrez","x":-184.13504028320312,"y":1490.4881591796875,"id":"223","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"18","No":"16","Country":"Chile","Club Country":"Netherlands","Club":"Twente","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"8 October 1990 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Simon Mignolet","x":-491.4549255371094,"y":-919.83154296875,"id":"654","attributes":{"Eigenvector Centrality":"0.7087966227214388","Betweenness Centrality":"0.004200915543181152","Appearances":"14","No":"12","Country":"Belgium","Club Country":"England","Club":"Liverpool","Weighted Degree":"31.0","Modularity Class":"28","Date of birth / Age":"6 August 1988 (aged 25)","Degree":"31","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.34329752452125173"},"color":"rgb(67,229,132)","size":22.0},{"label":"Maxwell","x":-388.1637878417969,"y":-99.59259033203125,"id":"490","attributes":{"Eigenvector Centrality":"0.7136149540335622","Betweenness Centrality":"0.0035076449501830744","Appearances":"9","No":"14","Country":"Brazil","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"27 August 1981 (aged 32)","Degree":"30","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3336359509759419"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"Mohamed Zemmamouche","x":-1405.252685546875,"y":1223.2103271484375,"id":"519","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"7","No":"16","Country":"Algeria","Club Country":"Algeria","Club":"USM Alger","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"19 March 1985 (aged 29)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Ciro Immobile","x":317.4281921386719,"y":794.2503662109375,"id":"123","attributes":{"Eigenvector Centrality":"0.43196054419267377","Betweenness Centrality":"0.0018820457212751422","Appearances":"2","No":"17","Country":"Italy","Club Country":"Italy","Club":"Torino","Weighted Degree":"23.0","Modularity Class":"3","Date of birth / Age":"20 February 1990 (aged 24)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30497925311203317"},"color":"rgb(197,229,67)","size":11.333333015441895},{"label":"Stipe Pletikosa","x":-333.28179931640625,"y":696.1630249023438,"id":"669","attributes":{"Eigenvector Centrality":"0.34443939620173625","Betweenness Centrality":"0.0","Appearances":"111","No":"1","Country":"Croatia","Club Country":"Russia","Club":"Rostov","Weighted Degree":"22.0","Modularity Class":"25","Date of birth / Age":"8 January 1979 (aged 35)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.29178245335450576"},"color":"rgb(132,67,229)","size":10.0},{"label":"Ismaël Diomandé","x":445.3325500488281,"y":-874.9510498046875,"id":"297","attributes":{"Eigenvector Centrality":"0.3273739867705004","Betweenness Centrality":"5.067313329973086E-4","Appearances":"2","No":"14","Country":"Ivory Coast","Club Country":"France","Club":"Saint-Étienne","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"28 August 1992 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30548628428927677"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Roger Espinoza","x":1525.8236083984375,"y":-1042.1474609375,"id":"609","attributes":{"Eigenvector Centrality":"0.24958708367603963","Betweenness Centrality":"0.00224748146417088","Appearances":"42","No":"15","Country":"Honduras","Club Country":"England","Club":"Wigan Athletic","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"25 October 1986 (aged 27)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Júnior Díaz","x":2052.333251953125,"y":457.9170837402344,"id":"378","attributes":{"Eigenvector Centrality":"0.2858658445617843","Betweenness Centrality":"0.019511326160720172","Appearances":"62","No":"15","Country":"Costa Rica","Club Country":"Germany","Club":"Mainz 05","Weighted Degree":"26.0","Modularity Class":"29","Date of birth / Age":"12 September 1983 (aged 30)","Degree":"26","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2916666666666667"},"color":"rgb(229,229,67)","size":15.333333969116211},{"label":"Diego Pérez","x":71.02754211425781,"y":37.87593078613281,"id":"168","attributes":{"Eigenvector Centrality":"0.3977686122666346","Betweenness Centrality":"0.008159853566079373","Appearances":"89","No":"15","Country":"Uruguay","Club Country":"Italy","Club":"Bologna","Weighted Degree":"24.0","Modularity Class":"6","Date of birth / Age":"18 May 1980 (aged 34)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32637655417406747"},"color":"rgb(229,197,67)","size":12.666666984558105},{"label":"Danijel Subašic","x":-426.1968078613281,"y":636.2631225585938,"id":"143","attributes":{"Eigenvector Centrality":"0.39279324564134416","Betweenness Centrality":"0.002055537854408172","Appearances":"6","No":"23","Country":"Croatia","Club Country":"France","Club":"AS Monaco","Weighted Degree":"25.0","Modularity Class":"25","Date of birth / Age":"27 October 1984 (aged 29)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3150450064294899"},"color":"rgb(132,67,229)","size":14.0},{"label":"Luis Suárez","x":-100.21392822265625,"y":-246.3746795654297,"id":"430","attributes":{"Eigenvector Centrality":"0.5668349766194245","Betweenness Centrality":"0.005273786093229346","Appearances":"77","No":"9","Country":"Uruguay","Club Country":"England","Club":"Liverpool","Weighted Degree":"31.0","Modularity Class":"6","Date of birth / Age":"24 January 1987 (aged 27)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3365384615384615"},"color":"rgb(229,197,67)","size":22.0},{"label":"Marvin Chávez","x":1429.798828125,"y":-1179.989501953125,"id":"464","attributes":{"Eigenvector Centrality":"0.25036259885703577","Betweenness Centrality":"0.004810204715637005","Appearances":"42","No":"23","Country":"Honduras","Club Country":"United States","Club":"Chivas USA","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"3 November 1983 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28171713300114987"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Allan Nyom","x":381.5302734375,"y":285.7757568359375,"id":"37","attributes":{"Eigenvector Centrality":"0.3467862797568034","Betweenness Centrality":"0.00587663072397192","Appearances":"10","No":"22","Country":"Cameroon","Club Country":"Spain","Club":"Granada","Weighted Degree":"24.0","Modularity Class":"17","Date of birth / Age":"10 May 1988 (aged 26)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3328804347826087"},"color":"rgb(67,132,229)","size":12.666666984558105},{"label":"Santiago Arias","x":-524.8426513671875,"y":1069.8533935546875,"id":"630","attributes":{"Eigenvector Centrality":"0.35261132545784823","Betweenness Centrality":"0.01168806541697648","Appearances":"6","No":"4","Country":"Colombia","Club Country":"Netherlands","Club":"PSV","Weighted Degree":"25.0","Modularity Class":"11","Date of birth / Age":"13 January 1992 (aged 22)","Degree":"25","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3168103448275862"},"color":"rgb(67,67,229)","size":14.0},{"label":"Óscar Duarte","x":2292.369873046875,"y":190.4766845703125,"id":"550","attributes":{"Eigenvector Centrality":"0.2448400755989879","Betweenness Centrality":"0.004512594233796394","Appearances":"11","No":"6","Country":"Costa Rica","Club Country":"Belgium","Club":"Club Brugge","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"3 June 1989 (aged 25)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2558301427079708"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Abdelmoumene Djabou","x":-1392.5499267578125,"y":1124.161376953125,"id":"1","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"8","No":"18","Country":"Algeria","Club Country":"Tunisia","Club":"Club Africain","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"31 January 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Juwon Oshaniwa","x":-3.99511456489563,"y":-1656.1483154296875,"id":"379","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"10","No":"13","Country":"Nigeria","Club Country":"Israel","Club":"Ashdod","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"14 September 1990 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Francisco Silva","x":-207.91714477539062,"y":1451.440673828125,"id":"230","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"12","No":"5","Country":"Chile","Club Country":"Spain","Club":"Osasuna","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"11 February 1986 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Jason Davidson","x":2027.00927734375,"y":-621.2344360351562,"id":"313","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"7","No":"3","Country":"Australia","Club Country":"Netherlands","Club":"Heracles Almelo","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"29 June 1991 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Mousa Dembélé","x":-780.701416015625,"y":-765.0794067382812,"id":"522","attributes":{"Eigenvector Centrality":"0.5781054780643133","Betweenness Centrality":"0.0013899483715746057","Appearances":"57","No":"19","Country":"Belgium","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"16 July 1987 (aged 26)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33638443935926776"},"color":"rgb(67,229,132)","size":14.0},{"label":"David de Gea","x":-916.8024291992188,"y":-469.9519348144531,"id":"150","attributes":{"Eigenvector Centrality":"1.0","Betweenness Centrality":"0.005194225936839837","Appearances":"1","No":"12","Country":"Spain","Club Country":"England","Club":"Manchester United","Weighted Degree":"34.0","Modularity Class":"23","Date of birth / Age":"7 November 1990 (aged 23)","Degree":"34","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3478466635115949"},"color":"rgb(229,67,197)","size":26.0},{"label":"Tim Cahill","x":2114.5048828125,"y":-511.01007080078125,"id":"680","attributes":{"Eigenvector Centrality":"0.2315995769978224","Betweenness Centrality":"0.0038336165219305914","Appearances":"69","No":"4","Country":"Australia","Club Country":"United States","Club":"New York Red Bulls","Weighted Degree":"23.0","Modularity Class":"12","Date of birth / Age":"6 December 1979 (aged 34)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.23535062439961577"},"color":"rgb(229,100,67)","size":11.333333015441895},{"label":"Dimitris Salpingidis","x":1578.1973876953125,"y":570.6368408203125,"id":"170","attributes":{"Eigenvector Centrality":"0.2581333696341679","Betweenness Centrality":"0.0","Appearances":"76","No":"14","Country":"Greece","Club Country":"Greece","Club":"PAOK","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"18 August 1981 (aged 32)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"Arturo Vidal","x":-116.50799560546875,"y":1233.550048828125,"id":"64","attributes":{"Eigenvector Centrality":"0.5204561062047255","Betweenness Centrality":"0.00860736609402208","Appearances":"54","No":"8","Country":"Chile","Club Country":"Italy","Club":"Juventus","Weighted Degree":"32.0","Modularity Class":"18","Date of birth / Age":"22 May 1987 (aged 27)","Degree":"32","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.31599312123817713"},"color":"rgb(229,132,67)","size":23.33333396911621},{"label":"Andy Najar","x":1494.201416015625,"y":-1172.4866943359375,"id":"52","attributes":{"Eigenvector Centrality":"0.25486924877772427","Betweenness Centrality":"0.0055302334935236706","Appearances":"17","No":"17","Country":"Honduras","Club Country":"Belgium","Club":"Anderlecht","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"16 March 1993 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28880157170923376"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Alex Song","x":-256.0782775878906,"y":56.99077224731445,"id":"28","attributes":{"Eigenvector Centrality":"0.764223422109595","Betweenness Centrality":"0.016336622858350185","Appearances":"47","No":"6","Country":"Cameroon","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"37.0","Modularity Class":"17","Date of birth / Age":"9 September 1987 (aged 26)","Degree":"37","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34106728538283065"},"color":"rgb(67,132,229)","size":30.0},{"label":"Georgi Shchennikov","x":-1330.42041015625,"y":-1544.396240234375,"id":"243","attributes":{"Eigenvector Centrality":"0.279753045029421","Betweenness Centrality":"8.329697214751982E-4","Appearances":"4","No":"3","Country":"Russia","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"27 April 1991 (aged 23)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2544132917964694"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Mathew Leckie","x":2138.549072265625,"y":-562.8361206054688,"id":"470","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"8","No":"7","Country":"Australia","Club Country":"Germany","Club":"FSV Frankfurt","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"4 February 1991 (aged 23)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"James Holland","x":2105.74951171875,"y":-645.3329467773438,"id":"307","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"14","No":"16","Country":"Australia","Club Country":"Austria","Club":"Austria Wien","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"15 May 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Stéphane Ruffier","x":44.78597640991211,"y":-265.3774108886719,"id":"663","attributes":{"Eigenvector Centrality":"0.5087837777709764","Betweenness Centrality":"0.0017249059427091587","Appearances":"2","No":"16","Country":"France","Club Country":"France","Club":"Saint-Étienne","Weighted Degree":"24.0","Modularity Class":"16","Date of birth / Age":"27 September 1986 (aged 27)","Degree":"24","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.3164012053379251"},"color":"rgb(229,67,229)","size":12.666666984558105},{"label":"Salvatore Sirigu","x":133.34747314453125,"y":646.74609375,"id":"622","attributes":{"Eigenvector Centrality":"0.5779444332967031","Betweenness Centrality":"0.001710601263663759","Appearances":"8","No":"12","Country":"Italy","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"3","Date of birth / Age":"12 January 1987 (aged 27)","Degree":"29","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3166738474795347"},"color":"rgb(197,229,67)","size":19.333332061767578},{"label":"Rashid Sumaila","x":457.3916015625,"y":1442.739013671875,"id":"590","attributes":{"Eigenvector Centrality":"0.2902743690727881","Betweenness Centrality":"0.0","Appearances":"6","No":"15","Country":"Ghana","Club Country":"South Africa","Club":"Mamelodi Sundowns","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"18 December 1992 (aged 21)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Panagiotis Tachtsidis","x":1428.6138916015625,"y":635.1239013671875,"id":"558","attributes":{"Eigenvector Centrality":"0.3047172931159461","Betweenness Centrality":"0.006160383817594169","Appearances":"6","No":"23","Country":"Greece","Club Country":"Italy","Club":"Torino","Weighted Degree":"25.0","Modularity Class":"15","Date of birth / Age":"15 February 1991 (aged 23)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29016975917883936"},"color":"rgb(229,67,100)","size":14.0},{"label":"Antonio Valencia (c)","x":-1293.8275146484375,"y":-612.4883422851562,"id":"60","attributes":{"Eigenvector Centrality":"0.7194865947551579","Betweenness Centrality":"0.016480573584016885","Appearances":"71","No":"16","Country":"Ecuador","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"4","Date of birth / Age":"4 August 1985 (aged 28)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33607681755829905"},"color":"rgb(229,67,132)","size":27.33333396911621},{"label":"Hashem Beikzadeh","x":1986.336181640625,"y":1189.6458740234375,"id":"273","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"17","No":"19","Country":"Iran","Club Country":"Iran","Club":"Esteghlal","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"22 January 1984 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Rafa Silva","x":-692.36767578125,"y":355.65155029296875,"id":"580","attributes":{"Eigenvector Centrality":"0.40962360528145025","Betweenness Centrality":"0.0","Appearances":"3","No":"15","Country":"Portugal","Club Country":"Portugal","Club":"Braga","Weighted Degree":"22.0","Modularity Class":"8","Date of birth / Age":"17 May 1993 (aged 21)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(229,164,67)","size":10.0},{"label":"Loïc Rémy","x":73.68376922607422,"y":-313.17633056640625,"id":"421","attributes":{"Eigenvector Centrality":"0.5292224497836601","Betweenness Centrality":"0.0019647591823339743","Appearances":"25","No":"20","Country":"France","Club Country":"England","Club":"Newcastle United","Weighted Degree":"25.0","Modularity Class":"16","Date of birth / Age":"2 January 1987 (aged 27)","Degree":"25","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(229,67,229)","size":14.0},{"label":"Jean-Daniel Akpa-Akpro","x":413.52197265625,"y":-756.9923706054688,"id":"322","attributes":{"Eigenvector Centrality":"0.32268769768515043","Betweenness Centrality":"0.002014868000803819","Appearances":"1","No":"7","Country":"Ivory Coast","Club Country":"France","Club":"Toulouse","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"11 October 1992 (aged 21)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30817610062893086"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Giorgos Tzavellas","x":1582.3857421875,"y":615.6647338867188,"id":"255","attributes":{"Eigenvector Centrality":"0.25813336963416794","Betweenness Centrality":"0.0","Appearances":"13","No":"3","Country":"Greece","Club Country":"Greece","Club":"PAOK","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"26 November 1987 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"Fred","x":-513.3817749023438,"y":-260.2742919921875,"id":"233","attributes":{"Eigenvector Centrality":"0.5425650576268323","Betweenness Centrality":"0.0","Appearances":"33","No":"9","Country":"Brazil","Club Country":"Brazil","Club":"Fluminense","Weighted Degree":"22.0","Modularity Class":"23","Date of birth / Age":"3 October 1983 (aged 30)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3158573270305114"},"color":"rgb(229,67,197)","size":10.0},{"label":"Per Mertesacker","x":261.4919738769531,"y":-532.3377075195312,"id":"573","attributes":{"Eigenvector Centrality":"0.6437896004097902","Betweenness Centrality":"0.002673471053911242","Appearances":"98","No":"17","Country":"Germany","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"29 September 1984 (aged 29)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3219448094612352"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Hernanes","x":-528.0017700195312,"y":-15.909561157226562,"id":"280","attributes":{"Eigenvector Centrality":"0.669052616458677","Betweenness Centrality":"0.005981834884331946","Appearances":"24","No":"18","Country":"Brazil","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"29.0","Modularity Class":"23","Date of birth / Age":"29 May 1985 (aged 29)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34281716417910446"},"color":"rgb(229,67,197)","size":19.333332061767578},{"label":"Máximo Banguera","x":-1488.96337890625,"y":-533.3309326171875,"id":"489","attributes":{"Eigenvector Centrality":"0.7525405481416904","Betweenness Centrality":"0.006691544296226193","Appearances":"25","No":"1","Country":"Ecuador","Club Country":"Ecuador","Club":"Barcelona","Weighted Degree":"35.0","Modularity Class":"4","Date of birth / Age":"16 December 1985 (aged 28)","Degree":"35","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,132)","size":27.33333396911621},{"label":"Eliaquim Mangala","x":-347.64447021484375,"y":-15.025993347167969,"id":"196","attributes":{"Eigenvector Centrality":"0.6278043521909648","Betweenness Centrality":"0.009092242970245117","Appearances":"3","No":"13","Country":"France","Club Country":"Portugal","Club":"Porto","Weighted Degree":"30.0","Modularity Class":"16","Date of birth / Age":"13 February 1991 (aged 23)","Degree":"30","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.33669262482821805"},"color":"rgb(229,67,229)","size":20.666667938232422},{"label":"Álvaro Pereira","x":-93.80169677734375,"y":34.24333190917969,"id":"39","attributes":{"Eigenvector Centrality":"0.37564528732258246","Betweenness Centrality":"0.0","Appearances":"57","No":"6","Country":"Uruguay","Club Country":"Brazil","Club":"São Paulo","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"28 November 1985 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Miguel Veloso","x":-552.1939086914062,"y":364.9159240722656,"id":"511","attributes":{"Eigenvector Centrality":"0.4519394040645381","Betweenness Centrality":"0.0020459479374588265","Appearances":"49","No":"4","Country":"Portugal","Club Country":"Ukraine","Club":"Dynamo Kyiv","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"11 May 1986 (aged 28)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(229,164,67)","size":14.0},{"label":"Saphir Taïder","x":-1233.49755859375,"y":1029.03173828125,"id":"631","attributes":{"Eigenvector Centrality":"0.4289736525122905","Betweenness Centrality":"0.007067153381945787","Appearances":"11","No":"19","Country":"Algeria","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"29.0","Modularity Class":"24","Date of birth / Age":"29 February 1992 (aged 22)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3208206023570493"},"color":"rgb(67,164,229)","size":19.333332061767578},{"label":"Dirk Kuyt","x":698.8324584960938,"y":-15.171172142028809,"id":"171","attributes":{"Eigenvector Centrality":"0.3965357475889929","Betweenness Centrality":"0.004158989584106385","Appearances":"98","No":"15","Country":"Netherlands","Club Country":"Turkey","Club":"Fenerbahçe","Weighted Degree":"26.0","Modularity Class":"22","Date of birth / Age":"22 July 1980 (aged 33)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.329153605015674"},"color":"rgb(197,67,229)","size":15.333333969116211},{"label":"Jorge Guagua","x":-1678.4407958984375,"y":-602.8709716796875,"id":"353","attributes":{"Eigenvector Centrality":"0.3623062182068214","Betweenness Centrality":"0.0","Appearances":"59","No":"2","Country":"Ecuador","Club Country":"Ecuador","Club":"Emelec","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"28 September 1981 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Keisuke Honda","x":610.3965454101562,"y":750.2002563476562,"id":"382","attributes":{"Eigenvector Centrality":"0.4349752953094465","Betweenness Centrality":"0.007469372100698354","Appearances":"56","No":"4","Country":"Japan","Club Country":"Italy","Club":"Milan","Weighted Degree":"29.0","Modularity Class":"27","Date of birth / Age":"13 June 1986 (aged 27)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3309320126069338"},"color":"rgb(67,100,229)","size":19.333332061767578},{"label":"Cédric Si Mohamed","x":-1432.4459228515625,"y":1140.2423095703125,"id":"108","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"1","No":"1","Country":"Algeria","Club Country":"Algeria","Club":"CS Constantine","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"9 January 1985 (aged 29)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Tino-Sven Sušic","x":1264.1190185546875,"y":-534.239990234375,"id":"684","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"2","No":"14","Country":"Bosnia and Herzegovina","Club Country":"Croatia","Club":"Hajduk Split","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"13 February 1992 (aged 22)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Samuel Eto\u0027o (c)","x":207.89883422851562,"y":-77.14188385009766,"id":"627","attributes":{"Eigenvector Centrality":"0.6120719582915053","Betweenness Centrality":"0.010941183209963411","Appearances":"117","No":"9","Country":"Cameroon","Club Country":"England","Club":"Chelsea","Weighted Degree":"33.0","Modularity Class":"17","Date of birth / Age":"10 March 1981 (aged 33)","Degree":"33","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.34507042253521125"},"color":"rgb(67,132,229)","size":24.666667938232422},{"label":"Karim Ansarifard","x":2030.397705078125,"y":1187.7640380859375,"id":"380","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"42","No":"10","Country":"Iran","Club Country":"Iran","Club":"Tractor Sazi","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"3 April 1990 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Uche Nwofor","x":-33.313961029052734,"y":-1701.16748046875,"id":"691","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"6","No":"19","Country":"Nigeria","Club Country":"Netherlands","Club":"Heerenveen","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"17 September 1991 (aged 22)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Michael Umaña","x":2330.072509765625,"y":379.5473937988281,"id":"506","attributes":{"Eigenvector Centrality":"0.23496944760866376","Betweenness Centrality":"0.0","Appearances":"83","No":"4","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Saprissa","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"16 July 1982 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Jordan Ayew","x":418.2088317871094,"y":1351.912841796875,"id":"347","attributes":{"Eigenvector Centrality":"0.29027436907278803","Betweenness Centrality":"0.0","Appearances":"13","No":"13","Country":"Ghana","Club Country":"France","Club":"Sochaux","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"11 September 1991 (aged 22)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Ron Vlaar","x":922.5167236328125,"y":-99.8844985961914,"id":"613","attributes":{"Eigenvector Centrality":"0.3465757821519946","Betweenness Centrality":"0.0018348657473652398","Appearances":"24","No":"2","Country":"Netherlands","Club Country":"England","Club":"Aston Villa","Weighted Degree":"23.0","Modularity Class":"22","Date of birth / Age":"16 February 1985 (aged 29)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(197,67,229)","size":11.333333015441895},{"label":"Aleksandr Samedov","x":-1362.3624267578125,"y":-1347.75,"id":"23","attributes":{"Eigenvector Centrality":"0.2790405449937141","Betweenness Centrality":"0.003584997128855062","Appearances":"17","No":"19","Country":"Russia","Club Country":"Russia","Club":"Lokomotiv Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"19 July 1984 (aged 29)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.2573529411764706"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Hugo Almeida","x":-570.7293090820312,"y":230.9239959716797,"id":"286","attributes":{"Eigenvector Centrality":"0.43486864997258184","Betweenness Centrality":"0.00453740780637059","Appearances":"55","No":"9","Country":"Portugal","Club Country":"Turkey","Club":"Be?ikta?","Weighted Degree":"24.0","Modularity Class":"8","Date of birth / Age":"23 May 1984 (aged 30)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,164,67)","size":12.666666984558105},{"label":"Federico Fernández","x":-945.4159545898438,"y":329.44189453125,"id":"221","attributes":{"Eigenvector Centrality":"0.7220713713108182","Betweenness Centrality":"0.003097438956551802","Appearances":"26","No":"17","Country":"Argentina","Club Country":"Italy","Club":"Napoli","Weighted Degree":"32.0","Modularity Class":"19","Date of birth / Age":"21 February 1989 (aged 25)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(67,229,229)","size":23.33333396911621},{"label":"Edin Džeko","x":747.855712890625,"y":-487.78179931640625,"id":"183","attributes":{"Eigenvector Centrality":"0.4959287278586879","Betweenness Centrality":"0.019893239141010762","Appearances":"62","No":"11","Country":"Bosnia and Herzegovina","Club Country":"England","Club":"Manchester City","Weighted Degree":"31.0","Modularity Class":"20","Date of birth / Age":"17 March 1986 (aged 28)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3436185133239832"},"color":"rgb(132,229,67)","size":22.0},{"label":"Fatau Dauda","x":508.3158874511719,"y":1362.838134765625,"id":"220","attributes":{"Eigenvector Centrality":"0.29027436907278803","Betweenness Centrality":"0.0","Appearances":"18","No":"16","Country":"Ghana","Club Country":"South Africa","Club":"Orlando Pirates","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"6 April 1985 (aged 29)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Giorgio Chiellini","x":168.96609497070312,"y":898.1615600585938,"id":"252","attributes":{"Eigenvector Centrality":"0.5455496050511397","Betweenness Centrality":"0.0016215443882875223","Appearances":"68","No":"3","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"14 August 1984 (aged 29)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Éder","x":-652.5069580078125,"y":328.9391174316406,"id":"180","attributes":{"Eigenvector Centrality":"0.4096236052814504","Betweenness Centrality":"0.0","Appearances":"8","No":"11","Country":"Portugal","Club Country":"Portugal","Club":"Braga","Weighted Degree":"22.0","Modularity Class":"8","Date of birth / Age":"22 December 1987 (aged 26)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(229,164,67)","size":10.0},{"label":"Édison Méndez","x":-1680.7288818359375,"y":-523.7875366210938,"id":"186","attributes":{"Eigenvector Centrality":"0.37488664289499546","Betweenness Centrality":"0.003053300601509073","Appearances":"110","No":"8","Country":"Ecuador","Club Country":"Colombia","Club":"Santa Fe","Weighted Degree":"23.0","Modularity Class":"4","Date of birth / Age":"15 March 1979 (aged 35)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3001224989791752"},"color":"rgb(229,67,132)","size":11.333333015441895},{"label":"Hugo Lloris (c)","x":-181.9427032470703,"y":-259.6800842285156,"id":"288","attributes":{"Eigenvector Centrality":"0.579458372910698","Betweenness Centrality":"0.002663127912981995","Appearances":"57","No":"1","Country":"France","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"27.0","Modularity Class":"16","Date of birth / Age":"26 December 1986 (aged 27)","Degree":"27","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(229,67,229)","size":16.666667938232422},{"label":"Ricardo Álvarez","x":-991.7132568359375,"y":419.20452880859375,"id":"600","attributes":{"Eigenvector Centrality":"0.5658107599692682","Betweenness Centrality":"0.0025393109943757006","Appearances":"7","No":"19","Country":"Argentina","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"27.0","Modularity Class":"19","Date of birth / Age":"12 April 1988 (aged 26)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3272484416740873"},"color":"rgb(67,229,229)","size":16.666667938232422},{"label":"Sofiane Feghouli","x":-1244.94921875,"y":1115.6298828125,"id":"655","attributes":{"Eigenvector Centrality":"0.3592587866347209","Betweenness Centrality":"0.005117058445342943","Appearances":"19","No":"10","Country":"Algeria","Club Country":"Spain","Club":"Valencia","Weighted Degree":"26.0","Modularity Class":"24","Date of birth / Age":"26 December 1989 (aged 24)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30973451327433627"},"color":"rgb(67,164,229)","size":15.333333969116211},{"label":"Cristiano Ronaldo (c)","x":-705.8994140625,"y":163.7381134033203,"id":"131","attributes":{"Eigenvector Centrality":"0.651122142378051","Betweenness Centrality":"0.002704889595809238","Appearances":"111","No":"7","Country":"Portugal","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"8","Date of birth / Age":"5 February 1985 (aged 29)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.33546325878594246"},"color":"rgb(229,164,67)","size":22.0},{"label":"John Obi Mikel","x":-197.90223693847656,"y":-1324.32470703125,"id":"342","attributes":{"Eigenvector Centrality":"0.5955495363924806","Betweenness Centrality":"0.01100579205017528","Appearances":"59","No":"10","Country":"Nigeria","Club Country":"England","Club":"Chelsea","Weighted Degree":"33.0","Modularity Class":"14","Date of birth / Age":"22 April 1987 (aged 27)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3295964125560538"},"color":"rgb(67,229,100)","size":24.666667938232422},{"label":"Roy Miller","x":2341.18359375,"y":210.36285400390625,"id":"617","attributes":{"Eigenvector Centrality":"0.2448400755989879","Betweenness Centrality":"0.004512594233796391","Appearances":"48","No":"19","Country":"Costa Rica","Club Country":"United States","Club":"New York Red Bulls","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"24 November 1984 (aged 29)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2558301427079708"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Kostas Mitroglou","x":1704.1070556640625,"y":623.1121215820312,"id":"402","attributes":{"Eigenvector Centrality":"0.26821419599108537","Betweenness Centrality":"0.011764360515140076","Appearances":"32","No":"9","Country":"Greece","Club Country":"England","Club":"Fulham","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"12 March 1988 (aged 26)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2784090909090909"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Daniel Opare","x":399.6513366699219,"y":1199.5255126953125,"id":"138","attributes":{"Eigenvector Centrality":"0.3223336840810573","Betweenness Centrality":"0.004091587855968099","Appearances":"16","No":"4","Country":"Ghana","Club Country":"Belgium","Club":"Standard Liège","Weighted Degree":"24.0","Modularity Class":"5","Date of birth / Age":"18 October 1990 (aged 23)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30973451327433627"},"color":"rgb(67,229,197)","size":12.666666984558105},{"label":"Jean Beausejour","x":-67.39273834228516,"y":1286.549072265625,"id":"320","attributes":{"Eigenvector Centrality":"0.336908513308338","Betweenness Centrality":"0.005662725175478597","Appearances":"59","No":"15","Country":"Chile","Club Country":"England","Club":"Wigan Athletic","Weighted Degree":"24.0","Modularity Class":"18","Date of birth / Age":"3 June 1984 (aged 30)","Degree":"24","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.28891509433962265"},"color":"rgb(229,132,67)","size":12.666666984558105},{"label":"Erik Durm","x":553.0518188476562,"y":-438.38714599609375,"id":"203","attributes":{"Eigenvector Centrality":"0.500680986024227","Betweenness Centrality":"0.008472576600609625","Appearances":"1","No":"15","Country":"Germany","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"24.0","Modularity Class":"13","Date of birth / Age":"12 May 1992 (aged 22)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.310126582278481"},"color":"rgb(67,229,164)","size":12.666666984558105},{"label":"Egidio Arévalo Ríos","x":-140.44900512695312,"y":-11.467087745666504,"id":"191","attributes":{"Eigenvector Centrality":"0.3894572111283446","Betweenness Centrality":"0.002989706787662918","Appearances":"55","No":"17","Country":"Uruguay","Club Country":"Mexico","Club":"Morelia","Weighted Degree":"23.0","Modularity Class":"6","Date of birth / Age":"1 January 1982 (aged 32)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31873373807458805"},"color":"rgb(229,197,67)","size":11.333333015441895},{"label":"Raul Meireles","x":-515.27490234375,"y":255.2202911376953,"id":"593","attributes":{"Eigenvector Centrality":"0.45315937558107944","Betweenness Centrality":"0.0029488481093627983","Appearances":"74","No":"16","Country":"Portugal","Club Country":"Turkey","Club":"Fenerbahçe","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"17 March 1983 (aged 31)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3295964125560538"},"color":"rgb(229,164,67)","size":14.0},{"label":"Maicon","x":-278.0897216796875,"y":-249.45703125,"id":"436","attributes":{"Eigenvector Centrality":"0.6006324446964797","Betweenness Centrality":"0.010333588970217586","Appearances":"72","No":"23","Country":"Brazil","Club Country":"Italy","Club":"Roma","Weighted Degree":"26.0","Modularity Class":"23","Date of birth / Age":"26 July 1981 (aged 32)","Degree":"26","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.3475177304964539"},"color":"rgb(229,67,197)","size":15.333333969116211},{"label":"Luke Shaw","x":-92.2292251586914,"y":-688.8857421875,"id":"434","attributes":{"Eigenvector Centrality":"0.5904515327423896","Betweenness Centrality":"0.0016054547217210155","Appearances":"2","No":"23","Country":"England","Club Country":"England","Club":"Southampton","Weighted Degree":"26.0","Modularity Class":"28","Date of birth / Age":"12 July 1995 (aged 18)","Degree":"26","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(67,229,132)","size":15.333333969116211},{"label":"Toni Kroos","x":364.4765319824219,"y":-371.8941650390625,"id":"687","attributes":{"Eigenvector Centrality":"0.6585766805388439","Betweenness Centrality":"0.0026429368589338613","Appearances":"44","No":"18","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"4 January 1990 (aged 24)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Antonio Cassano","x":193.04763793945312,"y":758.9298706054688,"id":"59","attributes":{"Eigenvector Centrality":"0.44952910121457806","Betweenness Centrality":"4.3533065978638123E-4","Appearances":"37","No":"10","Country":"Italy","Club Country":"Italy","Club":"Parma","Weighted Degree":"24.0","Modularity Class":"3","Date of birth / Age":"12 July 1982 (aged 31)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(197,229,67)","size":12.666666984558105},{"label":"Son Heung-min","x":1048.6976318359375,"y":1445.7691650390625,"id":"658","attributes":{"Eigenvector Centrality":"0.2555712186488899","Betweenness Centrality":"0.010566232255619219","Appearances":"25","No":"9","Country":"South Korea","Club Country":"Germany","Club":"Bayer Leverkusen","Weighted Degree":"24.0","Modularity Class":"10","Date of birth / Age":"8 July 1992 (aged 21)","Degree":"24","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(229,67,164)","size":12.666666984558105},{"label":"Alexandros Tziolis","x":1617.329345703125,"y":542.8191528320312,"id":"32","attributes":{"Eigenvector Centrality":"0.25813336963416794","Betweenness Centrality":"0.0","Appearances":"49","No":"6","Country":"Greece","Club Country":"Turkey","Club":"Kayserispor","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"13 February 1985 (aged 29)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"Marcelo Díaz","x":-193.8722381591797,"y":1188.14697265625,"id":"445","attributes":{"Eigenvector Centrality":"0.3914962580991112","Betweenness Centrality":"0.007300142578773374","Appearances":"21","No":"21","Country":"Chile","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"27.0","Modularity Class":"18","Date of birth / Age":"30 December 1986 (aged 27)","Degree":"27","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.29902359641985354"},"color":"rgb(229,132,67)","size":16.666667938232422},{"label":"Pepe","x":-652.334228515625,"y":226.08396911621094,"id":"571","attributes":{"Eigenvector Centrality":"0.651122142378051","Betweenness Centrality":"0.002704889595809238","Appearances":"58","No":"3","Country":"Portugal","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"8","Date of birth / Age":"26 February 1983 (aged 31)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33546325878594246"},"color":"rgb(229,164,67)","size":22.0},{"label":"Sayouba Mandé","x":565.8164672851562,"y":-858.4483642578125,"id":"632","attributes":{"Eigenvector Centrality":"0.30966117600400683","Betweenness Centrality":"0.0","Appearances":"1","No":"23","Country":"Ivory Coast","Club Country":"Norway","Club":"Stabæk","Weighted Degree":"22.0","Modularity Class":"9","Date of birth / Age":"15 June 1993 (aged 20)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(164,67,229)","size":10.0},{"label":"Romelu Lukaku","x":-624.7638549804688,"y":-965.3787841796875,"id":"612","attributes":{"Eigenvector Centrality":"0.5945562042887822","Betweenness Centrality":"0.0024227939394388456","Appearances":"29","No":"9","Country":"Belgium","Club Country":"England","Club":"Everton","Weighted Degree":"26.0","Modularity Class":"28","Date of birth / Age":"13 May 1993 (aged 21)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3330312641594925"},"color":"rgb(67,229,132)","size":15.333333969116211},{"label":"Carlos Gruezo","x":-1417.1590576171875,"y":-636.35205078125,"id":"102","attributes":{"Eigenvector Centrality":"0.40234260169062663","Betweenness Centrality":"0.012924077143976812","Appearances":"3","No":"23","Country":"Ecuador","Club Country":"Germany","Club":"VfB Stuttgart","Weighted Degree":"25.0","Modularity Class":"4","Date of birth / Age":"19 April 1995 (aged 19)","Degree":"25","Position":"MF","Eccentricity":"4.0","Closeness Centrality":"0.3208206023570493"},"color":"rgb(229,67,132)","size":14.0},{"label":"Boubacar Barry","x":488.794921875,"y":-907.9202880859375,"id":"89","attributes":{"Eigenvector Centrality":"0.3096611760040069","Betweenness Centrality":"0.0","Appearances":"77","No":"1","Country":"Ivory Coast","Club Country":"Belgium","Club":"Lokeren","Weighted Degree":"22.0","Modularity Class":"9","Date of birth / Age":"30 December 1979 (aged 34)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(164,67,229)","size":10.0},{"label":"Adam Taggart","x":2042.42724609375,"y":-579.6041870117188,"id":"6","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"5","No":"9","Country":"Australia","Club Country":"Australia","Club":"Newcastle Jets","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"2 June 1993 (aged 21)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Gabriel Achilier","x":-1682.26220703125,"y":-719.3626708984375,"id":"236","attributes":{"Eigenvector Centrality":"0.3623062182068216","Betweenness Centrality":"0.0","Appearances":"23","No":"21","Country":"Ecuador","Club Country":"Ecuador","Club":"Emelec","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"24 March 1985 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Paul Verhaegh","x":949.3831176757812,"y":201.00778198242188,"id":"566","attributes":{"Eigenvector Centrality":"0.35574061516727906","Betweenness Centrality":"0.008783426226424064","Appearances":"2","No":"12","Country":"Netherlands","Club Country":"Germany","Club":"FC Augsburg","Weighted Degree":"24.0","Modularity Class":"22","Date of birth / Age":"1 September 1983 (aged 30)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3153153153153153"},"color":"rgb(197,67,229)","size":12.666666984558105},{"label":"Clint Dempsey (c)","x":742.0546264648438,"y":-1547.4185791015625,"id":"126","attributes":{"Eigenvector Centrality":"0.27181518429351065","Betweenness Centrality":"0.0","Appearances":"105","No":"8","Country":"United States","Club Country":"United States","Club":"Seattle Sounders FC","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"9 March 1983 (aged 31)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Madjid Bougherra (c)","x":-1470.3363037109375,"y":1180.3843994140625,"id":"435","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"62","No":"2","Country":"Algeria","Club Country":"Qatar","Club":"Lekhwiya","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"7 October 1982 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"James Rodríguez","x":-798.67431640625,"y":1094.4688720703125,"id":"309","attributes":{"Eigenvector Centrality":"0.3631125757022638","Betweenness Centrality":"0.002531708436743698","Appearances":"22","No":"10","Country":"Colombia","Club Country":"France","Club":"AS Monaco","Weighted Degree":"25.0","Modularity Class":"11","Date of birth / Age":"12 July 1991 (aged 22)","Degree":"25","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.315450643776824"},"color":"rgb(67,67,229)","size":14.0},{"label":"Jeremain Lens","x":718.18798828125,"y":97.26069641113281,"id":"325","attributes":{"Eigenvector Centrality":"0.37953617711875015","Betweenness Centrality":"0.00411799412159424","Appearances":"22","No":"17","Country":"Netherlands","Club Country":"Ukraine","Club":"Dynamo Kyiv","Weighted Degree":"25.0","Modularity Class":"22","Date of birth / Age":"24 November 1987 (aged 26)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3255093002657219"},"color":"rgb(197,67,229)","size":14.0},{"label":"Juanfran","x":-888.2894897460938,"y":-365.1721496582031,"id":"373","attributes":{"Eigenvector Centrality":"0.7852248920099726","Betweenness Centrality":"7.220203040676876E-4","Appearances":"8","No":"5","Country":"Spain","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"27.0","Modularity Class":"23","Date of birth / Age":"9 January 1985 (aged 29)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3215223097112861"},"color":"rgb(229,67,197)","size":16.666667938232422},{"label":"Amir Hossein Sadeghi","x":1990.185546875,"y":1052.62548828125,"id":"40","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"17","No":"5","Country":"Iran","Club Country":"Iran","Club":"Esteghlal","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"6 September 1981 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Zvjezdan Misimovic","x":1277.4697265625,"y":-479.1226501464844,"id":"736","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"81","No":"10","Country":"Bosnia and Herzegovina","Club Country":"China","Club":"Guizhou Renhe","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"5 June 1982 (aged 32)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Nacer Chadli","x":-730.6295166015625,"y":-798.0245971679688,"id":"527","attributes":{"Eigenvector Centrality":"0.5781054780643133","Betweenness Centrality":"0.0013899483715746057","Appearances":"20","No":"22","Country":"Belgium","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"2 October 1989 (aged 24)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33638443935926776"},"color":"rgb(67,229,132)","size":14.0},{"label":"Michael Arroyo","x":-1730.895751953125,"y":-727.3639526367188,"id":"499","attributes":{"Eigenvector Centrality":"0.3623062182068213","Betweenness Centrality":"0.0","Appearances":"21","No":"15","Country":"Ecuador","Club Country":"Mexico","Club":"Atlante","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"23 April 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Valon Behrami","x":-152.94186401367188,"y":233.4356231689453,"id":"693","attributes":{"Eigenvector Centrality":"0.6153709092825856","Betweenness Centrality":"0.004199284588766183","Appearances":"48","No":"11","Country":"Switzerland","Club Country":"Italy","Club":"Napoli","Weighted Degree":"31.0","Modularity Class":"0","Date of birth / Age":"19 April 1985 (aged 29)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3331822302810517"},"color":"rgb(164,229,67)","size":22.0},{"label":"Sami Khedira","x":147.37220764160156,"y":-251.9683837890625,"id":"623","attributes":{"Eigenvector Centrality":"0.7584962588500563","Betweenness Centrality":"0.008327156420560313","Appearances":"46","No":"6","Country":"Germany","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"33.0","Modularity Class":"13","Date of birth / Age":"4 April 1987 (aged 27)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32974427994616423"},"color":"rgb(67,229,164)","size":24.666667938232422},{"label":"Admir Mehmedi","x":126.91813659667969,"y":115.84123229980469,"id":"7","attributes":{"Eigenvector Centrality":"0.41564407300864686","Betweenness Centrality":"0.0029131326818128433","Appearances":"21","No":"18","Country":"Switzerland","Club Country":"Germany","Club":"SC Freiburg","Weighted Degree":"24.0","Modularity Class":"0","Date of birth / Age":"16 March 1991 (aged 23)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3150450064294899"},"color":"rgb(164,229,67)","size":12.666666984558105},{"label":"Hong Jeong-ho","x":1189.017578125,"y":1491.9881591796875,"id":"283","attributes":{"Eigenvector Centrality":"0.24502153540109495","Betweenness Centrality":"0.0031284111071300832","Appearances":"25","No":"20","Country":"South Korea","Club Country":"Germany","Club":"FC Augsburg","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"12 August 1989 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2726261127596439"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Nikica Jelavic","x":-197.76739501953125,"y":532.7603149414062,"id":"535","attributes":{"Eigenvector Centrality":"0.354839329394506","Betweenness Centrality":"0.005268740805035136","Appearances":"33","No":"9","Country":"Croatia","Club Country":"England","Club":"Hull City","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"27 August 1985 (aged 28)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.303970223325062"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Ross Barkley","x":-149.76280212402344,"y":-1043.209228515625,"id":"616","attributes":{"Eigenvector Centrality":"0.5738583419916762","Betweenness Centrality":"0.0013664563333722465","Appearances":"6","No":"21","Country":"England","Club Country":"England","Club":"Everton","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"5 December 1993 (aged 20)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31183708103521424"},"color":"rgb(67,229,132)","size":14.0},{"label":"Ji Dong-won","x":1240.84521484375,"y":1492.1494140625,"id":"330","attributes":{"Eigenvector Centrality":"0.24502153540109498","Betweenness Centrality":"0.0031284111071300832","Appearances":"28","No":"19","Country":"South Korea","Club Country":"Germany","Club":"FC Augsburg","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"28 May 1991 (aged 23)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.2726261127596439"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Nick Rimando","x":864.0869140625,"y":-1556.7880859375,"id":"530","attributes":{"Eigenvector Centrality":"0.27181518429351065","Betweenness Centrality":"0.0","Appearances":"14","No":"22","Country":"United States","Club Country":"United States","Club":"Real Salt Lake","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"17 June 1979 (aged 34)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Hwang Seok-ho","x":1138.2103271484375,"y":1544.553466796875,"id":"290","attributes":{"Eigenvector Centrality":"0.2441012483722342","Betweenness Centrality":"0.0022277566561183537","Appearances":"3","No":"6","Country":"South Korea","Club Country":"Japan","Club":"Sanfrecce Hiroshima","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"27 June 1989 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.27051895472948106"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"André Schürrle","x":130.84710693359375,"y":-528.9302368164062,"id":"44","attributes":{"Eigenvector Centrality":"0.7600410241243024","Betweenness Centrality":"0.006814981026437991","Appearances":"33","No":"9","Country":"Germany","Club Country":"England","Club":"Chelsea","Weighted Degree":"33.0","Modularity Class":"13","Date of birth / Age":"6 November 1990 (aged 23)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3343949044585987"},"color":"rgb(67,229,164)","size":24.666667938232422},{"label":"Pepe Reina","x":-850.5621948242188,"y":-89.60556030273438,"id":"572","attributes":{"Eigenvector Centrality":"0.9188656127061582","Betweenness Centrality":"0.004836935094169011","Appearances":"32","No":"23","Country":"Spain","Club Country":"Italy","Club":"Napoli","Weighted Degree":"32.0","Modularity Class":"23","Date of birth / Age":"31 August 1982 (aged 31)","Degree":"32","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.34249767008387694"},"color":"rgb(229,67,197)","size":23.33333396911621},{"label":"Maynor Figueroa","x":1528.1024169921875,"y":-1100.3426513671875,"id":"492","attributes":{"Eigenvector Centrality":"0.24997612632443128","Betweenness Centrality":"0.00471069378362544","Appearances":"105","No":"3","Country":"Honduras","Club Country":"England","Club":"Hull City","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"2 May 1983 (aged 31)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28107074569789675"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Dmitri Kombarov","x":-1369.3797607421875,"y":-1467.8458251953125,"id":"174","attributes":{"Eigenvector Centrality":"0.2656930429181982","Betweenness Centrality":"0.0","Appearances":"22","No":"23","Country":"Russia","Club Country":"Russia","Club":"Spartak Moscow","Weighted Degree":"22.0","Modularity Class":"2","Date of birth / Age":"22 January 1987 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.23244781783681215"},"color":"rgb(229,67,67)","size":10.0},{"label":"Waylon Francis","x":2350.48974609375,"y":280.3184509277344,"id":"712","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"1","No":"12","Country":"Costa Rica","Club Country":"United States","Club":"Columbus Crew","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"20 September 1990 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Ahmad Alenemeh","x":2028.45654296875,"y":1067.91259765625,"id":"13","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"9","No":"17","Country":"Iran","Club Country":"Iran","Club":"Naft Tehran","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"10 October 1982 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Fábio Coentrão","x":-620.6026611328125,"y":152.4325408935547,"id":"216","attributes":{"Eigenvector Centrality":"0.6511221423780509","Betweenness Centrality":"0.002704889595809238","Appearances":"45","No":"5","Country":"Portugal","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"8","Date of birth / Age":"11 March 1988 (aged 26)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33546325878594246"},"color":"rgb(229,164,67)","size":22.0},{"label":"Stefan de Vrij","x":967.5440673828125,"y":46.13400650024414,"id":"659","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"12","No":"3","Country":"Netherlands","Club Country":"Netherlands","Club":"Feyenoord","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"5 February 1992 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Javier Aquino","x":-2081.5556640625,"y":384.58026123046875,"id":"317","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"22","No":"20","Country":"Mexico","Club Country":"Spain","Club":"Villarreal","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"11 February 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Mile Jedinak (c)","x":2075.45263671875,"y":-732.8336791992188,"id":"515","attributes":{"Eigenvector Centrality":"0.2213229433005502","Betweenness Centrality":"0.0","Appearances":"44","No":"15","Country":"Australia","Club Country":"England","Club":"Crystal Palace","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"3 August 1984 (aged 29)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Cristian Rodríguez","x":-272.8934631347656,"y":-76.41095733642578,"id":"129","attributes":{"Eigenvector Centrality":"0.5243629945948548","Betweenness Centrality":"0.0015151368839237088","Appearances":"73","No":"7","Country":"Uruguay","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"28.0","Modularity Class":"6","Date of birth / Age":"30 September 1985 (aged 28)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3236459709379128"},"color":"rgb(229,197,67)","size":18.0},{"label":"Jean Makoun","x":430.8337097167969,"y":257.7498474121094,"id":"321","attributes":{"Eigenvector Centrality":"0.3346787587121599","Betweenness Centrality":"0.0017126023775967546","Appearances":"66","No":"11","Country":"Cameroon","Club Country":"France","Club":"Rennes","Weighted Degree":"23.0","Modularity Class":"17","Date of birth / Age":"29 May 1983 (aged 31)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3202614379084967"},"color":"rgb(67,132,229)","size":11.333333015441895}]} \ No newline at end of file diff --git a/examples/network/ex.html b/examples/network/ex.html deleted file mode 100644 index 2f276b7e..00000000 --- a/examples/network/ex.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - Network | Random nodes - - - - - - - - - - -
-
- -

- - diff --git a/examples/network/graphviz/data/fsm.gv.txt b/examples/network/graphviz/data/fsm.gv.txt deleted file mode 100644 index e59b7c2d..00000000 --- a/examples/network/graphviz/data/fsm.gv.txt +++ /dev/null @@ -1,20 +0,0 @@ -digraph finite_state_machine { - rankdir=LR; - size="8,5" - node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8; - node [shape = circle]; - LR_0 -> LR_2 [ label = "SS(B)" ]; - LR_0 -> LR_1 [ label = "SS(S)" ]; - LR_1 -> LR_3 [ label = "S($end)" ]; - LR_2 -> LR_6 [ label = "SS(b)" ]; - LR_2 -> LR_5 [ label = "SS(a)" ]; - LR_2 -> LR_4 [ label = "S(A)" ]; - LR_5 -> LR_7 [ label = "S(b)" ]; - LR_5 -> LR_5 [ label = "S(a)" ]; - LR_6 -> LR_6 [ label = "S(b)" ]; - LR_6 -> LR_5 [ label = "S(a)" ]; - LR_7 -> LR_8 [ label = "S(b)" ]; - LR_7 -> LR_5 [ label = "S(a)" ]; - LR_8 -> LR_6 [ label = "S(b)" ]; - LR_8 -> LR_5 [ label = "S(a)" ]; -} diff --git a/examples/network/graphviz/data/hello.gv.txt b/examples/network/graphviz/data/hello.gv.txt deleted file mode 100644 index 7bc71ff4..00000000 --- a/examples/network/graphviz/data/hello.gv.txt +++ /dev/null @@ -1 +0,0 @@ -digraph G {Hello->World} \ No newline at end of file diff --git a/examples/network/graphviz/data/process.gv.txt b/examples/network/graphviz/data/process.gv.txt deleted file mode 100644 index 34fe9fb5..00000000 --- a/examples/network/graphviz/data/process.gv.txt +++ /dev/null @@ -1,15 +0,0 @@ -graph G { - run -- intr; - intr -- runbl; - runbl -- run; - run -- kernel; - kernel -- zombie; - kernel -- sleep; - kernel -- runmem; - sleep -- swap; - swap -- runswap; - runswap -- new; - runswap -- runmem; - new -- runmem; - sleep -- runmem; -} diff --git a/examples/network/graphviz/data/siblings.gv.txt b/examples/network/graphviz/data/siblings.gv.txt deleted file mode 100644 index e6628dfc..00000000 --- a/examples/network/graphviz/data/siblings.gv.txt +++ /dev/null @@ -1,512 +0,0 @@ -/* -This is a graphviz-produced layout of the "family tree" of a fraternity and sorority. - -Each member in the graph was assigned a "big brother" from one organization and a "big sister" from the other. Blue icons represent Brothers from the fraternity, Pink represents Sisters from the sorority (Purple members are in both organizations - like honoraries.) - -Charter members (who can have no parent nodes) are outlined. - -... - -dot -Tgif -Goverlap=false -o siblings.gif siblings.dot - - -We're experimenting with different ways of coloring and graphing, but found this the easiest for now. When we have more people in, we might look at different shades depending on generation number -- earlier people would get lighter colors, more recent members darker. Thumbnail images would be an interesting alteration as well. - -from Japheth Cleaver -*/ - - -digraph sdsu { - size="36,36"; - node [color=grey, style=filled]; - node [fontname="Verdana", size="30,30"]; - graph [ fontname = "Arial", - fontsize = 36, - style = "bold", - label = "\nKappa Kappa Psi/Tau Beta Sigma\nSan Diego State University\nEta Mu and Zeta Xi Family Tree\n\nto date: November 30th, 2008\n", - ssize = "30,60" ]; -"Lori Brede" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=10"]; -"Michael Griffith" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=24"]; -"Amie Holston" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=30"]; -"Michael Griffith" -> "Lori Brede" -"Amie Holston" -> "Lori Brede" -"Casey Carter" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=11"]; -"Laura De'Armond" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=14"]; -"Laura De'Armond" -> "Casey Carter" -"Japheth Cleaver" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=12"]; -"Chuk Gawlik" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=22"]; -"Stacy Snyder" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=309"]; -"Chuk Gawlik" -> "Japheth Cleaver" -"Stacy Snyder" -> "Japheth Cleaver" -"Jillian Clifton" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=13"]; -"David Guthrie" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=25"]; -"David Guthrie" -> "Jillian Clifton" -"Japheth Cleaver" -> "Jillian Clifton" -"Tony Sacco" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=55"]; -"Heather Smith" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=59"]; -"Tony Sacco" -> "Laura De'Armond" -"Heather Smith" -> "Laura De'Armond" -"Kevin Decker" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=15"]; -"Alex Hansen" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=26"]; -"Wanda Livelsberger" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=53"]; -"Alex Hansen" -> "Kevin Decker" -"Wanda Livelsberger" -> "Kevin Decker" -"Patrick Doerr" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=16"]; -"Deanna Jagow" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=23"]; -"Alex Hansen" -> "Patrick Doerr" -"Deanna Jagow" -> "Patrick Doerr" -"Lori Asaro" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=178"]; -"Mark Pearson" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=169"]; -"Lori Ball" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=167"]; -"Mark Pearson" -> "Lori Asaro" -"Lori Ball" -> "Lori Asaro" -"Ryan Farris" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=18"]; -"Rob Reiner" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=51"]; -"Cindy Teel" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=62"]; -"Rob Reiner" -> "Ryan Farris" -"Cindy Teel" -> "Ryan Farris" -"Ginger Palmer" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=180"]; -"Mark Newton-John" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=46"]; -"Mark Newton-John" -> "Ginger Palmer" -"Matthew FitzGerald" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=19"]; -"Mervin Maniago" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=41"]; -"Mervin Maniago" -> "Matthew FitzGerald" -"Amie Holston" -> "Matthew FitzGerald" -"Tani Miller" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=195"]; -"Mark Pearson" -> "Tani Miller" -"Vienna McMurtry" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=196"]; -"Robert Walwick" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=153"]; -"Robert Walwick" -> "Vienna McMurtry" -"Ginger Palmer" -> "Vienna McMurtry" -"Chuck Foster" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=20"]; -"Karen Saye" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=56"]; -"Kevin Decker" -> "Chuck Foster" -"Karen Saye" -> "Chuck Foster" -"Gary Frampton" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=201"]; -"Ginger Palmer" -> "Gary Frampton" -"Pat Norris" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=207"]; -"Sean Tipps" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=204"]; -"Teresa Long" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=194"]; -"Sean Tipps" -> "Pat Norris" -"Teresa Long" -> "Pat Norris" -"Marc Martin-ez" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=208"]; -"Mark Pearson" -> "Marc Martin-ez" -"Tani Miller" -> "Marc Martin-ez" -"Kristen Villone" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=209"]; -"Kelly Erickson" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=199"]; -"Anna Pedroza" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=197"]; -"Kelly Erickson" -> "Kristen Villone" -"Anna Pedroza" -> "Kristen Villone" -"Geoff Frank" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=21"]; -"Chris Livelsberger" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=40"]; -"Amy Price" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=57"]; -"Chris Livelsberger" -> "Geoff Frank" -"Amy Price" -> "Geoff Frank" -"Tracy Murray" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=210"]; -"John FitzGibbon" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=92"]; -"Judy Dulcich" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=177"]; -"John FitzGibbon" -> "Tracy Murray" -"Judy Dulcich" -> "Tracy Murray" -"Ian McIntosh" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=215"]; -"Barbara Tollison" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=172"]; -"Robert Walwick" -> "Ian McIntosh" -"Barbara Tollison" -> "Ian McIntosh" -"Jayson Smith" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=58"]; -"Jayson Smith" -> "Chuk Gawlik" -"Heather Smith" -> "Chuk Gawlik" -"Kelly McKinney" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=222"]; -"Mark Nadeau" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=183"]; -"Mark Nadeau" -> "Kelly McKinney" -"Judy Dulcich" -> "Kelly McKinney" -"Chris Livelsberger" -> "Deanna Jagow" -"Amy Price" -> "Deanna Jagow" -"Renee Thompson" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=231"]; -"J. Angeles" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=3"]; -"Kelley Smith" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=223"]; -"J. Angeles" -> "Renee Thompson" -"Kelley Smith" -> "Renee Thompson" -"Steven Smith" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=233"]; -"John FitzGibbon" -> "Steven Smith" -"Charlene Andrews" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=234"]; -"Diane Reoch" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=227"]; -"Diane Reoch" -> "Charlene Andrews" -"Tonya Alexander" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=238"]; -"Gail Vasquez" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=225"]; -"Gail Vasquez" -> "Tonya Alexander" -"Spencer Caldwell" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=239"]; -"Becky Bernal" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=218"]; -"Becky Bernal" -> "Spencer Caldwell" -"Chuk Gawlik" -> "Michael Griffith" -"Wanda Livelsberger" -> "Michael Griffith" -"Russell Grant" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=242"]; -"Steven Smith" -> "Russell Grant" -"Tiffany Worthington" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=66"]; -"Chuck Foster" -> "David Guthrie" -"Tiffany Worthington" -> "David Guthrie" -"Jerry Maya" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=250"]; -"John FitzGibbon" -> "Jerry Maya" -"Melissa Schwartz" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=252"]; -"Russell Grant" -> "Melissa Schwartz" -"Delphy Shaulis" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=255"]; -"Renee Thompson" -> "Delphy Shaulis" -"Martin Naiman" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=45"]; -"Janean Angeles" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=86"]; -"Martin Naiman" -> "Alex Hansen" -"Janean Angeles" -> "Alex Hansen" -"Leslie Harlow" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=265"]; -"Dennis McColl" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=251"]; -"Denise Luna" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=236"]; -"Dennis McColl" -> "Leslie Harlow" -"Denise Luna" -> "Leslie Harlow" -"Jonathan Yudman" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=267"]; -"April Ortiz-cloninger" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=258"]; -"April Ortiz-cloninger" -> "Jonathan Yudman" -"Michael Elgo" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=268"]; -"Carol Kropp" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=254"]; -"Spencer Caldwell" -> "Michael Elgo" -"Carol Kropp" -> "Michael Elgo" -"Denmark Vea" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=269"]; -"Marc Martin-ez" -> "Denmark Vea" -"Kelley Smith" -> "Denmark Vea" -"Kathleen Hansen" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=27"]; -"Martin Naiman" -> "Kathleen Hansen" -"Heather Smith" -> "Kathleen Hansen" -"Laura Stegner" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=274"]; -"April Ortiz-cloninger" -> "Laura Stegner" -"Kathy Jones" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=28"]; -"J. Angeles" -> "Kathy Jones" -"Eric Gates" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=282"]; -"Erick Sugimura" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=280"]; -"Erick Sugimura" -> "Eric Gates" -"Laura Stegner" -> "Eric Gates" -"Jennifer Stoewe" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=288"]; -"Eric Gates" -> "Jennifer Stoewe" -"Karen Helbling" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=29"]; -"Regan Ashker" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=5"]; -"Kevin Decker" -> "Karen Helbling" -"Regan Ashker" -> "Karen Helbling" -"Scott Wood" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=295"]; -"Eric Gates" -> "Scott Wood" -"Greg Flood" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=200"]; -"Greg Flood" -> "J. Angeles" -"Ginger Palmer" -> "J. Angeles" -"Lynn Reeves" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=48"]; -"Chuk Gawlik" -> "Amie Holston" -"Lynn Reeves" -> "Amie Holston" -"Susan Colwell" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=302"]; -"Michael Elgo" -> "Susan Colwell" -"Christopher Jouan" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=306"]; -"Kevin Owens" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=245"]; -"Kevin Owens" -> "Christopher Jouan" -"Kristianna Reynante" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=308"]; -"Michael Elgo" -> "Kristianna Reynante" -"Janean Angeles" -> "Kristianna Reynante" -"Amy Berner" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=300"]; -"Amy Berner" -> "Stacy Snyder" -"Deanna Johnson" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=31"]; -"Alex Hansen" -> "Deanna Johnson" -"Laura De'Armond" -> "Deanna Johnson" -"Johnny Richardson" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=310"]; -"Russell Grant" -> "Johnny Richardson" -"Nathan Fellhauer" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=313"]; -"James Rowland" [color=thistle, URL="http://sdsu.kkytbs.net/members/profile.html?who=52"]; -"James Rowland" -> "Nathan Fellhauer" -"Kristianna Reynante" -> "Nathan Fellhauer" -"Brian Raneses" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=314"]; -"Sean McHenry" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=42"]; -"Sean McHenry" -> "Brian Raneses" -"Penny Lewis" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=315"]; -"Martin Naiman" -> "Penny Lewis" -"Becky Graham" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=316"]; -"Kristen Elgo" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=7"]; -"Kristen Elgo" -> "Becky Graham" -"Steven Gross" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=318"]; -"Rob Reiner" -> "Steven Gross" -"Stacy Snyder" -> "Steven Gross" -"Sedona Reynolds" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=32"]; -"Mark Newton-John" -> "Sedona Reynolds" -"Cindy Teel" -> "Sedona Reynolds" -"Klair Mayerchak" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=320"]; -"Nathan Fellhauer" -> "Klair Mayerchak" -"Becky Graham" -> "Klair Mayerchak" -"Shari VerBerkmoes" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=321"]; -"Sean McHenry" -> "Shari VerBerkmoes" -"Janean Angeles" -> "Shari VerBerkmoes" -"Anson Summers" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=326"]; -"James Rowland" -> "Anson Summers" -"Dusty Jolliff" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=33"]; -"Rob Reiner" -> "Dusty Jolliff" -"Stacy Snyder" -> "Dusty Jolliff" -"Jennifer Garman" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=331"]; -"James Rowland" -> "Jennifer Garman" -"Kelly Greenhill" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=333"]; -"Rob Reiner" -> "Kelly Greenhill" -"Kristen Elgo" -> "Kelly Greenhill" -"Lucinda Farless" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=334"]; -"J. Angeles" -> "Lucinda Farless" -"Susan Colwell" -> "Lucinda Farless" -"Alfredo Cardenas" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=335"]; -"Chuk Gawlik" -> "Alfredo Cardenas" -"Kathleen Hansen" -> "Alfredo Cardenas" -"Jennifer Jouan" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=34"]; -"Andrea Owens" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=276"]; -"Andrea Owens" -> "Jennifer Jouan" -"Tamara Scrivner" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=345"]; -"Joseph Butler" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=69"]; -"Sarah Maltese" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=83"]; -"Joseph Butler" -> "Tamara Scrivner" -"Sarah Maltese" -> "Tamara Scrivner" -"Bradley Stouse" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=346"]; -"Ryan Underwood" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=74"]; -"Ryan Underwood" -> "Bradley Stouse" -"Cindy Teel" -> "Bradley Stouse" -"Casondra Brimmage" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=347"]; -"Kristopher Lininger" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=85"]; -"Ilana Melcher" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=73"]; -"Kristopher Lininger" -> "Casondra Brimmage" -"Ilana Melcher" -> "Casondra Brimmage" -"Cassiopeia Guthrie" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=348"]; -"Jeremy Frazier" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=79"]; -"Christine Mount" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=76"]; -"Jeremy Frazier" -> "Cassiopeia Guthrie" -"Christine Mount" -> "Cassiopeia Guthrie" -"Kathleen Moran" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=349"]; -"Matthew FitzGerald" -> "Kathleen Moran" -"Lori Brede" -> "Kathleen Moran" -"Tiffany Kalland" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=35"]; -"Tony Sacco" -> "Tiffany Kalland" -"Karen Helbling" -> "Tiffany Kalland" -"Kristen Anderson" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=350"]; -"Jennie Bogart" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=78"]; -"David Guthrie" -> "Kristen Anderson" -"Jennie Bogart" -> "Kristen Anderson" -"Laura Simonette" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=351"]; -"Jon Weisel" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=89"]; -"Jon Weisel" -> "Laura Simonette" -"Japheth Cleaver" -> "Laura Simonette" -"Nathan Williams" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=352"]; -"David Guthrie" -> "Nathan Williams" -"Karen Helbling" -> "Nathan Williams" -"Rebecca Hippert" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=353"]; -"Ryan Underwood" -> "Rebecca Hippert" -"Tiffany Kalland" -> "Rebecca Hippert" -"Samuel Wallace" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=354"]; -"Joseph Butler" -> "Samuel Wallace" -"Deanna Jagow" -> "Samuel Wallace" -"Scott Gardner" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=355"]; -"Jeremy Frazier" -> "Scott Gardner" -"Christine Mount" -> "Scott Gardner" -"Alberto Ayon" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=356"]; -"Bradley Stouse" -> "Alberto Ayon" -"Jennie Bogart" -> "Alberto Ayon" -"Susannah Clayton" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=357"]; -"Nathan Williams" -> "Susannah Clayton" -"Karen Helbling" -> "Susannah Clayton" -"Lisa Gochnauer" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=358"]; -"Scott Gardner" -> "Lisa Gochnauer" -"Casondra Brimmage" -> "Lisa Gochnauer" -"Jamie Jackson" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=359"]; -"Samuel Wallace" -> "Jamie Jackson" -"Tamara Scrivner" -> "Jamie Jackson" -"Christina Kelly" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=36"]; -"Matthew FitzGerald" -> "Christina Kelly" -"Lori Brede" -> "Christina Kelly" -"Gara Thornton" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=360"]; -"Mark Newton-John" -> "Gara Thornton" -"Laura Simonette" -> "Gara Thornton" -"Robert Winebarger" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=361"]; -"Robin Ellison" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=90"]; -"Scott Gardner" -> "Robert Winebarger" -"Robin Ellison" -> "Robert Winebarger" -"Jeremy Kirchner" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=37"]; -"Rob Reiner" -> "Jeremy Kirchner" -"Sandy Konar" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=38"]; -"Jennifer Brandon" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=9"]; -"Jennifer Brandon" -> "Sandy Konar" -"Dan Kuhlman" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=39"]; -"Rob Reiner" -> "Dan Kuhlman" -"Dusty Jolliff" -> "Dan Kuhlman" -"Lindsay Arehart" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=4"]; -"Martin Naiman" -> "Lindsay Arehart" -"Jennifer Brandon" -> "Lindsay Arehart" -"J. Angeles" -> "Mervin Maniago" -"Kathy Jones" -> "Mervin Maniago" -"Jarrod Monroe" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=43"]; -"Jamie Fratacci" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=44"]; -"Mark Newton-John" -> "Jarrod Monroe" -"Jamie Fratacci" -> "Jarrod Monroe" -"Chuk Gawlik" -> "Jamie Fratacci" -"Tiffany Worthington" -> "Jamie Fratacci" -"Russell Grant" -> "Martin Naiman" -"Tonya Alexander" -> "Martin Naiman" -"Edward Givens" [color=lightblue, outline=bold, style=bold, URL="http://sdsu.kkytbs.net/members/profile.html?who=106"]; -"Edward Givens" -> "Mark Newton-John" -"Veronica Nickel" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=47"]; -"Regan Ashker" -> "Veronica Nickel" -"Wanda Livelsberger" -> "Lynn Reeves" -"Bryan Ransom" [color=thistle, URL="http://sdsu.kkytbs.net/members/profile.html?who=49"]; -"Jayson Smith" -> "Bryan Ransom" -"Tony Sacco" -> "Regan Ashker" -"Dusty Jolliff" -> "Regan Ashker" -"Jennifer Stout" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=50"]; -"Matthew FitzGerald" -> "Jennifer Stout" -"Deanna Jagow" -> "Jennifer Stout" -"Sean McHenry" -> "James Rowland" -"James Rowland" -> "Wanda Livelsberger" -"Janean Angeles" -> "Wanda Livelsberger" -"Melissa Roy" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=54"]; -"Mervin Maniago" -> "Melissa Roy" -"Christina Kelly" -> "Melissa Roy" -"Dennis McColl" -> "Tony Sacco" -"April Ortiz-cloninger" -> "Tony Sacco" -"Tony Sacco" -> "Karen Saye" -"Tony Sacco" -> "Amy Price" -"Kathleen Hansen" -> "Amy Price" -"James Rowland" -> "Jayson Smith" -"Brian Raneses" -> "Heather Smith" -"Kristen Elgo" -> "Heather Smith" -"Josh Atwood" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=6"]; -"David Guthrie" -> "Josh Atwood" -"Lori Brede" -> "Josh Atwood" -"Katie Browne" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=60"]; -"Patrick Doerr" -> "Katie Browne" -"Jamie Fratacci" -> "Katie Browne" -"Kristin Tang" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=61"]; -"James Rowland" -> "Kristin Tang" -"Heather Smith" -> "Kristin Tang" -"Mervin Maniago" -> "Cindy Teel" -"Veronica Nickel" -> "Cindy Teel" -"Mike Tulumello" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=63"]; -"Matthew FitzGerald" -> "Mike Tulumello" -"Katie Browne" -> "Mike Tulumello" -"Veronica Villanueva" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=64"]; -"Ryan Farris" -> "Veronica Villanueva" -"Sedona Reynolds" -> "Veronica Villanueva" -"Mervin Maniago" -> "Tiffany Worthington" -"Jennifer Jouan" -> "Tiffany Worthington" -"Scott Wright" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=67"]; -"James Rowland" -> "Scott Wright" -"Kristen Elgo" -> "Scott Wright" -"Jeremy Browne" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=68"]; -"Matthew FitzGerald" -> "Jeremy Browne" -"Japheth Cleaver" -> "Jeremy Browne" -"James Fogelman" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=688"]; -"Alberto Ayon" -> "James Fogelman" -"Susannah Clayton" -> "James Fogelman" -"Sandra Chase" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=689"]; -"David Guthrie" -> "Sandra Chase" -"Japheth Cleaver" -> "Sandra Chase" -"Patrick Doerr" -> "Joseph Butler" -"Deanna Jagow" -> "Joseph Butler" -"Laura Fisher" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=690"]; -"Nathan Williams" -> "Laura Fisher" -"Casondra Brimmage" -> "Laura Fisher" -"Katie Kozma" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=691"]; -"Scott Wright" -> "Katie Kozma" -"Robin Ellison" -> "Katie Kozma" -"Rachel Perkins" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=692"]; -"Joseph Butler" -> "Rachel Perkins" -"Cassiopeia Guthrie" -> "Rachel Perkins" -"Sarah Titilah" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=693"]; -"Robert Winebarger" -> "Sarah Titilah" -"Karen Helbling" -> "Sarah Titilah" -"Ashley Rehart" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=694"]; -"Laura Fisher" -> "Ashley Rehart" -"Cara Yancey" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=695"]; -"Katie Kozma" -> "Cara Yancey" -"Ashley Presley" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=698"]; -"Cara Yancey" -> "Ashley Presley" -"Leila Wilhelm" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=699"]; -"Robin Ellison" -> "Leila Wilhelm" -"Sean McHenry" -> "Kristen Elgo" -"Stacy Snyder" -> "Kristen Elgo" -"Greg Moody" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=70"]; -"Ryan Farris" -> "Greg Moody" -"Jennifer Stout" -> "Greg Moody" -"Lisa Fleck" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=700"]; -"Rachel Perkins" -> "Lisa Fleck" -"Christine Coyne" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=701"]; -"Rachel Perkins" -> "Christine Coyne" -"Jennifer Cooley" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=702"]; -"Laura Fisher" -> "Jennifer Cooley" -"Elizabeth Larios" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=703"]; -"Ashley Rehart" -> "Elizabeth Larios" -"Cate Threlkeld" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=707"]; -"Katie Kozma" -> "Cate Threlkeld" -"Erika Tapia" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=71"]; -"Patrick Doerr" -> "Erika Tapia" -"Melissa Roy" -> "Erika Tapia" -"Robbyn Rozelle" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=72"]; -"Jarrod Monroe" -> "Robbyn Rozelle" -"Tiffany Kalland" -> "Robbyn Rozelle" -"Ryan Farris" -> "Ilana Melcher" -"Veronica Villanueva" -> "Ilana Melcher" -"Greg Moody" -> "Ryan Underwood" -"Katie Browne" -> "Ryan Underwood" -"Cameron Brown" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=75"]; -"Joseph Butler" -> "Cameron Brown" -"Tiffany Kalland" -> "Cameron Brown" -"Ryan Underwood" -> "Christine Mount" -"Lori Brede" -> "Christine Mount" -"Janay Rabe" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=77"]; -"Greg Moody" -> "Janay Rabe" -"Cindy Teel" -> "Janay Rabe" -"Jeremy Browne" -> "Jennie Bogart" -"Tiffany Kalland" -> "Jennie Bogart" -"Ryan Farris" -> "Jeremy Frazier" -"Ilana Melcher" -> "Jeremy Frazier" -"Crystal Bozak" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=8"]; -"Patrick Doerr" -> "Crystal Bozak" -"Katie Browne" -> "Crystal Bozak" -"Kameka Smith" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=80"]; -"Matthew FitzGerald" -> "Kameka Smith" -"Ilana Melcher" -> "Kameka Smith" -"Kyra Sacco" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=81"]; -"Joseph Butler" -> "Kyra Sacco" -"Robbyn Rozelle" -> "Kyra Sacco" -"Samuel Behar" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=82"]; -"Ryan Underwood" -> "Samuel Behar" -"Lori Brede" -> "Samuel Behar" -"Patrick Doerr" -> "Sarah Maltese" -"Deanna Jagow" -> "Sarah Maltese" -"David Bronson" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=84"]; -"Kristin Alongi-Hutchins" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=87"]; -"Tony Sacco" -> "David Bronson" -"Kristin Alongi-Hutchins" -> "David Bronson" -"Cameron Brown" -> "Kristopher Lininger" -"Kameka Smith" -> "Kristopher Lininger" -"Rakan Abu-Rahma" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=852"]; -"Christine Coyne" -> "Rakan Abu-Rahma" -"Jennifer Berry" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=270"]; -"Jennifer Berry" -> "Janean Angeles" -"Penny Lewis" -> "Kristin Alongi-Hutchins" -"Melissa Bebak" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=88"]; -"Greg Moody" -> "Melissa Bebak" -"Sarah Maltese" -> "Melissa Bebak" -"Scott Wright" -> "Jennifer Brandon" -"Japheth Cleaver" -> "Jennifer Brandon" -"Samuel Behar" -> "Robin Ellison" -"Kyra Sacco" -> "Robin Ellison" -"Teresa Simms" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=91"]; -"Joseph Butler" -> "Teresa Simms" -"Janay Rabe" -> "Teresa Simms" -"Robert Schmidtke" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=188"]; -"Jean Newman" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=166"]; -"Robert Schmidtke" -> "John FitzGibbon" -"Jean Newman" -> "John FitzGibbon" -"Brittany DePew" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=928"]; -"Elizabeth Larios" -> "Brittany DePew" -"Kathleen Halberg" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=929"]; -"Ashley Rehart" -> "Kathleen Halberg" -"Terrance Hirsch" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=96"]; -"J. Angeles" -> "Terrance Hirsch" -"Susan Colwell" -> "Terrance Hirsch" -"Monique Arellano" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=972"]; -"Ashley Presley" -> "Monique Arellano" -"Anthony Henderson" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=973"]; -"Jennifer Cooley" -> "Anthony Henderson" -"Amethyst Tagle" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=974"]; -"Cate Threlkeld" -> "Amethyst Tagle" -"Mallory Williams" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=975"]; -"Lisa Fleck" -> "Mallory Williams" -} \ No newline at end of file diff --git a/examples/network/graphviz/data/softmaint.gv.txt b/examples/network/graphviz/data/softmaint.gv.txt deleted file mode 100644 index 04110890..00000000 --- a/examples/network/graphviz/data/softmaint.gv.txt +++ /dev/null @@ -1,377 +0,0 @@ -digraph G { - size="7,10" - page="8.5,11" - center="" - node[width=.25,height=.375,fontsize=9] - fcfpr1_1_2t_17 -> 341411; - fcfpr1_1t_1 -> 341411; - rdlfpr2_0_rdlt_4 -> 341411; - fpfpr1_0_1t_1 -> 341411; - fpfpr1_1_2t_11 -> 341411; - rtafpr1_1_2t_28 -> 341411; - rtafpr1_1_3t_6 -> 341411; - rdlfpr1_1t_1 -> 358866; - rtafpr1_1_3t_6 -> 358866; - tmfpr1_1_3t_5 -> 358930; - fcfpr1_1_3t_9 -> 358930; - pcfpr1_1_3t_7 -> 358930; - fpfpr1_1_3g_1 -> 358930; - fpfpr1_1_3t_1 -> 358930; - aufpr1_1_3t_1 -> 358930; - rtafpr1_0_3g_1 -> 358930; - rtafpr1_1_3t_6 -> 358930; - msgfpr1_1_1g_12 -> 371943; - rtafpr1_1_1g_8 -> 371943; - rtafpr1_1_1t_35 -> 371943; - rtafpr1_1_1t_45 -> 371943; - rtafpr1_1_3t_6 -> 371943; - tlfpr2_0_rdlg_2 -> 374300; - fcfpr1_1_3t_8 -> 374300; - fcfpr1_1_3t_9 -> 374300; - rtafpr1_1_3t_6 -> 374300; - fcfpr1_0_5g_1 -> 371942; - fcfpr1_1_1t_19 -> 371942; - fcfpr1_1_3t_9 -> 371942; - fcfpr1_1_3t_9 -> 374700; - tymsgfpr1_1_3t_3 -> 374700; - fpfpr1_1_3t_1 -> 374700; - rtafpr1_1_3t_7 -> 374700; - fcfpr1_1_3g_2 -> 374741; - fcfpr1_1_3t_9 -> 374741; - fpfpr1_1_3t_1 -> 374741; - rtafpr1_1_3t_7 -> 374741; - fcfpr1_1_1t_18 -> 374886; - fcfpr1_1_3t_9 -> 374886; - fpfpr1_1_3t_1 -> 374886; - rtafpr1_1_3t_7 -> 374886; - fcfpr1_1_3t_9 -> 375039; - fpfpr1_1_3t_1 -> 375039; - fcfpr1_1_3t_42 -> 375507; - fcfpr1_1_3t_9 -> 375507; - rdlfpr2_0_rdlt_158 -> 375507; - rtafpr1_1_3t_7 -> 375507; - rtafpr1_1_3t_71 -> 375507; - dbfpr1_1_3t_2 -> 375507; - fcfpr1_1_3t_9 -> 375508; - rdlfpr1_1g_13 -> 375508; - rtafpr1_1_3t_7 -> 375508; - rtafpr2_1_rdlg_1 -> 375508; - dbfpr1_1_3t_2 -> 375508; - fcfpr1_1_3t_9 -> 375519; - fpfpr1_1_3g_1 -> 375519; - fpfpr1_1_3t_1 -> 375519; - fcfpr1_1_3t_9 -> 377380; - rdlfpr1_1g_16 -> 377380; - rdlfpr1_1t_100 -> 377380; - fcfpr1_0_2g_1 -> 377719; - fcfpr1_1_3t_10 -> 377719; - fcfpr1_1_3t_7 -> 377719; - fcfpr1_1_3t_9 -> 377719; - rdlfpr2_0_rdlg_12 -> 377719; - rdlfpr2_0_rdlt_108 -> 377719; - rdlfpr2_0_rdlt_27 -> 377719; - rdlfpr2_0_rdlt_30 -> 377719; - fcfpr1_1_3t_9 -> 377763; - fcfpr1_1_3t_9 -> 379848; - fpfpr1_1_3t_1 -> 379848; - fcfpr1_1_3t_9 -> 380571; - fcfpr1_1_3t_9 -> 380604; - fpfpr1_1_3t_1 -> 380604; - fcfpr1_1_3t_9 -> 381211; - fpfpr1_1_3t_1 -> 381211; - fcfpr1_1_3t_9 -> 381835; - fcfpr1_1_3t_9 -> 381897; - fcfpr1_1_3t_9 -> 381901; - fpfpr1_1_3t_1 -> 381901; - fcfpr1_1_3t_9 -> 382103; - rtafpr1_1_3t_7 -> 382103; - fcfpr1_1_3t_9 -> 382161; - fcfpr1_1_3t_9 -> 383174; - fpfpr1_1_3t_1 -> 383174; - rtafpr1_1_3t_7 -> 383174; - fpfpr1_1_3g_1 -> 352010; - fpfpr1_1_3t_1 -> 352010; - fpfpr1_1_3t_1 -> 382409; - fpfpr1_1_3t_1 -> 382827; - fpfpr1_1_3t_1 -> 382928; - rtafpr1_1_3t_7 -> 382928; - tlfpr1_1_1t_5 -> 358224; - tymsgfpr1_1_1t_23 -> 358224; - tymsgfpr1_1_3t_3 -> 358224; - rcfpr0_0_1t_9 -> 358224; - rcfpr1_1_1t_5 -> 358224; - odfpr0_0_1t_8 -> 358224; - odfpr1_1_1t_6 -> 358224; - ecdsgfpr1_1_1t_4 -> 358224; - tymsgfpr1_1_1t_18 -> 358900; - tymsgfpr1_1_3t_3 -> 358900; - rcfpr1_1_1t_100 -> 358900; - rcfpr1_1_1t_22 -> 358900; - rcfpr1_1_1t_37 -> 358900; - odfpr1_1_1t_21 -> 358900; - tymsgfpr1_1_3t_3 -> 372568; - rcfpr1_1_1t_30 -> 372568; - odfpr1_1_1t_31 -> 372568; - tlfpr1_1_1t_20 -> 375557; - tymsgfpr1_1_1t_24 -> 375557; - tymsgfpr1_1_3t_3 -> 375557; - rcfpr1_1_1t_11 -> 375557; - odfpr1_1_1t_9 -> 375557; - ecdsgfpr1_1_1t_19 -> 375557; - rtafpr1_1_1g_14 -> 376956; - rtafpr1_1_1t_64 -> 376956; - rtafpr1_1_2t_18 -> 376956; - rtafpr1_1_3t_30 -> 376956; - rtafpr1_1_3t_7 -> 376956; - rtafpr1_1_3t_7 -> 379339; - rtafpr1_1_1t_14 -> 379422; - rtafpr1_1_1t_20 -> 379422; - rtafpr1_1_3t_7 -> 379422; - rtafpr1_1_3t_7 -> 383039; - fcfpr1_1_1t_18 -> 359471; - fcfpr2_0_1t_1 -> 359471; - fcfpr2_0_1t_2 -> 359471; - ccsfpr2_0_1t_99 -> 359471; - fcfpr1_1_3t_42 -> 384096; - rtafpr1_1_3t_71 -> 384096; - tlfpr1_0_4g_4 -> 354290; - rcfpr0_0_1t_9 -> 354290; - odfpr0_0_1t_8 -> 354290; - pagfpr1_1_1t_23 -> 354290; - rcfpr1_1_1t_5 -> 379864; - rcfpr1_1_1t_100 -> 382574; - rcfpr1_1_1t_22 -> 382574; - rcfpr1_1_1t_37 -> 382574; - rcfpr1_1_1t_30 -> 370706; - rcfpr1_1_1t_30 -> 377908; - rcfpr1_1_1t_30 -> 377924; - rcfpr1_1_1t_30 -> 377971; - rcfpr1_1_1t_30 -> 377980; - odfpr1_1_1t_31 -> 377980; - rcfpr1_1_1t_30 -> 378362; - rcfpr1_1_1t_30 -> 378656; - rcfpr1_1_1t_30 -> 378666; - rcfpr1_1_1t_30 -> 379169; - odfpr1_1_1t_31 -> 379169; - rcfpr1_1_1t_110 -> 379341; - rcfpr1_1_1t_30 -> 379341; - rcfpr1_1_1t_62 -> 379341; - odfpr1_1_1t_31 -> 379341; - rcfpr1_1_1t_30 -> 379972; - rcfpr1_1_1t_30 -> 380298; - rcfpr1_1_1t_30 -> 380448; - rcfpr1_1_1t_30 -> 380475; - odfpr1_1_1t_31 -> 380475; - rcfpr1_1_1t_30 -> 380526; - odfpr1_1_1t_31 -> 357430; - rcfpr1_1_1t_11 -> 379968; - odfpr1_1_1t_9 -> 379968; - ccsfpr2_0_1t_99 -> 359100; - ccsfpr2_0_1t_99 -> 376529; - ccsfpr2_0_1t_99 -> 377801; - ccsfpr2_0_1t_99 -> 379126; - ccsfpr2_0_1t_99 -> 379212; - ccsfpr2_0_1t_99 -> 380285; - ccsfpr2_0_1t_99 -> 380963; - ccsfpr2_0_1t_99 -> 384909; - tlfpr1_0_4g_4 -> 358471; - odfpr0_0_1t_7 -> 358471; - odfpr1_0_1t_36 -> 358471; - odfpr1_0_3t_18 -> 358471; - odfpr1_0_3t_21 -> 358471; - tlfpr1_0_4g_4 -> 375024; - tlfpr1_0_4g_4 -> 375027; - rcfpr1_1_1t_110 -> 381710; - rcfpr1_1_1t_62 -> 381710; - rcfpr1_1_1t_110 -> 381775; - rcfpr1_1_1t_62 -> 381775; - rcfpr1_1_1t_110 -> 382436; - fcfpr1_1_3t_34 -> 382528; - rcfpr1_1_1t_110 -> 382528; - rtafpr1_1_3t_48 -> 382528; - rcfpr1_1_1t_110 -> 382566; - rcfpr1_1_1t_110 -> 382572; - odfpr0_0_1t_7 -> 353506; - rcfpr1_0_1t_35 -> 370509; - odfpr0_0_1t_7 -> 370509; - odfpr0_0_1t_7 -> 370510; - odfpr1_0_1t_38 -> 370510; - tlfpr1_0_4g_5 -> 354546; - rcfpr1_1_1t_61 -> 354546; - odfpr1_0_3t_18 -> 354546; - odfpr1_0_3t_20 -> 354546; - odfpr1_0_3t_18 -> 354757; - odfpr1_0_3t_20 -> 354757; - odfpr1_0_3t_18 -> 354766; - odfpr1_0_3t_20 -> 354766; - odfpr1_0_3t_18 -> 354771; - odfpr1_0_3t_20 -> 354771; - odfpr1_0_3t_18 -> 354785; - odfpr1_0_3t_23 -> 354785; - odfpr1_0_3t_24 -> 354785; - odfpr1_0_3t_18 -> 354878; - odfpr1_0_3t_23 -> 354878; - odfpr1_0_3t_24 -> 354878; - odfpr1_0_3t_18 -> 355080; - odfpr1_0_3t_23 -> 355080; - odfpr1_0_3t_24 -> 355080; - odfpr1_0_3t_18 -> 355288; - odfpr1_0_3t_23 -> 355288; - odfpr1_0_3t_24 -> 355288; - odfpr2_0_03t_13 -> 355288; - odfpr1_0_3t_18 -> 355800; - odfpr1_0_3t_21 -> 355800; - odfpr1_0_3t_18 -> 356116; - odfpr1_0_3t_21 -> 356116; - odfpr1_0_3t_18 -> 356741; - odfpr1_0_3t_21 -> 356741; - odfpr1_0_3t_18 -> 357340; - odfpr1_0_3t_21 -> 357340; - odfpr1_0_3t_18 -> 357538; - odfpr1_0_3t_21 -> 357538; - odfpr1_0_3t_18 -> 357769; - odfpr1_0_3t_21 -> 357769; - odfpr1_0_3t_18 -> 357793; - odfpr1_0_3t_21 -> 357793; - odfpr1_0_3t_18 -> 358155; - odfpr1_0_3t_21 -> 358155; - odfpr1_0_3t_18 -> 358157; - odfpr1_0_3t_21 -> 358157; - odfpr1_0_3t_18 -> 358159; - odfpr1_0_3t_21 -> 358159; - odfpr1_0_3t_18 -> 358584; - odfpr1_0_3t_21 -> 358584; - odfpr1_0_3t_18 -> 360104; - odfpr1_0_3t_21 -> 360104; - odfpr1_0_3t_18 -> 360144; - odfpr1_0_3t_21 -> 360144; - odfpr1_0_3t_18 -> 360672; - odfpr1_0_3t_21 -> 360672; - odfpr1_0_3t_5 -> 360672; - odfpr1_0_3t_18 -> 360839; - odfpr1_0_3t_21 -> 360839; - odfpr1_0_3t_18 -> 371187; - tlfpr1_0_3g_5 -> 373300; - odfpr1_0_3t_12 -> 373300; - odfpr1_0_3t_18 -> 373300; - odfpr1_0_3t_18 -> 375134; - odfpr1_0_5t_18 -> 375134; - rcfpr0_0_1t_10 -> 375319; - odfpr1_0_3t_18 -> 375319; - odfpr1_0_3t_36 -> 375319; - odfpr1_0_5t_17 -> 375319; - odfpr1_0_5t_19 -> 375319; - odfpr1_0_3t_18 -> 375499; - odfpr1_0_3t_18 -> 377220; - odfpr1_0_5t_21 -> 377220; - tlfpr1_0_3g_7 -> 377562; - tlfpr1_1_1t_3 -> 377562; - odfpr1_0_3t_18 -> 377562; - odfpr1_0_3t_36 -> 377562; - odfpr1_0_5t_20 -> 377562; - odfpr1_0_3t_18 -> 378108; - odfpr1_0_3t_6 -> 378108; - odfpr1_0_5t_20 -> 354221; - - odfpr0_0_1t_7 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tlfpr1_0_3g_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr0_0_1t_8 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr1_1_1t_61 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_1t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_3t_18 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tlfpr1_0_3g_7 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr1_1_1t_62 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - ccsfpr2_0_1t_99 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tymsgfpr1_1_3t_3 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr0_0_1t_9 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_1t_14 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_3t_30 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr1_1_1t_110 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - dbfpr1_1_3t_2 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_1g_8 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr1_1_1t_30 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tlfpr1_1_1t_20 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_1t_64 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tlfpr2_0_rdlg_2 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_2t_28 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tlfpr1_1_1t_3 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_1_1t_6 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fpfpr1_1_3t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - aufpr1_1_3t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_1_3t_34 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr1_1_1t_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_1_1t_18 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_3t_36 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tlfpr1_1_1t_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_1_1t_19 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_1_1t_9 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_1_3t_7 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr1_1_1t_37 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_1_3t_8 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_1_1t_21 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_1_3t_9 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rdlfpr2_0_rdlt_27 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_1_3g_2 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_1t_35 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_5t_20 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fpfpr1_1_3g_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_5t_21 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fpfpr1_1_2t_11 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - ecdsgfpr1_1_1t_19 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_1t_36 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_1g_14 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tymsgfpr1_1_1t_23 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tymsgfpr1_1_1t_24 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_1t_38 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_0_2g_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rdlfpr1_1t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr0_0_1t_10 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr1_1_1t_100 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rdlfpr2_0_rdlt_108 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - pcfpr1_1_3t_7 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_3t_20 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - ecdsgfpr1_1_1t_4 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tmfpr1_1_3t_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_3t_21 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fpfpr1_0_1t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_3t_23 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr1_1_1t_22 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - pagfpr1_1_1t_23 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_3t_71 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_2t_18 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rdlfpr2_0_rdlt_158 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_3t_6 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_3t_24 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_3t_7 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_0_3g_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_1t_20 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rdlfpr1_1g_13 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr1_0_1t_35 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_1_2t_17 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr2_1_rdlg_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rdlfpr2_0_rdlt_4 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rdlfpr1_1g_16 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr2_0_1t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr2_0_1t_2 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rdlfpr1_1t_100 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - msgfpr1_1_1g_12 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rdlfpr2_0_rdlt_30 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_3t_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tlfpr1_0_4g_4 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_1_3t_42 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_3t_6 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tlfpr1_0_4g_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_3t_48 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_5t_17 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_5t_18 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - tymsgfpr1_1_1t_18 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_5t_19 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_1_3t_10 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - fcfpr1_0_5g_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_0_3t_12 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr2_0_03t_13 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rcfpr1_1_1t_11 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - odfpr1_1_1t_31 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rdlfpr2_0_rdlg_12 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; - rtafpr1_1_1t_45 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; -} diff --git a/examples/network/graphviz/data/traffic_lights.gv.txt b/examples/network/graphviz/data/traffic_lights.gv.txt deleted file mode 100644 index 2cc3c482..00000000 --- a/examples/network/graphviz/data/traffic_lights.gv.txt +++ /dev/null @@ -1,29 +0,0 @@ -##"I played some days with making an interface between our ConceptBase system (essentially a database system to store models) and graphviz. One example graph is attached. It is a so-called petri net for Dutch traffic lights. The example is actually taken from a book by Wil van der Aalst." Contributed by Manfred Jeusfeld. - -##Command to produce the output: "neato -Tpng thisfile > thisfile.png" - -digraph TrafficLights { -node [shape=box]; gy2; yr2; rg2; gy1; yr1; rg1; -node [shape=circle,fixedsize=true,width=0.9]; green2; yellow2; red2; safe2; safe1; green1; yellow1; red1; -gy2->yellow2; -rg2->green2; -yr2->safe1; -yr2->red2; -safe2->rg2; -green2->gy2; -yellow2->yr2; -red2->rg2; -gy1->yellow1; -rg1->green1; -yr1->safe2; -yr1->red1; -safe1->rg1; -green1->gy1; -yellow1->yr1; -red1->rg1; - -overlap=false -label="PetriNet Model TrafficLights\nExtracted from ConceptBase and layed out by Graphviz" -fontsize=12; -} - diff --git a/examples/network/graphviz/data/transparency.gv.txt b/examples/network/graphviz/data/transparency.gv.txt deleted file mode 100644 index cfb82319..00000000 --- a/examples/network/graphviz/data/transparency.gv.txt +++ /dev/null @@ -1,105 +0,0 @@ -graph G { -// graph [splines=true overlap=false] -// graph [truecolor bgcolor="#ff00005f"] - node [style=filled fillcolor="#00ff005f"] - 1 -- 30 [f=1]; - 1 -- 40 [f=14]; - 8 -- 46 [f=1]; - 8 -- 16 [f=18]; - 10 -- 25 [f=1]; - 10 -- 19 [f=5]; - 10 -- 33 [f=1]; - 12 -- 8 [f=1]; - 12 -- 36 [f=5]; - 12 -- 17 [f=16]; - 13 -- 38 [f=1]; - 13 -- 24 [f=19]; - 24 -- 49 [f=1]; - 24 -- 13 [f=1]; - 24 -- 47 [f=12]; - 24 -- 12 [f=19]; - 25 -- 27 [f=1]; - 25 -- 12 [f=1]; - 27 -- 12 [f=1]; - 27 -- 14 [f=8]; - 29 -- 10 [f=1]; - 29 -- 8 [f=17]; - 30 -- 24 [f=1]; - 30 -- 44 [f=15]; - 38 -- 29 [f=1]; - 38 -- 35 [f=15]; - 2 -- 42 [f=2]; - 2 -- 35 [f=3]; - 2 -- 11 [f=19]; - 14 -- 18 [f=2]; - 14 -- 24 [f=15]; - 14 -- 38 [f=18]; - 18 -- 49 [f=2]; - 18 -- 47 [f=20]; - 26 -- 41 [f=2]; - 26 -- 42 [f=15]; - 31 -- 39 [f=2]; - 31 -- 47 [f=17]; - 31 -- 25 [f=14]; - 37 -- 26 [f=2]; - 37 -- 16 [f=14]; - 39 -- 50 [f=2]; - 39 -- 14 [f=2]; - 39 -- 18 [f=17]; - 39 -- 47 [f=10]; - 41 -- 31 [f=2]; - 41 -- 8 [f=16]; - 42 -- 44 [f=2]; - 42 -- 29 [f=12]; - 44 -- 37 [f=2]; - 44 -- 32 [f=15]; - 3 -- 20 [f=2]; - 3 -- 28 [f=19]; - 6 -- 45 [f=2]; - 6 -- 28 [f=10]; - 9 -- 6 [f=2]; - 9 -- 16 [f=1]; - 15 -- 16 [f=2]; - 15 -- 48 [f=2]; - 16 -- 50 [f=2]; - 16 -- 32 [f=14]; - 16 -- 39 [f=8]; - 20 -- 33 [f=2]; - 33 -- 9 [f=2]; - 33 -- 46 [f=3]; - 33 -- 48 [f=17]; - 45 -- 15 [f=2]; - 4 -- 17 [f=4]; - 4 -- 15 [f=6]; - 4 -- 12 [f=16]; - 17 -- 21 [f=4]; - 19 -- 35 [f=4]; - 19 -- 15 [f=9]; - 19 -- 43 [f=4]; - 21 -- 19 [f=4]; - 21 -- 50 [f=4]; - 23 -- 36 [f=4]; - 34 -- 23 [f=4]; - 34 -- 24 [f=11]; - 35 -- 34 [f=4]; - 35 -- 16 [f=6]; - 35 -- 18 [f=16]; - 36 -- 46 [f=4]; - 5 -- 7 [f=1]; - 5 -- 36 [f=6]; - 7 -- 32 [f=1]; - 7 -- 11 [f=2]; - 7 -- 14 [f=17]; - 11 -- 40 [f=1]; - 11 -- 50 [f=1]; - 22 -- 46 [f=1]; - 28 -- 43 [f=1]; - 28 -- 8 [f=18]; - 32 -- 28 [f=1]; - 32 -- 39 [f=13]; - 32 -- 42 [f=15]; - 40 -- 22 [f=1]; - 40 -- 47 [f=1]; - 43 -- 11 [f=1]; - 43 -- 17 [f=19]; -} diff --git a/examples/network/graphviz/data/twopi2.gv.txt b/examples/network/graphviz/data/twopi2.gv.txt deleted file mode 100644 index 72b28fa7..00000000 --- a/examples/network/graphviz/data/twopi2.gv.txt +++ /dev/null @@ -1,2212 +0,0 @@ -digraph G { - ranksep=3; - ratio=auto; -"1" [ label="02f5daf56e299b8a8ecea892",shape="hexagon",style="filled",color="green" ]; -"189E" [ label="ca5af2",shape="box",style="filled",color="grey" ]; -"790E" [ label="b4dfef6",shape="box",style="filled",color="grey" ]; -"2" [ label="171192dc1f8e6ea551548a910c00",shape="hexagon",style="filled",color="green" ]; -"191E" [ label="629e42",shape="box",style="filled",color="grey" ]; -"3" [ label="6bce02baf91781a831e1b95",shape="hexagon",style="filled",color="green" ]; -"193E" [ label="1c08373",shape="box",style="filled",color="grey" ]; -"4" [ label="6236a67933a619a6a3d48",shape="hexagon",style="filled",color="green" ]; -"195E" [ label="be8f4199f",shape="box",style="filled",color="grey" ]; -"5" [ label="50962c93b4cb293f5beb59eb",shape="hexagon",style="filled",color="green" ]; -"197E" [ label="be8f4199f",shape="box",style="filled",color="grey" ]; -"6" [ label="05d4b1ed6a6135eec3abd3f2",shape="hexagon",style="filled",color="green" ]; -"199E" [ label="",shape="box",style="filled",color="grey" ]; -"7" [ label="08769f73d31c1a99be2d9363f",shape="hexagon",style="filled",color="green" ]; -"201E" [ label="629e42",shape="box",style="filled",color="grey" ]; -"8" [ label="a6a196a504c3a7657d1fa41",shape="hexagon",style="filled",color="green" ]; -"203E" [ label="cd856f",shape="box",style="filled",color="grey" ]; -"9" [ label="837ebf4bde22e1f1535cb662",shape="hexagon",style="filled",color="green" ]; -"725E" [ label="d0eb84",shape="box",style="filled",color="grey" ]; -"785E" [ label="dd2ba36",shape="box",style="filled",color="grey" ]; -"10" [ label="5f865c374cb3fe976dd376b8",shape="hexagon",style="filled",color="green" ]; -"205E" [ label="23ad1",shape="box",style="filled",color="grey" ]; -"11" [ label="8be752bc95d436a90493bec9",shape="hexagon",style="filled",color="green" ]; -"207E" [ label="ee91c97828",shape="box",style="filled",color="grey" ]; -"12" [ label="969a58db14386cb9d2f51ec",shape="hexagon",style="filled",color="green" ]; -"209E" [ label="7c7c",shape="box",style="filled",color="grey" ]; -"13" [ label="da24f74aad2ff519009d1f38c",shape="hexagon",style="filled",color="green" ]; -"211E" [ label="460aed10cc9",shape="box",style="filled",color="grey" ]; -"14" [ label="3124d3a6ed3381a6341c6",shape="hexagon",style="filled",color="green" ]; -"213E" [ label="bbe0a8f93dc1",shape="box",style="filled",color="grey" ]; -"15" [ label="71512ec7d43f958f2b6da",shape="hexagon",style="filled",color="green" ]; -"215E" [ label="3f0a2b4eb62f",shape="box",style="filled",color="grey" ]; -"16" [ label="3828a2c682419423cf",shape="hexagon",style="filled",color="green" ]; -"727E" [ label="2",shape="box",style="filled",color="grey" ]; -"784E" [ label="",shape="box",style="filled",color="grey" ]; -"17" [ label="aa868f65c34cdb64f1fad19a",shape="hexagon",style="filled",color="green" ]; -"217E" [ label="3089106e3b",shape="box",style="filled",color="grey" ]; -"787E" [ label="1aaaab063",shape="box",style="filled",color="grey" ]; -"18" [ label="dca32af03698c988b22",shape="hexagon",style="filled",color="green" ]; -"219E" [ label="eb8",shape="box",style="filled",color="grey" ]; -"19" [ label="d8f4a9e463a1e89217f",shape="hexagon",style="filled",color="green" ]; -"221E" [ label="4c6c8c",shape="box",style="filled",color="grey" ]; -"20" [ label="c96782ef56711c5d6a3f69",shape="hexagon",style="filled",color="green" ]; -"223E" [ label="6a8f5bafb1",shape="box",style="filled",color="grey" ]; -"21" [ label="4f04c39708f",shape="hexagon",style="filled",color="green" ]; -"225E" [ label="a49284e9",shape="box",style="filled",color="grey" ]; -"22" [ label="97284d4c3a5d499853f0e",shape="hexagon",style="filled",color="green" ]; -"227E" [ label="53069e384a2",shape="box",style="filled",color="grey" ]; -"792E" [ label="79b69c612",shape="box",style="filled",color="grey" ]; -"23" [ label="c4d32527b670afb370d643",shape="hexagon",style="filled",color="green" ]; -"231E" [ label="e851f5ddd920",shape="box",style="filled",color="grey" ]; -"24" [ label="5e9156098c064",shape="hexagon",style="filled",color="green" ]; -"233E" [ label="",shape="box",style="filled",color="grey" ]; -"25" [ label="3d475ea3aeca51b60212dd",shape="hexagon",style="filled",color="green" ]; -"235E" [ label="4280833ef80172",shape="box",style="filled",color="grey" ]; -"26" [ label="966d271c22e75c7538",shape="hexagon",style="filled",color="green" ]; -"237E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; -"27" [ label="b630e1af6ae1997f0e8ba750",shape="hexagon",style="filled",color="green" ]; -"239E" [ label="bb828f1a326",shape="box",style="filled",color="grey" ]; -"783E" [ label="499f6985db294c",shape="box",style="filled",color="grey" ]; -"28" [ label="ebd8ffc2ac3a90efb8af9",shape="hexagon",style="filled",color="green" ]; -"241E" [ label="1ebeec",shape="box",style="filled",color="grey" ]; -"791E" [ label="c0b727",shape="box",style="filled",color="grey" ]; -"29" [ label="69fdd1a1f4768c5efe7",shape="hexagon",style="filled",color="green" ]; -"243E" [ label="35b8742610",shape="box",style="filled",color="grey" ]; -"30" [ label="d93a80739fc1edb41a11b7294",shape="hexagon",style="filled",color="green" ]; -"245E" [ label="e03b8bc0435a",shape="box",style="filled",color="grey" ]; -"31" [ label="bf65cfddeb00ff847feae0c",shape="hexagon",style="filled",color="green" ]; -"247E" [ label="8df",shape="box",style="filled",color="grey" ]; -"32" [ label="916c686a1e82dba72524a",shape="hexagon",style="filled",color="green" ]; -"249E" [ label="a849f9d352e",shape="box",style="filled",color="grey" ]; -"33" [ label="f496bcf0889b301d77819c",shape="hexagon",style="filled",color="green" ]; -"251E" [ label="f29dfb9",shape="box",style="filled",color="grey" ]; -"34" [ label="76889f7d35e",shape="hexagon",style="filled",color="green" ]; -"253E" [ label="e7ef998",shape="box",style="filled",color="grey" ]; -"35" [ label="668d636002",shape="hexagon",style="filled",color="green" ]; -"255E" [ label="4379b5ed",shape="box",style="filled",color="grey" ]; -"36" [ label="e1e4c23db39d8bd633c3a",shape="hexagon",style="filled",color="green" ]; -"257E" [ label="1ed5d7f63b8c6",shape="box",style="filled",color="grey" ]; -"37" [ label="842bc5775657c1e0d67",shape="hexagon",style="filled",color="green" ]; -"259E" [ label="a387210a27b",shape="box",style="filled",color="grey" ]; -"38" [ label="e4e2f4e6d",shape="hexagon",style="filled",color="green" ]; -"261E" [ label="1f4f0fdf",shape="box",style="filled",color="grey" ]; -"39" [ label="04390dec6f1779353c07f5",shape="hexagon",style="filled",color="green" ]; -"263E" [ label="bac77c3f414a",shape="box",style="filled",color="grey" ]; -"40" [ label="69f2611acc42c36ed7cc",shape="hexagon",style="filled",color="green" ]; -"265E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; -"41" [ label="1562abef0d8241",shape="hexagon",style="filled",color="green" ]; -"267E" [ label="6a8f5bafb1",shape="box",style="filled",color="grey" ]; -"42" [ label="e49aaa5cc4e44355d6a0",shape="hexagon",style="filled",color="green" ]; -"269E" [ label="cc3f63d",shape="box",style="filled",color="grey" ]; -"43" [ label="e8ebe1bf5f421c1223",shape="hexagon",style="filled",color="green" ]; -"271E" [ label="96325ea",shape="box",style="filled",color="grey" ]; -"44" [ label="2759e82e30d6d",shape="hexagon",style="filled",color="green" ]; -"273E" [ label="ca5af2",shape="box",style="filled",color="grey" ]; -"45" [ label="23c1ec53358d237c1",shape="hexagon",style="filled",color="green" ]; -"275E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; -"46" [ label="5838586c293d455",shape="hexagon",style="filled",color="green" ]; -"277E" [ label="83c397b8bf7f",shape="box",style="filled",color="grey" ]; -"47" [ label="f841118350a27b7ea29a9c9d",shape="hexagon",style="filled",color="green" ]; -"279E" [ label="69f4ecb77d",shape="box",style="filled",color="grey" ]; -"48" [ label="658d208447d8ec5d6de8",shape="hexagon",style="filled",color="green" ]; -"281E" [ label="f7b22b9640",shape="box",style="filled",color="grey" ]; -"49" [ label="11180ae7706510211bc4",shape="hexagon",style="filled",color="green" ]; -"283E" [ label="052bb6e3",shape="box",style="filled",color="grey" ]; -"50" [ label="5807acd8d58e006f43",shape="hexagon",style="filled",color="green" ]; -"285E" [ label="",shape="box",style="filled",color="grey" ]; -"51" [ label="fe4e848cb5291ee59a2",shape="hexagon",style="filled",color="green" ]; -"287E" [ label="e3aefac763",shape="box",style="filled",color="grey" ]; -"52" [ label="c4f31ea3844e12da27ad47c6",shape="hexagon",style="filled",color="green" ]; -"289E" [ label="fb16636aae",shape="box",style="filled",color="grey" ]; -"53" [ label="00cbeb87c182ca0785f",shape="hexagon",style="filled",color="green" ]; -"291E" [ label="3089106e3b",shape="box",style="filled",color="grey" ]; -"54" [ label="11f088bfd8",shape="hexagon",style="filled",color="green" ]; -"293E" [ label="6a80cbe",shape="box",style="filled",color="grey" ]; -"55" [ label="64a9ec24428099ad8ed82ba6",shape="hexagon",style="filled",color="green" ]; -"745E" [ label="68d8993e61d8c82cd29e8d0182b0",shape="box",style="filled",color="grey" ]; -"56" [ label="3c2a62e0e5e9f7",shape="hexagon",style="filled",color="green" ]; -"295E" [ label="ae32701",shape="box",style="filled",color="grey" ]; -"57" [ label="dd84fe6a65cfac7bca03ebd",shape="hexagon",style="filled",color="green" ]; -"297E" [ label="",shape="box",style="filled",color="grey" ]; -"58" [ label="b06bbfa920aa95dd",shape="hexagon",style="filled",color="green" ]; -"299E" [ label="07",shape="box",style="filled",color="grey" ]; -"59" [ label="6b5aaa4bdf44b2c898854",shape="hexagon",style="filled",color="green" ]; -"301E" [ label="4c6c8c",shape="box",style="filled",color="grey" ]; -"789E" [ label="3a0ff0",shape="box",style="filled",color="grey" ]; -"60" [ label="855d26296eda4eb7",shape="hexagon",style="filled",color="green" ]; -"303E" [ label="53069e384a2",shape="box",style="filled",color="grey" ]; -"61" [ label="e82f47b8d4949ba4af69b38cbc19",shape="hexagon",style="filled",color="green" ]; -"305E" [ label="b62cd1d0a0",shape="box",style="filled",color="grey" ]; -"62" [ label="86569bffb49adf6b3d0ebac",shape="hexagon",style="filled",color="green" ]; -"307E" [ label="660ffeb76fc59",shape="box",style="filled",color="grey" ]; -"63" [ label="a96e47ff37983425a3e452095",shape="hexagon",style="filled",color="green" ]; -"309E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; -"64" [ label="71a48d11b2e7e56b1df128bd",shape="hexagon",style="filled",color="green" ]; -"311E" [ label="be8f4199f",shape="box",style="filled",color="grey" ]; -"65" [ label="a0befe6dd1ca7b165786835",shape="hexagon",style="filled",color="green" ]; -"313E" [ label="3cfae",shape="box",style="filled",color="grey" ]; -"66" [ label="f33ec11db496f7bfcb024f",shape="hexagon",style="filled",color="green" ]; -"315E" [ label="71e6b",shape="box",style="filled",color="grey" ]; -"67" [ label="fe6be3206549f5b5564acde84783",shape="hexagon",style="filled",color="green" ]; -"317E" [ label="",shape="box",style="filled",color="grey" ]; -"68" [ label="e4dba079d5fcb1f165920a3bf",shape="hexagon",style="filled",color="green" ]; -"319E" [ label="",shape="box",style="filled",color="grey" ]; -"69" [ label="35dfbee3123dc389cba0b15",shape="hexagon",style="filled",color="green" ]; -"746E" [ label="4c865eec228e41e7f4e5fc68a9a6",shape="box",style="filled",color="grey" ]; -"70" [ label="16c508ab98483d430bbe",shape="hexagon",style="filled",color="green" ]; -"321E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; -"71" [ label="9c9e2e0f2da8758e436c",shape="hexagon",style="filled",color="green" ]; -"327E" [ label="cd0d985a366cad7e",shape="box",style="filled",color="grey" ]; -"72" [ label="fb039d7a2a9fe73b5f468eba9",shape="hexagon",style="filled",color="green" ]; -"329E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; -"73" [ label="2ef949c4a39b",shape="hexagon",style="filled",color="green" ]; -"331E" [ label="617809d979f",shape="box",style="filled",color="grey" ]; -"74" [ label="a9497e0757b0969bde707ed5",shape="hexagon",style="filled",color="green" ]; -"333E" [ label="541ab86a2e",shape="box",style="filled",color="grey" ]; -"75" [ label="230cc6bbc66b24eae94fa03d",shape="hexagon",style="filled",color="green" ]; -"335E" [ label="",shape="box",style="filled",color="grey" ]; -"76" [ label="1d163eac141def176461c",shape="hexagon",style="filled",color="green" ]; -"337E" [ label="0acc5bb8ca4",shape="box",style="filled",color="grey" ]; -"77" [ label="32979f8cf86",shape="hexagon",style="filled",color="green" ]; -"339E" [ label="a7e89580",shape="box",style="filled",color="grey" ]; -"78" [ label="37d80ae421dba4a70730338860",shape="hexagon",style="filled",color="green" ]; -"341E" [ label="",shape="box",style="filled",color="grey" ]; -"79" [ label="fbba7215e7c13173a60206",shape="hexagon",style="filled",color="green" ]; -"343E" [ label="617809d979f",shape="box",style="filled",color="grey" ]; -"80" [ label="2dd8cc4d693415f93c0f8fc",shape="hexagon",style="filled",color="green" ]; -"345E" [ label="94da691e20e3",shape="box",style="filled",color="grey" ]; -"81" [ label="00880e6f50c765ebc1f85d3e9",shape="hexagon",style="filled",color="green" ]; -"347E" [ label="e7ef998",shape="box",style="filled",color="grey" ]; -"82" [ label="ef13d45b1277ac9a0444adb",shape="hexagon",style="filled",color="green" ]; -"349E" [ label="a7fe7",shape="box",style="filled",color="grey" ]; -"83" [ label="2573e1bf51f1b307f4640",shape="hexagon",style="filled",color="green" ]; -"351E" [ label="84e4ede82074",shape="box",style="filled",color="grey" ]; -"84" [ label="162d8039483d8",shape="hexagon",style="filled",color="green" ]; -"353E" [ label="a8e9",shape="box",style="filled",color="grey" ]; -"85" [ label="f490de272a7f6e4af346d40",shape="hexagon",style="filled",color="green" ]; -"355E" [ label="460aed10cc9",shape="box",style="filled",color="grey" ]; -"788E" [ label="391256c872",shape="box",style="filled",color="grey" ]; -"86" [ label="678bf739c344b9ad41da1",shape="hexagon",style="filled",color="green" ]; -"357E" [ label="396b16a892fe",shape="box",style="filled",color="grey" ]; -"87" [ label="876d120b38b0e88817",shape="hexagon",style="filled",color="green" ]; -"359E" [ label="e5",shape="box",style="filled",color="grey" ]; -"88" [ label="503737b64d432c60d6ac557e0e6",shape="hexagon",style="filled",color="green" ]; -"361E" [ label="9937ccba1469",shape="box",style="filled",color="grey" ]; -"89" [ label="b36e0be6f67fc25286127456",shape="hexagon",style="filled",color="green" ]; -"363E" [ label="87a7e69a72412",shape="box",style="filled",color="grey" ]; -"90" [ label="4cc20a0b7651e486",shape="hexagon",style="filled",color="green" ]; -"365E" [ label="e079d2c",shape="box",style="filled",color="grey" ]; -"91" [ label="08dade990b2282",shape="hexagon",style="filled",color="green" ]; -"367E" [ label="45827dbdd8",shape="box",style="filled",color="grey" ]; -"92" [ label="f8128d574c356631b8a9",shape="hexagon",style="filled",color="green" ]; -"369E" [ label="",shape="box",style="filled",color="grey" ]; -"93" [ label="88a4f0337c2189c3fc7b31",shape="hexagon",style="filled",color="green" ]; -"729E" [ label="da0d7bbcf30",shape="box",style="filled",color="grey" ]; -"94" [ label="1b13908a9f0763c0ae54af9062080",shape="hexagon",style="filled",color="green" ]; -"371E" [ label="8b06a67a",shape="box",style="filled",color="grey" ]; -"95" [ label="e2a5d11499b7e",shape="hexagon",style="filled",color="green" ]; -"373E" [ label="66abc181ac4",shape="box",style="filled",color="grey" ]; -"96" [ label="90cc275011c2013c61eb11",shape="hexagon",style="filled",color="green" ]; -"375E" [ label="",shape="box",style="filled",color="grey" ]; -"97" [ label="1e003bfe8fc840df0163f4c",shape="hexagon",style="filled",color="green" ]; -"747E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; -"98" [ label="1927c743a0d440a5a0",shape="hexagon",style="filled",color="green" ]; -"377E" [ label="b12441ecff15fa12c",shape="box",style="filled",color="grey" ]; -"99" [ label="155d892827c33ed3cae3",shape="hexagon",style="filled",color="green" ]; -"379E" [ label="71e6b",shape="box",style="filled",color="grey" ]; -"100" [ label="9f24ba80192c339a64c0",shape="hexagon",style="filled",color="green" ]; -"381E" [ label="",shape="box",style="filled",color="grey" ]; -"101" [ label="3e814305b42beb41b8c706",shape="hexagon",style="filled",color="green" ]; -"383E" [ label="1c08373",shape="box",style="filled",color="grey" ]; -"102" [ label="eccfe5ff0af70fe9fbec8b2360f90",shape="hexagon",style="filled",color="green" ]; -"385E" [ label="be8f4199f",shape="box",style="filled",color="grey" ]; -"103" [ label="8fa622d9f842c5572a545ed72982",shape="hexagon",style="filled",color="green" ]; -"387E" [ label="4dccb",shape="box",style="filled",color="grey" ]; -"104" [ label="ad9142a65f5eab78b4ca5e",shape="hexagon",style="filled",color="green" ]; -"389E" [ label="f36cce089",shape="box",style="filled",color="grey" ]; -"105" [ label="20f234fdcd0e1fc50261ce8",shape="hexagon",style="filled",color="green" ]; -"391E" [ label="67219ef689f0146b544",shape="box",style="filled",color="grey" ]; -"106" [ label="e06cc38155ff6781cf944d745",shape="hexagon",style="filled",color="green" ]; -"393E" [ label="87a7e69a72412",shape="box",style="filled",color="grey" ]; -"107" [ label="cfdf1932665dcb4cd3c",shape="hexagon",style="filled",color="green" ]; -"395E" [ label="964b86fc1bba0e",shape="box",style="filled",color="grey" ]; -"108" [ label="6d4a4a5a5af91b895272c30",shape="hexagon",style="filled",color="green" ]; -"397E" [ label="b5e86c73d1198f",shape="box",style="filled",color="grey" ]; -"109" [ label="e0ad365c2fb444358201",shape="hexagon",style="filled",color="green" ]; -"399E" [ label="bb5e89c8963",shape="box",style="filled",color="grey" ]; -"110" [ label="b07bbdc8cca5985d4c4",shape="hexagon",style="filled",color="green" ]; -"401E" [ label="50023f6f88",shape="box",style="filled",color="grey" ]; -"111" [ label="df5dba74c75b228de48c",shape="hexagon",style="filled",color="green" ]; -"403E" [ label="7e493ee44b28",shape="box",style="filled",color="grey" ]; -"112" [ label="0b8694c9ef9b27b9c3d8",shape="hexagon",style="filled",color="green" ]; -"405E" [ label="2342b759c03",shape="box",style="filled",color="grey" ]; -"113" [ label="81e20155999fa64e0ae6fd",shape="hexagon",style="filled",color="green" ]; -"407E" [ label="4280833ef80172",shape="box",style="filled",color="grey" ]; -"114" [ label="3ef07ae75d29a707",shape="hexagon",style="filled",color="green" ]; -"409E" [ label="4280833ef80172",shape="box",style="filled",color="grey" ]; -"115" [ label="4a36db80f1ab1e97",shape="hexagon",style="filled",color="green" ]; -"411E" [ label="460aed10cc9",shape="box",style="filled",color="grey" ]; -"116" [ label="16da5f1301b36df4df0f",shape="hexagon",style="filled",color="green" ]; -"413E" [ label="460aed10cc9",shape="box",style="filled",color="grey" ]; -"117" [ label="6b3f3fa236bb90592d23a",shape="hexagon",style="filled",color="green" ]; -"415E" [ label="83c397b8bf7f",shape="box",style="filled",color="grey" ]; -"118" [ label="f2a57e4d4f0cec516891e3",shape="hexagon",style="filled",color="green" ]; -"417E" [ label="bd2484",shape="box",style="filled",color="grey" ]; -"119" [ label="deb3089920548bf1ecb23f0d",shape="hexagon",style="filled",color="green" ]; -"419E" [ label="87a7e69a72412",shape="box",style="filled",color="grey" ]; -"120" [ label="bf01c8a262",shape="hexagon",style="filled",color="green" ]; -"421E" [ label="01",shape="box",style="filled",color="grey" ]; -"121" [ label="23dc3a52fed9c119610b5e8",shape="hexagon",style="filled",color="green" ]; -"423E" [ label="71e6b",shape="box",style="filled",color="grey" ]; -"122" [ label="aff7fc220edc93572bb2",shape="hexagon",style="filled",color="green" ]; -"748E" [ label="68d8993e61d8c82cd29e8d0182b0",shape="box",style="filled",color="grey" ]; -"123" [ label="78cc16f965adc5f712ea2372c6",shape="hexagon",style="filled",color="green" ]; -"425E" [ label="23ad1",shape="box",style="filled",color="grey" ]; -"124" [ label="5be631dff7b97697be7dc0a2f07f2",shape="hexagon",style="filled",color="green" ]; -"427E" [ label="",shape="box",style="filled",color="grey" ]; -"786E" [ label="421",shape="box",style="filled",color="grey" ]; -"125" [ label="48398d080dfcccced48da1980",shape="hexagon",style="filled",color="green" ]; -"431E" [ label="866808df",shape="box",style="filled",color="grey" ]; -"126" [ label="03716a2c341e5edaa31",shape="hexagon",style="filled",color="green" ]; -"433E" [ label="21407f8a6d7",shape="box",style="filled",color="grey" ]; -"127" [ label="ddfeabe456a9de5f5784",shape="hexagon",style="filled",color="green" ]; -"435E" [ label="aac615ae78",shape="box",style="filled",color="grey" ]; -"128" [ label="d550a7f392c787661aadd48",shape="hexagon",style="filled",color="green" ]; -"437E" [ label="e3aefac763",shape="box",style="filled",color="grey" ]; -"129" [ label="4c82921f4ad3f07066540",shape="hexagon",style="filled",color="green" ]; -"439E" [ label="a7fe7",shape="box",style="filled",color="grey" ]; -"130" [ label="0bc7f8f513e0e74b270",shape="hexagon",style="filled",color="green" ]; -"441E" [ label="a849f9d352e",shape="box",style="filled",color="grey" ]; -"131" [ label="3b1563a23eb9",shape="hexagon",style="filled",color="green" ]; -"443E" [ label="a8e9",shape="box",style="filled",color="grey" ]; -"132" [ label="be233fafa38d931d894",shape="hexagon",style="filled",color="green" ]; -"445E" [ label="a849f9d352e",shape="box",style="filled",color="grey" ]; -"133" [ label="f906dc5244ee6a371f8",shape="hexagon",style="filled",color="green" ]; -"749E" [ label="4c865eec228e41e7f4e5fc68a9a6",shape="box",style="filled",color="grey" ]; -"134" [ label="e7a887d88c2318beba51",shape="hexagon",style="filled",color="green" ]; -"447E" [ label="9d8988c0945d6",shape="box",style="filled",color="grey" ]; -"135" [ label="be6b73bd46a7a5183e8c91a",shape="hexagon",style="filled",color="green" ]; -"449E" [ label="ee91c97828",shape="box",style="filled",color="grey" ]; -"769E" [ label="444189d179b5db71fe",shape="box",style="filled",color="grey" ]; -"770E" [ label="1e1fbbe14ac24e0518",shape="box",style="filled",color="grey" ]; -"136" [ label="644f112bb0aa452ee7040a",shape="hexagon",style="filled",color="green" ]; -"451E" [ label="52f247fc3b",shape="box",style="filled",color="grey" ]; -"137" [ label="010957669f3770aac",shape="hexagon",style="filled",color="green" ]; -"453E" [ label="78",shape="box",style="filled",color="grey" ]; -"138" [ label="0a185946ee443342b07d8e1",shape="hexagon",style="filled",color="green" ]; -"455E" [ label="87a7e69a72412",shape="box",style="filled",color="grey" ]; -"139" [ label="f66fe4df3d189e69ce10c9c",shape="hexagon",style="filled",color="green" ]; -"457E" [ label="21407f8a6d7",shape="box",style="filled",color="grey" ]; -"140" [ label="247e407f45b353f8",shape="hexagon",style="filled",color="green" ]; -"459E" [ label="",shape="box",style="filled",color="grey" ]; -"141" [ label="84907547f36d0ff7",shape="hexagon",style="filled",color="green" ]; -"461E" [ label="e920b915087",shape="box",style="filled",color="grey" ]; -"142" [ label="805004328dad9d315d",shape="hexagon",style="filled",color="green" ]; -"463E" [ label="4280833ef80172",shape="box",style="filled",color="grey" ]; -"143" [ label="4f0cbd3fbf0cb1e8c",shape="hexagon",style="filled",color="green" ]; -"465E" [ label="403126",shape="box",style="filled",color="grey" ]; -"144" [ label="4869e993f2bb10f",shape="hexagon",style="filled",color="green" ]; -"467E" [ label="ff",shape="box",style="filled",color="grey" ]; -"145" [ label="665b76844ff78fc2cf66ca2",shape="hexagon",style="filled",color="green" ]; -"469E" [ label="af0268dddd",shape="box",style="filled",color="grey" ]; -"146" [ label="3f16509139c7dad5163b91799",shape="hexagon",style="filled",color="green" ]; -"471E" [ label="3089106e3b",shape="box",style="filled",color="grey" ]; -"147" [ label="01db23a60422ba93a68611cc0",shape="hexagon",style="filled",color="green" ]; -"473E" [ label="",shape="box",style="filled",color="grey" ]; -"148" [ label="46125fcc583c0f494a3a1d3",shape="hexagon",style="filled",color="green" ]; -"475E" [ label="db6c4213a717bc",shape="box",style="filled",color="grey" ]; -"149" [ label="731857fe189fb398e80a0594",shape="hexagon",style="filled",color="green" ]; -"477E" [ label="3089106e3b",shape="box",style="filled",color="grey" ]; -"150" [ label="6fb7a84e370ef70feac5cb",shape="hexagon",style="filled",color="green" ]; -"479E" [ label="396b16a892fe",shape="box",style="filled",color="grey" ]; -"151" [ label="e343cea291b79a2ed4e",shape="hexagon",style="filled",color="green" ]; -"481E" [ label="88d8b220746882d",shape="box",style="filled",color="grey" ]; -"152" [ label="5f2592b20f13356b7fc8b42",shape="hexagon",style="filled",color="green" ]; -"483E" [ label="",shape="box",style="filled",color="grey" ]; -"153" [ label="275a0407e33e9b8aa9cdd051",shape="hexagon",style="filled",color="green" ]; -"731E" [ label="",shape="box",style="filled",color="grey" ]; -"154" [ label="011d119375cf494ca2fa8d59",shape="hexagon",style="filled",color="green" ]; -"750E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; -"155" [ label="173fd00917644f0f1f3e3",shape="hexagon",style="filled",color="green" ]; -"485E" [ label="0acc5bb8ca4",shape="box",style="filled",color="grey" ]; -"156" [ label="c72df69b40156a3254",shape="hexagon",style="filled",color="green" ]; -"487E" [ label="fff03efcd",shape="box",style="filled",color="grey" ]; -"157" [ label="6c632ad9c42228bb337",shape="hexagon",style="filled",color="green" ]; -"489E" [ label="eb8",shape="box",style="filled",color="grey" ]; -"158" [ label="bbb13dc62adf2de2a42b6",shape="hexagon",style="filled",color="green" ]; -"491E" [ label="69ce90c9b2",shape="box",style="filled",color="grey" ]; -"159" [ label="6282bc21f6",shape="hexagon",style="filled",color="green" ]; -"495E" [ label="de34214b4c258c9333ec3",shape="box",style="filled",color="grey" ]; -"160" [ label="71cf45dd4e91bcca945137b40e",shape="hexagon",style="filled",color="green" ]; -"499E" [ label="65fd8495",shape="box",style="filled",color="grey" ]; -"161" [ label="a3b6df27179b175c88fa4c9cf9f",shape="hexagon",style="filled",color="green" ]; -"501E" [ label="6577",shape="box",style="filled",color="grey" ]; -"162" [ label="284f14a259991806654e74",shape="hexagon",style="filled",color="green" ]; -"503E" [ label="4280833ef80172",shape="box",style="filled",color="grey" ]; -"163" [ label="a7c99ccf6ddf6f5ebbe",shape="hexagon",style="filled",color="green" ]; -"505E" [ label="c4fd8",shape="box",style="filled",color="grey" ]; -"164" [ label="c32d2697e8",shape="hexagon",style="filled",color="green" ]; -"507E" [ label="52f247fc3b",shape="box",style="filled",color="grey" ]; -"165" [ label="d12bd75c24b110ef90cdd35d3",shape="hexagon",style="filled",color="green" ]; -"509E" [ label="0668",shape="box",style="filled",color="grey" ]; -"166" [ label="1c07453d584f3d14b1876fdb",shape="hexagon",style="filled",color="green" ]; -"511E" [ label="460aed10cc9",shape="box",style="filled",color="grey" ]; -"167" [ label="f713a8b311ffa05ce3683ad10",shape="hexagon",style="filled",color="green" ]; -"513E" [ label="30d6138b63eb",shape="box",style="filled",color="grey" ]; -"168" [ label="3cdc90c57243373efaba65a",shape="hexagon",style="filled",color="green" ]; -"515E" [ label="fa2afbd869",shape="box",style="filled",color="grey" ]; -"169" [ label="e3bdbca0e2256fffa8a59018",shape="hexagon",style="filled",color="green" ]; -"517E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; -"170" [ label="75ba8d840070942eb4e737849",shape="hexagon",style="filled",color="green" ]; -"519E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; -"171" [ label="fbdc3ca37406f66635c8b226e",shape="hexagon",style="filled",color="green" ]; -"521E" [ label="8cbcf5cb5",shape="box",style="filled",color="grey" ]; -"172" [ label="40b49a5a9bb256c7a3286e56",shape="hexagon",style="filled",color="green" ]; -"523E" [ label="f72564578be",shape="box",style="filled",color="grey" ]; -"173" [ label="3b2f08d52e4bca3f9ca7bbbd6",shape="hexagon",style="filled",color="green" ]; -"525E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; -"174" [ label="4a38abc630c82b0c48dfbf5271",shape="hexagon",style="filled",color="green" ]; -"527E" [ label="f0bd1521",shape="box",style="filled",color="grey" ]; -"175" [ label="2d7b7fb6c9ad6821752651f7",shape="hexagon",style="filled",color="green" ]; -"529E" [ label="47b2da3d",shape="box",style="filled",color="grey" ]; -"176" [ label="910b00285f11bb90d0a15641",shape="hexagon",style="filled",color="green" ]; -"531E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; -"177" [ label="24431c3eb075102f07cc2c1be",shape="hexagon",style="filled",color="green" ]; -"533E" [ label="",shape="box",style="filled",color="grey" ]; -"178" [ label="07f8a9e55a16beddb3c9153b0",shape="hexagon",style="filled",color="green" ]; -"535E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; -"179" [ label="c1c30f30d40c4f1f84924622f",shape="hexagon",style="filled",color="green" ]; -"537E" [ label="c5d5be3942",shape="box",style="filled",color="grey" ]; -"180" [ label="86276bb1e23f2c7ffcbe82a0",shape="hexagon",style="filled",color="green" ]; -"539E" [ label="0f940646",shape="box",style="filled",color="grey" ]; -"181" [ label="f78e145a127014eb43345a0c",shape="hexagon",style="filled",color="green" ]; -"541E" [ label="d370c12dbc",shape="box",style="filled",color="grey" ]; -"182" [ label="a27037332d9fa5c43bcfe94c0",shape="hexagon",style="filled",color="green" ]; -"543E" [ label="80874aa8",shape="box",style="filled",color="grey" ]; -"183" [ label="c29ce10bb8d19b498355aa04",shape="hexagon",style="filled",color="green" ]; -"545E" [ label="1c08373",shape="box",style="filled",color="grey" ]; -"184" [ label="4f8c642b53c349c687534bda35db",shape="hexagon",style="filled",color="green" ]; -"547E" [ label="46969c4",shape="box",style="filled",color="grey" ]; -"185" [ label="30cc206b1878485",shape="hexagon",style="filled",color="green" ]; -"549E" [ label="23ad1",shape="box",style="filled",color="grey" ]; -"186" [ label="5d69639a5e3bdd3d",shape="hexagon",style="filled",color="green" ]; -"551E" [ label="6139fa6adc88d",shape="box",style="filled",color="grey" ]; -"187" [ label="b656f0ed2202b8e46eb",shape="hexagon",style="filled",color="green" ]; -"553E" [ label="f6e6236b48bc3",shape="box",style="filled",color="grey" ]; -"188" [ label="3b566eaa70ed401479d43a9",shape="hexagon",style="filled",color="green" ]; -"555E" [ label="4c6c8c",shape="box",style="filled",color="grey" ]; -"189" [ label="d6125ef42bd9958",shape="hexagon",style="filled",color="green" ]; -"557E" [ label="4c6c8c",shape="box",style="filled",color="grey" ]; -"190" [ label="dd12f26f8d9bb55",shape="hexagon",style="filled",color="green" ]; -"559E" [ label="83c397b8bf7f",shape="box",style="filled",color="grey" ]; -"191" [ label="ea890ccca2f7c2107351",shape="hexagon",style="filled",color="green" ]; -"561E" [ label="eb8",shape="box",style="filled",color="grey" ]; -"192" [ label="84e4f1c582427a98d7b",shape="hexagon",style="filled",color="green" ]; -"563E" [ label="eb8",shape="box",style="filled",color="grey" ]; -"193" [ label="d378760b814eaecb6efe636e0efc4",shape="hexagon",style="filled",color="green" ]; -"565E" [ label="81bcc35f82891",shape="box",style="filled",color="grey" ]; -"194" [ label="f722890f70a32dce3baff371a",shape="hexagon",style="filled",color="green" ]; -"567E" [ label="84e4ede82074",shape="box",style="filled",color="grey" ]; -"195" [ label="666f11bb45c3a8dcf26e1ed79",shape="hexagon",style="filled",color="green" ]; -"569E" [ label="c90f755c8b6612d",shape="box",style="filled",color="grey" ]; -"196" [ label="91ecbe29a71f00ed5a3",shape="hexagon",style="filled",color="green" ]; -"571E" [ label="0a963fef9",shape="box",style="filled",color="grey" ]; -"197" [ label="30c3f3bf8463d3843dc57d8e98",shape="hexagon",style="filled",color="green" ]; -"573E" [ label="3089106e3b",shape="box",style="filled",color="grey" ]; -"198" [ label="8ea965ab6ee8dedb6c3333e9",shape="hexagon",style="filled",color="green" ]; -"575E" [ label="84e4ede82074",shape="box",style="filled",color="grey" ]; -"199" [ label="3eecb304bab2136a76deda",shape="hexagon",style="filled",color="green" ]; -"577E" [ label="8df",shape="box",style="filled",color="grey" ]; -"200" [ label="d886e4b76537a99bc71b8a9331c94",shape="hexagon",style="filled",color="green" ]; -"579E" [ label="1172dca23",shape="box",style="filled",color="grey" ]; -"201" [ label="dcc5d5e9d6c4e",shape="hexagon",style="filled",color="green" ]; -"581E" [ label="a8e9",shape="box",style="filled",color="grey" ]; -"202" [ label="8292af691429f8d9ed481ff71ffd",shape="hexagon",style="filled",color="green" ]; -"583E" [ label="212af4",shape="box",style="filled",color="grey" ]; -"203" [ label="12fcb26b3de00ef98719c2ca",shape="hexagon",style="filled",color="green" ]; -"585E" [ label="",shape="box",style="filled",color="grey" ]; -"204" [ label="a141a557a60912051f3c135",shape="hexagon",style="filled",color="green" ]; -"587E" [ label="",shape="box",style="filled",color="grey" ]; -"205" [ label="64eeeddfc34489ff396",shape="hexagon",style="filled",color="green" ]; -"751E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; -"206" [ label="f5d636e14a6cd716362158d",shape="hexagon",style="filled",color="green" ]; -"589E" [ label="32c958c9997",shape="box",style="filled",color="grey" ]; -"207" [ label="84e4978afc069d5a1aecbf2b",shape="hexagon",style="filled",color="green" ]; -"593E" [ label="56caa96d171a9ac2da7c",shape="box",style="filled",color="grey" ]; -"208" [ label="52a6c2063bccd83110c32",shape="hexagon",style="filled",color="green" ]; -"597E" [ label="",shape="box",style="filled",color="grey" ]; -"209" [ label="46f754ea06f070dbc023e571a876",shape="hexagon",style="filled",color="green" ]; -"599E" [ label="ffccaa9e3",shape="box",style="filled",color="grey" ]; -"210" [ label="c10cb9baf4dcb43e24",shape="hexagon",style="filled",color="green" ]; -"601E" [ label="ac6e99186",shape="box",style="filled",color="grey" ]; -"211" [ label="3dafe1619016463f521f",shape="hexagon",style="filled",color="green" ]; -"603E" [ label="b9",shape="box",style="filled",color="grey" ]; -"212" [ label="0f5db6ce12751ddcc64e",shape="hexagon",style="filled",color="green" ]; -"605E" [ label="bb828f1a326",shape="box",style="filled",color="grey" ]; -"213" [ label="34c8c8dc0f6e41c7e7b2",shape="hexagon",style="filled",color="green" ]; -"607E" [ label="2832ed5cea6",shape="box",style="filled",color="grey" ]; -"214" [ label="0a49c95f107c0aa57c9b5748",shape="hexagon",style="filled",color="green" ]; -"609E" [ label="",shape="box",style="filled",color="grey" ]; -"215" [ label="3b4fdad8e0429d112",shape="hexagon",style="filled",color="green" ]; -"611E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; -"216" [ label="17dafa5ebaafd48440e3",shape="hexagon",style="filled",color="green" ]; -"613E" [ label="b5f038f79a3",shape="box",style="filled",color="grey" ]; -"217" [ label="f4c69e5e212f89348122e8",shape="hexagon",style="filled",color="green" ]; -"615E" [ label="396b16a892fe",shape="box",style="filled",color="grey" ]; -"218" [ label="4f2e020854dfacce46a12",shape="hexagon",style="filled",color="green" ]; -"617E" [ label="e079d2c",shape="box",style="filled",color="grey" ]; -"219" [ label="6448451ac2ceade90715378b",shape="hexagon",style="filled",color="green" ]; -"619E" [ label="",shape="box",style="filled",color="grey" ]; -"220" [ label="7d7b14baa649330",shape="hexagon",style="filled",color="green" ]; -"621E" [ label="77d145b32328880440c7a",shape="box",style="filled",color="grey" ]; -"221" [ label="d7c27cc6f7b02a31eb64d",shape="hexagon",style="filled",color="green" ]; -"623E" [ label="87a7e69a72412",shape="box",style="filled",color="grey" ]; -"222" [ label="8f5a69ece1",shape="hexagon",style="filled",color="green" ]; -"752E" [ label="eb9cf6456613d4cd06f7c0894bd6",shape="box",style="filled",color="grey" ]; -"223" [ label="eccf7c722ddf",shape="hexagon",style="filled",color="green" ]; -"625E" [ label="df61d5f5fc",shape="box",style="filled",color="grey" ]; -"224" [ label="86633c26be93ada8b",shape="hexagon",style="filled",color="green" ]; -"627E" [ label="08500a6044",shape="box",style="filled",color="grey" ]; -"225" [ label="3f9ddf1ffbc0d38b",shape="hexagon",style="filled",color="green" ]; -"629E" [ label="07",shape="box",style="filled",color="grey" ]; -"226" [ label="e33792703",shape="hexagon",style="filled",color="green" ]; -"631E" [ label="6a8f5bafb1",shape="box",style="filled",color="grey" ]; -"227" [ label="293a225dc56dd1e0564e6bb",shape="hexagon",style="filled",color="green" ]; -"633E" [ label="e3aefac763",shape="box",style="filled",color="grey" ]; -"228" [ label="57c77c341f94afddef07e6",shape="hexagon",style="filled",color="green" ]; -"635E" [ label="5e80f85274",shape="box",style="filled",color="grey" ]; -"229" [ label="3bbfc7bfdbbb1ba1bfad7517",shape="hexagon",style="filled",color="green" ]; -"637E" [ label="",shape="box",style="filled",color="grey" ]; -"230" [ label="a7167d5eb5408b3839903",shape="hexagon",style="filled",color="green" ]; -"639E" [ label="8c8b5bde6",shape="box",style="filled",color="grey" ]; -"231" [ label="34d7bb6af4fcd8d630de72500c8",shape="hexagon",style="filled",color="green" ]; -"641E" [ label="32fe7eee5283",shape="box",style="filled",color="grey" ]; -"232" [ label="8e69341faa4489",shape="hexagon",style="filled",color="green" ]; -"643E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; -"233" [ label="459236f07c73814faf5",shape="hexagon",style="filled",color="green" ]; -"645E" [ label="18083a711d",shape="box",style="filled",color="grey" ]; -"234" [ label="c71aa521578164debd0c5",shape="hexagon",style="filled",color="green" ]; -"647E" [ label="78",shape="box",style="filled",color="grey" ]; -"235" [ label="a5520019b8a73bc141b5fd416a",shape="hexagon",style="filled",color="green" ]; -"649E" [ label="3219b6b71443",shape="box",style="filled",color="grey" ]; -"236" [ label="6c89dc59ee7aaebbbd6bb64",shape="hexagon",style="filled",color="green" ]; -"651E" [ label="8c8b5bde6",shape="box",style="filled",color="grey" ]; -"237" [ label="a9a36ef02f",shape="hexagon",style="filled",color="green" ]; -"653E" [ label="6a80cbe",shape="box",style="filled",color="grey" ]; -"238" [ label="3db761b596844f133c",shape="hexagon",style="filled",color="green" ]; -"655E" [ label="e920b915087",shape="box",style="filled",color="grey" ]; -"239" [ label="383db224d7508ef072bea21d0",shape="hexagon",style="filled",color="green" ]; -"657E" [ label="975fedfb64df",shape="box",style="filled",color="grey" ]; -"240" [ label="8e307415fb435445ced7",shape="hexagon",style="filled",color="green" ]; -"659E" [ label="21dff35936370ae5f",shape="box",style="filled",color="grey" ]; -"241" [ label="aff6d7896e0e142bbc3e78",shape="hexagon",style="filled",color="green" ]; -"661E" [ label="d2498",shape="box",style="filled",color="grey" ]; -"242" [ label="e153c6e676c7369b285b4e9033a",shape="hexagon",style="filled",color="green" ]; -"663E" [ label="",shape="box",style="filled",color="grey" ]; -"243" [ label="f3c4311de0e931f08c232b",shape="hexagon",style="filled",color="green" ]; -"665E" [ label="a849f9d352e",shape="box",style="filled",color="grey" ]; -"244" [ label="0c72a426929600000f5",shape="hexagon",style="filled",color="green" ]; -"667E" [ label="45827dbdd8",shape="box",style="filled",color="grey" ]; -"245" [ label="38fa61352f5086d2cb51",shape="hexagon",style="filled",color="green" ]; -"669E" [ label="af0268dddd",shape="box",style="filled",color="grey" ]; -"246" [ label="ad1dd724f1c3e",shape="hexagon",style="filled",color="green" ]; -"671E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; -"247" [ label="11bb8ed3ae227d3acefc",shape="hexagon",style="filled",color="green" ]; -"673E" [ label="eb8",shape="box",style="filled",color="grey" ]; -"248" [ label="f2c7b3bb4d44f977d0ab8a42351",shape="hexagon",style="filled",color="green" ]; -"675E" [ label="",shape="box",style="filled",color="grey" ]; -"249" [ label="51e045ca826077ae765",shape="hexagon",style="filled",color="green" ]; -"679E" [ label="e842",shape="box",style="filled",color="grey" ]; -"250" [ label="aa0adc8978020629574",shape="hexagon",style="filled",color="green" ]; -"753E" [ label="68d8993e61d8c82cd29e8d0182b0",shape="box",style="filled",color="grey" ]; -"251" [ label="3b6b2c549de670d7bf5fc0ee",shape="hexagon",style="filled",color="green" ]; -"681E" [ label="",shape="box",style="filled",color="grey" ]; -"252" [ label="5eea496cc301b2a9721",shape="hexagon",style="filled",color="green" ]; -"683E" [ label="",shape="box",style="filled",color="grey" ]; -"253" [ label="bfc6564cbdeeffac00a141",shape="hexagon",style="filled",color="green" ]; -"685E" [ label="3b0a8a1c2e5050bd",shape="box",style="filled",color="grey" ]; -"254" [ label="c360aaeb167487c9578a8f",shape="hexagon",style="filled",color="green" ]; -"687E" [ label="d",shape="box",style="filled",color="grey" ]; -"255" [ label="39d025b265f9790490781cb201",shape="hexagon",style="filled",color="green" ]; -"689E" [ label="5e80f85274",shape="box",style="filled",color="grey" ]; -"256" [ label="b4ce21e0a3df1d097277d6",shape="hexagon",style="filled",color="green" ]; -"691E" [ label="a849f9d352e",shape="box",style="filled",color="grey" ]; -"257" [ label="8bdb6a91c6dee925b557c705b3",shape="hexagon",style="filled",color="green" ]; -"693E" [ label="53069e384a2",shape="box",style="filled",color="grey" ]; -"258" [ label="ac487676a04e4",shape="hexagon",style="filled",color="green" ]; -"695E" [ label="a8e9",shape="box",style="filled",color="grey" ]; -"259" [ label="18115fa32ff1cb99",shape="hexagon",style="filled",color="green" ]; -"697E" [ label="45827dbdd8",shape="box",style="filled",color="grey" ]; -"260" [ label="b7b899dc8bc6a32b28cb098fa16",shape="hexagon",style="filled",color="green" ]; -"699E" [ label="32fe7eee5283",shape="box",style="filled",color="grey" ]; -"261" [ label="b69e426d974e1907e88",shape="hexagon",style="filled",color="green" ]; -"703E" [ label="e842",shape="box",style="filled",color="grey" ]; -"262" [ label="60d0128bdb61ae40e98638bd1391",shape="hexagon",style="filled",color="green" ]; -"705E" [ label="23ad1",shape="box",style="filled",color="grey" ]; -"264" [ label="8fb60d769e4c387",shape="hexagon",style="filled",color="green" ]; -"709E" [ label="6a8f5bafb1",shape="box",style="filled",color="grey" ]; -"265" [ label="e1fa7f549e5a0893bb42da5",shape="hexagon",style="filled",color="green" ]; -"711E" [ label="6a3c6921b0aeceda3",shape="box",style="filled",color="grey" ]; -"266" [ label="a77622f2ff77ffeeb2",shape="hexagon",style="filled",color="green" ]; -"713E" [ label="21dff35936370ae5f",shape="box",style="filled",color="grey" ]; -"267" [ label="30d9d350943c0e3ff7594b50",shape="hexagon",style="filled",color="green" ]; -"715E" [ label="b5e86c73d1198f",shape="box",style="filled",color="grey" ]; -"268" [ label="89ced1a7906d58d687d5a04",shape="hexagon",style="filled",color="green" ]; -"717E" [ label="c0174bbe7ae8",shape="box",style="filled",color="grey" ]; -"269" [ label="1de26f6b12b0d292f94184",shape="hexagon",style="filled",color="green" ]; -"719E" [ label="65fd8495",shape="box",style="filled",color="grey" ]; -"270" [ label="26fa7360ab81be9d4434a",shape="hexagon",style="filled",color="green" ]; -"721E" [ label="af0268dddd",shape="box",style="filled",color="grey" ]; -"272" [ label="4a9d79c960b8d33e39251e5f66",shape="hexagon" ]; -"34E" [ label="330342f283ef2",shape="box",style="filled",color="grey" ]; -"252E" [ label="3dafb9a29c00",shape="box",style="filled",color="grey" ]; -"436E" [ label="8d5137b16a",shape="box",style="filled",color="grey" ]; -"274" [ label="10a7d61c201c67a5e78542807cd",shape="hexagon" ]; -"59E" [ label="ef6361295eba07",shape="box",style="filled",color="grey" ]; -"500E" [ label="a8f0fe2eb7bc1471",shape="box",style="filled",color="grey" ]; -"720E" [ label="cfff3acd8e9d",shape="box",style="filled",color="grey" ]; -"275" [ label="f8ff39eab120851f143bf19",shape="hexagon" ]; -"98E" [ label="4e3cfd27a",shape="box",style="filled",color="grey" ]; -"278" [ label="4995c71223c9f6067324d387a2",shape="hexagon" ]; -"35E" [ label="57948adb5dead",shape="box",style="filled",color="grey" ]; -"488E" [ label="a738ba39",shape="box",style="filled",color="grey" ]; -"598E" [ label="be7d637c50c",shape="box",style="filled",color="grey" ]; -"604E" [ label="8d52f183ec",shape="box",style="filled",color="grey" ]; -"628E" [ label="cef12b6",shape="box",style="filled",color="grey" ]; -"279" [ label="b9ae94e6935503603341ecf4",shape="hexagon" ]; -"99E" [ label="14a3c17f3d",shape="box",style="filled",color="grey" ]; -"280" [ label="fd28c194a46fde909b019c52f",shape="hexagon" ]; -"242E" [ label="9fe65061641",shape="box",style="filled",color="grey" ]; -"270E" [ label="34d06d1ed6",shape="box",style="filled",color="grey" ]; -"272E" [ label="713db1c1",shape="box",style="filled",color="grey" ]; -"284E" [ label="90dccb18c0",shape="box",style="filled",color="grey" ]; -"286E" [ label="e17fea65",shape="box",style="filled",color="grey" ]; -"288E" [ label="aebb7b91b",shape="box",style="filled",color="grey" ]; -"586E" [ label="4348f3abcb7716",shape="box",style="filled",color="grey" ]; -"763E" [ label="b082f7a5ff",shape="box",style="filled",color="grey" ]; -"281" [ label="7c0ab977f5a3c4ab6d625f5033",shape="hexagon" ]; -"45E" [ label="20949455f573f",shape="box",style="filled",color="grey" ]; -"470E" [ label="c338481d79773",shape="box",style="filled",color="grey" ]; -"670E" [ label="e1d01ef89f",shape="box",style="filled",color="grey" ]; -"722E" [ label="c4507c22d19",shape="box",style="filled",color="grey" ]; -"282" [ label="7e0b91491c8c8566892cd9a0889",shape="hexagon" ]; -"103E" [ label="de9efa12873949",shape="box",style="filled",color="grey" ]; -"283" [ label="d58478d9c273ad4f4b2e091324",shape="hexagon" ]; -"165E" [ label="1a220eb692c",shape="box",style="filled",color="grey" ]; -"284" [ label="8be0efdd94a6383e87fbfded4f",shape="hexagon" ]; -"39E" [ label="c8a6c26d4fd9f",shape="box",style="filled",color="grey" ]; -"224E" [ label="8cbae42a3900",shape="box",style="filled",color="grey" ]; -"268E" [ label="fc73",shape="box",style="filled",color="grey" ]; -"632E" [ label="",shape="box",style="filled",color="grey" ]; -"710E" [ label="102f1",shape="box",style="filled",color="grey" ]; -"285" [ label="3aeb78ea51020a44f2d2615436dae",shape="hexagon" ]; -"53E" [ label="96deede0c6b44119",shape="box",style="filled",color="grey" ]; -"286" [ label="6bbd5b422edb8e358dcc20eecf9",shape="hexagon" ]; -"38E" [ label="4f2de229621272",shape="box",style="filled",color="grey" ]; -"166E" [ label="d495de0b35f6",shape="box",style="filled",color="grey" ]; -"288" [ label="4856000a6802ddfc121ef40432297",shape="hexagon",style="filled",color="#ff0000" ]; -"40E" [ label="04904a458422a5b9",shape="box",style="filled",color="grey" ]; -"218E" [ label="8cd4d",shape="box",style="filled",color="grey" ]; -"244E" [ label="",shape="box",style="filled",color="grey" ]; -"246E" [ label="9be88247",shape="box",style="filled",color="grey" ]; -"258E" [ label="4f05b",shape="box",style="filled",color="grey" ]; -"290E" [ label="8b092",shape="box",style="filled",color="grey" ]; -"292E" [ label="c3bbf4",shape="box",style="filled",color="grey" ]; -"308E" [ label="6331b3f",shape="box",style="filled",color="grey" ]; -"318E" [ label="",shape="box",style="filled",color="grey" ]; -"388E" [ label="3711",shape="box",style="filled",color="grey" ]; -"472E" [ label="c5255d",shape="box",style="filled",color="grey" ]; -"478E" [ label="5c6a2",shape="box",style="filled",color="grey" ]; -"566E" [ label="51ec95518d1b3",shape="box",style="filled",color="grey" ]; -"570E" [ label="82a65ed4b69",shape="box",style="filled",color="grey" ]; -"574E" [ label="05fed5e",shape="box",style="filled",color="grey" ]; -"608E" [ label="bf",shape="box",style="filled",color="grey" ]; -"614E" [ label="ce",shape="box",style="filled",color="grey" ]; -"658E" [ label="1a830d9f",shape="box",style="filled",color="grey" ]; -"664E" [ label="",shape="box",style="filled",color="grey" ]; -"682E" [ label="",shape="box",style="filled",color="grey" ]; -"289" [ label="2e31175cbd52fcd08360fe86d20",shape="hexagon" ]; -"41E" [ label="4ad5d68f07981a",shape="box",style="filled",color="grey" ]; -"636E" [ label="51192117f9b4",shape="box",style="filled",color="grey" ]; -"642E" [ label="6bf214d9e7fa5f2df",shape="box",style="filled",color="grey" ]; -"690E" [ label="558d8534f92fddfe",shape="box",style="filled",color="grey" ]; -"700E" [ label="6819fd5a6cdd280dd",shape="box",style="filled",color="grey" ]; -"290" [ label="3aa0ce5efcf79bc3ecced1886e89",shape="hexagon" ]; -"56E" [ label="ff9d64ddf49a20f",shape="box",style="filled",color="grey" ]; -"264E" [ label="6c93f24516f01d",shape="box",style="filled",color="grey" ]; -"510E" [ label="32b98f11f3d01d6",shape="box",style="filled",color="grey" ]; -"718E" [ label="8f7c875500073",shape="box",style="filled",color="grey" ]; -"291" [ label="7c1767485953d9c2",shape="hexagon" ]; -"66E" [ label="086",shape="box",style="filled",color="grey" ]; -"76E" [ label="",shape="box",style="filled",color="grey" ]; -"610E" [ label="450d3a2d49cbfd",shape="box",style="filled",color="grey" ]; -"292" [ label="9c1305d59c37e9be9f13d7d049c",shape="hexagon" ]; -"73E" [ label="817",shape="box",style="filled",color="grey" ]; -"293" [ label="efe092824916a5637ee35d439589",shape="hexagon" ]; -"49E" [ label="",shape="box",style="filled",color="grey" ]; -"214E" [ label="",shape="box",style="filled",color="grey" ]; -"216E" [ label="",shape="box",style="filled",color="grey" ]; -"236E" [ label="",shape="box",style="filled",color="grey" ]; -"278E" [ label="",shape="box",style="filled",color="grey" ]; -"358E" [ label="",shape="box",style="filled",color="grey" ]; -"398E" [ label="",shape="box",style="filled",color="grey" ]; -"400E" [ label="",shape="box",style="filled",color="grey" ]; -"402E" [ label="",shape="box",style="filled",color="grey" ]; -"404E" [ label="",shape="box",style="filled",color="grey" ]; -"406E" [ label="",shape="box",style="filled",color="grey" ]; -"408E" [ label="",shape="box",style="filled",color="grey" ]; -"412E" [ label="",shape="box",style="filled",color="grey" ]; -"438E" [ label="",shape="box",style="filled",color="grey" ]; -"448E" [ label="",shape="box",style="filled",color="grey" ]; -"476E" [ label="",shape="box",style="filled",color="grey" ]; -"504E" [ label="",shape="box",style="filled",color="grey" ]; -"552E" [ label="",shape="box",style="filled",color="grey" ]; -"634E" [ label="",shape="box",style="filled",color="grey" ]; -"768E" [ label="",shape="box",style="filled",color="grey" ]; -"295" [ label="70815f0352b43dc1562133ab6eb",shape="hexagon",style="filled",color="#A52A2A" ]; -"44E" [ label="ef2d4636934472",shape="box",style="filled",color="grey" ]; -"92E" [ label="22bd92e302816",shape="box",style="filled",color="grey" ]; -"250E" [ label="74e86",shape="box",style="filled",color="grey" ]; -"316E" [ label="",shape="box",style="filled",color="grey" ]; -"380E" [ label="",shape="box",style="filled",color="grey" ]; -"424E" [ label="c",shape="box",style="filled",color="grey" ]; -"442E" [ label="a5a",shape="box",style="filled",color="grey" ]; -"446E" [ label="bce",shape="box",style="filled",color="grey" ]; -"454E" [ label="",shape="box",style="filled",color="grey" ]; -"460E" [ label="",shape="box",style="filled",color="grey" ]; -"462E" [ label="",shape="box",style="filled",color="grey" ]; -"648E" [ label="",shape="box",style="filled",color="grey" ]; -"656E" [ label="e9",shape="box",style="filled",color="grey" ]; -"666E" [ label="b701e7",shape="box",style="filled",color="grey" ]; -"692E" [ label="f2e7cc",shape="box",style="filled",color="grey" ]; -"712E" [ label="8a9eb2806b0aa",shape="box",style="filled",color="grey" ]; -"296" [ label="e287d497450664a4c0f4efc338",shape="hexagon",style="filled",color="#ff0000" ]; -"47E" [ label="06eff1db45cdf",shape="box",style="filled",color="grey" ]; -"330E" [ label="c0f34a600",shape="box",style="filled",color="grey" ]; -"514E" [ label="bd7aca295ca",shape="box",style="filled",color="grey" ]; -"516E" [ label="0da9135",shape="box",style="filled",color="grey" ]; -"518E" [ label="fe821bce",shape="box",style="filled",color="grey" ]; -"520E" [ label="e64f22a31",shape="box",style="filled",color="grey" ]; -"522E" [ label="46e412a3",shape="box",style="filled",color="grey" ]; -"526E" [ label="99da1f8a5",shape="box",style="filled",color="grey" ]; -"528E" [ label="0f167280",shape="box",style="filled",color="grey" ]; -"530E" [ label="82d201",shape="box",style="filled",color="grey" ]; -"532E" [ label="1d529eb4",shape="box",style="filled",color="grey" ]; -"534E" [ label="",shape="box",style="filled",color="grey" ]; -"536E" [ label="bf141dbce",shape="box",style="filled",color="grey" ]; -"538E" [ label="e3fd0c7b3",shape="box",style="filled",color="grey" ]; -"540E" [ label="c96cb3",shape="box",style="filled",color="grey" ]; -"542E" [ label="0fabab47",shape="box",style="filled",color="grey" ]; -"544E" [ label="1b82200",shape="box",style="filled",color="grey" ]; -"297" [ label="2ced414a91575a48f2dd29a",shape="hexagon" ]; -"46E" [ label="85221d5e9e",shape="box",style="filled",color="grey" ]; -"93E" [ label="97a7eea3f",shape="box",style="filled",color="grey" ]; -"206E" [ label="4d22e1",shape="box",style="filled",color="grey" ]; -"426E" [ label="e65185ca",shape="box",style="filled",color="grey" ]; -"550E" [ label="",shape="box",style="filled",color="grey" ]; -"706E" [ label="a9012b7bb5",shape="box",style="filled",color="grey" ]; -"298" [ label="38f162cf917ce7298663a1f1c607",shape="hexagon" ]; -"36E" [ label="a031c9192ae8e75",shape="box",style="filled",color="grey" ]; -"95E" [ label="062fc905b9eb35",shape="box",style="filled",color="grey" ]; -"364E" [ label="c8fc17180bea86",shape="box",style="filled",color="grey" ]; -"394E" [ label="09e64744536c5e1",shape="box",style="filled",color="grey" ]; -"420E" [ label="af4a1fac3e2076",shape="box",style="filled",color="grey" ]; -"456E" [ label="238805e2194c3",shape="box",style="filled",color="grey" ]; -"624E" [ label="73e6ed83012",shape="box",style="filled",color="grey" ]; -"299" [ label="549fa15d68f0b3bee6192f888cd8",shape="hexagon" ]; -"48E" [ label="d17f8f4eeb8e63d",shape="box",style="filled",color="grey" ]; -"168E" [ label="cca7040e47789",shape="box",style="filled",color="grey" ]; -"260E" [ label="47ebc3f17",shape="box",style="filled",color="grey" ]; -"282E" [ label="cf5a6049ad",shape="box",style="filled",color="grey" ]; -"554E" [ label="2a47a6a27",shape="box",style="filled",color="grey" ]; -"590E" [ label="eff3468631dd4",shape="box",style="filled",color="grey" ]; -"767E" [ label="efb52b499303115c33fd",shape="box",style="filled",color="grey" ]; -"300" [ label="8593dcf973b110d00cecdc1e756",shape="hexagon",style="filled",color="#ff7f00" ]; -"62E" [ label="472a156cf2b55f",shape="box",style="filled",color="grey" ]; -"190E" [ label="647",shape="box",style="filled",color="grey" ]; -"226E" [ label="",shape="box",style="filled",color="grey" ]; -"238E" [ label="8a",shape="box",style="filled",color="grey" ]; -"254E" [ label="",shape="box",style="filled",color="grey" ]; -"256E" [ label="",shape="box",style="filled",color="grey" ]; -"262E" [ label="",shape="box",style="filled",color="grey" ]; -"266E" [ label="e8b",shape="box",style="filled",color="grey" ]; -"274E" [ label="",shape="box",style="filled",color="grey" ]; -"276E" [ label="f",shape="box",style="filled",color="grey" ]; -"294E" [ label="",shape="box",style="filled",color="grey" ]; -"296E" [ label="",shape="box",style="filled",color="grey" ]; -"310E" [ label="1b34fb150",shape="box",style="filled",color="grey" ]; -"320E" [ label="",shape="box",style="filled",color="grey" ]; -"322E" [ label="a7d2",shape="box",style="filled",color="grey" ]; -"332E" [ label="",shape="box",style="filled",color="grey" ]; -"340E" [ label="",shape="box",style="filled",color="grey" ]; -"344E" [ label="f55670",shape="box",style="filled",color="grey" ]; -"346E" [ label="1ed67841",shape="box",style="filled",color="grey" ]; -"348E" [ label="07283",shape="box",style="filled",color="grey" ]; -"374E" [ label="73ba1714ee",shape="box",style="filled",color="grey" ]; -"378E" [ label="27709106",shape="box",style="filled",color="grey" ]; -"452E" [ label="93ea0",shape="box",style="filled",color="grey" ]; -"508E" [ label="",shape="box",style="filled",color="grey" ]; -"524E" [ label="1d792d81",shape="box",style="filled",color="grey" ]; -"612E" [ label="a",shape="box",style="filled",color="grey" ]; -"626E" [ label="",shape="box",style="filled",color="grey" ]; -"638E" [ label="",shape="box",style="filled",color="grey" ]; -"644E" [ label="",shape="box",style="filled",color="grey" ]; -"654E" [ label="",shape="box",style="filled",color="grey" ]; -"672E" [ label="",shape="box",style="filled",color="grey" ]; -"302" [ label="23f94655294d3ff537f2915fa",shape="hexagon" ]; -"797E" [ label="",shape="box",style="filled",color="grey" ]; -"798E" [ label="a2eab7c9fa641e5f",shape="box",style="filled",color="grey" ]; -"303" [ label="a9058241db5b6b6c25569acdf5",shape="hexagon" ]; -"52E" [ label="b2babf3244213",shape="box",style="filled",color="grey" ]; -"650E" [ label="b354cd9e9dbb0bfa",shape="box",style="filled",color="grey" ]; -"304" [ label="bdbdb31bd777fb65dd6dd2d0e7",shape="hexagon" ]; -"50E" [ label="3bec1c012b498",shape="box",style="filled",color="grey" ]; -"640E" [ label="c54f0fc1e05",shape="box",style="filled",color="grey" ]; -"646E" [ label="9ab6c66dc",shape="box",style="filled",color="grey" ]; -"652E" [ label="699e3db878047",shape="box",style="filled",color="grey" ]; -"306" [ label="1d4ea80c7194689d69f9592186",shape="hexagon" ]; -"55E" [ label="8066f87a88f4e",shape="box",style="filled",color="grey" ]; -"220E" [ label="3a8173d6c",shape="box",style="filled",color="grey" ]; -"338E" [ label="24dfe1a997a",shape="box",style="filled",color="grey" ]; -"368E" [ label="65a1",shape="box",style="filled",color="grey" ]; -"486E" [ label="59a8b435ccd",shape="box",style="filled",color="grey" ]; -"490E" [ label="86e9b0428",shape="box",style="filled",color="grey" ]; -"562E" [ label="5a7a610a8a",shape="box",style="filled",color="grey" ]; -"564E" [ label="8f143077e",shape="box",style="filled",color="grey" ]; -"600E" [ label="6472c2861e0e0dd681",shape="box",style="filled",color="grey" ]; -"668E" [ label="f0f45e707",shape="box",style="filled",color="grey" ]; -"674E" [ label="95e93c4a13",shape="box",style="filled",color="grey" ]; -"698E" [ label="33e1de",shape="box",style="filled",color="grey" ]; -"307" [ label="7204950f6233bf9c9e1f00d4a870",shape="hexagon" ]; -"107E" [ label="ccceeef40edda78",shape="box",style="filled",color="grey" ]; -"308" [ label="a2c4b1d72e2da483a86ae0c62e5",shape="hexagon" ]; -"108E" [ label="eedc819a68add6",shape="box",style="filled",color="grey" ]; -"309" [ label="f603819d560c5603259aa05dca",shape="hexagon" ]; -"109E" [ label="acacfc83af504",shape="box",style="filled",color="grey" ]; -"310" [ label="2f43cba12702078b4e0d3bfdae2bc",shape="hexagon" ]; -"110E" [ label="3c1edc8de4795936",shape="box",style="filled",color="grey" ]; -"311" [ label="8f9cdc26798117dd3e9ee4a8770",shape="hexagon" ]; -"58E" [ label="881d373",shape="box",style="filled",color="grey" ]; -"234E" [ label="",shape="box",style="filled",color="grey" ]; -"300E" [ label="",shape="box",style="filled",color="grey" ]; -"306E" [ label="8c7cd9b93b1cbe48e1",shape="box",style="filled",color="grey" ]; -"314E" [ label="616d8a7b",shape="box",style="filled",color="grey" ]; -"342E" [ label="",shape="box",style="filled",color="grey" ]; -"354E" [ label="",shape="box",style="filled",color="grey" ]; -"370E" [ label="",shape="box",style="filled",color="grey" ]; -"382E" [ label="",shape="box",style="filled",color="grey" ]; -"422E" [ label="",shape="box",style="filled",color="grey" ]; -"444E" [ label="",shape="box",style="filled",color="grey" ]; -"582E" [ label="",shape="box",style="filled",color="grey" ]; -"620E" [ label="",shape="box",style="filled",color="grey" ]; -"630E" [ label="",shape="box",style="filled",color="grey" ]; -"684E" [ label="",shape="box",style="filled",color="grey" ]; -"696E" [ label="",shape="box",style="filled",color="grey" ]; -"801E" [ label="",shape="box",style="filled",color="grey" ]; -"312" [ label="97c9d726e27304311901a52ce",shape="hexagon",style="filled",color="#ff0000" ]; -"42E" [ label="1112164c2f7a",shape="box",style="filled",color="grey" ]; -"192E" [ label="5c609b12c",shape="box",style="filled",color="grey" ]; -"194E" [ label="00265",shape="box",style="filled",color="grey" ]; -"196E" [ label="04767",shape="box",style="filled",color="grey" ]; -"198E" [ label="f0d99f16",shape="box",style="filled",color="grey" ]; -"200E" [ label="",shape="box",style="filled",color="grey" ]; -"202E" [ label="6e186b",shape="box",style="filled",color="grey" ]; -"204E" [ label="d382",shape="box",style="filled",color="grey" ]; -"312E" [ label="c6b5321a",shape="box",style="filled",color="grey" ]; -"336E" [ label="",shape="box",style="filled",color="grey" ]; -"376E" [ label="",shape="box",style="filled",color="grey" ]; -"384E" [ label="aeb8",shape="box",style="filled",color="grey" ]; -"386E" [ label="2e53009d4a375",shape="box",style="filled",color="grey" ]; -"428E" [ label="",shape="box",style="filled",color="grey" ]; -"474E" [ label="",shape="box",style="filled",color="grey" ]; -"484E" [ label="",shape="box",style="filled",color="grey" ]; -"546E" [ label="dea1d1",shape="box",style="filled",color="grey" ]; -"548E" [ label="5a0b4b906a",shape="box",style="filled",color="grey" ]; -"314" [ label="1727041c622518c9dd24f7c211",shape="hexagon" ]; -"113E" [ label="49704867bee95",shape="box",style="filled",color="grey" ]; -"315" [ label="31f2f9aef958979f9f3532b9b",shape="hexagon",style="filled",color="#ff0000" ]; -"43E" [ label="47cd70f",shape="box",style="filled",color="grey" ]; -"240E" [ label="248df40dae",shape="box",style="filled",color="grey" ]; -"298E" [ label="",shape="box",style="filled",color="grey" ]; -"334E" [ label="9dd5bf47f",shape="box",style="filled",color="grey" ]; -"360E" [ label="",shape="box",style="filled",color="grey" ]; -"390E" [ label="28533c",shape="box",style="filled",color="grey" ]; -"418E" [ label="",shape="box",style="filled",color="grey" ]; -"492E" [ label="a4c7d0",shape="box",style="filled",color="grey" ]; -"502E" [ label="4f6f7f",shape="box",style="filled",color="grey" ]; -"584E" [ label="7ab64a969",shape="box",style="filled",color="grey" ]; -"588E" [ label="",shape="box",style="filled",color="grey" ]; -"602E" [ label="69",shape="box",style="filled",color="grey" ]; -"606E" [ label="67513d",shape="box",style="filled",color="grey" ]; -"662E" [ label="cf",shape="box",style="filled",color="grey" ]; -"316" [ label="a54092a3033f7d5e41e0a76c1",shape="hexagon" ]; -"51E" [ label="1467f017b74e",shape="box",style="filled",color="grey" ]; -"317" [ label="2043b477ac0393676a4309514d0",shape="hexagon" ]; -"116E" [ label="bdec8c86db51b9",shape="box",style="filled",color="grey" ]; -"318" [ label="ab48d1f65812bc0f8ab6941c3b5",shape="hexagon" ]; -"74E" [ label="81",shape="box",style="filled",color="grey" ]; -"319" [ label="ca3d67754cf62fdafbf0a1e0",shape="hexagon" ]; -"57E" [ label="75b14f1719d",shape="box",style="filled",color="grey" ]; -"94E" [ label="62f36ea98a",shape="box",style="filled",color="grey" ]; -"350E" [ label="e3a76d31ca59a",shape="box",style="filled",color="grey" ]; -"440E" [ label="b3cadc253f7",shape="box",style="filled",color="grey" ]; -"466E" [ label="fb58e11",shape="box",style="filled",color="grey" ]; -"676E" [ label="8606837526d81cdec",shape="box",style="filled",color="grey" ]; -"320" [ label="a7a7f3681dad1250b01cf80bc17",shape="hexagon" ]; -"60E" [ label="2c514b0cd8f7d3",shape="box",style="filled",color="grey" ]; -"366E" [ label="7e494b",shape="box",style="filled",color="grey" ]; -"434E" [ label="15d44ab97",shape="box",style="filled",color="grey" ]; -"458E" [ label="78b2d75d00166",shape="box",style="filled",color="grey" ]; -"618E" [ label="761e0f72f95",shape="box",style="filled",color="grey" ]; -"321" [ label="275afb2b215b966d9fac51b96b9",shape="hexagon" ]; -"72E" [ label="ac284d73563",shape="box",style="filled",color="grey" ]; -"362E" [ label="7e74e1587f3a4d208",shape="box",style="filled",color="grey" ]; -"372E" [ label="ffd1b1af3b6864078f3",shape="box",style="filled",color="grey" ]; -"572E" [ label="b38049e00",shape="box",style="filled",color="grey" ]; -"322" [ label="c3c93c700edc0cb4f95f03c04",shape="hexagon" ]; -"54E" [ label="99237fce1358",shape="box",style="filled",color="grey" ]; -"222E" [ label="3dcf8f454",shape="box",style="filled",color="grey" ]; -"302E" [ label="c5acd20cad2",shape="box",style="filled",color="grey" ]; -"556E" [ label="6c998bf2a5edd",shape="box",style="filled",color="grey" ]; -"558E" [ label="4b683",shape="box",style="filled",color="grey" ]; -"323" [ label="63a3d4fb9d38a0182be6e39e76",shape="hexagon" ]; -"37E" [ label="bba6e6e194ccf",shape="box",style="filled",color="grey" ]; -"208E" [ label="01938827",shape="box",style="filled",color="grey" ]; -"210E" [ label="9",shape="box",style="filled",color="grey" ]; -"352E" [ label="64ef1d545",shape="box",style="filled",color="grey" ]; -"450E" [ label="b473716",shape="box",style="filled",color="grey" ]; -"568E" [ label="7c13bf753da",shape="box",style="filled",color="grey" ]; -"576E" [ label="4e4a79111d",shape="box",style="filled",color="grey" ]; -"686E" [ label="af4abb0d6a99",shape="box",style="filled",color="grey" ]; -"324" [ label="4399cf78123dedd0dfe9776104",shape="hexagon" ]; -"228E" [ label="af9c489df53",shape="box",style="filled",color="grey" ]; -"248E" [ label="3703059dbc5a8",shape="box",style="filled",color="grey" ]; -"304E" [ label="8a46e6",shape="box",style="filled",color="grey" ]; -"468E" [ label="f9d09",shape="box",style="filled",color="grey" ]; -"578E" [ label="cd1e9af3dec2",shape="box",style="filled",color="grey" ]; -"660E" [ label="9e650e89bb",shape="box",style="filled",color="grey" ]; -"688E" [ label="f62b136b2171",shape="box",style="filled",color="grey" ]; -"694E" [ label="4727c415d06bcbef",shape="box",style="filled",color="grey" ]; -"714E" [ label="38b3b0d9",shape="box",style="filled",color="grey" ]; -"766E" [ label="a153512d982",shape="box",style="filled",color="grey" ]; -"325" [ label="40f253cd228f7ac2d0aee",shape="hexagon" ]; -"97E" [ label="a3ff993",shape="box",style="filled",color="grey" ]; -"506E" [ label="7528dd86b",shape="box",style="filled",color="grey" ]; -"326" [ label="89a2505da6179a80202d4a6c3",shape="hexagon" ]; -"61E" [ label="75eea05672a5",shape="box",style="filled",color="grey" ]; -"175E" [ label="3b0c08dd2ca",shape="box",style="filled",color="grey" ]; -"482E" [ label="a3781072b",shape="box",style="filled",color="grey" ]; -"328" [ label="2601085bde1b2450d64509f36",shape="hexagon" ]; -"75E" [ label="0efbd",shape="box",style="filled",color="grey" ]; -"580E" [ label="bb92d1da1f38d52f8ff",shape="box",style="filled",color="grey" ]; -"329" [ label="5c81103c751345d0ee0f4bd",shape="hexagon" ]; -"96E" [ label="b23526044",shape="box",style="filled",color="grey" ]; -"330" [ label="fcbd9ad14139718bc6fcc8b4",shape="hexagon" ]; -"100E" [ label="73ca543bf1",shape="box",style="filled",color="grey" ]; -"170E" [ label="c2f32e2cf9",shape="box",style="filled",color="grey" ]; -"333" [ label="44cbb41a9cfc15497eacd294",color="yellow",style="filled",shape="doubleoctagon" ]; -"63E" [ label="6a91",shape="box",style="filled",color="grey" ]; -"67E" [ label="b074e",shape="box",style="filled",color="grey" ]; -"68E" [ label="06209",shape="box",style="filled",color="grey" ]; -"69E" [ label="58e3dcc618",shape="box",style="filled",color="grey" ]; -"70E" [ label="eee44624da",shape="box",style="filled",color="grey" ]; -"71E" [ label="6a91",shape="box",style="filled",color="grey" ]; -"802E" [ label="e1e8c",shape="box",style="filled",color="grey" ]; -"793E" [ label="",shape="box",style="filled",color="grey" ]; -"334" [ label="b46b0756dba915943839e90a55",color="yellow",style="filled",shape="doubleoctagon" ]; -"64E" [ label="5fdf",shape="box",style="filled",color="grey" ]; -"81E" [ label="3eca1f94dc181",shape="box",style="filled",color="grey" ]; -"82E" [ label="6b1bb9b0e",shape="box",style="filled",color="grey" ]; -"83E" [ label="a54d477232",shape="box",style="filled",color="grey" ]; -"84E" [ label="a164d9f60fbbdd",shape="box",style="filled",color="grey" ]; -"85E" [ label="78c8463ea",shape="box",style="filled",color="grey" ]; -"86E" [ label="c110ba7",shape="box",style="filled",color="grey" ]; -"87E" [ label="3b63cdc0f",shape="box",style="filled",color="grey" ]; -"88E" [ label="6f578c5128",shape="box",style="filled",color="grey" ]; -"89E" [ label="3e048573fd",shape="box",style="filled",color="grey" ]; -"336" [ URL="tes hi",area="test",label="825c7994d5da13afe519861818",color="#ff0000",style="filled",shape="tripleoctagon" ]; -"1E" [ label="f4bef37b6a94bfd00",shape="box",style="filled",color="grey" ]; -"2E" [ label="d2647f8b6d8661d08",shape="box",style="filled",color="grey" ]; -"3E" [ label="964cb56d8f69ff058",shape="box",style="filled",color="grey" ]; -"4E" [ label="4f35e206816c3bd22",shape="box",style="filled",color="grey" ]; -"5E" [ label="affb2d716803a2d3e",shape="box",style="filled",color="grey" ]; -"6E" [ label="e4ae306d9bd669c70",shape="box",style="filled",color="grey" ]; -"7E" [ label="4dbf4395236fb03ed",shape="box",style="filled",color="grey" ]; -"8E" [ label="15b3ad672cd2f713a",shape="box",style="filled",color="grey" ]; -"9E" [ label="8d6e6e0cd9b842a47",shape="box",style="filled",color="grey" ]; -"10E" [ label="00d0dd018fe879f96",shape="box",style="filled",color="grey" ]; -"11E" [ label="f28b78d4803c",shape="box",style="filled",color="grey" ]; -"12E" [ label="2d886da042b5384b4",shape="box",style="filled",color="grey" ]; -"13E" [ label="548c0081a62132b44",shape="box",style="filled",color="grey" ]; -"14E" [ label="52126553e52385d16",shape="box",style="filled",color="grey" ]; -"15E" [ label="9fe716e738eaea34e",shape="box",style="filled",color="grey" ]; -"16E" [ label="5782807b5f575e0a8",shape="box",style="filled",color="grey" ]; -"17E" [ label="792fd6f9df1fa1e33",shape="box",style="filled",color="grey" ]; -"18E" [ label="c471b6fdbfb852661",shape="box",style="filled",color="grey" ]; -"19E" [ label="a84844dfd0052b3b5",shape="box",style="filled",color="grey" ]; -"20E" [ label="724dabdce9744d061",shape="box",style="filled",color="grey" ]; -"21E" [ label="57f7fd2eecec93c8b",shape="box",style="filled",color="grey" ]; -"22E" [ label="baba65f670ee34a88",shape="box",style="filled",color="grey" ]; -"23E" [ label="ac34ec0f0488b17ec",shape="box",style="filled",color="grey" ]; -"24E" [ label="51e74bec5513083bb",shape="box",style="filled",color="grey" ]; -"25E" [ label="8e2d970b2f820ee35",shape="box",style="filled",color="grey" ]; -"26E" [ label="19398d3cd6b9c674f",shape="box",style="filled",color="grey" ]; -"27E" [ label="6505e29f4a11d9530",shape="box",style="filled",color="grey" ]; -"28E" [ label="bc4824f07a9d2bba6",shape="box",style="filled",color="grey" ]; -"29E" [ label="3acbf8a1537e4e1a1",shape="box",style="filled",color="grey" ]; -"30E" [ label="536264e787cf70469",shape="box",style="filled",color="grey" ]; -"31E" [ label="d",shape="box",style="filled",color="grey" ]; -"65E" [ label="d4b2",shape="box",style="filled",color="grey" ]; -"119E" [ label="2a9caef7",shape="box",style="filled",color="grey" ]; -"150E" [ label="73d12",shape="box",style="filled",color="grey" ]; -"176E" [ label="8896166adc0",shape="box",style="filled",color="grey" ]; -"743E" [ label="9f",shape="box",style="filled",color="grey" ]; -"744E" [ label="2e1313c",shape="box",style="filled",color="grey" ]; -"764E" [ label="cd6",shape="box",style="filled",color="grey" ]; -"337" [ label="8304a439f91fc90b3fe8dd35be8",color="yellow",style="filled",shape="doubleoctagon" ]; -"120E" [ label="345d26b3f821fe",shape="box",style="filled",color="grey" ]; -"121E" [ label="357679fea1e2f",shape="box",style="filled",color="grey" ]; -"122E" [ label="c71043819b6a79",shape="box",style="filled",color="grey" ]; -"123E" [ label="f9df653b86fb8df",shape="box",style="filled",color="grey" ]; -"124E" [ label="020df871874cd",shape="box",style="filled",color="grey" ]; -"125E" [ label="4c52fdd8e396692",shape="box",style="filled",color="grey" ]; -"126E" [ label="8b98c3ddbe0b336",shape="box",style="filled",color="grey" ]; -"127E" [ label="d9f4abac731a9e",shape="box",style="filled",color="grey" ]; -"128E" [ label="50f4d9b97aefe",shape="box",style="filled",color="grey" ]; -"129E" [ label="ea920d9f5b295119",shape="box",style="filled",color="grey" ]; -"130E" [ label="ff5c9b242337c",shape="box",style="filled",color="grey" ]; -"131E" [ label="4e12f7ff0918",shape="box",style="filled",color="grey" ]; -"132E" [ label="ee3b6be71d59b",shape="box",style="filled",color="grey" ]; -"133E" [ label="615cd6b5e3d21c",shape="box",style="filled",color="grey" ]; -"134E" [ label="6d52dd1b198bb",shape="box",style="filled",color="grey" ]; -"135E" [ label="8c932e1e502dca",shape="box",style="filled",color="grey" ]; -"136E" [ label="e84330eef281284a",shape="box",style="filled",color="grey" ]; -"137E" [ label="85fc23f1c88b4",shape="box",style="filled",color="grey" ]; -"138E" [ label="5997cb0c083422",shape="box",style="filled",color="grey" ]; -"339" [ label="b1ffbabb24d71f67d1e0ce23c51",color="yellow",style="filled",shape="doubleoctagon" ]; -"151E" [ label="",shape="box",style="filled",color="grey" ]; -"153E" [ label="41a8b095c7fd3",shape="box",style="filled",color="grey" ]; -"154E" [ label="151bcc2a8de7ea634",shape="box",style="filled",color="grey" ]; -"155E" [ label="6c541cad8de1b15",shape="box",style="filled",color="grey" ]; -"156E" [ label="c935c7f4d1090ac",shape="box",style="filled",color="grey" ]; -"157E" [ label="5ce1fcfb042b",shape="box",style="filled",color="grey" ]; -"158E" [ label="531806429433",shape="box",style="filled",color="grey" ]; -"159E" [ label="d285240b89cb",shape="box",style="filled",color="grey" ]; -"160E" [ label="f22c27c0f0a54e",shape="box",style="filled",color="grey" ]; -"161E" [ label="8d0d8314d211d80",shape="box",style="filled",color="grey" ]; -"162E" [ label="",shape="box",style="filled",color="grey" ]; -"347" [ label="9652ab8b55fdb2a36d1f3fe020",shape="hexagon" ]; -"139E" [ label="ef8b68bb5772f3",shape="box",style="filled",color="grey" ]; -"795E" [ label="16c3ae29c0bc713",shape="box",style="filled",color="grey" ]; -"348" [ label="676bbe7d1c1fb71742df534ce8",shape="hexagon" ]; -"799E" [ label="a78eb40ae56aaa9",shape="box",style="filled",color="grey" ]; -"800E" [ label="6aae8d25951",shape="box",style="filled",color="grey" ]; -"349" [ label="66c0220688a999aaf7f1702d1",shape="hexagon" ]; -"141E" [ label="67b6a4dca3a6d",shape="box",style="filled",color="grey" ]; -"350" [ label="1322fb0818783e6f9a4f173d47c52",shape="hexagon" ]; -"142E" [ label="9696c0950295d8cb5",shape="box",style="filled",color="grey" ]; -"678E" [ label="b5c747cc9",shape="box",style="filled",color="grey" ]; -"351" [ label="ff07977fca5513098d220d1eb3a",shape="hexagon" ]; -"143E" [ label="89a36b13f8c344b",shape="box",style="filled",color="grey" ]; -"232E" [ label="56292d076643",shape="box",style="filled",color="grey" ]; -"680E" [ label="b5c747cc9",shape="box",style="filled",color="grey" ]; -"704E" [ label="431430c49",shape="box",style="filled",color="grey" ]; -"352" [ label="a97ef281eafc34b1630d450a1df",shape="hexagon" ]; -"144E" [ label="4ff4e275c710c3b",shape="box",style="filled",color="grey" ]; -"432E" [ label="d13da6273c9b4da",shape="box",style="filled",color="grey" ]; -"353" [ label="72cbb37db85ed3c6eda5dcf8",shape="hexagon" ]; -"145E" [ label="33ff9e43d5ab",shape="box",style="filled",color="grey" ]; -"354" [ label="0f6784e49852c0be0da23b16",shape="hexagon" ]; -"146E" [ label="d4f958b03a98",shape="box",style="filled",color="grey" ]; -"396E" [ label="8e24e9b4e",shape="box",style="filled",color="grey" ]; -"355" [ label="383f5c65cc6c25aa0a0e6dbb",shape="hexagon" ]; -"147E" [ label="1ff8ff951ee9",shape="box",style="filled",color="grey" ]; -"356" [ label="f52a45620969f0df4e6ae1dcd7",shape="hexagon" ]; -"148E" [ label="5256925081c812",shape="box",style="filled",color="grey" ]; -"357" [ label="1f5df34ad75a55a76ef4afa0a47",shape="hexagon" ]; -"149E" [ label="26a185dde9a93dd",shape="box",style="filled",color="grey" ]; -"358" [ label="45ba4d4c61c9601a26d59e47e0260",shape="hexagon" ]; -"167E" [ label="99bd3e7feeb710",shape="box",style="filled",color="grey" ]; -"359" [ label="f95344b0ae31693f3a2746597d4",shape="hexagon" ]; -"169E" [ label="4e8259973f1f",shape="box",style="filled",color="grey" ]; -"360" [ label="b79798b186d6b82288e8be4017d",shape="hexagon" ]; -"171E" [ label="63b079bd5847",shape="box",style="filled",color="grey" ]; -"361" [ label="47e0067f4d853afd2012f04daa8",shape="hexagon" ]; -"172E" [ label="92fb5d4a0805",shape="box",style="filled",color="grey" ]; -"362" [ label="f2b6201774de40a29b504b1f716",shape="hexagon" ]; -"173E" [ label="d7203571944b",shape="box",style="filled",color="grey" ]; -"363" [ label="800422ab81d804eef3e7b91dfba91",shape="hexagon" ]; -"174E" [ label="952316a1a5a785",shape="box",style="filled",color="grey" ]; -"364" [ label="35b941379e1af658078cffb83a2",shape="hexagon" ]; -"101E" [ label="331675c046693f",shape="box",style="filled",color="grey" ]; -"365" [ label="d4f7b7fba7afcf7a72397353ec",shape="hexagon" ]; -"102E" [ label="32c4684b55361",shape="box",style="filled",color="grey" ]; -"367" [ label="e4b45b7a2f884d3734bfd5985656",shape="hexagon" ]; -"104E" [ label="1333074979f2d0b",shape="box",style="filled",color="grey" ]; -"368" [ label="02c2ba83680ab57f236a33d702",shape="hexagon" ]; -"105E" [ label="084d4bfa5853e",shape="box",style="filled",color="grey" ]; -"369" [ label="9ccd974150a18260b207b6584caa",shape="hexagon" ]; -"106E" [ label="28f7bfc40c88e6a",shape="box",style="filled",color="grey" ]; -"374" [ label="653ae44d45dcadeb481b53027d",shape="hexagon" ]; -"111E" [ label="8f95518f48528",shape="box",style="filled",color="grey" ]; -"375" [ label="d66f542ef1ce4d02c59bec65e",shape="hexagon" ]; -"112E" [ label="2ef209509e2a",shape="box",style="filled",color="grey" ]; -"377" [ label="a2984b7a11e49440420058c1d80",shape="hexagon" ]; -"114E" [ label="ef42184297591d",shape="box",style="filled",color="grey" ]; -"378" [ label="31055116421c96b37f72a262bb",shape="hexagon" ]; -"115E" [ label="be9c5958196ed",shape="box",style="filled",color="grey" ]; -"380" [ label="8462bb2eec1a62d19a15865e57c92",shape="hexagon" ]; -"117E" [ label="16a795a1d63f30df",shape="box",style="filled",color="grey" ]; -"392E" [ label="85a34bc9616ff",shape="box",style="filled",color="grey" ]; -"381" [ label="c21eb96fe100a1efaa128181b7",shape="hexagon" ]; -"118E" [ label="f1b0d754353a6",shape="box",style="filled",color="grey" ]; -"382" [ label="e3e284d0cc803d98d674f9c3f6d",color="yellow",style="filled",shape="doubleoctagon" ]; -"177E" [ label="30417faf916",shape="box",style="filled",color="grey" ]; -"178E" [ label="e618df70814a",shape="box",style="filled",color="grey" ]; -"179E" [ label="fa90ddf10bd574",shape="box",style="filled",color="grey" ]; -"180E" [ label="815cc0b83d733",shape="box",style="filled",color="grey" ]; -"181E" [ label="f787d827958c",shape="box",style="filled",color="grey" ]; -"182E" [ label="f20f7f513e",shape="box",style="filled",color="grey" ]; -"183E" [ label="290907417e13",shape="box",style="filled",color="grey" ]; -"184E" [ label="e8386a8e1c8a",shape="box",style="filled",color="grey" ]; -"185E" [ label="319bc900218b",shape="box",style="filled",color="grey" ]; -"186E" [ label="3ba7afb0e48ae1",shape="box",style="filled",color="grey" ]; -"187E" [ label="6ba0776fc8e",shape="box",style="filled",color="grey" ]; -"188E" [ label="09847696ae",shape="box",style="filled",color="grey" ]; -"383" [ label="908f9ad506eae9ab6ada185e3",color="yellow",style="filled",shape="doubleoctagon" ]; -"730E" [ label="65694ca6d575",shape="box",style="filled",color="grey" ]; -"732E" [ label="37f57e81ebed95",shape="box",style="filled",color="grey" ]; -"741E" [ label="9b6c",shape="box",style="filled",color="grey" ]; -"765E" [ label="88ebe2e8782c",shape="box",style="filled",color="grey" ]; -"796E" [ label="901b2105a902ee7791",shape="box",style="filled",color="grey" ]; -"384" [ label="593caebf2037317648bb451aa79",color="yellow",style="filled",shape="doubleoctagon" ]; -"726E" [ label="351dd0aefe480c",shape="box",style="filled",color="grey" ]; -"728E" [ label="56e1a896",shape="box",style="filled",color="grey" ]; -"742E" [ label="5ba4693031",shape="box",style="filled",color="grey" ]; -"385" [ label="717c254aeffbb527dabfc",shape="hexagon" ]; -"328E" [ label="123cc6d1ac",shape="box",style="filled",color="grey" ]; -"496E" [ label="",shape="box",style="filled",color="grey" ]; -"594E" [ label="7f8c557bcf3889",shape="box",style="filled",color="grey" ]; -"622E" [ label="da3d5",shape="box",style="filled",color="grey" ]; -"754E" [ label="68d8993e61d8c82cd29e8d0182b0",shape="box",style="filled",color="grey" ]; -"755E" [ label="4c865eec228e41e7f4e5fc68a9a6",shape="box",style="filled",color="grey" ]; -"756E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; -"757E" [ label="68d8993e61d8c82cd29e8d0182b0",shape="box",style="filled",color="grey" ]; -"758E" [ label="4c865eec228e41e7f4e5fc68a9a6",shape="box",style="filled",color="grey" ]; -"759E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; -"760E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; -"761E" [ label="eb9cf6456613d4cd06f7c0894bd6",shape="box",style="filled",color="grey" ]; -"762E" [ label="1e2298c4bb",shape="box",style="filled",color="grey" ]; -"1" -> "189E" [ label=" ",color="blue",arrowhead="dot" ]; -"1" -> "790E" [ label=" ",color="blue",arrowhead="dot" ]; -"2" -> "191E" [ label=" ",color="blue",arrowhead="dot" ]; -"3" -> "193E" [ label=" ",color="blue",arrowhead="dot" ]; -"4" -> "195E" [ label=" ",color="blue",arrowhead="dot" ]; -"5" -> "197E" [ label=" ",color="blue",arrowhead="dot" ]; -"6" -> "199E" [ label=" ",color="blue",arrowhead="dot" ]; -"7" -> "201E" [ label=" ",color="blue",arrowhead="dot" ]; -"8" -> "203E" [ label=" ",color="blue",arrowhead="dot" ]; -"9" -> "725E" [ label=" ",color="blue",arrowhead="dot" ]; -"9" -> "785E" [ label=" ",color="blue",arrowhead="dot" ]; -"10" -> "205E" [ label=" ",color="blue",arrowhead="dot" ]; -"11" -> "207E" [ label=" ",color="blue",arrowhead="dot" ]; -"12" -> "209E" [ label=" ",color="blue",arrowhead="dot" ]; -"13" -> "211E" [ label=" ",color="blue",arrowhead="dot" ]; -"14" -> "213E" [ label=" ",color="blue",arrowhead="dot" ]; -"15" -> "215E" [ label=" ",color="blue",arrowhead="dot" ]; -"16" -> "727E" [ label=" ",color="blue",arrowhead="dot" ]; -"16" -> "784E" [ label=" ",color="blue",arrowhead="dot" ]; -"17" -> "217E" [ label=" ",color="blue",arrowhead="dot" ]; -"17" -> "787E" [ label=" ",color="blue",arrowhead="dot" ]; -"18" -> "219E" [ label=" ",color="blue",arrowhead="dot" ]; -"19" -> "221E" [ label=" ",color="blue",arrowhead="dot" ]; -"20" -> "223E" [ label=" ",color="blue",arrowhead="dot" ]; -"21" -> "225E" [ label=" ",color="blue",arrowhead="dot" ]; -"22" -> "227E" [ label=" ",color="blue",arrowhead="dot" ]; -"22" -> "792E" [ label=" ",color="blue",arrowhead="dot" ]; -"23" -> "231E" [ label=" ",color="blue",arrowhead="dot" ]; -"24" -> "233E" [ label=" ",color="blue",arrowhead="dot" ]; -"25" -> "235E" [ label=" ",color="blue",arrowhead="dot" ]; -"26" -> "237E" [ label=" ",color="blue",arrowhead="dot" ]; -"27" -> "239E" [ label=" ",color="blue",arrowhead="dot" ]; -"27" -> "783E" [ label=" ",color="blue",arrowhead="dot" ]; -"28" -> "241E" [ label=" ",color="blue",arrowhead="dot" ]; -"28" -> "791E" [ label=" ",color="blue",arrowhead="dot" ]; -"29" -> "243E" [ label=" ",color="blue",arrowhead="dot" ]; -"30" -> "245E" [ label=" ",color="blue",arrowhead="dot" ]; -"31" -> "247E" [ label=" ",color="blue",arrowhead="dot" ]; -"32" -> "249E" [ label=" ",color="blue",arrowhead="dot" ]; -"33" -> "251E" [ label=" ",color="blue",arrowhead="dot" ]; -"34" -> "253E" [ label=" ",color="blue",arrowhead="dot" ]; -"35" -> "255E" [ label=" ",color="blue",arrowhead="dot" ]; -"36" -> "257E" [ label=" ",color="blue",arrowhead="dot" ]; -"37" -> "259E" [ label=" ",color="blue",arrowhead="dot" ]; -"38" -> "261E" [ label=" ",color="blue",arrowhead="dot" ]; -"39" -> "263E" [ label=" ",color="blue",arrowhead="dot" ]; -"40" -> "265E" [ label=" ",color="blue",arrowhead="dot" ]; -"41" -> "267E" [ label=" ",color="blue",arrowhead="dot" ]; -"42" -> "269E" [ label=" ",color="blue",arrowhead="dot" ]; -"43" -> "271E" [ label=" ",color="blue",arrowhead="dot" ]; -"44" -> "273E" [ label=" ",color="blue",arrowhead="dot" ]; -"45" -> "275E" [ label=" ",color="blue",arrowhead="dot" ]; -"46" -> "277E" [ label=" ",color="blue",arrowhead="dot" ]; -"47" -> "279E" [ label=" ",color="blue",arrowhead="dot" ]; -"48" -> "281E" [ label=" ",color="blue",arrowhead="dot" ]; -"49" -> "283E" [ label=" ",color="blue",arrowhead="dot" ]; -"50" -> "285E" [ label=" ",color="blue",arrowhead="dot" ]; -"51" -> "287E" [ label=" ",color="blue",arrowhead="dot" ]; -"52" -> "289E" [ label=" ",color="blue",arrowhead="dot" ]; -"53" -> "291E" [ label=" ",color="blue",arrowhead="dot" ]; -"54" -> "293E" [ label=" ",color="blue",arrowhead="dot" ]; -"55" -> "745E" [ label=" ",color="blue",arrowhead="dot" ]; -"56" -> "295E" [ label=" ",color="blue",arrowhead="dot" ]; -"57" -> "297E" [ label=" ",color="blue",arrowhead="dot" ]; -"58" -> "299E" [ label=" ",color="blue",arrowhead="dot" ]; -"59" -> "301E" [ label=" ",color="blue",arrowhead="dot" ]; -"59" -> "789E" [ label=" ",color="blue",arrowhead="dot" ]; -"60" -> "303E" [ label=" ",color="blue",arrowhead="dot" ]; -"61" -> "305E" [ label=" ",color="blue",arrowhead="dot" ]; -"62" -> "307E" [ label=" ",color="blue",arrowhead="dot" ]; -"63" -> "309E" [ label=" ",color="blue",arrowhead="dot" ]; -"64" -> "311E" [ label=" ",color="blue",arrowhead="dot" ]; -"65" -> "313E" [ label=" ",color="blue",arrowhead="dot" ]; -"66" -> "315E" [ label=" ",color="blue",arrowhead="dot" ]; -"67" -> "317E" [ label=" ",color="blue",arrowhead="dot" ]; -"68" -> "319E" [ label=" ",color="blue",arrowhead="dot" ]; -"69" -> "746E" [ label=" ",color="blue",arrowhead="dot" ]; -"70" -> "321E" [ label=" ",color="blue",arrowhead="dot" ]; -"71" -> "327E" [ label=" ",color="blue",arrowhead="dot" ]; -"72" -> "329E" [ label=" ",color="blue",arrowhead="dot" ]; -"73" -> "331E" [ label=" ",color="blue",arrowhead="dot" ]; -"74" -> "333E" [ label=" ",color="blue",arrowhead="dot" ]; -"75" -> "335E" [ label=" ",color="blue",arrowhead="dot" ]; -"76" -> "337E" [ label=" ",color="blue",arrowhead="dot" ]; -"77" -> "339E" [ label=" ",color="blue",arrowhead="dot" ]; -"78" -> "341E" [ label=" ",color="blue",arrowhead="dot" ]; -"79" -> "343E" [ label=" ",color="blue",arrowhead="dot" ]; -"80" -> "345E" [ label=" ",color="blue",arrowhead="dot" ]; -"81" -> "347E" [ label=" ",color="blue",arrowhead="dot" ]; -"82" -> "349E" [ label=" ",color="blue",arrowhead="dot" ]; -"83" -> "351E" [ label=" ",color="blue",arrowhead="dot" ]; -"84" -> "353E" [ label=" ",color="blue",arrowhead="dot" ]; -"85" -> "355E" [ label=" ",color="blue",arrowhead="dot" ]; -"85" -> "788E" [ label=" ",color="blue",arrowhead="dot" ]; -"86" -> "357E" [ label=" ",color="blue",arrowhead="dot" ]; -"87" -> "359E" [ label=" ",color="blue",arrowhead="dot" ]; -"88" -> "361E" [ label=" ",color="blue",arrowhead="dot" ]; -"89" -> "363E" [ label=" ",color="blue",arrowhead="dot" ]; -"90" -> "365E" [ label=" ",color="blue",arrowhead="dot" ]; -"91" -> "367E" [ label=" ",color="blue",arrowhead="dot" ]; -"92" -> "369E" [ label=" ",color="blue",arrowhead="dot" ]; -"93" -> "729E" [ label=" ",color="blue",arrowhead="dot" ]; -"94" -> "371E" [ label=" ",color="blue",arrowhead="dot" ]; -"95" -> "373E" [ label=" ",color="blue",arrowhead="dot" ]; -"96" -> "375E" [ label=" ",color="blue",arrowhead="dot" ]; -"97" -> "747E" [ label=" ",color="blue",arrowhead="dot" ]; -"98" -> "377E" [ label=" ",color="blue",arrowhead="dot" ]; -"99" -> "379E" [ label=" ",color="blue",arrowhead="dot" ]; -"100" -> "381E" [ label=" ",color="blue",arrowhead="dot" ]; -"101" -> "383E" [ label=" ",color="blue",arrowhead="dot" ]; -"102" -> "385E" [ label=" ",color="blue",arrowhead="dot" ]; -"103" -> "387E" [ label=" ",color="blue",arrowhead="dot" ]; -"104" -> "389E" [ label=" ",color="blue",arrowhead="dot" ]; -"105" -> "391E" [ label=" ",color="blue",arrowhead="dot" ]; -"106" -> "393E" [ label=" ",color="blue",arrowhead="dot" ]; -"107" -> "395E" [ label=" ",color="blue",arrowhead="dot" ]; -"108" -> "397E" [ label=" ",color="blue",arrowhead="dot" ]; -"109" -> "399E" [ label=" ",color="blue",arrowhead="dot" ]; -"110" -> "401E" [ label=" ",color="blue",arrowhead="dot" ]; -"111" -> "403E" [ label=" ",color="blue",arrowhead="dot" ]; -"112" -> "405E" [ label=" ",color="blue",arrowhead="dot" ]; -"113" -> "407E" [ label=" ",color="blue",arrowhead="dot" ]; -"114" -> "409E" [ label=" ",color="blue",arrowhead="dot" ]; -"115" -> "411E" [ label=" ",color="blue",arrowhead="dot" ]; -"116" -> "413E" [ label=" ",color="blue",arrowhead="dot" ]; -"117" -> "415E" [ label=" ",color="blue",arrowhead="dot" ]; -"118" -> "417E" [ label=" ",color="blue",arrowhead="dot" ]; -"119" -> "419E" [ label=" ",color="blue",arrowhead="dot" ]; -"120" -> "421E" [ label=" ",color="blue",arrowhead="dot" ]; -"121" -> "423E" [ label=" ",color="blue",arrowhead="dot" ]; -"122" -> "748E" [ label=" ",color="blue",arrowhead="dot" ]; -"123" -> "425E" [ label=" ",color="blue",arrowhead="dot" ]; -"124" -> "427E" [ label=" ",color="blue",arrowhead="dot" ]; -"124" -> "786E" [ label=" ",color="blue",arrowhead="dot" ]; -"125" -> "431E" [ label=" ",color="blue",arrowhead="dot" ]; -"126" -> "433E" [ label=" ",color="blue",arrowhead="dot" ]; -"127" -> "435E" [ label=" ",color="blue",arrowhead="dot" ]; -"128" -> "437E" [ label=" ",color="blue",arrowhead="dot" ]; -"129" -> "439E" [ label=" ",color="blue",arrowhead="dot" ]; -"130" -> "441E" [ label=" ",color="blue",arrowhead="dot" ]; -"131" -> "443E" [ label=" ",color="blue",arrowhead="dot" ]; -"132" -> "445E" [ label=" ",color="blue",arrowhead="dot" ]; -"133" -> "749E" [ label=" ",color="blue",arrowhead="dot" ]; -"134" -> "447E" [ label=" ",color="blue",arrowhead="dot" ]; -"135" -> "449E" [ label=" ",color="blue",arrowhead="dot" ]; -"135" -> "769E" [ label=" ",color="blue",arrowhead="dot" ]; -"135" -> "770E" [ label=" ",color="blue",arrowhead="dot" ]; -"136" -> "451E" [ label=" ",color="blue",arrowhead="dot" ]; -"137" -> "453E" [ label=" ",color="blue",arrowhead="dot" ]; -"138" -> "455E" [ label=" ",color="blue",arrowhead="dot" ]; -"139" -> "457E" [ label=" ",color="blue",arrowhead="dot" ]; -"140" -> "459E" [ label=" ",color="blue",arrowhead="dot" ]; -"141" -> "461E" [ label=" ",color="blue",arrowhead="dot" ]; -"142" -> "463E" [ label=" ",color="blue",arrowhead="dot" ]; -"143" -> "465E" [ label=" ",color="blue",arrowhead="dot" ]; -"144" -> "467E" [ label=" ",color="blue",arrowhead="dot" ]; -"145" -> "469E" [ label=" ",color="blue",arrowhead="dot" ]; -"146" -> "471E" [ label=" ",color="blue",arrowhead="dot" ]; -"147" -> "473E" [ label=" ",color="blue",arrowhead="dot" ]; -"148" -> "475E" [ label=" ",color="blue",arrowhead="dot" ]; -"149" -> "477E" [ label=" ",color="blue",arrowhead="dot" ]; -"150" -> "479E" [ label=" ",color="blue",arrowhead="dot" ]; -"151" -> "481E" [ label=" ",color="blue",arrowhead="dot" ]; -"152" -> "483E" [ label=" ",color="blue",arrowhead="dot" ]; -"153" -> "731E" [ label=" ",color="blue",arrowhead="dot" ]; -"154" -> "750E" [ label=" ",color="blue",arrowhead="dot" ]; -"155" -> "485E" [ label=" ",color="blue",arrowhead="dot" ]; -"156" -> "487E" [ label=" ",color="blue",arrowhead="dot" ]; -"157" -> "489E" [ label=" ",color="blue",arrowhead="dot" ]; -"158" -> "491E" [ label=" ",color="blue",arrowhead="dot" ]; -"159" -> "495E" [ label=" ",color="blue",arrowhead="dot" ]; -"160" -> "499E" [ label=" ",color="blue",arrowhead="dot" ]; -"161" -> "501E" [ label=" ",color="blue",arrowhead="dot" ]; -"162" -> "503E" [ label=" ",color="blue",arrowhead="dot" ]; -"163" -> "505E" [ label=" ",color="blue",arrowhead="dot" ]; -"164" -> "507E" [ label=" ",color="blue",arrowhead="dot" ]; -"165" -> "509E" [ label=" ",color="blue",arrowhead="dot" ]; -"166" -> "511E" [ label=" ",color="blue",arrowhead="dot" ]; -"167" -> "513E" [ label=" ",color="blue",arrowhead="dot" ]; -"168" -> "515E" [ label=" ",color="blue",arrowhead="dot" ]; -"169" -> "517E" [ label=" ",color="blue",arrowhead="dot" ]; -"170" -> "519E" [ label=" ",color="blue",arrowhead="dot" ]; -"171" -> "521E" [ label=" ",color="blue",arrowhead="dot" ]; -"172" -> "523E" [ label=" ",color="blue",arrowhead="dot" ]; -"173" -> "525E" [ label=" ",color="blue",arrowhead="dot" ]; -"174" -> "527E" [ label=" ",color="blue",arrowhead="dot" ]; -"175" -> "529E" [ label=" ",color="blue",arrowhead="dot" ]; -"176" -> "531E" [ label=" ",color="blue",arrowhead="dot" ]; -"177" -> "533E" [ label=" ",color="blue",arrowhead="dot" ]; -"178" -> "535E" [ label=" ",color="blue",arrowhead="dot" ]; -"179" -> "537E" [ label=" ",color="blue",arrowhead="dot" ]; -"180" -> "539E" [ label=" ",color="blue",arrowhead="dot" ]; -"181" -> "541E" [ label=" ",color="blue",arrowhead="dot" ]; -"182" -> "543E" [ label=" ",color="blue",arrowhead="dot" ]; -"183" -> "545E" [ label=" ",color="blue",arrowhead="dot" ]; -"184" -> "547E" [ label=" ",color="blue",arrowhead="dot" ]; -"185" -> "549E" [ label=" ",color="blue",arrowhead="dot" ]; -"186" -> "551E" [ label=" ",color="blue",arrowhead="dot" ]; -"187" -> "553E" [ label=" ",color="blue",arrowhead="dot" ]; -"188" -> "555E" [ label=" ",color="blue",arrowhead="dot" ]; -"189" -> "557E" [ label=" ",color="blue",arrowhead="dot" ]; -"190" -> "559E" [ label=" ",color="blue",arrowhead="dot" ]; -"191" -> "561E" [ label=" ",color="blue",arrowhead="dot" ]; -"192" -> "563E" [ label=" ",color="blue",arrowhead="dot" ]; -"193" -> "565E" [ label=" ",color="blue",arrowhead="dot" ]; -"194" -> "567E" [ label=" ",color="blue",arrowhead="dot" ]; -"195" -> "569E" [ label=" ",color="blue",arrowhead="dot" ]; -"196" -> "571E" [ label=" ",color="blue",arrowhead="dot" ]; -"197" -> "573E" [ label=" ",color="blue",arrowhead="dot" ]; -"198" -> "575E" [ label=" ",color="blue",arrowhead="dot" ]; -"199" -> "577E" [ label=" ",color="blue",arrowhead="dot" ]; -"200" -> "579E" [ label=" ",color="blue",arrowhead="dot" ]; -"201" -> "581E" [ label=" ",color="blue",arrowhead="dot" ]; -"202" -> "583E" [ label=" ",color="blue",arrowhead="dot" ]; -"203" -> "585E" [ label=" ",color="blue",arrowhead="dot" ]; -"204" -> "587E" [ label=" ",color="blue",arrowhead="dot" ]; -"205" -> "751E" [ label=" ",color="blue",arrowhead="dot" ]; -"206" -> "589E" [ label=" ",color="blue",arrowhead="dot" ]; -"207" -> "593E" [ label=" ",color="blue",arrowhead="dot" ]; -"208" -> "597E" [ label=" ",color="blue",arrowhead="dot" ]; -"209" -> "599E" [ label=" ",color="blue",arrowhead="dot" ]; -"210" -> "601E" [ label=" ",color="blue",arrowhead="dot" ]; -"211" -> "603E" [ label=" ",color="blue",arrowhead="dot" ]; -"212" -> "605E" [ label=" ",color="blue",arrowhead="dot" ]; -"213" -> "607E" [ label=" ",color="blue",arrowhead="dot" ]; -"214" -> "609E" [ label=" ",color="blue",arrowhead="dot" ]; -"215" -> "611E" [ label=" ",color="blue",arrowhead="dot" ]; -"216" -> "613E" [ label=" ",color="blue",arrowhead="dot" ]; -"217" -> "615E" [ label=" ",color="blue",arrowhead="dot" ]; -"218" -> "617E" [ label=" ",color="blue",arrowhead="dot" ]; -"219" -> "619E" [ label=" ",color="blue",arrowhead="dot" ]; -"220" -> "621E" [ label=" ",color="blue",arrowhead="dot" ]; -"221" -> "623E" [ label=" ",color="blue",arrowhead="dot" ]; -"222" -> "752E" [ label=" ",color="blue",arrowhead="dot" ]; -"223" -> "625E" [ label=" ",color="blue",arrowhead="dot" ]; -"224" -> "627E" [ label=" ",color="blue",arrowhead="dot" ]; -"225" -> "629E" [ label=" ",color="blue",arrowhead="dot" ]; -"226" -> "631E" [ label=" ",color="blue",arrowhead="dot" ]; -"227" -> "633E" [ label=" ",color="blue",arrowhead="dot" ]; -"228" -> "635E" [ label=" ",color="blue",arrowhead="dot" ]; -"229" -> "637E" [ label=" ",color="blue",arrowhead="dot" ]; -"230" -> "639E" [ label=" ",color="blue",arrowhead="dot" ]; -"231" -> "641E" [ label=" ",color="blue",arrowhead="dot" ]; -"232" -> "643E" [ label=" ",color="blue",arrowhead="dot" ]; -"233" -> "645E" [ label=" ",color="blue",arrowhead="dot" ]; -"234" -> "647E" [ label=" ",color="blue",arrowhead="dot" ]; -"235" -> "649E" [ label=" ",color="blue",arrowhead="dot" ]; -"236" -> "651E" [ label=" ",color="blue",arrowhead="dot" ]; -"237" -> "653E" [ label=" ",color="blue",arrowhead="dot" ]; -"238" -> "655E" [ label=" ",color="blue",arrowhead="dot" ]; -"239" -> "657E" [ label=" ",color="blue",arrowhead="dot" ]; -"240" -> "659E" [ label=" ",color="blue",arrowhead="dot" ]; -"241" -> "661E" [ label=" ",color="blue",arrowhead="dot" ]; -"242" -> "663E" [ label=" ",color="blue",arrowhead="dot" ]; -"243" -> "665E" [ label=" ",color="blue",arrowhead="dot" ]; -"244" -> "667E" [ label=" ",color="blue",arrowhead="dot" ]; -"245" -> "669E" [ label=" ",color="blue",arrowhead="dot" ]; -"246" -> "671E" [ label=" ",color="blue",arrowhead="dot" ]; -"247" -> "673E" [ label=" ",color="blue",arrowhead="dot" ]; -"248" -> "675E" [ label=" ",color="blue",arrowhead="dot" ]; -"249" -> "679E" [ label=" ",color="blue",arrowhead="dot" ]; -"250" -> "753E" [ label=" ",color="blue",arrowhead="dot" ]; -"251" -> "681E" [ label=" ",color="blue",arrowhead="dot" ]; -"252" -> "683E" [ label=" ",color="blue",arrowhead="dot" ]; -"253" -> "685E" [ label=" ",color="blue",arrowhead="dot" ]; -"254" -> "687E" [ label=" ",color="blue",arrowhead="dot" ]; -"255" -> "689E" [ label=" ",color="blue",arrowhead="dot" ]; -"256" -> "691E" [ label=" ",color="blue",arrowhead="dot" ]; -"257" -> "693E" [ label=" ",color="blue",arrowhead="dot" ]; -"258" -> "695E" [ label=" ",color="blue",arrowhead="dot" ]; -"259" -> "697E" [ label=" ",color="blue",arrowhead="dot" ]; -"260" -> "699E" [ label=" ",color="blue",arrowhead="dot" ]; -"261" -> "703E" [ label=" ",color="blue",arrowhead="dot" ]; -"262" -> "705E" [ label=" ",color="blue",arrowhead="dot" ]; -"264" -> "709E" [ label=" ",color="blue",arrowhead="dot" ]; -"265" -> "711E" [ label=" ",color="blue",arrowhead="dot" ]; -"266" -> "713E" [ label=" ",color="blue",arrowhead="dot" ]; -"267" -> "715E" [ label=" ",color="blue",arrowhead="dot" ]; -"268" -> "717E" [ label=" ",color="blue",arrowhead="dot" ]; -"269" -> "719E" [ label=" ",color="blue",arrowhead="dot" ]; -"270" -> "721E" [ label=" ",color="blue",arrowhead="dot" ]; -"272" -> "34E" [ label=" ",color="blue",arrowhead="dot" ]; -"272" -> "252E" [ label=" ",color="blue",arrowhead="dot" ]; -"272" -> "436E" [ label=" ",color="blue",arrowhead="dot" ]; -"274" -> "59E" [ label=" ",color="blue",arrowhead="dot" ]; -"274" -> "500E" [ label=" ",color="blue",arrowhead="dot" ]; -"274" -> "720E" [ label=" ",color="blue",arrowhead="dot" ]; -"275" -> "98E" [ label=" ",color="blue",arrowhead="dot" ]; -"278" -> "35E" [ label=" ",color="blue",arrowhead="dot" ]; -"278" -> "488E" [ label=" ",color="blue",arrowhead="dot" ]; -"278" -> "598E" [ label=" ",color="blue",arrowhead="dot" ]; -"278" -> "604E" [ label=" ",color="blue",arrowhead="dot" ]; -"278" -> "628E" [ label=" ",color="blue",arrowhead="dot" ]; -"279" -> "99E" [ label=" ",color="blue",arrowhead="dot" ]; -"280" -> "242E" [ label=" ",color="blue",arrowhead="dot" ]; -"280" -> "270E" [ label=" ",color="blue",arrowhead="dot" ]; -"280" -> "272E" [ label=" ",color="blue",arrowhead="dot" ]; -"280" -> "284E" [ label=" ",color="blue",arrowhead="dot" ]; -"280" -> "286E" [ label=" ",color="blue",arrowhead="dot" ]; -"280" -> "288E" [ label=" ",color="blue",arrowhead="dot" ]; -"280" -> "586E" [ label=" ",color="blue",arrowhead="dot" ]; -"280" -> "763E" [ label=" ",color="blue",arrowhead="dot" ]; -"281" -> "45E" [ label=" ",color="blue",arrowhead="dot" ]; -"281" -> "470E" [ label=" ",color="blue",arrowhead="dot" ]; -"281" -> "670E" [ label=" ",color="blue",arrowhead="dot" ]; -"281" -> "722E" [ label=" ",color="blue",arrowhead="dot" ]; -"282" -> "103E" [ label=" ",color="blue",arrowhead="dot" ]; -"283" -> "165E" [ label=" ",color="blue",arrowhead="dot" ]; -"284" -> "39E" [ label=" ",color="blue",arrowhead="dot" ]; -"284" -> "224E" [ label=" ",color="blue",arrowhead="dot" ]; -"284" -> "268E" [ label=" ",color="blue",arrowhead="dot" ]; -"284" -> "632E" [ label=" ",color="blue",arrowhead="dot" ]; -"284" -> "710E" [ label=" ",color="blue",arrowhead="dot" ]; -"285" -> "53E" [ label=" ",color="blue",arrowhead="dot" ]; -"286" -> "38E" [ label=" ",color="blue",arrowhead="dot" ]; -"286" -> "166E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "40E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "218E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "244E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "246E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "258E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "290E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "292E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "308E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "318E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "388E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "472E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "478E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "566E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "570E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "574E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "608E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "614E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "658E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "664E" [ label=" ",color="blue",arrowhead="dot" ]; -"288" -> "682E" [ label=" ",color="blue",arrowhead="dot" ]; -"289" -> "41E" [ label=" ",color="blue",arrowhead="dot" ]; -"289" -> "636E" [ label=" ",color="blue",arrowhead="dot" ]; -"289" -> "642E" [ label=" ",color="blue",arrowhead="dot" ]; -"289" -> "690E" [ label=" ",color="blue",arrowhead="dot" ]; -"289" -> "700E" [ label=" ",color="blue",arrowhead="dot" ]; -"290" -> "56E" [ label=" ",color="blue",arrowhead="dot" ]; -"290" -> "264E" [ label=" ",color="blue",arrowhead="dot" ]; -"290" -> "510E" [ label=" ",color="blue",arrowhead="dot" ]; -"290" -> "718E" [ label=" ",color="blue",arrowhead="dot" ]; -"291" -> "66E" [ label=" ",color="blue",arrowhead="dot" ]; -"291" -> "76E" [ label=" ",color="blue",arrowhead="dot" ]; -"291" -> "610E" [ label=" ",color="blue",arrowhead="dot" ]; -"292" -> "73E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "49E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "214E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "216E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "236E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "278E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "358E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "398E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "400E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "402E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "404E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "406E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "408E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "412E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "438E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "448E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "476E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "504E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "552E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "634E" [ label=" ",color="blue",arrowhead="dot" ]; -"293" -> "768E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "44E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "92E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "250E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "316E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "380E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "424E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "442E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "446E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "454E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "460E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "462E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "648E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "656E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "666E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "692E" [ label=" ",color="blue",arrowhead="dot" ]; -"295" -> "712E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "47E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "330E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "514E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "516E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "518E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "520E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "522E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "526E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "528E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "530E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "532E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "534E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "536E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "538E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "540E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "542E" [ label=" ",color="blue",arrowhead="dot" ]; -"296" -> "544E" [ label=" ",color="blue",arrowhead="dot" ]; -"297" -> "46E" [ label=" ",color="blue",arrowhead="dot" ]; -"297" -> "93E" [ label=" ",color="blue",arrowhead="dot" ]; -"297" -> "206E" [ label=" ",color="blue",arrowhead="dot" ]; -"297" -> "426E" [ label=" ",color="blue",arrowhead="dot" ]; -"297" -> "550E" [ label=" ",color="blue",arrowhead="dot" ]; -"297" -> "706E" [ label=" ",color="blue",arrowhead="dot" ]; -"298" -> "36E" [ label=" ",color="blue",arrowhead="dot" ]; -"298" -> "95E" [ label=" ",color="blue",arrowhead="dot" ]; -"298" -> "364E" [ label=" ",color="blue",arrowhead="dot" ]; -"298" -> "394E" [ label=" ",color="blue",arrowhead="dot" ]; -"298" -> "420E" [ label=" ",color="blue",arrowhead="dot" ]; -"298" -> "456E" [ label=" ",color="blue",arrowhead="dot" ]; -"298" -> "624E" [ label=" ",color="blue",arrowhead="dot" ]; -"299" -> "48E" [ label=" ",color="blue",arrowhead="dot" ]; -"299" -> "168E" [ label=" ",color="blue",arrowhead="dot" ]; -"299" -> "260E" [ label=" ",color="blue",arrowhead="dot" ]; -"299" -> "282E" [ label=" ",color="blue",arrowhead="dot" ]; -"299" -> "554E" [ label=" ",color="blue",arrowhead="dot" ]; -"299" -> "590E" [ label=" ",color="blue",arrowhead="dot" ]; -"299" -> "767E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "62E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "190E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "226E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "238E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "254E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "256E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "262E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "266E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "274E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "276E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "294E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "296E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "310E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "320E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "322E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "332E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "340E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "344E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "346E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "348E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "374E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "378E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "452E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "508E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "524E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "612E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "626E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "638E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "644E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "654E" [ label=" ",color="blue",arrowhead="dot" ]; -"300" -> "672E" [ label=" ",color="blue",arrowhead="dot" ]; -"302" -> "797E" [ label=" ",color="blue",arrowhead="dot" ]; -"302" -> "798E" [ label=" ",color="blue",arrowhead="dot" ]; -"303" -> "52E" [ label=" ",color="blue",arrowhead="dot" ]; -"303" -> "650E" [ label=" ",color="blue",arrowhead="dot" ]; -"304" -> "50E" [ label=" ",color="blue",arrowhead="dot" ]; -"304" -> "640E" [ label=" ",color="blue",arrowhead="dot" ]; -"304" -> "646E" [ label=" ",color="blue",arrowhead="dot" ]; -"304" -> "652E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "55E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "220E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "338E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "368E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "486E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "490E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "562E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "564E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "600E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "668E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "674E" [ label=" ",color="blue",arrowhead="dot" ]; -"306" -> "698E" [ label=" ",color="blue",arrowhead="dot" ]; -"307" -> "107E" [ label=" ",color="blue",arrowhead="dot" ]; -"308" -> "108E" [ label=" ",color="blue",arrowhead="dot" ]; -"309" -> "109E" [ label=" ",color="blue",arrowhead="dot" ]; -"310" -> "110E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "58E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "234E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "300E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "306E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "314E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "342E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "354E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "370E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "382E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "422E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "444E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "582E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "620E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "630E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "684E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "696E" [ label=" ",color="blue",arrowhead="dot" ]; -"311" -> "801E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "42E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "192E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "194E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "196E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "198E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "200E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "202E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "204E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "312E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "336E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "376E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "384E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "386E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "428E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "474E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "484E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "546E" [ label=" ",color="blue",arrowhead="dot" ]; -"312" -> "548E" [ label=" ",color="blue",arrowhead="dot" ]; -"314" -> "113E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "43E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "240E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "298E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "334E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "360E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "390E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "418E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "492E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "502E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "584E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "588E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "602E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "606E" [ label=" ",color="blue",arrowhead="dot" ]; -"315" -> "662E" [ label=" ",color="blue",arrowhead="dot" ]; -"316" -> "51E" [ label=" ",color="blue",arrowhead="dot" ]; -"317" -> "116E" [ label=" ",color="blue",arrowhead="dot" ]; -"318" -> "74E" [ label=" ",color="blue",arrowhead="dot" ]; -"319" -> "57E" [ label=" ",color="blue",arrowhead="dot" ]; -"319" -> "94E" [ label=" ",color="blue",arrowhead="dot" ]; -"319" -> "350E" [ label=" ",color="blue",arrowhead="dot" ]; -"319" -> "440E" [ label=" ",color="blue",arrowhead="dot" ]; -"319" -> "466E" [ label=" ",color="blue",arrowhead="dot" ]; -"319" -> "676E" [ label=" ",color="blue",arrowhead="dot" ]; -"320" -> "60E" [ label=" ",color="blue",arrowhead="dot" ]; -"320" -> "366E" [ label=" ",color="blue",arrowhead="dot" ]; -"320" -> "434E" [ label=" ",color="blue",arrowhead="dot" ]; -"320" -> "458E" [ label=" ",color="blue",arrowhead="dot" ]; -"320" -> "618E" [ label=" ",color="blue",arrowhead="dot" ]; -"321" -> "72E" [ label=" ",color="blue",arrowhead="dot" ]; -"321" -> "362E" [ label=" ",color="blue",arrowhead="dot" ]; -"321" -> "372E" [ label=" ",color="blue",arrowhead="dot" ]; -"321" -> "572E" [ label=" ",color="blue",arrowhead="dot" ]; -"322" -> "54E" [ label=" ",color="blue",arrowhead="dot" ]; -"322" -> "222E" [ label=" ",color="blue",arrowhead="dot" ]; -"322" -> "302E" [ label=" ",color="blue",arrowhead="dot" ]; -"322" -> "556E" [ label=" ",color="blue",arrowhead="dot" ]; -"322" -> "558E" [ label=" ",color="blue",arrowhead="dot" ]; -"323" -> "37E" [ label=" ",color="blue",arrowhead="dot" ]; -"323" -> "208E" [ label=" ",color="blue",arrowhead="dot" ]; -"323" -> "210E" [ label=" ",color="blue",arrowhead="dot" ]; -"323" -> "352E" [ label=" ",color="blue",arrowhead="dot" ]; -"323" -> "450E" [ label=" ",color="blue",arrowhead="dot" ]; -"323" -> "568E" [ label=" ",color="blue",arrowhead="dot" ]; -"323" -> "576E" [ label=" ",color="blue",arrowhead="dot" ]; -"323" -> "686E" [ label=" ",color="blue",arrowhead="dot" ]; -"324" -> "228E" [ label=" ",color="blue",arrowhead="dot" ]; -"324" -> "248E" [ label=" ",color="blue",arrowhead="dot" ]; -"324" -> "304E" [ label=" ",color="blue",arrowhead="dot" ]; -"324" -> "468E" [ label=" ",color="blue",arrowhead="dot" ]; -"324" -> "578E" [ label=" ",color="blue",arrowhead="dot" ]; -"324" -> "660E" [ label=" ",color="blue",arrowhead="dot" ]; -"324" -> "688E" [ label=" ",color="blue",arrowhead="dot" ]; -"324" -> "694E" [ label=" ",color="blue",arrowhead="dot" ]; -"324" -> "714E" [ label=" ",color="blue",arrowhead="dot" ]; -"324" -> "766E" [ label=" ",color="blue",arrowhead="dot" ]; -"325" -> "97E" [ label=" ",color="blue",arrowhead="dot" ]; -"325" -> "506E" [ label=" ",color="blue",arrowhead="dot" ]; -"326" -> "61E" [ label=" ",color="blue",arrowhead="dot" ]; -"326" -> "175E" [ label=" ",color="blue",arrowhead="dot" ]; -"326" -> "482E" [ label=" ",color="blue",arrowhead="dot" ]; -"328" -> "75E" [ label=" ",color="blue",arrowhead="dot" ]; -"328" -> "580E" [ label=" ",color="blue",arrowhead="dot" ]; -"329" -> "96E" [ label=" ",color="blue",arrowhead="dot" ]; -"330" -> "100E" [ label=" ",color="blue",arrowhead="dot" ]; -"330" -> "170E" [ label=" ",color="blue",arrowhead="dot" ]; -"333" -> "63E" [ label=" ",color="blue",arrowhead="dot" ]; -"333" -> "67E" [ label=" ",color="blue",arrowhead="dot" ]; -"333" -> "68E" [ label=" ",color="blue",arrowhead="dot" ]; -"333" -> "69E" [ label=" ",color="blue",arrowhead="dot" ]; -"333" -> "70E" [ label=" ",color="blue",arrowhead="dot" ]; -"333" -> "71E" [ label=" ",color="blue",arrowhead="dot" ]; -"333" -> "802E" [ label=" ",color="blue",arrowhead="dot" ]; -"333" -> "793E" [ label=" ",color="blue",arrowhead="dot" ]; -"334" -> "64E" [ label=" ",color="blue",arrowhead="dot" ]; -"334" -> "81E" [ label=" ",color="blue",arrowhead="dot" ]; -"334" -> "82E" [ label=" ",color="blue",arrowhead="dot" ]; -"334" -> "83E" [ label=" ",color="blue",arrowhead="dot" ]; -"334" -> "84E" [ label=" ",color="blue",arrowhead="dot" ]; -"334" -> "85E" [ label=" ",color="blue",arrowhead="dot" ]; -"334" -> "86E" [ label=" ",color="blue",arrowhead="dot" ]; -"334" -> "87E" [ label=" ",color="blue",arrowhead="dot" ]; -"334" -> "88E" [ label=" ",color="blue",arrowhead="dot" ]; -"334" -> "89E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "1E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "2E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "3E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "4E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "5E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "6E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "7E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "8E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "9E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "10E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "11E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "12E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "13E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "14E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "15E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "16E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "17E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "18E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "19E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "20E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "21E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "22E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "23E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "24E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "25E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "26E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "27E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "28E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "29E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "30E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "31E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "65E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "119E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "150E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "176E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "743E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "744E" [ label=" ",color="blue",arrowhead="dot" ]; -"336" -> "764E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "120E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "121E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "122E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "123E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "124E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "125E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "126E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "127E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "128E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "129E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "130E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "131E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "132E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "133E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "134E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "135E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "136E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "137E" [ label=" ",color="blue",arrowhead="dot" ]; -"337" -> "138E" [ label=" ",color="blue",arrowhead="dot" ]; -"339" -> "151E" [ label=" ",color="blue",arrowhead="dot" ]; -"339" -> "153E" [ label=" ",color="blue",arrowhead="dot" ]; -"339" -> "154E" [ label=" ",color="blue",arrowhead="dot" ]; -"339" -> "155E" [ label=" ",color="blue",arrowhead="dot" ]; -"339" -> "156E" [ label=" ",color="blue",arrowhead="dot" ]; -"339" -> "157E" [ label=" ",color="blue",arrowhead="dot" ]; -"339" -> "158E" [ label=" ",color="blue",arrowhead="dot" ]; -"339" -> "159E" [ label=" ",color="blue",arrowhead="dot" ]; -"339" -> "160E" [ label=" ",color="blue",arrowhead="dot" ]; -"339" -> "161E" [ label=" ",color="blue",arrowhead="dot" ]; -"339" -> "162E" [ label=" ",color="blue",arrowhead="dot" ]; -"347" -> "139E" [ label=" ",color="blue",arrowhead="dot" ]; -"347" -> "795E" [ label=" ",color="blue",arrowhead="dot" ]; -"348" -> "799E" [ label=" ",color="blue",arrowhead="dot" ]; -"348" -> "800E" [ label=" ",color="blue",arrowhead="dot" ]; -"349" -> "141E" [ label=" ",color="blue",arrowhead="dot" ]; -"350" -> "142E" [ label=" ",color="blue",arrowhead="dot" ]; -"350" -> "678E" [ label=" ",color="blue",arrowhead="dot" ]; -"351" -> "143E" [ label=" ",color="blue",arrowhead="dot" ]; -"351" -> "232E" [ label=" ",color="blue",arrowhead="dot" ]; -"351" -> "680E" [ label=" ",color="blue",arrowhead="dot" ]; -"351" -> "704E" [ label=" ",color="blue",arrowhead="dot" ]; -"352" -> "144E" [ label=" ",color="blue",arrowhead="dot" ]; -"352" -> "432E" [ label=" ",color="blue",arrowhead="dot" ]; -"353" -> "145E" [ label=" ",color="blue",arrowhead="dot" ]; -"354" -> "146E" [ label=" ",color="blue",arrowhead="dot" ]; -"354" -> "396E" [ label=" ",color="blue",arrowhead="dot" ]; -"355" -> "147E" [ label=" ",color="blue",arrowhead="dot" ]; -"356" -> "148E" [ label=" ",color="blue",arrowhead="dot" ]; -"357" -> "149E" [ label=" ",color="blue",arrowhead="dot" ]; -"358" -> "167E" [ label=" ",color="blue",arrowhead="dot" ]; -"359" -> "169E" [ label=" ",color="blue",arrowhead="dot" ]; -"360" -> "171E" [ label=" ",color="blue",arrowhead="dot" ]; -"361" -> "172E" [ label=" ",color="blue",arrowhead="dot" ]; -"362" -> "173E" [ label=" ",color="blue",arrowhead="dot" ]; -"363" -> "174E" [ label=" ",color="blue",arrowhead="dot" ]; -"364" -> "101E" [ label=" ",color="blue",arrowhead="dot" ]; -"365" -> "102E" [ label=" ",color="blue",arrowhead="dot" ]; -"367" -> "104E" [ label=" ",color="blue",arrowhead="dot" ]; -"368" -> "105E" [ label=" ",color="blue",arrowhead="dot" ]; -"369" -> "106E" [ label=" ",color="blue",arrowhead="dot" ]; -"374" -> "111E" [ label=" ",color="blue",arrowhead="dot" ]; -"375" -> "112E" [ label=" ",color="blue",arrowhead="dot" ]; -"377" -> "114E" [ label=" ",color="blue",arrowhead="dot" ]; -"378" -> "115E" [ label=" ",color="blue",arrowhead="dot" ]; -"380" -> "117E" [ label=" ",color="blue",arrowhead="dot" ]; -"380" -> "392E" [ label=" ",color="blue",arrowhead="dot" ]; -"381" -> "118E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "177E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "178E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "179E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "180E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "181E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "182E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "183E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "184E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "185E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "186E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "187E" [ label=" ",color="blue",arrowhead="dot" ]; -"382" -> "188E" [ label=" ",color="blue",arrowhead="dot" ]; -"383" -> "730E" [ label=" ",color="blue",arrowhead="dot" ]; -"383" -> "732E" [ label=" ",color="blue",arrowhead="dot" ]; -"383" -> "741E" [ label=" ",color="blue",arrowhead="dot" ]; -"383" -> "765E" [ label=" ",color="blue",arrowhead="dot" ]; -"383" -> "796E" [ label=" ",color="blue",arrowhead="dot" ]; -"384" -> "726E" [ label=" ",color="blue",arrowhead="dot" ]; -"384" -> "728E" [ label=" ",color="blue",arrowhead="dot" ]; -"384" -> "742E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "328E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "496E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "594E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "622E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "754E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "755E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "756E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "757E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "758E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "759E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "760E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "761E" [ label=" ",color="blue",arrowhead="dot" ]; -"385" -> "762E" [ label=" ",color="blue",arrowhead="dot" ]; -"1E" -> "34E" [ color="purple",arrowhead="none" ]; -"2E" -> "35E" [ color="purple",arrowhead="none" ]; -"3E" -> "36E" [ color="purple",arrowhead="none" ]; -"4E" -> "37E" [ color="purple",arrowhead="none" ]; -"5E" -> "38E" [ color="purple",arrowhead="none" ]; -"6E" -> "39E" [ color="purple",arrowhead="none" ]; -"7E" -> "40E" [ color="purple",arrowhead="none" ]; -"9E" -> "41E" [ color="purple",arrowhead="none" ]; -"10E" -> "42E" [ color="purple",arrowhead="none" ]; -"11E" -> "43E" [ color="purple",arrowhead="none" ]; -"12E" -> "44E" [ color="purple",arrowhead="none" ]; -"13E" -> "45E" [ color="purple",arrowhead="none" ]; -"14E" -> "46E" [ color="purple",arrowhead="none" ]; -"15E" -> "47E" [ color="purple",arrowhead="none" ]; -"16E" -> "48E" [ color="purple",arrowhead="none" ]; -"49E" -> "17E" [ color="purple",arrowhead="none" ]; -"18E" -> "50E" [ color="purple",arrowhead="none" ]; -"19E" -> "51E" [ color="purple",arrowhead="none" ]; -"20E" -> "52E" [ color="purple",arrowhead="none" ]; -"21E" -> "53E" [ color="purple",arrowhead="none" ]; -"22E" -> "54E" [ color="purple",arrowhead="none" ]; -"23E" -> "55E" [ color="purple",arrowhead="none" ]; -"24E" -> "56E" [ color="purple",arrowhead="none" ]; -"25E" -> "57E" [ color="purple",arrowhead="none" ]; -"26E" -> "58E" [ color="purple",arrowhead="none" ]; -"27E" -> "59E" [ color="purple",arrowhead="none" ]; -"28E" -> "60E" [ color="purple",arrowhead="none" ]; -"29E" -> "61E" [ color="purple",arrowhead="none" ]; -"30E" -> "62E" [ color="purple",arrowhead="none" ]; -"31E" -> "63E" [ color="purple",arrowhead="none" ]; -"64E" -> "65E" [ color="purple",arrowhead="none" ]; -"66E" -> "8E" [ color="purple",arrowhead="none" ]; -"71E" -> "76E" [ color="purple",arrowhead="none" ]; -"67E" -> "72E" [ color="purple",arrowhead="none" ]; -"68E" -> "73E" [ color="purple",arrowhead="none" ]; -"69E" -> "74E" [ color="purple",arrowhead="none" ]; -"70E" -> "75E" [ color="purple",arrowhead="none" ]; -"81E" -> "92E" [ color="purple",arrowhead="none" ]; -"82E" -> "93E" [ color="purple",arrowhead="none" ]; -"83E" -> "94E" [ color="purple",arrowhead="none" ]; -"84E" -> "95E" [ color="purple",arrowhead="none" ]; -"85E" -> "96E" [ color="purple",arrowhead="none" ]; -"86E" -> "97E" [ color="purple",arrowhead="none" ]; -"87E" -> "98E" [ color="purple",arrowhead="none" ]; -"88E" -> "99E" [ color="purple",arrowhead="none" ]; -"89E" -> "100E" [ color="purple",arrowhead="none" ]; -"101E" -> "120E" [ color="purple",arrowhead="none" ]; -"102E" -> "121E" [ color="purple",arrowhead="none" ]; -"103E" -> "122E" [ color="purple",arrowhead="none" ]; -"104E" -> "123E" [ color="purple",arrowhead="none" ]; -"105E" -> "124E" [ color="purple",arrowhead="none" ]; -"106E" -> "125E" [ color="purple",arrowhead="none" ]; -"107E" -> "126E" [ color="purple",arrowhead="none" ]; -"108E" -> "127E" [ color="purple",arrowhead="none" ]; -"109E" -> "128E" [ color="purple",arrowhead="none" ]; -"110E" -> "129E" [ color="purple",arrowhead="none" ]; -"111E" -> "130E" [ color="purple",arrowhead="none" ]; -"112E" -> "131E" [ color="purple",arrowhead="none" ]; -"113E" -> "132E" [ color="purple",arrowhead="none" ]; -"114E" -> "133E" [ color="purple",arrowhead="none" ]; -"115E" -> "134E" [ color="purple",arrowhead="none" ]; -"116E" -> "135E" [ color="purple",arrowhead="none" ]; -"117E" -> "136E" [ color="purple",arrowhead="none" ]; -"118E" -> "137E" [ color="purple",arrowhead="none" ]; -"119E" -> "138E" [ color="purple",arrowhead="none" ]; -"139E" -> "151E" [ color="purple",arrowhead="none" ]; -"141E" -> "153E" [ color="purple",arrowhead="none" ]; -"142E" -> "154E" [ color="purple",arrowhead="none" ]; -"143E" -> "155E" [ color="purple",arrowhead="none" ]; -"144E" -> "156E" [ color="purple",arrowhead="none" ]; -"145E" -> "157E" [ color="purple",arrowhead="none" ]; -"146E" -> "158E" [ color="purple",arrowhead="none" ]; -"147E" -> "159E" [ color="purple",arrowhead="none" ]; -"148E" -> "160E" [ color="purple",arrowhead="none" ]; -"149E" -> "161E" [ color="purple",arrowhead="none" ]; -"150E" -> "162E" [ color="purple",arrowhead="none" ]; -"165E" -> "177E" [ color="purple",arrowhead="none" ]; -"166E" -> "178E" [ color="purple",arrowhead="none" ]; -"167E" -> "179E" [ color="purple",arrowhead="none" ]; -"168E" -> "180E" [ color="purple",arrowhead="none" ]; -"169E" -> "181E" [ color="purple",arrowhead="none" ]; -"170E" -> "182E" [ color="purple",arrowhead="none" ]; -"171E" -> "183E" [ color="purple",arrowhead="none" ]; -"172E" -> "184E" [ color="purple",arrowhead="none" ]; -"173E" -> "185E" [ color="purple",arrowhead="none" ]; -"174E" -> "186E" [ color="purple",arrowhead="none" ]; -"175E" -> "187E" [ color="purple",arrowhead="none" ]; -"176E" -> "188E" [ color="purple",arrowhead="none" ]; -"189E" -> "190E" [ color="purple",arrowhead="none" ]; -"191E" -> "192E" [ color="purple",arrowhead="none" ]; -"193E" -> "194E" [ color="purple",arrowhead="none" ]; -"195E" -> "196E" [ color="purple",arrowhead="none" ]; -"197E" -> "198E" [ color="purple",arrowhead="none" ]; -"199E" -> "200E" [ color="purple",arrowhead="none" ]; -"201E" -> "202E" [ color="purple",arrowhead="none" ]; -"203E" -> "204E" [ color="purple",arrowhead="none" ]; -"205E" -> "206E" [ color="purple",arrowhead="none" ]; -"207E" -> "208E" [ color="purple",arrowhead="none" ]; -"209E" -> "210E" [ color="purple",arrowhead="none" ]; -"412E" -> "211E" [ color="purple",arrowhead="none" ]; -"214E" -> "213E" [ color="purple",arrowhead="none" ]; -"216E" -> "215E" [ color="purple",arrowhead="none" ]; -"217E" -> "218E" [ color="purple",arrowhead="none" ]; -"219E" -> "220E" [ color="purple",arrowhead="none" ]; -"221E" -> "222E" [ color="purple",arrowhead="none" ]; -"223E" -> "224E" [ color="purple",arrowhead="none" ]; -"225E" -> "226E" [ color="purple",arrowhead="none" ]; -"227E" -> "228E" [ color="purple",arrowhead="none" ]; -"231E" -> "232E" [ color="purple",arrowhead="none" ]; -"233E" -> "234E" [ color="purple",arrowhead="none" ]; -"236E" -> "235E" [ color="purple",arrowhead="none" ]; -"237E" -> "238E" [ color="purple",arrowhead="none" ]; -"239E" -> "240E" [ color="purple",arrowhead="none" ]; -"241E" -> "242E" [ color="purple",arrowhead="none" ]; -"243E" -> "244E" [ color="purple",arrowhead="none" ]; -"245E" -> "246E" [ color="purple",arrowhead="none" ]; -"247E" -> "248E" [ color="purple",arrowhead="none" ]; -"249E" -> "250E" [ color="purple",arrowhead="none" ]; -"251E" -> "252E" [ color="purple",arrowhead="none" ]; -"253E" -> "254E" [ color="purple",arrowhead="none" ]; -"255E" -> "256E" [ color="purple",arrowhead="none" ]; -"257E" -> "258E" [ color="purple",arrowhead="none" ]; -"259E" -> "260E" [ color="purple",arrowhead="none" ]; -"261E" -> "262E" [ color="purple",arrowhead="none" ]; -"263E" -> "264E" [ color="purple",arrowhead="none" ]; -"265E" -> "266E" [ color="purple",arrowhead="none" ]; -"267E" -> "268E" [ color="purple",arrowhead="none" ]; -"269E" -> "270E" [ color="purple",arrowhead="none" ]; -"271E" -> "272E" [ color="purple",arrowhead="none" ]; -"273E" -> "274E" [ color="purple",arrowhead="none" ]; -"275E" -> "276E" [ color="purple",arrowhead="none" ]; -"278E" -> "277E" [ color="purple",arrowhead="none" ]; -"279E" -> "767E" [ color="purple",arrowhead="none" ]; -"281E" -> "282E" [ color="purple",arrowhead="none" ]; -"283E" -> "284E" [ color="purple",arrowhead="none" ]; -"285E" -> "286E" [ color="purple",arrowhead="none" ]; -"768E" -> "287E" [ color="purple",arrowhead="none" ]; -"289E" -> "290E" [ color="purple",arrowhead="none" ]; -"291E" -> "292E" [ color="purple",arrowhead="none" ]; -"293E" -> "294E" [ color="purple",arrowhead="none" ]; -"295E" -> "296E" [ color="purple",arrowhead="none" ]; -"297E" -> "298E" [ color="purple",arrowhead="none" ]; -"299E" -> "300E" [ color="purple",arrowhead="none" ]; -"301E" -> "302E" [ color="purple",arrowhead="none" ]; -"303E" -> "304E" [ color="purple",arrowhead="none" ]; -"305E" -> "306E" [ color="purple",arrowhead="none" ]; -"307E" -> "308E" [ color="purple",arrowhead="none" ]; -"309E" -> "310E" [ color="purple",arrowhead="none" ]; -"311E" -> "312E" [ color="purple",arrowhead="none" ]; -"313E" -> "314E" [ color="purple",arrowhead="none" ]; -"315E" -> "316E" [ color="purple",arrowhead="none" ]; -"317E" -> "318E" [ color="purple",arrowhead="none" ]; -"319E" -> "320E" [ color="purple",arrowhead="none" ]; -"321E" -> "322E" [ color="purple",arrowhead="none" ]; -"327E" -> "800E" [ color="purple",arrowhead="none" ]; -"329E" -> "330E" [ color="purple",arrowhead="none" ]; -"331E" -> "332E" [ color="purple",arrowhead="none" ]; -"333E" -> "334E" [ color="purple",arrowhead="none" ]; -"335E" -> "336E" [ color="purple",arrowhead="none" ]; -"337E" -> "338E" [ color="purple",arrowhead="none" ]; -"339E" -> "340E" [ color="purple",arrowhead="none" ]; -"341E" -> "342E" [ color="purple",arrowhead="none" ]; -"343E" -> "344E" [ color="purple",arrowhead="none" ]; -"345E" -> "346E" [ color="purple",arrowhead="none" ]; -"347E" -> "348E" [ color="purple",arrowhead="none" ]; -"349E" -> "350E" [ color="purple",arrowhead="none" ]; -"351E" -> "352E" [ color="purple",arrowhead="none" ]; -"353E" -> "354E" [ color="purple",arrowhead="none" ]; -"412E" -> "355E" [ color="purple",arrowhead="none" ]; -"357E" -> "358E" [ color="purple",arrowhead="none" ]; -"359E" -> "360E" [ color="purple",arrowhead="none" ]; -"361E" -> "362E" [ color="purple",arrowhead="none" ]; -"363E" -> "364E" [ color="purple",arrowhead="none" ]; -"365E" -> "366E" [ color="purple",arrowhead="none" ]; -"367E" -> "368E" [ color="purple",arrowhead="none" ]; -"369E" -> "370E" [ color="purple",arrowhead="none" ]; -"371E" -> "372E" [ color="purple",arrowhead="none" ]; -"373E" -> "374E" [ color="purple",arrowhead="none" ]; -"375E" -> "376E" [ color="purple",arrowhead="none" ]; -"377E" -> "378E" [ color="purple",arrowhead="none" ]; -"379E" -> "380E" [ color="purple",arrowhead="none" ]; -"381E" -> "382E" [ color="purple",arrowhead="none" ]; -"383E" -> "384E" [ color="purple",arrowhead="none" ]; -"385E" -> "386E" [ color="purple",arrowhead="none" ]; -"387E" -> "388E" [ color="purple",arrowhead="none" ]; -"389E" -> "390E" [ color="purple",arrowhead="none" ]; -"391E" -> "392E" [ color="purple",arrowhead="none" ]; -"393E" -> "394E" [ color="purple",arrowhead="none" ]; -"395E" -> "396E" [ color="purple",arrowhead="none" ]; -"397E" -> "398E" [ color="purple",arrowhead="none" ]; -"399E" -> "400E" [ color="purple",arrowhead="none" ]; -"402E" -> "401E" [ color="purple",arrowhead="none" ]; -"404E" -> "403E" [ color="purple",arrowhead="none" ]; -"406E" -> "405E" [ color="purple",arrowhead="none" ]; -"408E" -> "407E" [ color="purple",arrowhead="none" ]; -"236E" -> "409E" [ color="purple",arrowhead="none" ]; -"412E" -> "411E" [ color="purple",arrowhead="none" ]; -"412E" -> "413E" [ color="purple",arrowhead="none" ]; -"278E" -> "415E" [ color="purple",arrowhead="none" ]; -"417E" -> "418E" [ color="purple",arrowhead="none" ]; -"419E" -> "420E" [ color="purple",arrowhead="none" ]; -"421E" -> "422E" [ color="purple",arrowhead="none" ]; -"423E" -> "424E" [ color="purple",arrowhead="none" ]; -"425E" -> "426E" [ color="purple",arrowhead="none" ]; -"427E" -> "428E" [ color="purple",arrowhead="none" ]; -"431E" -> "432E" [ color="purple",arrowhead="none" ]; -"433E" -> "434E" [ color="purple",arrowhead="none" ]; -"435E" -> "436E" [ color="purple",arrowhead="none" ]; -"438E" -> "437E" [ color="purple",arrowhead="none" ]; -"439E" -> "440E" [ color="purple",arrowhead="none" ]; -"441E" -> "442E" [ color="purple",arrowhead="none" ]; -"443E" -> "444E" [ color="purple",arrowhead="none" ]; -"445E" -> "446E" [ color="purple",arrowhead="none" ]; -"448E" -> "447E" [ color="purple",arrowhead="none" ]; -"449E" -> "450E" [ color="purple",arrowhead="none" ]; -"451E" -> "452E" [ color="purple",arrowhead="none" ]; -"453E" -> "454E" [ color="purple",arrowhead="none" ]; -"455E" -> "456E" [ color="purple",arrowhead="none" ]; -"457E" -> "458E" [ color="purple",arrowhead="none" ]; -"459E" -> "460E" [ color="purple",arrowhead="none" ]; -"461E" -> "462E" [ color="purple",arrowhead="none" ]; -"236E" -> "463E" [ color="purple",arrowhead="none" ]; -"465E" -> "466E" [ color="purple",arrowhead="none" ]; -"467E" -> "468E" [ color="purple",arrowhead="none" ]; -"469E" -> "470E" [ color="purple",arrowhead="none" ]; -"471E" -> "472E" [ color="purple",arrowhead="none" ]; -"473E" -> "474E" [ color="purple",arrowhead="none" ]; -"476E" -> "475E" [ color="purple",arrowhead="none" ]; -"477E" -> "478E" [ color="purple",arrowhead="none" ]; -"479E" -> "358E" [ color="purple",arrowhead="none" ]; -"481E" -> "482E" [ color="purple",arrowhead="none" ]; -"483E" -> "484E" [ color="purple",arrowhead="none" ]; -"485E" -> "486E" [ color="purple",arrowhead="none" ]; -"487E" -> "488E" [ color="purple",arrowhead="none" ]; -"489E" -> "490E" [ color="purple",arrowhead="none" ]; -"491E" -> "492E" [ color="purple",arrowhead="none" ]; -"495E" -> "795E" [ color="purple",arrowhead="none" ]; -"499E" -> "500E" [ color="purple",arrowhead="none" ]; -"501E" -> "502E" [ color="purple",arrowhead="none" ]; -"504E" -> "503E" [ color="purple",arrowhead="none" ]; -"505E" -> "506E" [ color="purple",arrowhead="none" ]; -"507E" -> "508E" [ color="purple",arrowhead="none" ]; -"509E" -> "510E" [ color="purple",arrowhead="none" ]; -"412E" -> "511E" [ color="purple",arrowhead="none" ]; -"513E" -> "514E" [ color="purple",arrowhead="none" ]; -"515E" -> "516E" [ color="purple",arrowhead="none" ]; -"517E" -> "518E" [ color="purple",arrowhead="none" ]; -"519E" -> "520E" [ color="purple",arrowhead="none" ]; -"521E" -> "522E" [ color="purple",arrowhead="none" ]; -"523E" -> "524E" [ color="purple",arrowhead="none" ]; -"525E" -> "526E" [ color="purple",arrowhead="none" ]; -"527E" -> "528E" [ color="purple",arrowhead="none" ]; -"529E" -> "530E" [ color="purple",arrowhead="none" ]; -"531E" -> "532E" [ color="purple",arrowhead="none" ]; -"533E" -> "534E" [ color="purple",arrowhead="none" ]; -"535E" -> "536E" [ color="purple",arrowhead="none" ]; -"537E" -> "538E" [ color="purple",arrowhead="none" ]; -"539E" -> "540E" [ color="purple",arrowhead="none" ]; -"541E" -> "542E" [ color="purple",arrowhead="none" ]; -"543E" -> "544E" [ color="purple",arrowhead="none" ]; -"545E" -> "546E" [ color="purple",arrowhead="none" ]; -"547E" -> "548E" [ color="purple",arrowhead="none" ]; -"549E" -> "550E" [ color="purple",arrowhead="none" ]; -"551E" -> "552E" [ color="purple",arrowhead="none" ]; -"553E" -> "554E" [ color="purple",arrowhead="none" ]; -"555E" -> "556E" [ color="purple",arrowhead="none" ]; -"557E" -> "558E" [ color="purple",arrowhead="none" ]; -"278E" -> "559E" [ color="purple",arrowhead="none" ]; -"561E" -> "562E" [ color="purple",arrowhead="none" ]; -"563E" -> "564E" [ color="purple",arrowhead="none" ]; -"565E" -> "566E" [ color="purple",arrowhead="none" ]; -"567E" -> "568E" [ color="purple",arrowhead="none" ]; -"569E" -> "570E" [ color="purple",arrowhead="none" ]; -"571E" -> "572E" [ color="purple",arrowhead="none" ]; -"573E" -> "574E" [ color="purple",arrowhead="none" ]; -"575E" -> "576E" [ color="purple",arrowhead="none" ]; -"577E" -> "578E" [ color="purple",arrowhead="none" ]; -"579E" -> "580E" [ color="purple",arrowhead="none" ]; -"581E" -> "582E" [ color="purple",arrowhead="none" ]; -"583E" -> "584E" [ color="purple",arrowhead="none" ]; -"585E" -> "586E" [ color="purple",arrowhead="none" ]; -"587E" -> "588E" [ color="purple",arrowhead="none" ]; -"589E" -> "590E" [ color="purple",arrowhead="none" ]; -"593E" -> "594E" [ color="purple",arrowhead="none" ]; -"597E" -> "598E" [ color="purple",arrowhead="none" ]; -"599E" -> "600E" [ color="purple",arrowhead="none" ]; -"601E" -> "602E" [ color="purple",arrowhead="none" ]; -"603E" -> "604E" [ color="purple",arrowhead="none" ]; -"605E" -> "606E" [ color="purple",arrowhead="none" ]; -"607E" -> "608E" [ color="purple",arrowhead="none" ]; -"609E" -> "610E" [ color="purple",arrowhead="none" ]; -"611E" -> "612E" [ color="purple",arrowhead="none" ]; -"613E" -> "614E" [ color="purple",arrowhead="none" ]; -"615E" -> "358E" [ color="purple",arrowhead="none" ]; -"617E" -> "618E" [ color="purple",arrowhead="none" ]; -"619E" -> "620E" [ color="purple",arrowhead="none" ]; -"621E" -> "622E" [ color="purple",arrowhead="none" ]; -"623E" -> "624E" [ color="purple",arrowhead="none" ]; -"625E" -> "626E" [ color="purple",arrowhead="none" ]; -"627E" -> "628E" [ color="purple",arrowhead="none" ]; -"629E" -> "630E" [ color="purple",arrowhead="none" ]; -"631E" -> "632E" [ color="purple",arrowhead="none" ]; -"634E" -> "633E" [ color="purple",arrowhead="none" ]; -"635E" -> "636E" [ color="purple",arrowhead="none" ]; -"637E" -> "638E" [ color="purple",arrowhead="none" ]; -"639E" -> "640E" [ color="purple",arrowhead="none" ]; -"641E" -> "642E" [ color="purple",arrowhead="none" ]; -"643E" -> "644E" [ color="purple",arrowhead="none" ]; -"645E" -> "646E" [ color="purple",arrowhead="none" ]; -"647E" -> "648E" [ color="purple",arrowhead="none" ]; -"649E" -> "650E" [ color="purple",arrowhead="none" ]; -"651E" -> "652E" [ color="purple",arrowhead="none" ]; -"653E" -> "654E" [ color="purple",arrowhead="none" ]; -"655E" -> "656E" [ color="purple",arrowhead="none" ]; -"657E" -> "658E" [ color="purple",arrowhead="none" ]; -"659E" -> "660E" [ color="purple",arrowhead="none" ]; -"661E" -> "662E" [ color="purple",arrowhead="none" ]; -"663E" -> "664E" [ color="purple",arrowhead="none" ]; -"665E" -> "666E" [ color="purple",arrowhead="none" ]; -"667E" -> "668E" [ color="purple",arrowhead="none" ]; -"669E" -> "670E" [ color="purple",arrowhead="none" ]; -"671E" -> "672E" [ color="purple",arrowhead="none" ]; -"673E" -> "674E" [ color="purple",arrowhead="none" ]; -"675E" -> "676E" [ color="purple",arrowhead="none" ]; -"679E" -> "680E" [ color="purple",arrowhead="none" ]; -"681E" -> "682E" [ color="purple",arrowhead="none" ]; -"683E" -> "684E" [ color="purple",arrowhead="none" ]; -"685E" -> "686E" [ color="purple",arrowhead="none" ]; -"687E" -> "688E" [ color="purple",arrowhead="none" ]; -"689E" -> "690E" [ color="purple",arrowhead="none" ]; -"691E" -> "692E" [ color="purple",arrowhead="none" ]; -"693E" -> "694E" [ color="purple",arrowhead="none" ]; -"695E" -> "696E" [ color="purple",arrowhead="none" ]; -"697E" -> "698E" [ color="purple",arrowhead="none" ]; -"699E" -> "700E" [ color="purple",arrowhead="none" ]; -"703E" -> "704E" [ color="purple",arrowhead="none" ]; -"705E" -> "706E" [ color="purple",arrowhead="none" ]; -"709E" -> "710E" [ color="purple",arrowhead="none" ]; -"711E" -> "712E" [ color="purple",arrowhead="none" ]; -"713E" -> "714E" [ color="purple",arrowhead="none" ]; -"715E" -> "398E" [ color="purple",arrowhead="none" ]; -"717E" -> "718E" [ color="purple",arrowhead="none" ]; -"719E" -> "720E" [ color="purple",arrowhead="none" ]; -"721E" -> "722E" [ color="purple",arrowhead="none" ]; -"725E" -> "726E" [ color="purple",arrowhead="none" ]; -"727E" -> "728E" [ color="purple",arrowhead="none" ]; -"729E" -> "730E" [ color="purple",arrowhead="none" ]; -"731E" -> "732E" [ color="purple",arrowhead="none" ]; -"741E" -> "743E" [ color="purple",arrowhead="none" ]; -"742E" -> "744E" [ color="purple",arrowhead="none" ]; -"745E" -> "754E" [ color="purple",arrowhead="none" ]; -"746E" -> "755E" [ color="purple",arrowhead="none" ]; -"747E" -> "756E" [ color="purple",arrowhead="none" ]; -"748E" -> "757E" [ color="purple",arrowhead="none" ]; -"749E" -> "758E" [ color="purple",arrowhead="none" ]; -"750E" -> "759E" [ color="purple",arrowhead="none" ]; -"751E" -> "760E" [ color="purple",arrowhead="none" ]; -"752E" -> "761E" [ color="purple",arrowhead="none" ]; -"753E" -> "762E" [ color="purple",arrowhead="none" ]; -"763E" -> "764E" [ color="purple",arrowhead="none" ]; -"765E" -> "766E" [ color="purple",arrowhead="none" ]; -"770E" -> "783E" [ color="purple",arrowhead="none" ]; -"770E" -> "784E" [ color="purple",arrowhead="none" ]; -"769E" -> "785E" [ color="purple",arrowhead="none" ]; -"769E" -> "786E" [ color="purple",arrowhead="none" ]; -"769E" -> "787E" [ color="purple",arrowhead="none" ]; -"770E" -> "788E" [ color="purple",arrowhead="none" ]; -"770E" -> "789E" [ color="purple",arrowhead="none" ]; -"769E" -> "790E" [ color="purple",arrowhead="none" ]; -"770E" -> "791E" [ color="purple",arrowhead="none" ]; -"769E" -> "792E" [ color="purple",arrowhead="none" ]; -"793E" -> "769E" [ color="purple",arrowhead="none" ]; -"769E" -> "784E" [ color="purple",arrowhead="none" ]; -"770E" -> "785E" [ color="purple",arrowhead="none" ]; -"788E" -> "787E" [ color="purple",arrowhead="none" ]; -"770E" -> "792E" [ color="purple",arrowhead="none" ]; -"798E" -> "799E" [ color="purple",arrowhead="none" ]; -"796E" -> "797E" [ color="purple",arrowhead="none" ]; -"793E" -> "789E" [ color="purple",arrowhead="none" ]; -"783E" -> "787E" [ color="purple",arrowhead="none" ]; -"784E" -> "792E" [ color="purple",arrowhead="none" ]; -"787E" -> "789E" [ color="purple",arrowhead="none" ]; -"769E" -> "791E" [ color="purple",arrowhead="none" ]; -"802E" -> "801E" [ color="purple",arrowhead="none" ]; -} diff --git a/examples/network/graphviz/data/unix.gv.txt b/examples/network/graphviz/data/unix.gv.txt deleted file mode 100644 index 431ab655..00000000 --- a/examples/network/graphviz/data/unix.gv.txt +++ /dev/null @@ -1,55 +0,0 @@ -/* courtesy Ian Darwin and Geoff Collyer, Softquad Inc. */ -digraph unix { - size="6,6"; - node [color=lightblue, style=filled]; - "5th Edition" -> "6th Edition"; - "5th Edition" -> "PWB 1.0"; - "6th Edition" -> "LSX"; - "6th Edition" -> "1 BSD"; - "6th Edition" -> "Mini Unix"; - "6th Edition" -> "Wollongong"; - "6th Edition" -> "Interdata"; - "Interdata" -> "Unix/TS 3.0"; - "Interdata" -> "PWB 2.0"; - "Interdata" -> "7th Edition"; - "7th Edition" -> "8th Edition"; - "7th Edition" -> "32V"; - "7th Edition" -> "V7M"; - "7th Edition" -> "Ultrix-11"; - "7th Edition" -> "Xenix"; - "7th Edition" -> "UniPlus+"; - "V7M" -> "Ultrix-11"; - "8th Edition" -> "9th Edition"; - "1 BSD" -> "2 BSD"; - "2 BSD" -> "2.8 BSD"; - "2.8 BSD" -> "Ultrix-11"; - "2.8 BSD" -> "2.9 BSD"; - "32V" -> "3 BSD"; - "3 BSD" -> "4 BSD"; - "4 BSD" -> "4.1 BSD"; - "4.1 BSD" -> "4.2 BSD"; - "4.1 BSD" -> "2.8 BSD"; - "4.1 BSD" -> "8th Edition"; - "4.2 BSD" -> "4.3 BSD"; - "4.2 BSD" -> "Ultrix-32"; - "PWB 1.0" -> "PWB 1.2"; - "PWB 1.0" -> "USG 1.0"; - "PWB 1.2" -> "PWB 2.0"; - "USG 1.0" -> "CB Unix 1"; - "USG 1.0" -> "USG 2.0"; - "CB Unix 1" -> "CB Unix 2"; - "CB Unix 2" -> "CB Unix 3"; - "CB Unix 3" -> "Unix/TS++"; - "CB Unix 3" -> "PDP-11 Sys V"; - "USG 2.0" -> "USG 3.0"; - "USG 3.0" -> "Unix/TS 3.0"; - "PWB 2.0" -> "Unix/TS 3.0"; - "Unix/TS 1.0" -> "Unix/TS 3.0"; - "Unix/TS 3.0" -> "TS 4.0"; - "Unix/TS++" -> "TS 4.0"; - "CB Unix 3" -> "TS 4.0"; - "TS 4.0" -> "System V.0"; - "System V.0" -> "System V.2"; - "System V.2" -> "System V.3"; -} - diff --git a/examples/network/graphviz/data/world.gv.txt b/examples/network/graphviz/data/world.gv.txt deleted file mode 100644 index 3e6e4e37..00000000 --- a/examples/network/graphviz/data/world.gv.txt +++ /dev/null @@ -1,67 +0,0 @@ -digraph world { -size="7,7"; - {rank=same; S8 S24 S1 S35 S30;} - {rank=same; T8 T24 T1 T35 T30;} - {rank=same; 43 37 36 10 2;} - {rank=same; 25 9 38 40 13 17 12 18;} - {rank=same; 26 42 11 3 33 19 39 14 16;} - {rank=same; 4 31 34 21 41 28 20;} - {rank=same; 27 5 22 32 29 15;} - {rank=same; 6 23;} - {rank=same; 7;} - - S8 -> 9; - S24 -> 25; - S24 -> 27; - S1 -> 2; - S1 -> 10; - S35 -> 43; - S35 -> 36; - S30 -> 31; - S30 -> 33; - 9 -> 42; - 9 -> T1; - 25 -> T1; - 25 -> 26; - 27 -> T24; - 2 -> {3 ; 16 ; 17 ; T1 ; 18} - 10 -> { 11 ; 14 ; T1 ; 13; 12;} - 31 -> T1; - 31 -> 32; - 33 -> T30; - 33 -> 34; - 42 -> 4; - 26 -> 4; - 3 -> 4; - 16 -> 15; - 17 -> 19; - 18 -> 29; - 11 -> 4; - 14 -> 15; - 37 -> {39 ; 41 ; 38 ; 40;} - 13 -> 19; - 12 -> 29; - 43 -> 38; - 43 -> 40; - 36 -> 19; - 32 -> 23; - 34 -> 29; - 39 -> 15; - 41 -> 29; - 38 -> 4; - 40 -> 19; - 4 -> 5; - 19 -> {21 ; 20 ; 28;} - 5 -> {6 ; T35 ; 23;} - 21 -> 22; - 20 -> 15; - 28 -> 29; - 6 -> 7; - 15 -> T1; - 22 -> T35; - 22 -> 23; - 29 -> T30; - 7 -> T8; - 23 -> T24; - 23 -> T1; -} diff --git a/examples/network/graphviz/graphviz_gallery.html b/examples/network/graphviz/graphviz_gallery.html deleted file mode 100644 index 4580edcf..00000000 --- a/examples/network/graphviz/graphviz_gallery.html +++ /dev/null @@ -1,86 +0,0 @@ - - - Network | Graphviz Gallery - - - - - - - - - - -

- The following examples are unmodified copies from the - Graphviz Gallery. -

-

- Note that some style attributes of Graphviz are not supported by vis.js, - and that vis.js offers options not supported by Graphviz (which could make - some examples look much nicer). -

- -

- - -

- -
- - - diff --git a/examples/network/graphviz/screenshots/fsm.png b/examples/network/graphviz/screenshots/fsm.png deleted file mode 100644 index 544b8ed6..00000000 Binary files a/examples/network/graphviz/screenshots/fsm.png and /dev/null differ diff --git a/examples/network/graphviz/screenshots/hello.png b/examples/network/graphviz/screenshots/hello.png deleted file mode 100644 index 532a7d88..00000000 Binary files a/examples/network/graphviz/screenshots/hello.png and /dev/null differ diff --git a/examples/network/graphviz/screenshots/softmaint.png b/examples/network/graphviz/screenshots/softmaint.png deleted file mode 100644 index 9aacc612..00000000 Binary files a/examples/network/graphviz/screenshots/softmaint.png and /dev/null differ diff --git a/examples/network/graphviz/screenshots/traffic_lights.png b/examples/network/graphviz/screenshots/traffic_lights.png deleted file mode 100644 index 237016a6..00000000 Binary files a/examples/network/graphviz/screenshots/traffic_lights.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Hardware-Fax-icon.png b/examples/network/img/refresh-cl/Hardware-Fax-icon.png deleted file mode 100644 index eab07c7e..00000000 Binary files a/examples/network/img/refresh-cl/Hardware-Fax-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Hardware-Laptop-1-icon.png b/examples/network/img/refresh-cl/Hardware-Laptop-1-icon.png deleted file mode 100644 index 5e0c2ac5..00000000 Binary files a/examples/network/img/refresh-cl/Hardware-Laptop-1-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Hardware-Mobile-Phone-icon.png b/examples/network/img/refresh-cl/Hardware-Mobile-Phone-icon.png deleted file mode 100644 index 66a6d35f..00000000 Binary files a/examples/network/img/refresh-cl/Hardware-Mobile-Phone-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Hardware-My-Computer-3-icon.png b/examples/network/img/refresh-cl/Hardware-My-Computer-3-icon.png deleted file mode 100644 index 26ac6260..00000000 Binary files a/examples/network/img/refresh-cl/Hardware-My-Computer-3-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Hardware-My-PDA-02-icon.png b/examples/network/img/refresh-cl/Hardware-My-PDA-02-icon.png deleted file mode 100644 index a761307d..00000000 Binary files a/examples/network/img/refresh-cl/Hardware-My-PDA-02-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Hardware-My-PDA-04-icon.png b/examples/network/img/refresh-cl/Hardware-My-PDA-04-icon.png deleted file mode 100644 index a1fae460..00000000 Binary files a/examples/network/img/refresh-cl/Hardware-My-PDA-04-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Hardware-My-PDA-05-icon.png b/examples/network/img/refresh-cl/Hardware-My-PDA-05-icon.png deleted file mode 100644 index d337f861..00000000 Binary files a/examples/network/img/refresh-cl/Hardware-My-PDA-05-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Hardware-My-Phone-Picture-icon.png b/examples/network/img/refresh-cl/Hardware-My-Phone-Picture-icon.png deleted file mode 100644 index 5e9ea6c5..00000000 Binary files a/examples/network/img/refresh-cl/Hardware-My-Phone-Picture-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Hardware-Printer-Blue-icon.png b/examples/network/img/refresh-cl/Hardware-Printer-Blue-icon.png deleted file mode 100644 index 076a542f..00000000 Binary files a/examples/network/img/refresh-cl/Hardware-Printer-Blue-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Misc-Scanner-default-icon.png b/examples/network/img/refresh-cl/Misc-Scanner-default-icon.png deleted file mode 100644 index 637c619b..00000000 Binary files a/examples/network/img/refresh-cl/Misc-Scanner-default-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Network-Drive-icon.png b/examples/network/img/refresh-cl/Network-Drive-icon.png deleted file mode 100644 index e669165c..00000000 Binary files a/examples/network/img/refresh-cl/Network-Drive-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Network-Internet-Connection-icon.png b/examples/network/img/refresh-cl/Network-Internet-Connection-icon.png deleted file mode 100644 index 277047cc..00000000 Binary files a/examples/network/img/refresh-cl/Network-Internet-Connection-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/Network-Pipe-icon.png b/examples/network/img/refresh-cl/Network-Pipe-icon.png deleted file mode 100644 index c5f34b77..00000000 Binary files a/examples/network/img/refresh-cl/Network-Pipe-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/System-Firewall-2-icon.png b/examples/network/img/refresh-cl/System-Firewall-2-icon.png deleted file mode 100644 index e04fe6c2..00000000 Binary files a/examples/network/img/refresh-cl/System-Firewall-2-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/System-Globe-icon.png b/examples/network/img/refresh-cl/System-Globe-icon.png deleted file mode 100644 index a317665f..00000000 Binary files a/examples/network/img/refresh-cl/System-Globe-icon.png and /dev/null differ diff --git a/examples/network/img/refresh-cl/license.txt b/examples/network/img/refresh-cl/license.txt deleted file mode 100644 index 7b8b9d43..00000000 --- a/examples/network/img/refresh-cl/license.txt +++ /dev/null @@ -1,14 +0,0 @@ -Refresh Cl icon set - -http://www.iconarchive.com/show/refresh-cl-icons-by-tpdkdesign.net.html -http://www.iconarchive.com/artist/tpdkdesign.net.html - -Artist: TpdkDesign.net -License: Free for non-commercial use. - -Name: TpdkDesign.net -URL: http://www.tpdkdesign.net -Available for custom work: No -Default License: Free for non-commercial use. -Commercial usage: Not allowed - diff --git a/examples/network/img/soft-scraps-icons/Document-icon24.png b/examples/network/img/soft-scraps-icons/Document-icon24.png deleted file mode 100644 index c420b202..00000000 Binary files a/examples/network/img/soft-scraps-icons/Document-icon24.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/Document-icon32.png b/examples/network/img/soft-scraps-icons/Document-icon32.png deleted file mode 100644 index 5938c512..00000000 Binary files a/examples/network/img/soft-scraps-icons/Document-icon32.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/Document-icon48.png b/examples/network/img/soft-scraps-icons/Document-icon48.png deleted file mode 100644 index 5938c512..00000000 Binary files a/examples/network/img/soft-scraps-icons/Document-icon48.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/Email-icon24.png b/examples/network/img/soft-scraps-icons/Email-icon24.png deleted file mode 100644 index c01c9040..00000000 Binary files a/examples/network/img/soft-scraps-icons/Email-icon24.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/Email-icon32.png b/examples/network/img/soft-scraps-icons/Email-icon32.png deleted file mode 100644 index 86ed5de9..00000000 Binary files a/examples/network/img/soft-scraps-icons/Email-icon32.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/Email-icon48.png b/examples/network/img/soft-scraps-icons/Email-icon48.png deleted file mode 100644 index 799ebb70..00000000 Binary files a/examples/network/img/soft-scraps-icons/Email-icon48.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/Folder-icon24.png b/examples/network/img/soft-scraps-icons/Folder-icon24.png deleted file mode 100644 index 16d05084..00000000 Binary files a/examples/network/img/soft-scraps-icons/Folder-icon24.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/Folder-icon32.png b/examples/network/img/soft-scraps-icons/Folder-icon32.png deleted file mode 100644 index 73111b15..00000000 Binary files a/examples/network/img/soft-scraps-icons/Folder-icon32.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/Folder-icon48.png b/examples/network/img/soft-scraps-icons/Folder-icon48.png deleted file mode 100644 index 94d69cad..00000000 Binary files a/examples/network/img/soft-scraps-icons/Folder-icon48.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/Folder-icon64.png b/examples/network/img/soft-scraps-icons/Folder-icon64.png deleted file mode 100644 index 6c5d457a..00000000 Binary files a/examples/network/img/soft-scraps-icons/Folder-icon64.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/Smiley-Angry-icon.png b/examples/network/img/soft-scraps-icons/Smiley-Angry-icon.png deleted file mode 100644 index f40bc381..00000000 Binary files a/examples/network/img/soft-scraps-icons/Smiley-Angry-icon.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/Smiley-Grin-icon.png b/examples/network/img/soft-scraps-icons/Smiley-Grin-icon.png deleted file mode 100644 index 6ff39eb7..00000000 Binary files a/examples/network/img/soft-scraps-icons/Smiley-Grin-icon.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/User-Administrator-Blue-icon.png b/examples/network/img/soft-scraps-icons/User-Administrator-Blue-icon.png deleted file mode 100644 index ba2ffac7..00000000 Binary files a/examples/network/img/soft-scraps-icons/User-Administrator-Blue-icon.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/User-Administrator-Green-icon.png b/examples/network/img/soft-scraps-icons/User-Administrator-Green-icon.png deleted file mode 100644 index a3d31677..00000000 Binary files a/examples/network/img/soft-scraps-icons/User-Administrator-Green-icon.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/User-Coat-Blue-icon.png b/examples/network/img/soft-scraps-icons/User-Coat-Blue-icon.png deleted file mode 100644 index ff367221..00000000 Binary files a/examples/network/img/soft-scraps-icons/User-Coat-Blue-icon.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/User-Coat-Green-icon.png b/examples/network/img/soft-scraps-icons/User-Coat-Green-icon.png deleted file mode 100644 index 4a4326b7..00000000 Binary files a/examples/network/img/soft-scraps-icons/User-Coat-Green-icon.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/User-Coat-Red-icon.png b/examples/network/img/soft-scraps-icons/User-Coat-Red-icon.png deleted file mode 100644 index 06f0130f..00000000 Binary files a/examples/network/img/soft-scraps-icons/User-Coat-Red-icon.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/User-Executive-Green-icon.png b/examples/network/img/soft-scraps-icons/User-Executive-Green-icon.png deleted file mode 100644 index a639861c..00000000 Binary files a/examples/network/img/soft-scraps-icons/User-Executive-Green-icon.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/User-Preppy-Blue-icon.png b/examples/network/img/soft-scraps-icons/User-Preppy-Blue-icon.png deleted file mode 100644 index b3c77408..00000000 Binary files a/examples/network/img/soft-scraps-icons/User-Preppy-Blue-icon.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/User-Preppy-Red-icon.png b/examples/network/img/soft-scraps-icons/User-Preppy-Red-icon.png deleted file mode 100644 index f569776e..00000000 Binary files a/examples/network/img/soft-scraps-icons/User-Preppy-Red-icon.png and /dev/null differ diff --git a/examples/network/img/soft-scraps-icons/license.txt b/examples/network/img/soft-scraps-icons/license.txt deleted file mode 100644 index 750841c8..00000000 --- a/examples/network/img/soft-scraps-icons/license.txt +++ /dev/null @@ -1,12 +0,0 @@ -Scrap Icons by Deleket - -http://www.iconarchive.com/show/soft-scraps-icons-by-deleket.html - - -Artist: Deleket (Jojo Mendoza) (Available for custom work) -License: CC Attribution-Noncommercial-No Derivate 3.0 - -http://creativecommons.org/licenses/by-nc-nd/3.0/ - -Commercial usage: Allowed (Author Approval required -> Visit artist homepage for details). - diff --git a/examples/network/index.html b/examples/network/index.html deleted file mode 100644 index d3d4d6ad..00000000 --- a/examples/network/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - vis.js | Network examples - - - - - - - - \ No newline at end of file diff --git a/examples/timeline/01_basic.html b/examples/timeline/01_basic.html deleted file mode 100644 index 289555f7..00000000 --- a/examples/timeline/01_basic.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - Timeline | Basic demo - - - - - - - -
- - - - \ No newline at end of file diff --git a/examples/timeline/02_interactive.html b/examples/timeline/02_interactive.html deleted file mode 100644 index e555b29c..00000000 --- a/examples/timeline/02_interactive.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - Timeline | Interactive example - - - - - - - - -

Drag items around, create new items, and remove items.

- -
- - - - \ No newline at end of file diff --git a/examples/timeline/03_performance.html b/examples/timeline/03_performance.html deleted file mode 100644 index 665b473a..00000000 --- a/examples/timeline/03_performance.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - Timeline | a lot of data - - - - - - - - - - -

- Test with a lot of data -

-

- - - -

-
- - - - \ No newline at end of file diff --git a/examples/timeline/04_html_data.html b/examples/timeline/04_html_data.html deleted file mode 100644 index c7c1609d..00000000 --- a/examples/timeline/04_html_data.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - Timeline | HTML data - - - - - - - - -

- Load HTML contents in the Timeline -

-
- - - - \ No newline at end of file diff --git a/examples/timeline/05_groups.html b/examples/timeline/05_groups.html deleted file mode 100644 index 7182670f..00000000 --- a/examples/timeline/05_groups.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Timeline | Group example - - - - - - - - - - -

- This example demonstrate using groups. Note that a DataSet is used for both - items and groups, allowing to dynamically add, update or remove both items - and groups via the DataSet. -

-
- - - - \ No newline at end of file diff --git a/examples/timeline/06_event_listeners.html b/examples/timeline/06_event_listeners.html deleted file mode 100644 index df240ce4..00000000 --- a/examples/timeline/06_event_listeners.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - Timeline | Event listeners - - - - - - - -
-

-
- - - - \ No newline at end of file diff --git a/examples/timeline/07_custom_time_bar.html b/examples/timeline/07_custom_time_bar.html deleted file mode 100644 index d40b76fc..00000000 --- a/examples/timeline/07_custom_time_bar.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - Timeline | Show current and custom time bars - - - - - - - - -

- - -

-

- - -

-

- timechange event: -

-

- timechanged event: -

- -
- - - - \ No newline at end of file diff --git a/examples/timeline/08_edit_items.html b/examples/timeline/08_edit_items.html deleted file mode 100644 index 9948098b..00000000 --- a/examples/timeline/08_edit_items.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - Timeline | Edit items - - - - - - - -

- This example shows how to use callback functions onAdd, onMove, onMoving, onUpdate, and onRemove. The onMoving function updates an item while dragging, and can be used to prevent the item from being drawn at disallowed or infeasible timeslots. In this example, the items cannot be moved outside of the month April 2013. The other callback functions are called after an add, move, update, or remove action has taken place, and can be used to cancel these actions. -

- -
-

-
- - - - \ No newline at end of file diff --git a/examples/timeline/09_order_groups.html b/examples/timeline/09_order_groups.html deleted file mode 100644 index 7b1bd16e..00000000 --- a/examples/timeline/09_order_groups.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - Timeline | Order groups - - - - - - - -

- This example demonstrate custom ordering of groups. -

-
- - - - \ No newline at end of file diff --git a/examples/timeline/10_limit_move_and_zoom.html b/examples/timeline/10_limit_move_and_zoom.html deleted file mode 100644 index 2f622cb7..00000000 --- a/examples/timeline/10_limit_move_and_zoom.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - Timeline | Limit move and zoom - - - - - - - -

- The visible range is limited in this demo: -

-
    -
  • minimum visible date is limited to 2012-01-01 using option min
  • -
  • maximum visible date is limited to 2013-01-01 (excluded) using option max
  • -
  • visible zoom interval is limited to a minimum of 24 hours using option zoomMin
  • -
  • visible zoom interval is limited to a maximum of about 3 months using option zoomMax
  • -
-
- - - - \ No newline at end of file diff --git a/examples/timeline/11_points.html b/examples/timeline/11_points.html deleted file mode 100755 index 9ae67166..00000000 --- a/examples/timeline/11_points.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - Timeline | Points - - - - - - - -

World War II timeline

-

Source: http://www.onwar.com/chrono/index.htm

-
- -
- - - - diff --git a/examples/timeline/12_custom_styling.html b/examples/timeline/12_custom_styling.html deleted file mode 100644 index e43ab3fb..00000000 --- a/examples/timeline/12_custom_styling.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - Timeline | Custom styling - - - - - - - - - -
- - - - \ No newline at end of file diff --git a/examples/timeline/13_past_and_future.html b/examples/timeline/13_past_and_future.html deleted file mode 100644 index 019dde17..00000000 --- a/examples/timeline/13_past_and_future.html +++ /dev/null @@ -1,88 +0,0 @@ - - - Timeline | Past and future - - - - - - - - -

- When the custom time bar is shown, the user can drag this bar to a specific - time. The Timeline sends an event that the custom time is changed, after - which the contents of the timeline can be changed according to the specified - time in past or future. -

- -
 
-

- -
- - - - - - diff --git a/examples/timeline/14_group_performance.html b/examples/timeline/14_group_performance.html deleted file mode 100644 index 3cafa6b9..00000000 --- a/examples/timeline/14_group_performance.html +++ /dev/null @@ -1,109 +0,0 @@ - - - Timeline | A lot of grouped data - - - - - - - - -

Timeline grouping performance

- -

- Choose a number of items: - 100, - 1000, - 10000, - 100000 -

-

- Current number of items: 100 -

- -
- - - - - diff --git a/examples/timeline/15_item_class_names.html b/examples/timeline/15_item_class_names.html deleted file mode 100755 index ea1d14ef..00000000 --- a/examples/timeline/15_item_class_names.html +++ /dev/null @@ -1,116 +0,0 @@ - - - Timeline | Item class names - - - - - - - - -

This page demonstrates the Timeline with custom css classes for individual items.

- -
- - - - diff --git a/examples/timeline/16_navigation_menu.html b/examples/timeline/16_navigation_menu.html deleted file mode 100755 index 7c5153be..00000000 --- a/examples/timeline/16_navigation_menu.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - Timeline | navigation menu - - - - - - - -
- -
- - - - \ No newline at end of file diff --git a/examples/timeline/17_data_serialization.html b/examples/timeline/17_data_serialization.html deleted file mode 100644 index 80d73f7b..00000000 --- a/examples/timeline/17_data_serialization.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - Timeline | Data serialization - - - - - - - - -

Serialization and deserialization

- -

This example shows how to serialize and deserialize JSON data, and load this in the Timeline via a DataSet. Serialization and deserialization is needed when loading or saving data from a server.

- - - -
- - -
- -
- - - - \ No newline at end of file diff --git a/examples/timeline/18_range_overflow.html b/examples/timeline/18_range_overflow.html deleted file mode 100644 index 8f9f7506..00000000 --- a/examples/timeline/18_range_overflow.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - Timeline | Range overflow - - - - - - - - -

- In case of ranges being spread over a wide range of time, it can be interesting to have the text contents of the ranges overflow the box. This can be achieved by changing the overflow property of the contents to visible with css: -

-
-.vis.timeline .item.range .content {
-  overflow: visible;
-}
-
- -
- - - - \ No newline at end of file diff --git a/examples/timeline/19_localization.html b/examples/timeline/19_localization.html deleted file mode 100644 index e2624abd..00000000 --- a/examples/timeline/19_localization.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - Timeline | Localization - - - - - - - - -

- To localize the Timeline, one has to load a version of moment.js including locales. To set a locale, specify option {locale: STRING}. -

- -

- - -

- -
- - - - \ No newline at end of file diff --git a/examples/timeline/20_click_to_use.html b/examples/timeline/20_click_to_use.html deleted file mode 100644 index 46e1a567..00000000 --- a/examples/timeline/20_click_to_use.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - Timeline | Click to use - - - - - - - -
-

Timeline click to use

-

- This example demonstrates how to use the clickToUse option: before you can scroll and drag in the timeline, you first have to click in the timeline to activate. -

-
- - - - \ No newline at end of file diff --git a/examples/timeline/21_set_selection.html b/examples/timeline/21_set_selection.html deleted file mode 100644 index 82e64888..00000000 --- a/examples/timeline/21_set_selection.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - Timeline | Select items - - - - - - - -

Set selection

-

- Enter one or multiple ids of items, then press select to select the items. This demo uses the function Timeline.setSelection(ids). Optionally, the window can be moved to the selected items. -

- -

- Select item(s):
- -

-
- - - - \ No newline at end of file diff --git a/examples/timeline/22_window_adjustment.html b/examples/timeline/22_window_adjustment.html deleted file mode 100644 index cade9b07..00000000 --- a/examples/timeline/22_window_adjustment.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - Timeline | Adjusting window - - - - - - - - -

This example demonstrates functions to adjust the visible window of the Timeline.

- -
-
-
-
-
-
-
-
- -
- - - - \ No newline at end of file diff --git a/examples/timeline/23_data_attributes.html b/examples/timeline/23_data_attributes.html deleted file mode 100644 index 477f1a80..00000000 --- a/examples/timeline/23_data_attributes.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - Timeline | Basic demo - - - - - - - -

- In this example all items get an HTML attribute attached: each item gets an attribute data-id, and items 1 and 6 have an additional attribute data-tooltip. -

- -
- - - - \ No newline at end of file diff --git a/examples/timeline/24_all_data_attributes.html b/examples/timeline/24_all_data_attributes.html deleted file mode 100644 index dc077aa3..00000000 --- a/examples/timeline/24_all_data_attributes.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - Timeline | Basic demo - - - - - - - -

- In this example all items get HTML attributes attached: each item gets data-? attributes for each field defined on the JS object. -

- -
- - - - \ No newline at end of file diff --git a/examples/timeline/25_background_areas.html b/examples/timeline/25_background_areas.html deleted file mode 100644 index 777baa9c..00000000 --- a/examples/timeline/25_background_areas.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - Timeline | Background areas - - - - - - - - -

This example demonstrates the item type "background", see "Period A" and "Period B". The background areas can be styled with css.

- -
- - - - \ No newline at end of file diff --git a/examples/timeline/26_external_data.html b/examples/timeline/26_external_data.html deleted file mode 100644 index df8e68d4..00000000 --- a/examples/timeline/26_external_data.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - Timeline | External data - - - - - - - - - - -

Load external data

-

- This demo shows how to load external data via an ajax call. -

-
-
loading...
- - - - \ No newline at end of file diff --git a/examples/timeline/27_templates.html b/examples/timeline/27_templates.html deleted file mode 100644 index eb68de13..00000000 --- a/examples/timeline/27_templates.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - Timeline | Templates - - - - - - - - - - - - -

WK 2014

-

- This example demonstrates using templates to format item contents. In this case handlebars is used as template engine, but you can just use your favorite template engine or manually craft HTML from the data of an item. -

- -
- -
- - - - \ No newline at end of file diff --git a/examples/timeline/29_hiding_times.html b/examples/timeline/29_hiding_times.html deleted file mode 100644 index edf2577e..00000000 --- a/examples/timeline/29_hiding_times.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - Timeline | Hiding times demo - - - - - - - -
- - - \ No newline at end of file diff --git a/examples/timeline/30_subgroups.html b/examples/timeline/30_subgroups.html deleted file mode 100644 index 4c342658..00000000 --- a/examples/timeline/30_subgroups.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - Timeline | Background areas - - - - - - - - -

This example shows the workings of the subgroups. Subgroups do not use stacking, and only work when stacking is disabled.

- -
- - - - \ No newline at end of file diff --git a/examples/timeline/31_background_areas_with_groups.html b/examples/timeline/31_background_areas_with_groups.html deleted file mode 100644 index b557b5a2..00000000 --- a/examples/timeline/31_background_areas_with_groups.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - Timeline | Background areas with groups - - - - - - - - -

This example demonstrates the item type "background" when using groups.

-
    -
  • Background items having a group are displayed in that group
  • -
  • Background items without a group are spread over the whole timeline
  • -
  • Background items with a non-existing group are not displayed
  • -
-
- - - - \ No newline at end of file diff --git a/examples/timeline/data/basic.json b/examples/timeline/data/basic.json deleted file mode 100644 index 711dd8e2..00000000 --- a/examples/timeline/data/basic.json +++ /dev/null @@ -1,34 +0,0 @@ -[ - { - "id": 1, - "content": "item 1", - "start": "2014-04-20" - }, - { - "id": 2, - "content": "item 2", - "start": "2014-04-14" - }, - { - "id": 3, - "content": "item 3", - "start": "2014-04-18" - }, - { - "id": 4, - "content": "item 4", - "start": "2014-04-16", - "end": "2014-04-19" - }, - { - "id": 5, - "content": "item 5", - "start": "2014-04-25" - }, - { - "id": 6, - "content": "item 6", - "start": "2014-04-27", - "type": "point" - } -] \ No newline at end of file diff --git a/examples/timeline/data/wk2014.json b/examples/timeline/data/wk2014.json deleted file mode 100644 index 2bcb3d75..00000000 --- a/examples/timeline/data/wk2014.json +++ /dev/null @@ -1,152 +0,0 @@ -[ - { - "player1": "Brazil", - "abbr1": "br", - "score1": "1 (3)", - "player2": "Chile", - "abbr2": "cl", - "score2": "1 (2)", - "description": "round of 16", - "start": "2014-06-28 13:00" - }, - { - "player1": "Colombia", - "abbr1": "co", - "score1": 2, - "player2": "Uruguay", - "abbr2": "uy", - "score2": 0, - "description": "round of 16", - "start": "2014-06-28 17:00" - }, - { - "player1": "Netherlands", - "abbr1": "nl", - "score1": 2, - "player2": "Mexico", - "abbr2": "mx", - "score2": 1, - "description": "round of 16", - "start": "2014-06-29 13:00" - }, - { - "player1": "Costa Rica", - "abbr1": "cr", - "score1": "1 (5)", - "player2": "Greece", - "abbr2": "gr", - "score2": "1 (3)", - "description": "round of 16", - "start": "2014-06-29 17:00" - }, - { - "player1": "France", - "abbr1": "fr", - "score1": 2, - "player2": "Nigeria", - "abbr2": "ng", - "score2": 0, - "description": "round of 16", - "start": "2014-06-30 13:00" - }, - { - "player1": "Germany", - "abbr1": "de", - "score1": 2, - "player2": "Algeria", - "abbr2": "dz", - "score2": 1, - "description": "round of 16", - "start": "2014-06-30 17:00" - }, - { - "player1": "Argentina", - "abbr1": "ar", - "score1": 1, - "player2": "Switzerland", - "abbr2": "ch", - "score2": 0, - "description": "round of 16", - "start": "2014-07-01 13:00" - }, - { - "player1": "Belgium", - "abbr1": "be", - "score1": 2, - "player2": "USA", - "abbr2": "us", - "score2": 1, - "description": "round of 16", - "start": "2014-07-01 17:00" - }, - { - "player1": "France", - "abbr1": "fr", - "score1": 0, - "player2": "Germany", - "abbr2": "de", - "score2": 1, - "description": "quarter-finals", - "start": "2014-07-04 13:00" - }, - { - "player1": "Brazil", - "abbr1": "br", - "score1": 2, - "player2": "Colombia", - "abbr2": "co", - "score2": 1, - "description": "quarter-finals", - "start": "2014-07-04 17:00" - }, - { - "player1": "Argentina", - "abbr1": "ar", - "score1": 1, - "player2": "Belgium", - "abbr2": "be", - "score2": 0, - "description": "quarter-finals", - "start": "2014-07-05 13:00" - }, - { - "player1": "Netherlands", - "abbr1": "nl", - "score1": "0 (4)", - "player2": "Costa Rica", - "abbr2": "cr", - "score2": "0 (3)", - "description": "quarter-finals", - "start": "2014-07-05 17:00" - }, - { - "player1": "Brazil", - "abbr1": "br", - "score1": 1, - "player2": "Germany", - "abbr2": "de", - "score2": 7, - "description": "semi-finals", - "start": "2014-07-08 17:00" - }, - { - "player1": "Netherlands", - "abbr1": "nl", - "score1": "0 (2)", - "player2": "Argentina", - "abbr2": "ar", - "score2": "0 (4)", - "description": "semi-finals", - "start": "2014-07-09 17:00" - }, - { - "player1": "Germany", - "score1": 1, - "abbr1": "de", - "player2": "Argentina", - "abbr2": "ar", - "score2": 0, - "description": "final", - "start": "2014-07-13 16:00" - } -] \ No newline at end of file diff --git a/examples/timeline/img/Hardware-Mobile-Phone-icon.png b/examples/timeline/img/Hardware-Mobile-Phone-icon.png deleted file mode 100644 index 66a6d35f..00000000 Binary files a/examples/timeline/img/Hardware-Mobile-Phone-icon.png and /dev/null differ diff --git a/examples/timeline/img/attachment-icon.png b/examples/timeline/img/attachment-icon.png deleted file mode 100755 index fc825177..00000000 Binary files a/examples/timeline/img/attachment-icon.png and /dev/null differ diff --git a/examples/timeline/img/blog-post-edit-icon.png b/examples/timeline/img/blog-post-edit-icon.png deleted file mode 100755 index 12ab23c6..00000000 Binary files a/examples/timeline/img/blog-post-edit-icon.png and /dev/null differ diff --git a/examples/timeline/img/comments-icon.png b/examples/timeline/img/comments-icon.png deleted file mode 100755 index 736789ed..00000000 Binary files a/examples/timeline/img/comments-icon.png and /dev/null differ diff --git a/examples/timeline/img/community-users-icon.png b/examples/timeline/img/community-users-icon.png deleted file mode 100755 index a77e239a..00000000 Binary files a/examples/timeline/img/community-users-icon.png and /dev/null differ diff --git a/examples/timeline/img/license.txt b/examples/timeline/img/license.txt deleted file mode 100644 index 9d65f9f5..00000000 --- a/examples/timeline/img/license.txt +++ /dev/null @@ -1,17 +0,0 @@ -IMAGE LICENSES - -REFRESH CL -http://www.iconarchive.com/category/system/refresh-cl-icons-by-tpdkdesign.net.html - -License: Free for non-commercial use. -http://www.iconarchive.com/icons/tpdkdesign.net/refresh-cl/readme_eng.txt - - - -AESTHETICA 2 -http://www.iconarchive.com/category/application/aesthetica-2-icons-by-dryicons.html - -License: -DryIcons Terms of Use -http://dryicons.com/terms/ - diff --git a/examples/timeline/img/license_aesthetica-2.txt b/examples/timeline/img/license_aesthetica-2.txt deleted file mode 100644 index 28554c00..00000000 --- a/examples/timeline/img/license_aesthetica-2.txt +++ /dev/null @@ -1,36 +0,0 @@ -Aesthetica Icon Set, version 2.0 -http://dryicons.com/free-icons/preview/aesthetica-version-2/ - -Information ----------------------- - -This icon set contains 181 quality icons in the following formats: - Transparent PNG - 16 x 16 px - 24 x 24 px - 32 x 32 px - 48 x 48 px - 128 x 128 px - - - -Licensing ----------------------- - -The usage of DryIcons' work (icons, icon sets and graphics) is limited to the terms of the "Free License" and "Commercial License" use. -The DryIcons Free License means that you can use our icons, icon sets and graphics in any publicly accesible web site, web application or any form of presentation publicly accessible through the World Wide Web only according to the DryIcons Free License Terms and Conditions: - -* You must put a back link with credits to http://dryicons.com on every page where DryIcons' Works are used (example: Icons by http://dryicons.com); - -* You must include the correct back link to DryIcons website, which is: http://dryicons.com; - -* You must place the link on an easy-to-see, recognizable place, so there is no confusion about the Original Author of the Works (DryIcons); - -* When copying, or paraphrasing description text (or title) on one of the Works, you must make sure there are no spelling mistakes; - -* Do not try to take credit or imply in any way that you and not DryIcons is the Original Author of the Works (icons, icon sets and graphics). - -For a more detailed look at our Free License Agreement, please follow the link: http://dryicons.com/terms/#free-license - - -The DryIcons Commercial License means that you can use our Free Icon Sets and Free Graphics without being obligated to put a back link to DryIcons.com for a certain fee. After you complete yourpayment transaction DryIcons grants you a Commercial License. \ No newline at end of file diff --git a/examples/timeline/img/license_refresh-cl.txt b/examples/timeline/img/license_refresh-cl.txt deleted file mode 100644 index 78427f03..00000000 --- a/examples/timeline/img/license_refresh-cl.txt +++ /dev/null @@ -1,26 +0,0 @@ -RefreshCL Icon Pack by TPDK ©2005 www.tpdkdesign.net -All rights reserved. -version 1.0 2005/18/11 - - -Terms of use -Theses icons are copyrighted, and for personal use only. -Until now, COMMERCIAL USE is strictly forbidden. - -You cannot (non-exhaustive list) : -- Use my icons in commercial website -- Use my icons in a professional website layout -- Sell or distribute those icons - -For any other use, such as : -- using in non-commercial website -- using icon in free software under GPL licence -you need my authorization to use them. If you have my permission, you need to credit me in your terms and put a link to my website. -I would not be responsible fo any damage you may encounter while using this product. -For any question or request about the pack, please send me an email to tpdk@tpdkdesign.net. - -Special thanks to customxp's & crystalxp's teams and members for help and support ;) -http://crystalxp.net -http://customxp.net -http://pngfactory.net -visit my deviantart webpage : http://tpdkcasimir.deviantart.com/ diff --git a/examples/timeline/img/mail-icon.png b/examples/timeline/img/mail-icon.png deleted file mode 100755 index f11ce5c3..00000000 Binary files a/examples/timeline/img/mail-icon.png and /dev/null differ diff --git a/examples/timeline/img/notes-edit-icon.png b/examples/timeline/img/notes-edit-icon.png deleted file mode 100755 index 7f903df4..00000000 Binary files a/examples/timeline/img/notes-edit-icon.png and /dev/null differ diff --git a/examples/timeline/img/product-icon.png b/examples/timeline/img/product-icon.png deleted file mode 100644 index fb12da43..00000000 Binary files a/examples/timeline/img/product-icon.png and /dev/null differ diff --git a/examples/timeline/img/truck-icon.png b/examples/timeline/img/truck-icon.png deleted file mode 100644 index 89d92622..00000000 Binary files a/examples/timeline/img/truck-icon.png and /dev/null differ diff --git a/examples/timeline/index.html b/examples/timeline/index.html deleted file mode 100644 index c02c1182..00000000 --- a/examples/timeline/index.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - vis.js | timeline examples - - - - - - - - \ No newline at end of file diff --git a/examples/timeline/requirejs/requirejs_example.html b/examples/timeline/requirejs/requirejs_example.html deleted file mode 100644 index d4e85f08..00000000 --- a/examples/timeline/requirejs/requirejs_example.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - Timeline requirejs demo - - - - - - -
- - diff --git a/examples/timeline/requirejs/scripts/main.js b/examples/timeline/requirejs/scripts/main.js deleted file mode 100644 index 6549d024..00000000 --- a/examples/timeline/requirejs/scripts/main.js +++ /dev/null @@ -1,19 +0,0 @@ -require.config({ - paths: { - vis: '../../../../dist/vis' - } -}); - -require(['vis'], function (vis) { - var container = document.getElementById('visualization'); - var data = new vis.DataSet([ - {id: 1, content: 'item 1', start: '2013-04-20'}, - {id: 2, content: 'item 2', start: '2013-04-14'}, - {id: 3, content: 'item 3', start: '2013-04-18'}, - {id: 4, content: 'item 4', start: '2013-04-16', end: '2013-04-19'}, - {id: 5, content: 'item 5', start: '2013-04-25'}, - {id: 6, content: 'item 6', start: '2013-04-27'} - ]); - var options = {}; - var timeline = new vis.Timeline(container, data, options); -}); diff --git a/examples/timeline/requirejs/scripts/require.js b/examples/timeline/requirejs/scripts/require.js deleted file mode 100644 index 8de013dc..00000000 --- a/examples/timeline/requirejs/scripts/require.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - RequireJS 2.1.2 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. - Available via the MIT or new BSD license. - see: http://github.com/jrburke/requirejs for details -*/ -var requirejs,require,define; -(function(Y){function H(b){return"[object Function]"===L.call(b)}function I(b){return"[object Array]"===L.call(b)}function x(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(H(n)){if(this.events.error)try{e=j.execCb(c,n,b,e)}catch(d){a=d}else e=j.execCb(c,n,b,e);this.map.isDefine&&((b=this.module)&&void 0!==b.exports&&b.exports!==this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=[this.map.id],a.requireType="define",C(this.error=a)}else e=n;this.exports=e;if(this.map.isDefine&& -!this.ignore&&(p[c]=e,l.onResourceLoad))l.onResourceLoad(j,this.map,this.depMaps);delete k[c];this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=h(a.prefix);this.depMaps.push(d);s(d,"defined",t(this,function(e){var n,d;d=this.map.name;var v=this.map.parentMap?this.map.parentMap.name:null,f=j.makeRequire(a.parentMap,{enableBuildCallback:!0, -skipMap:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,v,!0)})||""),e=h(a.prefix+"!"+d,this.map.parentMap),s(e,"defined",t(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=i(k,e.id)){this.depMaps.push(e);if(this.events.error)d.on("error",t(this,function(a){this.emit("error",a)}));d.enable()}}else n=t(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),n.error=t(this,function(a){this.inited=!0;this.error= -a;a.requireModules=[b];E(k,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&delete k[a.map.id]});C(a)}),n.fromText=t(this,function(e,c){var d=a.name,u=h(d),v=O;c&&(e=c);v&&(O=!1);q(u);r(m.config,b)&&(m.config[d]=m.config[b]);try{l.exec(e)}catch(k){throw Error("fromText eval for "+d+" failed: "+k);}v&&(O=!0);this.depMaps.push(u);j.completeLoad(d);f([d],n)}),e.load(a.name,f,n,m)}));j.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){this.enabling=this.enabled=!0;x(this.depMaps,t(this,function(a, -b){var c,e;if("string"===typeof a){a=h(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=i(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;s(a,"defined",t(this,function(a){this.defineDep(b,a);this.check()}));this.errback&&s(a,"error",this.errback)}c=a.id;e=k[c];!r(N,c)&&(e&&!e.enabled)&&j.enable(a,this)}));E(this.pluginMaps,t(this,function(a){var b=i(k,a.id);b&&!b.enabled&&j.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c= -this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){x(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};j={config:m,contextName:b,registry:k,defined:p,urlFetched:S,defQueue:F,Module:W,makeModuleMap:h,nextTick:l.nextTick,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=m.pkgs,c=m.shim,e={paths:!0,config:!0,map:!0};E(a,function(a,b){e[b]?"map"===b?Q(m[b],a,!0,!0):Q(m[b],a,!0):m[b]=a});a.shim&&(E(a.shim,function(a, -b){I(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=j.makeShimExports(a);c[b]=a}),m.shim=c);a.packages&&(x(a.packages,function(a){a="string"===typeof a?{name:a}:a;b[a.name]={name:a.name,location:a.location||a.name,main:(a.main||"main").replace(ga,"").replace(aa,"")}}),m.pkgs=b);E(k,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=h(b))});if(a.deps||a.callback)j.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(Y,arguments)); -return b||a.exports&&Z(a.exports)}},makeRequire:function(a,d){function f(e,c,u){var i,m;d.enableBuildCallback&&(c&&H(c))&&(c.__requireJsBuild=!0);if("string"===typeof e){if(H(c))return C(J("requireargs","Invalid require call"),u);if(a&&r(N,e))return N[e](k[a.id]);if(l.get)return l.get(j,e,a);i=h(e,a,!1,!0);i=i.id;return!r(p,i)?C(J("notloaded",'Module name "'+i+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):p[i]}K();j.nextTick(function(){K();m=q(h(null,a));m.skipMap=d.skipMap; -m.init(e,c,u,{enabled:!0});B()});return f}d=d||{};Q(f,{isBrowser:z,toUrl:function(b){var d=b.lastIndexOf("."),g=null;-1!==d&&(g=b.substring(d,b.length),b=b.substring(0,d));return j.nameToUrl(c(b,a&&a.id,!0),g)},defined:function(b){return r(p,h(b,a,!1,!0).id)},specified:function(b){b=h(b,a,!1,!0).id;return r(p,b)||r(k,b)}});a||(f.undef=function(b){w();var c=h(b,a,!0),d=i(k,b);delete p[b];delete S[c.url];delete X[b];d&&(d.events.defined&&(X[b]=d.events),delete k[b])});return f},enable:function(a){i(k, -a.id)&&q(a).enable()},completeLoad:function(a){var b,c,d=i(m.shim,a)||{},h=d.exports;for(w();F.length;){c=F.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);D(c)}c=i(k,a);if(!b&&!r(p,a)&&c&&!c.inited){if(m.enforceDefine&&(!h||!Z(h)))return y(a)?void 0:C(J("nodefine","No define call for "+a,null,[a]));D([a,d.deps||[],d.exportsFn])}B()},nameToUrl:function(a,b){var c,d,h,f,j,k;if(l.jsExtRegExp.test(a))f=a+(b||"");else{c=m.paths;d=m.pkgs;f=a.split("/");for(j=f.length;0f.attachEvent.toString().indexOf("[native code"))&&!V?(O=!0,f.attachEvent("onreadystatechange", -b.onScriptLoad)):(f.addEventListener("load",b.onScriptLoad,!1),f.addEventListener("error",b.onScriptError,!1)),f.src=d,K=f,D?A.insertBefore(f,D):A.appendChild(f),K=null,f;$&&(importScripts(d),b.completeLoad(c))};z&&M(document.getElementsByTagName("script"),function(b){A||(A=b.parentNode);if(s=b.getAttribute("data-main"))return q.baseUrl||(G=s.split("/"),ba=G.pop(),ca=G.length?G.join("/")+"/":"./",q.baseUrl=ca,s=ba),s=s.replace(aa,""),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var i, -f;"string"!==typeof b&&(d=c,c=b,b=null);I(c)||(d=c,c=[]);!c.length&&H(d)&&d.length&&(d.toString().replace(ia,"").replace(ja,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c));if(O){if(!(i=K))P&&"interactive"===P.readyState||M(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),i=P;i&&(b||(b=i.getAttribute("data-requiremodule")),f=B[i.getAttribute("data-requirecontext")])}(f?f.defQueue:R).push([b,c,d])};define.amd= -{jQuery:!0};l.exec=function(b){return eval(b)};l(q)}})(this); diff --git a/img/external-link-icons/external-link-icon-white.png b/img/external-link-icons/external-link-icon-white.png deleted file mode 100644 index 29b21e95..00000000 Binary files a/img/external-link-icons/external-link-icon-white.png and /dev/null differ diff --git a/img/external-link-icons/external-link-icon.png b/img/external-link-icons/external-link-icon.png deleted file mode 100644 index e3993e2e..00000000 Binary files a/img/external-link-icons/external-link-icon.png and /dev/null differ diff --git a/img/external-link-icons/license.txt b/img/external-link-icons/license.txt deleted file mode 100644 index 98e78e5d..00000000 --- a/img/external-link-icons/license.txt +++ /dev/null @@ -1,40 +0,0 @@ -/**************************************\ -Shapes4FREE License -http://www.shapes4free.com/ - visit us to get free photoshop shapes, read our easy-to-understand shapes tutorials and tips, and view beautiful examples of using shapes in all kinds of design -More about the license: http://www.shapes4free.com/license/ -\**************************************/ - -This resource was created by Oksana Khristenko - -This resource has been downloaded from Shapes4FREE.com and is free for personal or commercial projects. You may use it for web and print design. - -No attribution or backlinks are required, but we would certainly appreciate it if you bookmarked www.shapes4free.com and shared the link to it with your friends: - -www.shapes4free.com - free photoshop shapes - -You may not resell or distribute this resource. Uploading it to another website -or offering them for download on another website is not allowed. If you would like to feature this resource on -your website or share them with friends, do not link directly to the resource files, -please link to the appropriate page on Shapes4FREE.com where it is possible to download the freebie. - -/**************************************\ -Shapes4FREE Лицензия -http://www.shapes4free.com/ - бесплатные фигуры для Фотошопа, уроки и подсказки, а также красивые примеры использования фигур во всех видах дизайна -Лицензия: http://www.shapes4free.com/license-ru/ -\**************************************/ - -Автор: Оксана Христенко - -Все бесплатные ресурсы которые можно скачать на Shapes4FREE.com, включая произвольные фигуры для Фотошопа -(photoshop custom shapes) бесплатны для использования в личных и коммерческих проектах. Разрешено использовать -бесплатные ресурсы Shapes4FREE в веб дизайне и печатных материалах. - -Ссылка на сайт Shapes4FREE.com не требуется но приветствуется. Мы будем рады если вы расскажете о нас друзьям: - -www.shapes4free.com - бесплатные фигуры для Фотошопа - -Запрещено продавать или распространять бесплатные ресурсы созданные Shapes4FREE. -Запрещено загружать их на другие сайты и позволять пользователям их скачивать. Если вы хотите рассказать о нашем -бесплатном ресурсе на сайте или поделиться с друзьями, не создавайте прямых ссылок на файл, создайте ссылку на -соответствующую страницу сайта Shapes4FREE.com где можно будет скачать этот ресурс. - diff --git a/img/forkme_right_darkblue_121621.png b/img/forkme_right_darkblue_121621.png deleted file mode 100644 index 146ef8a8..00000000 Binary files a/img/forkme_right_darkblue_121621.png and /dev/null differ diff --git a/img/gallery/graph2d/01_basic.png b/img/gallery/graph2d/01_basic.png deleted file mode 100644 index c658aad8..00000000 Binary files a/img/gallery/graph2d/01_basic.png and /dev/null differ diff --git a/img/gallery/graph2d/02_bars.png b/img/gallery/graph2d/02_bars.png deleted file mode 100644 index f61978a1..00000000 Binary files a/img/gallery/graph2d/02_bars.png and /dev/null differ diff --git a/img/gallery/graph2d/03_groups.png b/img/gallery/graph2d/03_groups.png deleted file mode 100644 index fea1d30e..00000000 Binary files a/img/gallery/graph2d/03_groups.png and /dev/null differ diff --git a/img/gallery/graph2d/04_rightAxis.png b/img/gallery/graph2d/04_rightAxis.png deleted file mode 100644 index ae0d91da..00000000 Binary files a/img/gallery/graph2d/04_rightAxis.png and /dev/null differ diff --git a/img/gallery/graph2d/05_bothAxis.png b/img/gallery/graph2d/05_bothAxis.png deleted file mode 100644 index dfd4c91c..00000000 Binary files a/img/gallery/graph2d/05_bothAxis.png and /dev/null differ diff --git a/img/gallery/graph2d/06_interpolation.png b/img/gallery/graph2d/06_interpolation.png deleted file mode 100644 index 701ebde8..00000000 Binary files a/img/gallery/graph2d/06_interpolation.png and /dev/null differ diff --git a/img/gallery/graph2d/07_scrollingAndSorting.png b/img/gallery/graph2d/07_scrollingAndSorting.png deleted file mode 100644 index b300615d..00000000 Binary files a/img/gallery/graph2d/07_scrollingAndSorting.png and /dev/null differ diff --git a/img/gallery/graph2d/08_performance.png b/img/gallery/graph2d/08_performance.png deleted file mode 100644 index 54cc5e45..00000000 Binary files a/img/gallery/graph2d/08_performance.png and /dev/null differ diff --git a/img/gallery/graph2d/09_external_legend.png b/img/gallery/graph2d/09_external_legend.png deleted file mode 100644 index 95180a2d..00000000 Binary files a/img/gallery/graph2d/09_external_legend.png and /dev/null differ diff --git a/img/gallery/graph2d/10_barsSideBySide.png b/img/gallery/graph2d/10_barsSideBySide.png deleted file mode 100644 index 5fbe6e0c..00000000 Binary files a/img/gallery/graph2d/10_barsSideBySide.png and /dev/null differ diff --git a/img/gallery/graph2d/11_barsSideBySideGroups.png b/img/gallery/graph2d/11_barsSideBySideGroups.png deleted file mode 100644 index ebb591bb..00000000 Binary files a/img/gallery/graph2d/11_barsSideBySideGroups.png and /dev/null differ diff --git a/img/gallery/graph2d/12_customRange.html.png b/img/gallery/graph2d/12_customRange.html.png deleted file mode 100644 index 0ddbba60..00000000 Binary files a/img/gallery/graph2d/12_customRange.html.png and /dev/null differ diff --git a/img/gallery/graph2d/13_localization.png b/img/gallery/graph2d/13_localization.png deleted file mode 100644 index 6d0d4bd8..00000000 Binary files a/img/gallery/graph2d/13_localization.png and /dev/null differ diff --git a/img/gallery/graph2d/14_toggleGroups.png b/img/gallery/graph2d/14_toggleGroups.png deleted file mode 100644 index fb47c507..00000000 Binary files a/img/gallery/graph2d/14_toggleGroups.png and /dev/null differ diff --git a/img/gallery/graph2d/15_streaming_data.png b/img/gallery/graph2d/15_streaming_data.png deleted file mode 100644 index aa06d26e..00000000 Binary files a/img/gallery/graph2d/15_streaming_data.png and /dev/null differ diff --git a/img/gallery/graph2d/16_bothAxis_titles.png b/img/gallery/graph2d/16_bothAxis_titles.png deleted file mode 100644 index 9702c14b..00000000 Binary files a/img/gallery/graph2d/16_bothAxis_titles.png and /dev/null differ diff --git a/img/gallery/graph2d/17_dynamicStyling.png b/img/gallery/graph2d/17_dynamicStyling.png deleted file mode 100644 index 57a9bed5..00000000 Binary files a/img/gallery/graph2d/17_dynamicStyling.png and /dev/null differ diff --git a/img/gallery/graph3d/example01_basis.png b/img/gallery/graph3d/example01_basis.png deleted file mode 100644 index 85aff512..00000000 Binary files a/img/gallery/graph3d/example01_basis.png and /dev/null differ diff --git a/img/gallery/graph3d/example02_camera.png b/img/gallery/graph3d/example02_camera.png deleted file mode 100644 index c7c25094..00000000 Binary files a/img/gallery/graph3d/example02_camera.png and /dev/null differ diff --git a/img/gallery/graph3d/example03_filter.png b/img/gallery/graph3d/example03_filter.png deleted file mode 100644 index 009a1dae..00000000 Binary files a/img/gallery/graph3d/example03_filter.png and /dev/null differ diff --git a/img/gallery/graph3d/example04_animate.png b/img/gallery/graph3d/example04_animate.png deleted file mode 100644 index 95f3c498..00000000 Binary files a/img/gallery/graph3d/example04_animate.png and /dev/null differ diff --git a/img/gallery/graph3d/example05_line.png b/img/gallery/graph3d/example05_line.png deleted file mode 100644 index 98523389..00000000 Binary files a/img/gallery/graph3d/example05_line.png and /dev/null differ diff --git a/img/gallery/graph3d/example06_moving_dots.png b/img/gallery/graph3d/example06_moving_dots.png deleted file mode 100644 index fbb46482..00000000 Binary files a/img/gallery/graph3d/example06_moving_dots.png and /dev/null differ diff --git a/img/gallery/graph3d/example07_dot_cloud_colors.png b/img/gallery/graph3d/example07_dot_cloud_colors.png deleted file mode 100644 index dc6a33f6..00000000 Binary files a/img/gallery/graph3d/example07_dot_cloud_colors.png and /dev/null differ diff --git a/img/gallery/graph3d/example08_dot_cloud_size.png b/img/gallery/graph3d/example08_dot_cloud_size.png deleted file mode 100644 index c39bea61..00000000 Binary files a/img/gallery/graph3d/example08_dot_cloud_size.png and /dev/null differ diff --git a/img/gallery/graph3d/example09_mobile.png b/img/gallery/graph3d/example09_mobile.png deleted file mode 100644 index fedda5c8..00000000 Binary files a/img/gallery/graph3d/example09_mobile.png and /dev/null differ diff --git a/img/gallery/graph3d/example10_styles.png b/img/gallery/graph3d/example10_styles.png deleted file mode 100644 index a3d8f662..00000000 Binary files a/img/gallery/graph3d/example10_styles.png and /dev/null differ diff --git a/img/gallery/graph3d/example11_tooltips.png b/img/gallery/graph3d/example11_tooltips.png deleted file mode 100644 index 084d2dbf..00000000 Binary files a/img/gallery/graph3d/example11_tooltips.png and /dev/null differ diff --git a/img/gallery/graph3d/playground.png b/img/gallery/graph3d/playground.png deleted file mode 100644 index d2fda06e..00000000 Binary files a/img/gallery/graph3d/playground.png and /dev/null differ diff --git a/img/gallery/network/01_basic_usage.png b/img/gallery/network/01_basic_usage.png deleted file mode 100644 index 5fea7b0f..00000000 Binary files a/img/gallery/network/01_basic_usage.png and /dev/null differ diff --git a/img/gallery/network/02_random_nodes.png b/img/gallery/network/02_random_nodes.png deleted file mode 100644 index 39a9e3a8..00000000 Binary files a/img/gallery/network/02_random_nodes.png and /dev/null differ diff --git a/img/gallery/network/03_images.png b/img/gallery/network/03_images.png deleted file mode 100644 index 118915e4..00000000 Binary files a/img/gallery/network/03_images.png and /dev/null differ diff --git a/img/gallery/network/04_shapes.png b/img/gallery/network/04_shapes.png deleted file mode 100644 index 0efccc9f..00000000 Binary files a/img/gallery/network/04_shapes.png and /dev/null differ diff --git a/img/gallery/network/05_social_network.png b/img/gallery/network/05_social_network.png deleted file mode 100644 index 980ef836..00000000 Binary files a/img/gallery/network/05_social_network.png and /dev/null differ diff --git a/img/gallery/network/06_groups.png b/img/gallery/network/06_groups.png deleted file mode 100644 index 6526b4a3..00000000 Binary files a/img/gallery/network/06_groups.png and /dev/null differ diff --git a/img/gallery/network/07_selections.png b/img/gallery/network/07_selections.png deleted file mode 100644 index 16e90a4b..00000000 Binary files a/img/gallery/network/07_selections.png and /dev/null differ diff --git a/img/gallery/network/08_mobile_friendly.png b/img/gallery/network/08_mobile_friendly.png deleted file mode 100644 index b62bf9bf..00000000 Binary files a/img/gallery/network/08_mobile_friendly.png and /dev/null differ diff --git a/img/gallery/network/09_sizing.png b/img/gallery/network/09_sizing.png deleted file mode 100644 index 1cc18057..00000000 Binary files a/img/gallery/network/09_sizing.png and /dev/null differ diff --git a/img/gallery/network/10_multiline_text.png b/img/gallery/network/10_multiline_text.png deleted file mode 100644 index 7f95d7a8..00000000 Binary files a/img/gallery/network/10_multiline_text.png and /dev/null differ diff --git a/img/gallery/network/11_custom_style.png b/img/gallery/network/11_custom_style.png deleted file mode 100644 index 18f538e9..00000000 Binary files a/img/gallery/network/11_custom_style.png and /dev/null differ diff --git a/img/gallery/network/12_scalable_images.png b/img/gallery/network/12_scalable_images.png deleted file mode 100644 index 1d3c7ee7..00000000 Binary files a/img/gallery/network/12_scalable_images.png and /dev/null differ diff --git a/img/gallery/network/13_dashed_lines.png b/img/gallery/network/13_dashed_lines.png deleted file mode 100644 index bb6779ce..00000000 Binary files a/img/gallery/network/13_dashed_lines.png and /dev/null differ diff --git a/img/gallery/network/14_dot_language.png b/img/gallery/network/14_dot_language.png deleted file mode 100644 index a0433e17..00000000 Binary files a/img/gallery/network/14_dot_language.png and /dev/null differ diff --git a/img/gallery/network/15_dot_language_playground.png b/img/gallery/network/15_dot_language_playground.png deleted file mode 100644 index 7048da50..00000000 Binary files a/img/gallery/network/15_dot_language_playground.png and /dev/null differ diff --git a/img/gallery/network/15_dot_language_playground2.png b/img/gallery/network/15_dot_language_playground2.png deleted file mode 100644 index d74a8da2..00000000 Binary files a/img/gallery/network/15_dot_language_playground2.png and /dev/null differ diff --git a/img/gallery/network/16_dynamic_data.png b/img/gallery/network/16_dynamic_data.png deleted file mode 100644 index c60ccf38..00000000 Binary files a/img/gallery/network/16_dynamic_data.png and /dev/null differ diff --git a/img/gallery/network/17_network_info.png b/img/gallery/network/17_network_info.png deleted file mode 100644 index aabff0e6..00000000 Binary files a/img/gallery/network/17_network_info.png and /dev/null differ diff --git a/img/gallery/network/18_fully_random_nodes_clustering.png b/img/gallery/network/18_fully_random_nodes_clustering.png deleted file mode 100644 index 6356994e..00000000 Binary files a/img/gallery/network/18_fully_random_nodes_clustering.png and /dev/null differ diff --git a/img/gallery/network/19_scale_free_graph_clustering.png b/img/gallery/network/19_scale_free_graph_clustering.png deleted file mode 100644 index 70505e2b..00000000 Binary files a/img/gallery/network/19_scale_free_graph_clustering.png and /dev/null differ diff --git a/img/gallery/network/20_navigation.png b/img/gallery/network/20_navigation.png deleted file mode 100644 index 3cc4dc06..00000000 Binary files a/img/gallery/network/20_navigation.png and /dev/null differ diff --git a/img/gallery/network/21_data_manipulation.png b/img/gallery/network/21_data_manipulation.png deleted file mode 100644 index 26e9f1d3..00000000 Binary files a/img/gallery/network/21_data_manipulation.png and /dev/null differ diff --git a/img/gallery/network/22_les_miserables.png b/img/gallery/network/22_les_miserables.png deleted file mode 100644 index c1246375..00000000 Binary files a/img/gallery/network/22_les_miserables.png and /dev/null differ diff --git a/img/gallery/network/23_hierarchical_layout.png b/img/gallery/network/23_hierarchical_layout.png deleted file mode 100644 index 7d5035ed..00000000 Binary files a/img/gallery/network/23_hierarchical_layout.png and /dev/null differ diff --git a/img/gallery/network/24_hierarchical_layout_userdefined.png b/img/gallery/network/24_hierarchical_layout_userdefined.png deleted file mode 100644 index 3799fbba..00000000 Binary files a/img/gallery/network/24_hierarchical_layout_userdefined.png and /dev/null differ diff --git a/img/gallery/network/25_physics_configuration.png b/img/gallery/network/25_physics_configuration.png deleted file mode 100644 index 641abd84..00000000 Binary files a/img/gallery/network/25_physics_configuration.png and /dev/null differ diff --git a/img/gallery/network/26_staticSmoothCurves.png b/img/gallery/network/26_staticSmoothCurves.png deleted file mode 100644 index fbf2b85d..00000000 Binary files a/img/gallery/network/26_staticSmoothCurves.png and /dev/null differ diff --git a/img/gallery/network/27_world_cup_network.png b/img/gallery/network/27_world_cup_network.png deleted file mode 100644 index 997699ce..00000000 Binary files a/img/gallery/network/27_world_cup_network.png and /dev/null differ diff --git a/img/gallery/network/28_world_cup_network_performance.png b/img/gallery/network/28_world_cup_network_performance.png deleted file mode 100644 index 602de787..00000000 Binary files a/img/gallery/network/28_world_cup_network_performance.png and /dev/null differ diff --git a/img/gallery/network/29_neighbourhood_highlight.png b/img/gallery/network/29_neighbourhood_highlight.png deleted file mode 100644 index 4551ce62..00000000 Binary files a/img/gallery/network/29_neighbourhood_highlight.png and /dev/null differ diff --git a/img/gallery/network/30_importing_from_gephi.png b/img/gallery/network/30_importing_from_gephi.png deleted file mode 100644 index 0835fd79..00000000 Binary files a/img/gallery/network/30_importing_from_gephi.png and /dev/null differ diff --git a/img/gallery/network/31_localization.png b/img/gallery/network/31_localization.png deleted file mode 100644 index a8a31e52..00000000 Binary files a/img/gallery/network/31_localization.png and /dev/null differ diff --git a/img/gallery/network/32_hierarchicalLayoutMethods.png b/img/gallery/network/32_hierarchicalLayoutMethods.png deleted file mode 100644 index fea80561..00000000 Binary files a/img/gallery/network/32_hierarchicalLayoutMethods.png and /dev/null differ diff --git a/img/gallery/network/33_animation.png b/img/gallery/network/33_animation.png deleted file mode 100644 index 4c8db03c..00000000 Binary files a/img/gallery/network/33_animation.png and /dev/null differ diff --git a/img/gallery/network/graphviz_gallery.png b/img/gallery/network/graphviz_gallery.png deleted file mode 100644 index 9aacc612..00000000 Binary files a/img/gallery/network/graphviz_gallery.png and /dev/null differ diff --git a/img/gallery/timeline/01_basic.png b/img/gallery/timeline/01_basic.png deleted file mode 100644 index 8be3e577..00000000 Binary files a/img/gallery/timeline/01_basic.png and /dev/null differ diff --git a/img/gallery/timeline/02_interactive.png b/img/gallery/timeline/02_interactive.png deleted file mode 100644 index a651939a..00000000 Binary files a/img/gallery/timeline/02_interactive.png and /dev/null differ diff --git a/img/gallery/timeline/03_performance.png b/img/gallery/timeline/03_performance.png deleted file mode 100644 index 48819882..00000000 Binary files a/img/gallery/timeline/03_performance.png and /dev/null differ diff --git a/img/gallery/timeline/04_html_data.png b/img/gallery/timeline/04_html_data.png deleted file mode 100644 index 5b73a37d..00000000 Binary files a/img/gallery/timeline/04_html_data.png and /dev/null differ diff --git a/img/gallery/timeline/05_groups.png b/img/gallery/timeline/05_groups.png deleted file mode 100644 index 04234222..00000000 Binary files a/img/gallery/timeline/05_groups.png and /dev/null differ diff --git a/img/gallery/timeline/06_event_listeners.png b/img/gallery/timeline/06_event_listeners.png deleted file mode 100644 index 0e3432c1..00000000 Binary files a/img/gallery/timeline/06_event_listeners.png and /dev/null differ diff --git a/img/gallery/timeline/07_custom_time_bar.png b/img/gallery/timeline/07_custom_time_bar.png deleted file mode 100644 index 6b394bc9..00000000 Binary files a/img/gallery/timeline/07_custom_time_bar.png and /dev/null differ diff --git a/img/gallery/timeline/08_edit_items.png b/img/gallery/timeline/08_edit_items.png deleted file mode 100644 index 406f9191..00000000 Binary files a/img/gallery/timeline/08_edit_items.png and /dev/null differ diff --git a/img/gallery/timeline/09_order_groups.png b/img/gallery/timeline/09_order_groups.png deleted file mode 100644 index d5aa1565..00000000 Binary files a/img/gallery/timeline/09_order_groups.png and /dev/null differ diff --git a/img/gallery/timeline/10_limit_move_and_zoom.png b/img/gallery/timeline/10_limit_move_and_zoom.png deleted file mode 100644 index d7cb64b3..00000000 Binary files a/img/gallery/timeline/10_limit_move_and_zoom.png and /dev/null differ diff --git a/img/gallery/timeline/11_points.png b/img/gallery/timeline/11_points.png deleted file mode 100644 index 2d2c257c..00000000 Binary files a/img/gallery/timeline/11_points.png and /dev/null differ diff --git a/img/gallery/timeline/12_custom_styling.png b/img/gallery/timeline/12_custom_styling.png deleted file mode 100644 index 43a34eee..00000000 Binary files a/img/gallery/timeline/12_custom_styling.png and /dev/null differ diff --git a/img/gallery/timeline/13_past_and_future.png b/img/gallery/timeline/13_past_and_future.png deleted file mode 100644 index 45f7fd43..00000000 Binary files a/img/gallery/timeline/13_past_and_future.png and /dev/null differ diff --git a/img/gallery/timeline/14_group_performance.png b/img/gallery/timeline/14_group_performance.png deleted file mode 100644 index 2077a041..00000000 Binary files a/img/gallery/timeline/14_group_performance.png and /dev/null differ diff --git a/img/gallery/timeline/15_item_class_names.png b/img/gallery/timeline/15_item_class_names.png deleted file mode 100644 index 379f0a36..00000000 Binary files a/img/gallery/timeline/15_item_class_names.png and /dev/null differ diff --git a/img/gallery/timeline/16_navigation_menu.png b/img/gallery/timeline/16_navigation_menu.png deleted file mode 100644 index a1a7db59..00000000 Binary files a/img/gallery/timeline/16_navigation_menu.png and /dev/null differ diff --git a/img/gallery/timeline/17_data_serialization.png b/img/gallery/timeline/17_data_serialization.png deleted file mode 100644 index e776b89a..00000000 Binary files a/img/gallery/timeline/17_data_serialization.png and /dev/null differ diff --git a/img/gallery/timeline/18_range_overflow.png b/img/gallery/timeline/18_range_overflow.png deleted file mode 100644 index bc0c322c..00000000 Binary files a/img/gallery/timeline/18_range_overflow.png and /dev/null differ diff --git a/img/gallery/timeline/19_localization.png b/img/gallery/timeline/19_localization.png deleted file mode 100644 index b5b38b19..00000000 Binary files a/img/gallery/timeline/19_localization.png and /dev/null differ diff --git a/img/gallery/timeline/20_click_to_use.png b/img/gallery/timeline/20_click_to_use.png deleted file mode 100644 index 07068865..00000000 Binary files a/img/gallery/timeline/20_click_to_use.png and /dev/null differ diff --git a/img/gallery/timeline/21_set_selection.png b/img/gallery/timeline/21_set_selection.png deleted file mode 100644 index 7739fc38..00000000 Binary files a/img/gallery/timeline/21_set_selection.png and /dev/null differ diff --git a/img/gallery/timeline/22_window_adjustment.png b/img/gallery/timeline/22_window_adjustment.png deleted file mode 100644 index 2a025650..00000000 Binary files a/img/gallery/timeline/22_window_adjustment.png and /dev/null differ diff --git a/img/gallery/timeline/23_data_attributes.png b/img/gallery/timeline/23_data_attributes.png deleted file mode 100644 index 70024697..00000000 Binary files a/img/gallery/timeline/23_data_attributes.png and /dev/null differ diff --git a/img/gallery/timeline/24_all_data_attributes.png b/img/gallery/timeline/24_all_data_attributes.png deleted file mode 100644 index 968a34e0..00000000 Binary files a/img/gallery/timeline/24_all_data_attributes.png and /dev/null differ diff --git a/img/gallery/timeline/25_background_areas.png b/img/gallery/timeline/25_background_areas.png deleted file mode 100644 index d3596fcd..00000000 Binary files a/img/gallery/timeline/25_background_areas.png and /dev/null differ diff --git a/img/gallery/timeline/26_external_data.png b/img/gallery/timeline/26_external_data.png deleted file mode 100644 index e295db4d..00000000 Binary files a/img/gallery/timeline/26_external_data.png and /dev/null differ diff --git a/img/gallery/timeline/27_templates.png b/img/gallery/timeline/27_templates.png deleted file mode 100644 index 2c7da43b..00000000 Binary files a/img/gallery/timeline/27_templates.png and /dev/null differ diff --git a/img/gallery/timeline/29_hiding_times.png b/img/gallery/timeline/29_hiding_times.png deleted file mode 100644 index f9205ca8..00000000 Binary files a/img/gallery/timeline/29_hiding_times.png and /dev/null differ diff --git a/img/gallery/timeline/30_subgroups.png b/img/gallery/timeline/30_subgroups.png deleted file mode 100644 index a3eb1611..00000000 Binary files a/img/gallery/timeline/30_subgroups.png and /dev/null differ diff --git a/img/gallery/timeline/31_background_areas_with_groups.png b/img/gallery/timeline/31_background_areas_with_groups.png deleted file mode 100644 index 7a1e4647..00000000 Binary files a/img/gallery/timeline/31_background_areas_with_groups.png and /dev/null differ diff --git a/img/logo/vis.svg b/img/logo/vis.svg deleted file mode 100644 index a89b9911..00000000 --- a/img/logo/vis.svg +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/img/logo/vis128.png b/img/logo/vis128.png deleted file mode 100644 index d51b514e..00000000 Binary files a/img/logo/vis128.png and /dev/null differ diff --git a/img/logo/vis16.png b/img/logo/vis16.png deleted file mode 100644 index e9234153..00000000 Binary files a/img/logo/vis16.png and /dev/null differ diff --git a/img/logo/vis256.png b/img/logo/vis256.png deleted file mode 100644 index f3dee70e..00000000 Binary files a/img/logo/vis256.png and /dev/null differ diff --git a/img/logo/vis32.ico b/img/logo/vis32.ico deleted file mode 100644 index 5e84823d..00000000 Binary files a/img/logo/vis32.ico and /dev/null differ diff --git a/img/logo/vis32.png b/img/logo/vis32.png deleted file mode 100644 index 563f5fd0..00000000 Binary files a/img/logo/vis32.png and /dev/null differ diff --git a/img/logo/vis64.png b/img/logo/vis64.png deleted file mode 100644 index 0ce64d80..00000000 Binary files a/img/logo/vis64.png and /dev/null differ diff --git a/index.html b/index.html deleted file mode 100644 index f05ce810..00000000 --- a/index.html +++ /dev/null @@ -1,764 +0,0 @@ - - - - - vis.js | a dynamic, browser-based visualization library - - - - - - - - - - - - - - - -
- - - -

- vis.js
- a visual interaction system -

- -

- Vis.js is a dynamic, browser based visualization library. - The library is designed to be easy to use, to handle large amounts - of dynamic data, and to enable manipulation of and interaction with the data. - The library consists of the components DataSet, Timeline, Network, Graph2d, and Graph3d. -

-

- The vis.js library is developed by Almende B.V, - as part of CHAP. - Vis.js runs fine on Chrome, Firefox, Opera, Safari, IE9+, and most mobile browsers (with full touch support). -

-

- This site contains documentation, downloads and live examples of vis.js. The sourcecode of vis.js is available at Github. For questions, issues, and suggestions please use the issues section of the Github project. -

- -

Install

- -

npm

- -
-npm install vis
-
- -

bower

- -
-bower install vis
-
- -

download

- -Click here to download vis.js -(version 3.7.2) - - -

Example

- -

- A basic example demonstrating how to use the vis.js timeline is shown below. - See the gallery below for more examples. -

- -
<!doctype html>
-<html>
-<head>
-  <link href="http://visjs.org/dist/vis.css" rel="stylesheet" type="text/css" />
-  <script src="http://visjs.org/dist/vis.js"></script>
-</head>
-<body>
-  <div id="mytimeline"></div>
-
-  <script type="text/javascript">
-    // DOM element where the Timeline will be attached
-    var container = document.getElementById('mytimeline');
-
-    // Create a DataSet with data (enables two way data binding)
-    var data = new vis.DataSet([
-      {id: 1, content: 'item 1', start: '2013-04-20'},
-      {id: 2, content: 'item 2', start: '2013-04-14'},
-      {id: 3, content: 'item 3', start: '2013-04-18'},
-      {id: 4, content: 'item 4', start: '2013-04-16', end: '2013-04-19'},
-      {id: 5, content: 'item 5', start: '2013-04-25'},
-      {id: 6, content: 'item 6', start: '2013-04-27'}
-    ]);
-
-    // Configuration for the Timeline
-    var options = {};
-
-    // Create a Timeline
-    var timeline = new vis.Timeline(container, data, options);
-  </script>
-</body>
-</html>
-
- - - -This gallery gives an idea of the features and possibilities of the library. -The source code of the examples can be found in the -examples directory. - -

Timeline

-

- The timeline from vis.js displays different types of data on a timeline. -

- - -

Network

-

- The Network visualization visualizes graphs and networks with - customizable styles. -

- - - - -

Graph2d

-

- The Graph2d visualizes bars and lines in time. -

- - - - -

Graph3d

-

- The Graph3d from vis.js visualizes three and four dimensional data. -

- - - - -

Docs

- -

- Documentation is available here: - Documentation -

- - -

License

- -

- Copyright 2010-2014 Almende B.V. -

- -

- Vis.js is dual licensed under both -

- -

- and -

- - -

- Vis.js may be distributed under either license. -

- - - Fork me on GitHub - - -
- - diff --git a/package.js b/package.js deleted file mode 100644 index e69de29b..00000000 diff --git a/updateversion.js b/updateversion.js deleted file mode 100644 index 18878b6c..00000000 --- a/updateversion.js +++ /dev/null @@ -1,58 +0,0 @@ -// Update the version numbers and library sizes in index.html - -var fs = require('fs'), - zlib = require('zlib'); - -var VIS_ZIP = './dist/vis.js', - INDEX = 'index.html'; - -// read version from dist/vis.js -function version(callback) { - fs.readFile(VIS_ZIP, function (err, data) { - if (!err) { - var match = /@version\s*([\w\.-]*)/i.exec(data); - var version = undefined; - if (match) { - version = match[1]; - } - callback(null, version); - } - else { - callback(err); - } - }); -} - -// update version and library sizes in index.md -function updateVersion(version, callback) { - fs.readFile(INDEX, function (err, data) { - if (!err) { - data = String(data); - - data = data.replace(/([\w\.-]*)<\/span>/g, - '' + version + ''); - - fs.writeFile(INDEX, data, callback); - } - else { - callback(err); - } - }); -} - - -version(function (err, version) { - console.log('version: ' + version); - if (version) { - updateVersion(version, function (err, res) { - if (err) { - console.log(err); - } - else { - console.log('done'); - } - }); - } - else { - } -}); \ No newline at end of file