Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Major reorg + new examples of miso.dataset.

  • Loading branch information...
commit ef00b4f8e9d754eb82322e3c8a86be3df910dbce 1 parent e3975c5
@iros authored
Showing with 10,398 additions and 210 deletions.
  1. +11 −21 README.md
  2. +1 −1  code/crossfilter/visual.js
  3. +7 −2 code/json-streams/index.html
  4. +0 −19 code/miso-dataset-basics/index.html
  5. +9 −0 code/miso.dataset/README.md
  6. +23 −0 code/miso.dataset/basic.html
  7. +6 −9 code/{miso-dataset-basics/miso-dataset-basics.js → miso.dataset/basic.js}
  8. +41 −0 code/miso.dataset/cooccurance.html
  9. +233 −0 code/miso.dataset/cooccurance.js
  10. +20 −0 code/miso.dataset/customtype.html
  11. +2 −2 code/{miso-dataset-custom-type/miso-dataset-custom-type.js → miso.dataset/customtype.js}
  12. +3 −0  code/miso.dataset/index.html
  13. +156 −0 code/miso.dataset/superpowers.html
  14. +104 −0 code/miso.dataset/superpowers.js
  15. +22 −0 code/miso.dataset/superpowers_helper.js
  16. +0 −65 code/mvc-backbone/mvc-backbone.js
  17. +0 −43 code/mvc-canjs/mvc-canjs.js
  18. +6 −0 code/mvc/README.md
  19. +1 −1  code/{mvc-backbone/index.html → mvc/backbone.html}
  20. +64 −0 code/mvc/backbone.js
  21. +1 −1  code/{mvc-canjs/index.html → mvc/canjs.html}
  22. +41 −0 code/mvc/canjs.js
  23. +5 −0 code/mvc/index.html
  24. +5 −5 code/taffy-db/competencies.js
  25. +1 −1  code/underscore/README.md
  26. +1 −1  code/underscore/index.html
  27. +1 −1  code/underscore/visual.js
  28. +3 −0  code/web-workers/README.md
  29. +2 −17 code/web-workers/index.html
  30. +9 −7 code/{miso-dataset-custom-type/index.html → web-workers/web-worker.html}
  31. +1 −1  code/web-workers/worker.js
  32. +159 −0 data/superpower_edges.csv
  33. +4 −4 {code/json-streams → libs}/jsonstreams-nodedeps.js
  34. +4,460 −0 libs/lodash.js
  35. +0 −9 libs/miso.ds.deps.0.2.1.js
  36. +3,461 −0 libs/miso.ds.js
  37. +1,106 −0 libs/moment.js
  38. +429 −0 libs/underscore.deferred.js
View
32 README.md
@@ -1,43 +1,33 @@
Building Client-Side Data-driven applications - Talk Materials
=====================
+This repo is ever evloving in an attempt to capture the various client-side data manipulation and management libraries out there. This is a topic close to my heart and thus one that I love to tell others about as well.
+
# Contents
This repo contains:
-* code samples (/code)
+* code samples (/code) - Each section contains its own readme explaining the examples.
* data (/data)
-# How do I run this code?
+# Questions
+
+## How do I run this code?
From the root of the repo run your favorite basic http server.
I'm a fan of `python -m SimpleHTTPServer`.
-# I Don't see anything
+## Why don't I see anything?
That's because some of the output is in the console.
-You should pop that open and try again.
-
-# Do I have to run this code?
-
-No. The following examples (sorted in order of slide progression) also have jsBins you can view:
-
-* [underscore-basics](http://jsbin.com/ofoyur/3/edit)
-* [mvc-backbone](http://jsbin.com/ugedon/edit#javascript,html,live)
-* [mvc-canjs](http://jsbin.com/ayarad/edit#javascript,html,live)
-* [taffy-db](http://jsbin.com/ehakot/3/edit)
-* [crossfilter-basic](http://jsbin.com/iyabok/5/edit#javascript,html,live)
-* [crossfilter-nan](http://jsbin.com/ojuqoq/edit#javascript,html,live)
-* [miso-dataset-basics](http://jsbin.com/anodul/edit#javascript,html,live)
-* [miso-dataset-custom-type](http://jsbin.com/udikel/2/edit)
-* web-workers - Doesn't have a jsBin.
-* [json-streams](http://jsbin.com/ijitam/edit#javascript,html,live)
+You should pop that open and try again. Otherwise make sure you ran your server from
+the root of the application.
-# Is this production level code?
+## Is this production level code?
Hah! Funny. Nope. I didn't architect any proper apps here. Use these code samples as guides, but please get to know the libraries well enough to judge them yourself before you use them.
-# I have questions you haven't answered here
+## I have questions you haven't answered here
Great. Ping me at @ireneros on twitter or irene at bocoup.com.
I also idle in many places on irc: #bocoup, #misoproject.
View
2  code/crossfilter/visual.js
@@ -77,7 +77,7 @@ d3.json("../../data/all.json", function(heroes) {
// The key will be the grouping function result, the value
// by default will be count. we can always return something else.
results[competency].scores = [];
- for (var i = 0; i < intervals; i++) {
+ for (i = 0; i < intervals; i++) {
var val = competency_groups[i].value;
if (val < global_min) {
global_min = val;
View
9 code/json-streams/index.html
@@ -8,11 +8,16 @@
<body>
<h1> JSON Streams </h1>
<div id="heroes">
- Open Your Console
+ <p>JSON Streams demonstrate a technique by @maxogden that makes use of servers' chunked transfers to capture incoming data on XHR ready state 3 rather than 4 (as data is coming in, rather when it all arrived.)
+ </p>
+ <p>
+ For more info read the post here: <a href="http://substance.io/maxogden/replicating-large-datasets-into-html5">http://substance.io/maxogden/replicating-large-datasets-into-html5</a>
+ </p>
+ <h3>Open the console to see the output</h3>
</div>​
<script type="text/javascript" src="../../libs/jquery.min.js"></script>
<script type="text/javascript" src="../../libs/underscore.js"></script>
- <script type="text/javascript" src="jsonstreams-nodedeps.js"></script>
+ <script type="text/javascript" src="../../libs/jsonstreams-nodedeps.js"></script>
<script type="text/javascript" src="json-streams.js"></script>
</body>
</html>
View
19 code/miso-dataset-basics/index.html
@@ -1,19 +0,0 @@
-<html lang="en">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>Miso Dataset Custom Type</title>
- <meta name="author" content="Irene Ros">
- <!-- Date: 2012-06-29 -->
-</head>
-<body>
- <h3>Top hair colors for all heroes and villains</h3>
- <ul id="heroHairColor">
- <li>Loading...</li>
- </ul>
-
- <!-- resources -->
- <script type="text/javascript" src="../../libs/jquery.min.js"></script>
- <script type="text/javascript" src="../../libs/miso.ds.deps.0.2.1.js"></script>
- <script type="text/javascript" src="miso-dataset-basics.js"></script>
- </body>
-</html>
View
9 code/miso.dataset/README.md
@@ -0,0 +1,9 @@
+# Miso Dataset
+
+1. [basic.html](basic.html) - A basic example using miso dataset demonstrating finding the most popular 10 hair colors of super heroes and villains.
+
+2. [customtype.html](customtype.html) - A slightly more complex example demonstrating how one might create a custom data type (numbers with commas.)
+
+3. [superpowers.html](superpowers.html) - A collection of base Dataset functions that visually demonstrate computed columns, filtering, iteration and so on.
+
+4. [coocurance.html](cooccurance.html) - A massive visualization of the cooccurance of super powers based on @mbostock's Les Miserables example. Demonstrates adding a custom serialization method to Dataset.
View
23 code/miso.dataset/basic.html
@@ -0,0 +1,23 @@
+<html lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Miso Dataset Basic Example</title>
+ <meta name="author" content="Irene Ros">
+ <!-- Date: 2012-06-29 -->
+</head>
+<body>
+ <h3>Top hair colors for all heroes and villains</h3>
+ <ul id="heroHairColor">
+ <li>Loading...</li>
+ </ul>
+
+ <!-- resources -->
+ <script type="text/javascript" src="../../libs/jquery.min.js"></script>
+ <script type="text/javascript" src="../../libs/lodash.js"></script>
+ <script type="text/javascript" src="../../libs/underscore.deferred.js"></script>
+ <script type="text/javascript" src="../../libs/underscore.math.js"></script>
+ <script type="text/javascript" src="../../libs/moment.js"></script>
+ <script type="text/javascript" src="../../libs/miso.ds.js"></script>
+ <script type="text/javascript" src="basic.js"></script>
+ </body>
+</html>
View
15 ...iso-dataset-basics/miso-dataset-basics.js → code/miso.dataset/basic.js
@@ -7,12 +7,8 @@ var heroes = new Miso.Dataset({
// fetch data
heroes.fetch().then(function() {
- // === Products
- console.log("intelligence",
- "min", heroes.min("intelligence"),
- "max", heroes.max("intelligence"));
-
- // === derivatives + sorting
+ // Get all the hair color counts
+ // and then sort them by the actual resulting count.
var heroes_by_haircolor = heroes.countBy("Hair_color")
.sort(function(row1, row2) {
if (row1.count > row2.count) { return -1; }
@@ -20,12 +16,13 @@ heroes.fetch().then(function() {
return 0;
});
- // ==== output colors
+ // ==== output top 10 colors as a basic list.
var list = $('ul#heroHairColor').empty();
for(var i = 0; i < 10; i++) {
var row = heroes_by_haircolor.rowByPosition(i);
$('<li>', {
- text : row.Hair_color + "(" + row.count + ")"
- }).appendTo(list);
+ text : row.Hair_color + " (" + row.count + ")"
+ })
+ .appendTo(list);
}
});
View
41 code/miso.dataset/cooccurance.html
@@ -0,0 +1,41 @@
+<html lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Miso Dataset Co Occurance</title>
+ <meta name="author" content="Irene Ros">
+ <link rel="stylesheet" type="text/css" href="http://bost.ocks.org/mike/style.css?20120427">
+ <style>
+ svg {
+ font: 7px sans-serif;
+ }
+ text.active {
+ fill : red;
+ }
+ .background {
+ fill : #eee;
+ }
+ line {
+ stroke : white;
+ }
+ </style>
+
+ <!-- Date: 2012-06-29 -->
+</head>
+<body>
+ <select id="order">
+ <option value="name">by Name</option>
+ <option value="count">by Frequency</option>
+ <option value="group">by Cluster</option>
+</select>
+
+ <!-- resources -->
+ <script type="text/javascript" src="../../libs/jquery.min.js"></script>
+ <script type="text/javascript" src="../../libs/lodash.js"></script>
+ <script type="text/javascript" src="../../libs/underscore.deferred.js"></script>
+ <script type="text/javascript" src="../../libs/underscore.math.js"></script>
+ <script type="text/javascript" src="../../libs/moment.js"></script>
+ <script type="text/javascript" src="../../libs/miso.ds.js"></script>
+ <script type="text/javascript" src="../../libs/d3.v2.js"></script>
+ <script type="text/javascript" src="cooccurance.js"></script>
+ </body>
+</html>
View
233 code/miso.dataset/cooccurance.js
@@ -0,0 +1,233 @@
+// This example is utilizing the great adjacency matrix visualization
+// here: http://bost.ocks.org/mike/miserables/
+
+// Instantiate a new Miso Dataset object and point it
+// at a csv file containing the co-occurance matrix.
+var cooccuranceMatrix = new Miso.Dataset({
+  url: '../../data/superpower_edges.csv',
+ delimiter: ";"
+});
+
+// fetch data
+cooccuranceMatrix.fetch().then(function() {
+
+ _.extend(Miso.Dataset.DataView.prototype, {
+
+ /**
+ * build the d3 required format that looks like so:
+ * {
+ * nodes : [
+ * { name : "Batman" },
+ * ...
+ * ],
+ *
+ * links : [
+ * { source : 1, target : 2, value : 3 },
+ * ...
+ * ]
+ * }
+ * Note this doesn't return any form of Dataset... it's simply a
+ * serialization helper, like toJSON.
+ */
+ toGraph : function(columnsCol, columns) {
+ var g = {
+ nodes : [],
+ links : []
+ };
+
+ var _positions = {};
+
+ // First create our nodes by just pushing them into the array
+ // also cache the positions so that when we build the source<->target
+ // mapping, we can easily find the actual index position based on the name.
+ _.each(columns, function(c, i) {
+ _positions[c] = i;
+ g.nodes.push({ name : c });
+ });
+
+ // Build the actual links. Iterate over each row and then each
+ // of the co-occurance columns. As long as the column in question is
+ // one of the columns we're building a graph for, push the value in
+ // the adjacency matrix
+ this.each(function(row, source) {
+
+ _.each(this.columnNames(), function(c, j) {
+ if (columns.indexOf(c) > -1) {
+ if (row[c] > 0) {
+ var link = { source : source };
+ link.target = columns.indexOf(c);
+ link.value = row[c];
+ g.links.push(link);
+ }
+ }
+
+ }, this);
+
+ },this);
+
+ return g;
+ }
+
+ });
+
+ // get all the super power column names
+ var superPowers = _.filter(cooccuranceMatrix.columnNames(), function(name) {
+ return (/superpower/).test(name);
+ });
+
+ var coOccurance = cooccuranceMatrix;
+ var graph = coOccurance.toGraph("Column", superPowers);
+
+
+ // d3 time =====
+ // this builds the actual visualization and is about 80% of
+ // the code written by mbostock in the link above.
+
+ var margin = {top: 80, right: 0, bottom: 10, left: 80},
+ width = 1024,
+ height = 1024;
+
+ var x = d3.scale.ordinal().rangeBands([0, width]),
+ z = d3.scale.pow().exponent(0.5).range([0.1,1.0]).clamp(true),
+ c = d3.scale.category10().domain(d3.range(10));
+
+ var svg = d3.select("body").append("svg")
+ .attr("width", width + margin.left + margin.right)
+ .attr("height", height + margin.top + margin.bottom)
+ .style("margin-left", -margin.left + "px")
+ .append("g")
+ .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
+
+
+ var matrix = [],
+ nodes = graph.nodes,
+ n = nodes.length;
+
+ // Compute index per node.
+ nodes.forEach(function(node, i) {
+ node.index = i;
+ node.count = 0;
+ matrix[i] = d3.range(n).map(function(j) { return {x: j, y: i, z: 0}; });
+ });
+
+
+ // Convert links to matrix; count character occurrences.
+ var maxZ = 0,
+ values = [];
+ graph.links.forEach(function(link) {
+ values.push(link.value);
+ matrix[link.source][link.target].z = link.value;
+ matrix[link.target][link.source].z = link.value;
+ nodes[link.source].count += 1;
+ nodes[link.target].count += 1;
+ if (link.value > maxZ) {
+ maxZ = link.value;
+ }
+ });
+
+ console.log(values);
+ z.domain([0, maxZ]);
+
+ // Precompute the orders.
+ var orders = {
+ name: d3.range(n).sort(function(a, b) { return d3.ascending(nodes[a].name, nodes[b].name); }),
+ count: d3.range(n).sort(function(a, b) { return nodes[b].count - nodes[a].count; }),
+ group: d3.range(n).sort(function(a, b) { return nodes[b].group - nodes[a].group; })
+ };
+
+ // The default sort order.
+ x.domain(orders.name);
+
+ svg.append("rect")
+ .attr("class", "background")
+ .attr("width", width)
+ .attr("height", height);
+
+ function buildRow(row) {
+ var cell = d3.select(this).selectAll(".cell")
+ .data(row.filter(function(d) { return d.z; }))
+ .enter().append("rect")
+ .attr("class", "cell")
+ .attr("x", function(d) { return x(d.x); })
+ .attr("width", x.rangeBand())
+ .attr("height", x.rangeBand())
+ .style("fill-opacity", function(d) { return z(d.z); })
+ .style("fill", function(d) { return "blue"; })
+ .on("mouseover", mouseover)
+ .on("mouseout", mouseout);
+ }
+
+ var row = svg.selectAll(".row")
+ .data(matrix)
+ .enter().append("g")
+ .attr("class", "row")
+ .attr("transform", function(d, i) { return "translate(0," + x(i) + ")"; })
+ .each(buildRow);
+
+ row.append("line")
+ .attr("x2", width);
+
+ row.append("text")
+ .attr("x", -6)
+ .attr("y", x.rangeBand() / 2)
+ .attr("dy", ".32em")
+ .attr("text-anchor", "end")
+ .text(function(d, i) { return nodes[i].name.slice(11).split("_").join(" "); });
+
+ var column = svg.selectAll(".column")
+ .data(matrix)
+ .enter().append("g")
+ .attr("class", "column")
+ .attr("transform", function(d, i) { return "translate(" + x(i) + ")rotate(-90)"; });
+
+ column.append("line")
+ .attr("x1", -width);
+
+ column.append("text")
+ .attr("x", 6)
+ .attr("y", x.rangeBand() / 2)
+ .attr("dy", ".32em")
+ .attr("text-anchor", "start")
+ .text(function(d, i) { return nodes[i].name.slice(11).split("_").join(" "); });
+
+
+ function mouseover(p) {
+ d3.selectAll(".row text").classed("active", function(d, i) { return i === p.y; });
+ d3.selectAll(".column text").classed("active", function(d, i) { return i === p.x; });
+ console.log(p);
+ }
+
+ function mouseout() {
+ d3.selectAll("text").classed("active", false);
+ }
+
+ var timeout;
+ d3.select("#order").on("change", function() {
+ if (timeout) {
+ clearTimeout(timeout);
+ }
+ order(this.value);
+ });
+
+ function order(value) {
+ x.domain(orders[value]);
+
+ var t = svg.transition().duration(2500);
+
+ t.selectAll(".row")
+ .delay(function(d, i) { return x(i) * 4; })
+ .attr("transform", function(d, i) { return "translate(0," + x(i) + ")"; })
+ .selectAll(".cell")
+ .delay(function(d) { return x(d.x) * 4; })
+ .attr("x", function(d) { return x(d.x); });
+
+ t.selectAll(".column")
+ .delay(function(d, i) { return x(i) * 4; })
+ .attr("transform", function(d, i) { return "translate(" + x(i) + ")rotate(-90)"; });
+ }
+
+
+
+
+
+});
View
20 code/miso.dataset/customtype.html
@@ -0,0 +1,20 @@
+<html lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Miso Dataset Custom Type</title>
+ <meta name="author" content="Irene Ros">
+ <!-- Date: 2012-06-29 -->
+</head>
+<body>
+ Open Console!
+
+ <!-- resources -->
+ <script type="text/javascript" src="../../libs/jquery.min.js"></script>
+ <script type="text/javascript" src="../../libs/lodash.js"></script>
+ <script type="text/javascript" src="../../libs/underscore.deferred.js"></script>
+ <script type="text/javascript" src="../../libs/underscore.math.js"></script>
+ <script type="text/javascript" src="../../libs/moment.js"></script>
+ <script type="text/javascript" src="../../libs/miso.ds.js"></script>
+ <script type="text/javascript" src="customtype.js"></script>
+ </body>
+</html>
View
4 ...t-custom-type/miso-dataset-custom-type.js → code/miso.dataset/customtype.js
@@ -1,5 +1,5 @@
// all types live under the Miso.types namespace.
-Miso.types.moneyWithCommas = {
+Miso.Dataset.types.moneyWithCommas = {
// provide a name for your type.
name : 'moneyWithCommas',
@@ -53,5 +53,5 @@ var ds = new Miso.Dataset({
});
ds.fetch().then(function() {
- console.log(ds.column("a").data);
+ console.log(ds.column("a").data);
});
View
3  code/miso.dataset/index.html
@@ -0,0 +1,3 @@
+<h1>Miso Dataset</h1>
+
+<ol><li><p><a href="basic.html">basic.html</a> - A basic example using miso dataset demonstrating finding the most popular 10 hair colors of super heroes and villains.</p></li><li><p><a href="customtype.html">customtype.html</a> - A slightly more complex example demonstrating how one might create a custom data type (numbers with commas.)</p></li><li><p><a href="superpowers.html">superpowers.html</a> - A collection of base Dataset functions that visually demonstrate computed columns, filtering, iteration and so on.</p></li><li><p><a href="cooccurance.html">coocurance.html</a> - A massive visualization of the cooccurance of super powers based on @mbostock&#39;s Les Miserables example. Demonstrates adding a custom serialization method to Dataset.</p></li></ol>
View
156 code/miso.dataset/superpowers.html
@@ -0,0 +1,156 @@
+<html lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Miso Dataset Most Used Superpowers</title>
+ <meta name="author" content="Irene Ros">
+ <style>
+ body {
+ font-family: 'Helvetica', 'sans-serif';
+ }
+ .count {
+ font-weight: bold;
+ font-size: 3em;
+ float: left;
+ }
+ .tiny {
+ font-size: 0.7em;
+ margin-top: 10px;
+ }
+ h2.count {
+ margin : 0;
+ padding: 0;
+ padding-right: 15px;
+ }
+ span.caption {
+ margin-top: 8px;
+ display: inline-block;
+ }
+ #allSuperpowers, #perHero, #howMany {
+ display: inline-block;
+ float: left;
+ margin-right: 10px;
+ }
+ #allSuperpowers ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+ }
+ #howMany {
+ margin-right: 40px;
+ text-align: center;
+ }
+ #howMany .count {
+ float: none;
+ margin-top: -7;
+ font-size: 5.5em;
+ }
+ #howMany .caption {
+ font-size: 1.5em;
+ text-align: right;
+ }
+ #perHero {
+ margin-right: 40px;
+ }
+ #perHero .count {
+ margin-top: -7;
+ font-size: 5.5em;
+ }
+ .scount {
+ color: #aaa;
+ font-size: 0.7em;
+ }
+ .sp {
+ width: 300px;
+ position: relative;
+ margin-bottom: 10px;
+ padding-top: 10px;
+ padding-bottom: 20px;
+ border-top: 1px solid #666;
+ border-bottom: 1px solid #aaa;
+ margin-top: 20px;
+ }
+ .sp .sparkline-container {
+ width: 240px;
+ height: 70px;
+ margin: auto;
+ }
+ .sparkline-container .min, .sparkline-container .max {
+ font-size: 0.8em;
+ bottom: 10;
+ position: absolute;
+ display: inline-block;
+ }
+ .sparkline-container .min {
+ left: 0;
+ }
+ .sparkline-container .max {
+ right: 0;
+ }
+ </style>
+</head>
+<body>
+ <h3>Super Power Stats</h3>
+
+ <div id="howMany">
+ <h2 class="count">
+ ?
+ </h2>
+ <span class="caption">Types of <br />Super Powers</span>
+ </div>
+
+ <div id="perHero">
+ <h2 class="count">
+ ?
+ </h2>
+ <span class="caption">Super powers per <br />hero on average</span>
+ <br />
+ <div class="tiny">
+ With a maximum of <span class="max"></span>, and a
+ minimum of <span class="min"></span>.</div>
+ <div class="sp">
+
+ </div>
+ </div>
+
+ <div id="allSuperpowers">
+ <h3>Top 10: </h3>
+ <ul class="topList">
+ </ul>
+ </br>
+ <h3>Bottom 10: </h3>
+ <ul class="bottomList">
+ </ul>
+ </div>
+
+ <!-- resources -->
+ <script type="text/javascript" src="../../libs/jquery.min.js"></script>
+ <script type="text/javascript" src="../../libs/lodash.js"></script>
+ <script type="text/javascript" src="../../libs/underscore.deferred.js"></script>
+ <script type="text/javascript" src="../../libs/underscore.math.js"></script>
+ <script type="text/javascript" src="../../libs/moment.js"></script>
+ <script type="text/javascript" src="../../libs/jquery.sparklines.js"></script>
+ <script type="text/javascript" src="../../libs/d3.v2.js"></script>
+ <script type="text/javascript" src="../../libs/miso.ds.js"></script>
+ <script type="text/javascript" src="superpowers_helper.js"></script>
+ <script type="text/javascript" src="superpowers.js"></script>
+
+ <script type="text/template" id="sparkline_template">
+ <div class="sparkline-container">
+ <div class="min"><%= min %></div>
+ <div class="chart"></div>
+ <div class="max"><%= max %></div>
+ </div>
+ </script>
+ <script type="text/template" id="superpowerStat">
+ <li>
+ <span class="hsparkline"></span> <span class="vsparkline"></span>
+ <span class="power">
+ <%= /superpower_(.*)/.exec(s.power)[1].replace(/_/g, " ") %>
+ </span>
+ <span class="scount">(<%= s.count %>)</span>
+
+ </li>
+ </script>
+
+ </body>
+</html>
View
104 code/miso.dataset/superpowers.js
@@ -0,0 +1,104 @@
+// Instantiate a new Miso Dataset object and point it
+// at our trusty hero & villain database.
+var all = new Miso.Dataset({
+   url: '../../data/all.json'
+});
+
+// fetch data
+all.fetch().then(function() {
+
+ // first find all the super power columns... we have > 170 of them.
+ var superPowers = _.filter(all.columnNames(), function(name) {
+ return (/superpower/).test(name);
+ });
+
+ $('#howMany .count').html(superPowers.length);
+
+ // Now, let's add a computed column for how many superpower each hero has
+ all.addComputedColumn("sp_count", "number", function(row) {
+ // iterate over all the super power columns per row and add them up.
+ // Their values are either 1 or 0.
+ return _.inject(superPowers, function(memo, power) {
+ return memo + row[power];
+ }, 0);
+ });
+
+ // now lets find the average, min and max.
+ $('#perHero .count').html(all.mean("sp_count").toFixed());
+ $('#perHero .min').html(all.min("sp_count"));
+ $('#perHero .max').html(all.max("sp_count"));
+
+ // now let's make a frequency table and plot a histogram
+ // of the number of super powers heroes have on average
+ var bins = [],
+ count = 10,
+ width = all.max("sp_count") / count,
+ bin;
+ all.each(function(row) {
+ bin = Math.floor(row.sp_count / width);
+ bins[bin] = bins[bin] + 1 || 1;
+ });
+ // make sure all bins have values
+ _.map(bins, function(val, i) {
+ if (typeof val === "undefined") {
+ bins[i] = 0;
+ }
+ });
+
+ var sparkline = $('#perHero .sp'),
+ template = _.template($('#sparkline_template').text()),
+ el = $(template({
+ min : all.min("sp_count"),
+ max : all.max("sp_count")
+ }));
+
+ sparkline.append(el);
+ el.find('.chart').makeSparkline(bins);
+
+ // last but not least, what are the top 10 most common superpowers?
+ // let's compute the total of each super hero column
+ var superpowerCounts = [];
+ var heroes = all.where(function(row) {
+ return row.type === "hero";
+ }),
+ villains = all.where(function(row) {
+ return row.type === "villain";
+ });
+
+ _.each(superPowers, function(power, i) {
+ superpowerCounts[i] = {
+ power : power,
+ count : all.sum(power),
+ hero : (100*(heroes.sum(power) / heroes.length)).toPrecision(2),
+ villain : (100*(villains.sum(power) / villains.length)).toPrecision(2)
+ };
+ });
+
+ superpowerCounts = _.sortBy(superpowerCounts, function(power) {
+ return -power.count;
+ });
+
+ var topList = $('#allSuperpowers .topList'),
+ bottomList = $('#allSuperpowers .bottomList'),
+ liTemplate = _.template($('#superpowerStat').html());
+
+ // top 10
+ for (var i = 0; i < 10; i++) {
+ el = $(liTemplate({
+ s : superpowerCounts[i]
+ })).appendTo(topList);
+ el.makePie('.hsparkline', superpowerCounts[i], 'hero');
+ el.makePie('.vsparkline', superpowerCounts[i], 'villain');
+ }
+ // bottom 10
+ for (i = 0; i < 10; i++) {
+ var idx = superPowers.length-1-i;
+ el = $(liTemplate({
+ s : superpowerCounts[idx]
+ })).appendTo(bottomList);
+ el.makePie('.hsparkline', superpowerCounts[idx], 'hero');
+ el.makePie('.vsparkline', superpowerCounts[idx], 'villain');
+ }
+
+
+});
View
22 code/miso.dataset/superpowers_helper.js
@@ -0,0 +1,22 @@
+$.fn.extend({
+
+ makeSparkline : function(data) {
+ this.sparkline(data, {
+ type : 'bar',
+ fillColor : "blue",
+ chartRangeMin : _.min(data),
+ chartRangeMax : _.max(data),
+ barWidth : this.parent().width()/(data.length+1),
+ height : 70
+ });
+ },
+
+ makePie : function(classname, superpower, type) {
+ this.find(classname).sparkline([superpower[type], 100 - superpower[type]],{
+ sliceColors : [type === "hero" ? 'green' : 'red', '#ddd'],
+ type : 'pie',
+ tooltipFormat: '<span style="color: {{color}}">&#9679;</span> {{value}}%'
+ });
+ }
+
+});
View
65 code/mvc-backbone/mvc-backbone.js
@@ -1,65 +0,0 @@
-(function() {
- // Define a base Hero Model
- var Hero = Backbone.Model.extend({}),
-
- // Define a collection of Heroes that will pull the hero data
- // and create a model for each available hero
- Heroes = Backbone.Collection.extend({
- model : Hero,
- url: '../../data/all.json'
- }),
-
- // Define a basic view for a hero model - just an li element
- // that will be appended to a list.
- HeroView = Backbone.View.extend({
- tagName : 'li',
- render : function() {
- this.$el.html(this.model.get('name'));
- return this;
- }
- }),
-
- // Define a view for a list of heroes - it will create a hero view
- // for each hero and append it to an element, in this case a ul.
- HeroesView = Backbone.View.extend({
- tagName: 'ul',
- initialize : function() {
- this._views = [];
- },
- render : function() {
-
- // clear current contents
- this.$el.empty();
-
- // create view for every hero in the collection
- this.collection.each(function(hero) {
- var heroView = new HeroView({
- model : hero
- });
-
- this.$el.append(heroView.render().$el);
- this._views.push(heroView);
- }, this);
- }
- });
-
-
- // Now instantiate our heroes collection
- var allHeroes = new Heroes();
-
- // Fetch the hero collection
- allHeroes.fetch({
- success : function() {
-
- // on a successful fetch, create a view of
- // all the heroes
- var allHeroesView = new HeroesView({
- el : '#heroes',
- collection : allHeroes
- });
-
- // render the view we created.
- allHeroesView.render();
- }
- });
-}());
View
43 code/mvc-canjs/mvc-canjs.js
@@ -1,43 +0,0 @@
-(function(){
-
- // Create a heroes data 'model' that binds to our json url.
- // Note that this model is actually going to contain a collection of
- // heroes... but that's a terminology inconsistancy.
- var Heroes = can.Model({
- // To fetch all models, define the findAll fetch method 'GET'
- // and the URL we are going against.
- findAll: 'GET ../../data/all.json'
- }, {});
-
-
- // Create a control for the Heroes.
- var HeroesControl = can.Control({
- // set up default template
- defaults: {
- view: 'heroesEJS'
- }
- },
- {
- // Init is auto called on instantiation
- 'init': function(element, options) {
- var self = this;
-
- // Fetch all heroes
- Heroes.findAll({}, function(heroes) {
-
- // Render all heroes
- self.element.html(can.view(self.options.view, {
- heroes: heroes
- }));
- });
- },
-
- // Random callback for clicking on elements for demo purposes.
- 'li click': function(li, event) {
- li.data("hero").attr('name', 'Monkey');
- }
- }
- );
-
- var heroesApp = new HeroesControl('#heroes');
-}());
View
6 code/mvc/README.md
@@ -0,0 +1,6 @@
+# Javascript MVC Frameworks
+
+Both examples below demonstrate fetching a set of data and rendering a basic view of that data.
+
+1. [backbone.html](backbone.html) - Demonstrates the use of Backbone.js
+2. [canjs.html](canjs.html) - Demonstrates the use of CanJS
View
2  code/mvc-backbone/index.html → code/mvc/backbone.html
@@ -12,7 +12,7 @@
<script type="text/javascript" src="../../libs/jquery.min.js"></script>
<script type="text/javascript" src="../../libs/underscore.js"></script>
<script type="text/javascript" src="../../libs/backbone.js"></script>
- <script type="text/javascript" src="mvc-backbone.js"></script>
+ <script type="text/javascript" src="backbone.js"></script>
</body>
</html>
View
64 code/mvc/backbone.js
@@ -0,0 +1,64 @@
+(function() {
+ // Define a base Hero Model
+ var Hero = Backbone.Model.extend({}),
+
+ // Define a collection of Heroes that will pull the hero data
+ // and create a model for each available hero
+ Heroes = Backbone.Collection.extend({
+ model: Hero,
+ url: '../../data/all.json'
+ }),
+
+ // Define a basic view for a hero model - just an li element
+ // that will be appended to a list.
+ HeroView = Backbone.View.extend({
+ tagName: 'li',
+ render: function() {
+ this.$el.html(this.model.get('name'));
+ return this;
+ }
+ }),
+
+ // Define a view for a list of heroes - it will create a hero view
+ // for each hero and append it to an element, in this case a ul.
+ HeroesView = Backbone.View.extend({
+ tagName: 'ul',
+ initialize: function() {
+ this._views = [];
+ },
+ render: function() {
+
+ // clear current contents
+ this.$el.empty();
+
+ // create view for every hero in the collection
+ this.collection.each(function(hero) {
+ var heroView = new HeroView({
+ model: hero
+ });
+
+ this.$el.append(heroView.render().$el);
+ this._views.push(heroView);
+ }, this);
+ }
+ });
+
+ // Now instantiate our heroes collection
+ var allHeroes = new Heroes();
+
+ // Fetch the hero collection
+ allHeroes.fetch({
+ success: function() {
+
+ // on a successful fetch, create a view of
+ // all the heroes
+ var allHeroesView = new HeroesView({
+ el: '#heroes',
+ collection: allHeroes
+ });
+
+ // render the view we created.
+ allHeroesView.render();
+ }
+ });
+}());
View
2  code/mvc-canjs/index.html → code/mvc/canjs.html
@@ -22,7 +22,7 @@
<!-- resources -->
<script type="text/javascript" src="../../libs/jquery.min.js"></script>
<script type="text/javascript" src="../../libs/can.js"></script>
- <script type="text/javascript" src="mvc-canjs.js"></script>
+ <script type="text/javascript" src="canjs.js"></script>
</body>
</html>
View
41 code/mvc/canjs.js
@@ -0,0 +1,41 @@
+(function() {
+
+ // Create a heroes data 'model' that binds to our json url.
+ // Note that this model is actually going to contain a collection of
+ // heroes... but that's a terminology inconsistancy.
+ var Heroes = can.Model({
+ // To fetch all models, define the findAll fetch method 'GET'
+ // and the URL we are going against.
+ findAll: 'GET ../../data/all.json'
+ }, {});
+
+
+ // Create a control for the Heroes.
+ var HeroesControl = can.Control({
+ // set up default template
+ defaults: {
+ view: 'heroesEJS'
+ }
+ }, {
+ // Init is auto called on instantiation
+ 'init': function(element, options) {
+ var self = this;
+
+ // Fetch all heroes
+ Heroes.findAll({}, function(heroes) {
+
+ // Render all heroes
+ self.element.html(can.view(self.options.view, {
+ heroes: heroes
+ }));
+ });
+ },
+
+ // Random callback for clicking on elements for demo purposes.
+ 'li click': function(li, event) {
+ li.data("hero").attr('name', 'Monkey');
+ }
+ });
+
+ var heroesApp = new HeroesControl('#heroes');
+}());
View
5 code/mvc/index.html
@@ -0,0 +1,5 @@
+<h1>Javascript MVC Frameworks</h1>
+
+<p>Both examples below demonstrate fetching a set of data and rendering a basic view of that data.</p>
+
+<ol><li><a href="backbone.html">backbone.html</a> - Demonstrates the use of Backbone.js</li><li><a href="canjs.html">canjs.html</a> - Demonstrates the use of CanJS</li></ol>
View
10 code/taffy-db/competencies.js
@@ -97,7 +97,7 @@ $.get('../../data/all.json', function(heroes) {
return "blue";
}
})
- .attr("r", r)
+ .attr("r", r);
// attach to dropdowns:
// x axis dropdown
@@ -120,7 +120,7 @@ $.get('../../data/all.json', function(heroes) {
dots.transition()
.attr("cx", function(d) {
return widthRange(d[x_attr]);
- })
+ });
});
// attach to dropdowns
@@ -144,7 +144,7 @@ $.get('../../data/all.json', function(heroes) {
dots.transition()
.attr("cy", function(d) {
return heightRange(d[y_attr]);
- })
+ });
});
// hero type
@@ -172,7 +172,7 @@ $.get('../../data/all.json', function(heroes) {
} else {
return "blue";
}
- })
+ });
} else if (s === "female") {
$('circle').hide();
$('circle[gender="female"]').show();
@@ -192,5 +192,5 @@ $.get('../../data/all.json', function(heroes) {
.transition()
.attr("fill", "#000");
}
- })
+ });
});
View
2  code/underscore/README.md
@@ -4,4 +4,4 @@
2. [visual.html](visual.html) - A visual comparison of the mean of villains vs heroes.
-3. [efficient.html](efficient.js) - A slightly more efficient way to compute the mean of heights.
+3. [efficient.html](efficient.html) - A slightly more efficient way to compute the mean of heights.
View
2  code/underscore/index.html
@@ -1,3 +1,3 @@
<h1>Underscore.js</h1>
-<ol><li><p><a href="basic.html">basic.html</a> - Demonstrates a basic calculation of the mean of heights of heroes and villains.</p></li><li><p><a href="visual.html">visual.html</a> - A visual comparison of the mean of villains vs heroes.</p></li><li><p><a href="efficient.js">efficient.html</a> - A slightly more efficient way to compute the mean of heights.</p></li></ol>
+<ol><li><p><a href="basic.html">basic.html</a> - Demonstrates a basic calculation of the mean of heights of heroes and villains.</p></li><li><p><a href="visual.html">visual.html</a> - A visual comparison of the mean of villains vs heroes.</p></li><li><p><a href="efficient.html">efficient.html</a> - A slightly more efficient way to compute the mean of heights.</p></li></ol>
View
2  code/underscore/visual.js
@@ -75,7 +75,7 @@ $.when(heroesDef, villainsDef).then(function() {
.attr("font-size", 25)
.attr("text-anchor", "middle")
.attr("fill", "#fff")
- .text(function(d) { return Math.round(d); })
+ .text(function(d) { return Math.round(d); });
});
View
3  code/web-workers/README.md
@@ -0,0 +1,3 @@
+# Web Workers
+
+1. [web-worker.html](web-worker.html) - Demonstrates a basic creation of two webworkers to compute the average height of super heroes and villains respectively.
View
19 code/web-workers/index.html
@@ -1,18 +1,3 @@
-<html lang="en">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>Web Workers</title>
- <meta name="author" content="Irene Ros">
- <!-- Date: 2012-06-29 -->
-</head>
-<body>
- <div id="heroes">
- </div>​
- <script type="text/javascript" src="../../libs/jquery.min.js"></script>
- <script type="text/javascript" src="../../libs/underscore.js"></script>
- <script type="text/javascript" src="web-workers.js"></script>
- </body>
-</html>
-
-
+<h1>Web Workers</h1>
+<ol><li><a href="web-worker.html">web-worker.html</a> - Demonstrates a basic creation of two webworkers to compute the average height of super heroes and villains respectively.</li></ol>
View
16 code/miso-dataset-custom-type/index.html → code/web-workers/web-worker.html
@@ -1,16 +1,18 @@
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>Miso Dataset Custom Type</title>
+ <title>Web Workers</title>
<meta name="author" content="Irene Ros">
<!-- Date: 2012-06-29 -->
</head>
<body>
- Open Console!
-
- <!-- resources -->
+ <div id="heroes">
+ </div>​
<script type="text/javascript" src="../../libs/jquery.min.js"></script>
- <script type="text/javascript" src="../../libs/miso.ds.deps.0.2.1.js"></script>
- <script type="text/javascript" src="miso-dataset-custom-type.js"></script>
+ <script type="text/javascript" src="../../libs/underscore.js"></script>
+ <script type="text/javascript" src="web-workers.js"></script>
</body>
-</html>
+</html>
+
+
+
View
2  code/web-workers/worker.js
@@ -1,5 +1,5 @@
// we are going to use underscore here.
-importScripts("http://underscorejs.org/underscore-min.js");
+importScripts("../../libs/underscore.js");
// when we are done with the worker, post back the result.
function done(res){
View
159 data/superpower_edges.csv
@@ -0,0 +1,159 @@
+;superpower_Accuracy;superpower_Agility;superpower_Durability;superpower_Intelligence;superpower_Longevity;superpower_Reflexes;superpower_Stamina;superpower_Super_Strength;superpower_Telepathy;superpower_Underwater_breathing;superpower_Weapons_Master;superpower_Lantern_Power_Ring;superpower_Healing_Factor;superpower_Immortality;superpower_Regeneration;superpower_Energy_Absorption;superpower_Energy_Beams;superpower_Energy_Blasts;superpower_Power_Suit;superpower_Danger_Sense;superpower_Energy_Manipulation;superpower_Flight;superpower_Force_Fields;superpower_Hypnokinesis;superpower_Invisibility;superpower_Phasing;superpower_Super_Speed;superpower_Teleportation;superpower_Power_Augmentation;superpower_Gliding;superpower_Toxin_and_Disease_Resistance;superpower_Vision_-_Telescopic;superpower_Animal_Attributes;superpower_Animal_Oriented_Powers;superpower_Toxikinesis;superpower_Empathy;superpower_Size_Changing;superpower_Hydrokinesis;superpower_Endurance;superpower_Enhanced_Hearing;superpower_Enhanced_Senses;superpower_Sonar;superpower_Vision_-_Night;superpower_Wallcrawling;superpower_Energy_Armor;superpower_Psionic_Powers;superpower_Omnilingualism;superpower_Weapon-based_Powers;superpower_Invulnerability;superpower_Self-Sustenance;superpower_Duplication;superpower_Radiation_Immunity;superpower_Density_Control;superpower_Illumination;superpower_Molecular_Combustion;superpower_Molecular_Manipulation;superpower_Astral_Travel;superpower_Illusions;superpower_Intangibility;superpower_Magic;superpower_Precognition;superpower_Audiokinesis;superpower_Sonic_Scream;superpower_Human_physical_perfection;superpower_Stealth;superpower_Dexterity;superpower_Jump;superpower_Natural_Weapons;superpower_Natural_Armor;superpower_Shapeshifting;superpower_Sub-Mariner;superpower_Omnitrix;superpower_Cross-Dimensional_Awareness;superpower_Reality_Warping;superpower_Telekinesis;superpower_Time_Travel;superpower_Probability_Manipulation;superpower_Vision_-_Infrared;superpower_Electrokinesis;superpower_Enhanced_Memory;superpower_Enhanced_Smell;superpower_Cold_Resistance;superpower_Heat_Resistance;superpower_Symbiote_Costume;superpower_Technopath/Cyberpath;superpower_Vision_-_X-Ray;superpower_Astral_Projection;superpower_Mind_Blast;superpower_Mind_Control;superpower_Mind_Control_Resistance;superpower_Telepathy_Resistance;superpower_Vision_-_Thermal;superpower_Hyperkinesis;superpower_Spatial_Awareness;superpower_Clairvoyance;superpower_Magic_Resistance;superpower_Super_Breath;superpower_Terrakinesis;superpower_Cross-Dimensional_Travel;superpower_Power_Sense;superpower_Darkforce_Manipulation;superpower_Gravitokinesis;superpower_Aerokinesis;superpower_Geokinesis;superpower_Pyrokinesis;superpower_Energy_Resistance;superpower_Photokinesis;superpower_Echokinesis;superpower_Enhanced_Touch;superpower_Radar_Sense;superpower_Levitation;superpower_Possession;superpower_Vision_-_Microscopic;superpower_Banish;superpower_Timeframe_Control;superpower_Elasticity;superpower_Camouflage;superpower_Substance_Secretion;superpower_Fire_Resistance;superpower_Heat_Generation;superpower_Energy_Constructs;superpower_Projection;superpower_Grim_Reaping;superpower_Power_Absorption;superpower_Vision_-_Heat;superpower_Radiation_Absorption;superpower_Thermokinesis;superpower_Cryokinesis;superpower_Elemental_Transmogrification;superpower_Magnetokinesis;superpower_Chlorokinesis;superpower_Resurrection;superpower_Portal_Creation;superpower_Thirstokinesis;superpower_Power_Nullifier;superpower_Animation;superpower_Photographic_Reflexes;superpower_Atmokinesis;superpower_Nova_Force;superpower_Chronokinesis;superpower_Radiation_Control;superpower_Web_Creation;superpower_Power_Cosmic;superpower_Changing_Armor;superpower_Biokinesis;superpower_Seismic_Power;superpower_Qwardian_Power_Ring;superpower_Summoning;superpower_Adaptation;superpower_Electrical_Transport;superpower_Insanity;superpower_Anti-Gravity;superpower_Matter_Absorption;superpower_Psychokinesis;superpower_Omnipotence;superpower_Death_Touch;superpower_Intuitive_aptitude;superpower_Melting
+superpower_Accuracy;68;18;5;8;7;10;13;7;5;4;14;1;5;2;1;3;3;5;2;2;2;4;4;1;3;2;6;4;1;0;1;4;1;0;0;2;1;1;4;3;4;0;4;1;0;0;0;11;2;0;3;2;0;0;0;0;0;0;0;1;0;0;0;12;7;1;1;0;0;3;0;0;1;0;0;1;1;0;0;2;5;0;0;0;0;1;0;0;0;1;3;3;1;1;0;0;1;0;0;0;0;0;0;0;2;1;0;1;1;2;1;0;1;0;0;0;3;0;0;1;2;0;0;1;1;0;0;1;0;3;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Agility;18;194;39;13;17;50;64;71;13;3;14;2;34;8;1;8;4;19;2;7;8;23;9;2;3;3;53;10;2;1;8;7;8;14;1;3;4;1;11;6;22;0;10;16;0;4;0;15;9;0;3;0;2;0;0;5;0;1;2;4;1;1;1;8;9;4;11;15;2;13;1;0;1;0;4;1;4;2;1;3;6;3;3;3;2;2;1;1;2;2;7;3;0;0;0;0;2;0;0;0;0;1;0;1;4;1;0;1;1;2;3;1;2;0;0;1;8;2;0;1;3;0;0;3;3;0;0;2;0;2;0;0;0;0;0;0;0;2;1;0;0;3;0;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0
+superpower_Durability;5;39;294;23;29;48;76;136;15;9;1;2;48;14;4;20;10;32;10;6;9;55;15;4;3;6;80;8;1;2;14;19;6;11;2;3;9;3;22;14;21;1;9;10;0;4;1;20;28;12;2;3;3;2;1;11;0;4;3;6;1;1;2;0;2;1;23;14;9;15;1;0;2;0;8;5;0;4;2;4;2;9;9;5;4;10;3;2;4;3;4;6;0;0;1;3;9;0;2;0;1;5;0;3;5;0;1;0;0;0;1;2;9;0;1;2;8;4;4;0;2;0;1;1;9;2;3;5;1;4;1;2;2;0;0;1;0;1;1;1;2;4;2;0;0;1;1;0;1;0;4;1;0;0;0;0;0;0
+superpower_Intelligence;8;13;23;126;14;9;26;34;12;2;8;1;14;5;1;9;7;11;2;2;5;23;7;8;3;5;22;8;2;0;3;8;1;1;0;1;8;1;8;12;10;0;2;1;0;3;4;7;18;6;2;0;1;0;0;4;0;2;2;5;0;0;0;4;4;1;7;1;1;2;0;0;3;1;4;2;0;2;2;3;3;1;0;0;1;7;1;2;3;1;4;1;0;0;4;3;8;0;2;1;0;0;0;1;1;1;0;1;1;1;1;1;8;0;0;1;1;0;1;0;1;0;0;1;7;0;0;2;0;1;1;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;3;0;0;1;0;0;0;0
+superpower_Longevity;7;17;29;14;98;14;34;38;9;3;4;1;22;8;3;9;3;11;3;1;2;22;10;4;2;1;25;10;2;0;10;5;0;2;0;1;3;1;7;6;10;0;1;1;0;2;1;5;15;7;5;1;0;0;0;3;0;2;1;8;0;0;1;1;2;0;6;2;1;8;0;0;3;0;4;3;0;1;2;1;4;3;0;0;0;5;2;0;0;2;1;1;0;0;1;1;5;0;3;0;0;1;0;1;2;0;0;0;0;1;3;1;5;1;0;0;3;1;0;1;2;0;1;1;5;1;0;2;0;1;0;0;1;0;0;0;0;2;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0
+superpower_Reflexes;10;50;48;9;14;172;56;68;14;7;5;1;32;7;3;8;4;15;2;7;2;19;3;1;2;2;61;7;2;1;8;7;6;9;1;0;4;3;15;7;17;1;11;15;0;1;1;10;10;4;1;1;1;2;1;4;0;0;1;3;0;1;1;4;3;2;10;16;3;8;0;0;1;0;3;5;4;2;0;6;3;3;2;4;1;1;0;0;0;1;3;3;0;0;1;1;1;0;2;0;0;0;1;2;4;0;0;1;1;1;1;0;2;0;0;0;7;1;0;0;2;0;0;1;2;0;0;3;0;3;0;1;0;0;0;1;0;1;1;0;0;4;0;1;1;0;0;0;1;0;2;0;0;0;0;0;0;0
+superpower_Stamina;13;64;76;26;34;56;272;119;15;4;12;2;57;15;3;15;7;25;3;8;10;47;12;6;4;5;86;17;3;1;17;15;7;12;2;1;6;1;19;18;28;0;9;14;0;5;1;21;35;9;5;1;3;0;0;8;2;3;4;13;2;1;1;4;9;3;19;15;8;16;0;0;3;0;6;2;2;4;1;5;7;6;7;4;4;9;2;1;4;3;3;2;0;0;2;4;11;1;3;0;1;2;0;2;5;0;0;1;1;2;3;3;10;0;0;0;8;3;2;1;3;0;1;2;10;2;0;2;1;2;1;1;2;0;0;1;0;2;1;0;1;4;2;0;1;0;1;1;1;0;3;0;1;0;0;0;0;0
+superpower_Super_Strength;7;71;136;34;38;68;119;488;31;12;7;2;77;26;7;30;14;58;12;8;17;96;27;9;7;8;136;22;4;3;22;24;11;19;4;4;24;5;33;21;38;1;12;18;1;10;5;25;57;19;6;4;6;0;0;19;2;7;7;16;4;1;2;1;3;4;30;22;9;32;1;0;5;3;17;7;2;5;4;5;5;11;11;6;9;16;4;3;6;3;7;9;0;0;4;4;13;1;6;0;2;5;1;3;7;0;3;0;0;1;5;2;12;0;1;2;8;5;5;1;3;0;1;3;14;3;3;5;2;5;3;4;2;0;0;2;0;2;1;1;3;4;4;1;1;1;1;1;1;0;3;1;1;0;0;1;0;0
+superpower_Telepathy;5;13;15;12;9;14;15;31;124;8;4;2;11;9;2;7;3;16;0;3;9;30;16;4;7;6;22;14;4;1;0;2;2;2;0;2;11;4;7;4;6;1;2;2;0;15;2;1;11;5;2;0;2;0;0;8;2;13;4;5;2;0;2;1;1;1;2;2;3;11;0;0;3;2;19;3;2;0;0;1;3;0;0;0;2;3;11;9;9;3;9;3;0;0;0;0;2;2;3;2;2;1;0;0;5;0;1;1;1;2;4;4;2;1;0;0;2;1;1;0;1;0;0;3;3;0;0;3;0;2;0;4;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;1;0;0;0;0
+superpower_Underwater_breathing;4;3;9;2;3;7;4;12;8;28;1;2;4;1;0;2;2;3;2;0;0;5;2;1;3;2;7;1;1;0;1;3;0;0;1;1;1;4;4;2;2;1;4;0;0;0;0;3;2;0;1;2;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;1;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;3;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;1;1;0;0;1;0;0;1;1;0;0;1;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Weapons_Master;14;14;1;8;4;5;12;7;4;1;42;0;4;2;1;1;1;3;0;2;2;1;1;1;0;0;4;4;0;0;1;2;0;0;0;1;0;0;3;3;3;0;2;1;0;0;0;8;2;1;2;0;0;0;0;1;0;0;0;2;0;0;0;7;7;0;0;0;0;2;0;0;1;0;1;0;0;0;1;1;5;0;0;0;0;0;0;0;1;1;3;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;1;1;2;2;0;0;0;0;0;1;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Lantern_Power_Ring;1;2;2;1;1;1;2;2;2;2;0;14;1;1;0;0;0;1;0;0;0;2;1;0;2;2;1;2;1;0;0;1;0;0;0;0;1;1;2;1;1;0;1;0;0;0;0;1;1;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;1;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;1;1;1;0;0;0;1;0;0;0;1;0;0;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Healing_Factor;5;34;48;14;22;32;57;77;11;4;4;1;182;12;7;14;3;20;4;8;6;34;10;5;2;1;57;12;1;2;13;15;5;12;0;1;5;0;12;13;24;1;8;11;0;3;1;12;22;7;2;1;3;0;0;6;0;4;0;7;1;0;0;1;1;3;19;15;2;15;0;0;2;0;8;4;0;3;0;2;4;3;2;5;2;9;3;2;2;3;4;3;0;0;2;4;9;0;3;0;1;1;0;2;3;0;0;0;0;1;2;1;6;0;0;1;6;2;3;1;2;0;1;1;8;2;0;0;1;1;1;2;0;0;0;1;0;2;1;0;1;4;0;0;1;0;0;0;1;0;2;0;1;0;0;0;0;0
+superpower_Immortality;2;8;14;5;8;7;15;26;9;1;2;1;12;76;3;7;1;8;0;1;10;16;9;0;2;3;16;12;2;0;7;2;0;0;1;3;11;0;2;2;0;0;1;0;1;6;2;1;18;4;3;0;2;0;0;9;0;4;2;5;1;0;0;0;1;0;1;2;1;9;0;0;6;1;6;1;0;0;1;0;1;3;2;1;2;1;4;2;3;2;6;0;0;0;0;0;0;0;3;0;1;1;0;0;3;0;0;0;0;1;5;2;1;0;1;3;0;1;1;0;1;0;0;0;1;0;0;1;0;0;1;4;1;0;0;0;0;0;0;0;0;0;2;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0
+superpower_Regeneration;1;1;4;1;3;3;3;7;2;0;1;0;7;3;30;2;1;2;0;0;0;4;0;0;0;1;1;4;0;0;3;1;2;2;1;0;1;0;0;0;1;0;0;0;0;1;0;1;1;3;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;2;3;1;4;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0
+superpower_Energy_Absorption;3;8;20;9;9;8;15;30;7;2;1;0;14;7;2;92;10;29;4;0;12;26;10;4;2;4;21;2;2;0;1;11;0;0;0;0;5;0;1;9;7;0;3;0;2;5;1;3;14;4;0;2;2;0;0;8;0;3;1;1;0;0;1;2;0;0;7;2;4;3;0;0;1;1;8;3;0;1;3;1;1;0;1;0;3;9;3;2;2;0;2;3;0;0;0;1;7;0;0;0;1;2;0;0;3;1;0;0;0;0;3;0;7;0;0;1;0;0;0;0;2;0;0;3;9;0;0;0;0;2;0;3;0;0;0;0;0;0;1;0;1;0;1;0;1;0;1;0;1;0;0;0;1;0;0;0;0;0
+superpower_Energy_Beams;3;4;10;7;3;4;7;14;3;2;1;0;3;1;1;10;46;15;3;1;5;11;6;1;3;3;7;3;0;0;2;2;0;0;0;0;2;1;0;1;1;0;2;0;0;5;0;3;3;2;0;2;1;0;0;2;0;0;1;1;0;0;0;0;0;0;0;0;1;2;0;0;0;0;1;0;1;0;1;0;0;0;1;0;2;0;0;1;2;0;1;2;0;0;0;0;0;0;0;0;0;2;0;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;1;1;0;2;0;0;1;0;0;0;0;0;1;0;2;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Energy_Blasts;5;19;32;11;11;15;25;58;16;3;3;1;20;8;2;29;15;174;8;2;23;52;23;3;6;8;33;18;4;1;2;9;1;1;0;2;13;1;4;7;5;0;3;2;0;8;2;12;19;10;3;2;2;0;0;11;1;3;3;7;2;1;2;1;1;0;3;2;3;6;0;0;3;1;13;8;1;2;4;3;2;2;6;1;2;6;3;2;3;0;1;4;0;0;2;1;3;0;2;0;1;4;0;0;7;2;3;0;0;1;6;0;2;0;1;0;1;0;1;1;2;0;0;3;5;1;1;4;0;4;0;1;1;0;0;0;0;0;1;0;1;0;2;0;1;0;0;1;0;0;0;1;0;0;0;0;0;0
+superpower_Power_Suit;2;2;10;2;3;2;3;12;0;2;0;0;4;0;0;4;3;8;28;0;1;10;5;1;2;1;5;0;0;0;0;5;0;0;0;0;1;0;2;2;2;0;2;0;0;0;0;6;1;0;0;3;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;0;0;0;0;0;1;0;3;1;0;1;3;3;1;1;2;0;0;0;0;0;2;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Danger_Sense;2;7;6;2;1;7;8;8;3;0;2;0;8;1;0;0;1;2;0;20;2;2;2;2;1;1;8;2;0;0;0;0;2;3;0;0;0;0;0;0;3;0;2;6;0;0;0;3;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;6;7;0;4;0;0;0;0;0;0;0;0;0;0;1;0;0;4;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;3;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Energy_Manipulation;2;8;9;5;2;2;10;17;9;0;2;0;6;10;0;12;5;23;1;2;66;20;12;1;2;3;10;11;2;0;0;1;0;0;0;2;8;0;0;2;3;0;1;1;0;9;1;0;11;2;3;0;0;0;0;8;0;4;0;2;1;0;0;1;1;0;0;0;0;3;0;0;4;2;7;2;0;0;2;0;2;2;4;1;2;2;3;2;3;0;4;0;0;0;0;0;0;0;1;0;1;2;0;0;6;1;0;0;0;1;3;0;1;0;1;0;1;0;1;2;3;0;0;0;1;0;0;0;0;0;0;2;0;0;0;0;0;1;1;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0
+superpower_Flight;4;23;55;23;22;19;47;96;30;5;1;2;34;16;4;26;11;52;10;2;20;276;32;8;12;12;67;21;3;4;8;22;4;8;2;4;17;2;11;20;20;2;4;4;1;12;5;13;38;12;3;4;3;0;0;12;3;9;9;11;3;3;4;1;1;1;8;6;3;17;1;0;5;2;19;8;0;4;6;3;3;3;6;2;6;16;6;4;5;1;4;6;0;0;3;3;11;1;4;0;1;6;2;3;7;1;3;0;0;1;5;2;11;1;0;1;1;1;4;1;2;0;0;3;13;1;3;3;0;4;1;4;2;0;0;0;0;2;0;0;1;0;4;0;1;0;1;1;0;0;0;0;1;0;0;0;0;0
+superpower_Force_Fields;4;9;15;7;10;3;12;27;16;2;1;1;10;9;0;10;6;23;5;2;12;32;94;2;10;4;17;11;2;0;2;5;0;0;0;1;8;2;2;4;4;0;2;0;1;10;2;7;14;5;3;1;1;0;0;6;1;6;2;3;1;0;0;1;0;1;2;0;1;5;0;0;4;2;14;5;0;2;2;1;2;1;1;1;3;4;6;5;6;1;5;3;0;0;0;0;2;0;2;0;1;3;2;1;5;0;1;0;0;1;6;0;1;1;1;0;2;0;0;0;1;0;0;1;2;0;1;2;0;4;0;4;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;0;0;1;0;0;0;0;0;0
+superpower_Hypnokinesis;1;2;4;8;4;1;6;9;4;1;1;0;5;0;0;4;1;3;1;2;1;8;2;28;2;1;7;3;0;0;1;4;0;0;1;0;0;0;1;4;4;1;0;1;0;1;2;1;6;1;0;0;0;0;0;0;0;2;1;2;1;0;0;1;1;0;5;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0;0;0;0;4;1;0;0;0;1;0;0;0;2;2;4;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;4;1;0;0;0;1;0;0;0;0;0;1;4;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0
+superpower_Invisibility;3;3;3;3;2;2;4;7;7;3;0;2;2;2;0;2;3;6;2;1;2;12;10;2;28;7;7;6;1;0;0;4;0;0;0;1;4;1;3;2;2;0;3;0;0;2;1;3;5;2;1;2;1;0;0;0;1;4;4;3;1;0;0;0;0;0;1;0;0;3;0;0;2;0;2;1;0;0;0;1;1;0;0;0;0;3;1;0;0;0;1;4;0;0;0;0;1;0;1;0;0;0;1;0;1;0;0;0;0;0;2;1;2;1;0;0;1;0;1;0;1;0;0;1;2;0;0;1;0;3;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Phasing;2;3;6;5;1;2;5;8;6;2;0;2;1;3;1;4;3;8;1;1;3;12;4;1;7;30;6;6;1;0;0;4;0;0;0;1;4;1;3;3;3;0;2;0;0;2;1;2;5;3;1;1;1;0;0;1;1;4;6;1;0;0;0;0;0;0;1;0;1;2;0;0;2;0;1;3;0;0;0;2;1;0;0;0;1;2;1;0;1;0;2;4;0;0;0;0;1;0;0;0;1;2;0;0;1;0;0;0;0;0;1;1;3;0;0;0;1;0;1;0;1;0;0;1;2;0;0;1;0;2;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Super_Speed;6;53;80;22;25;61;86;136;22;7;4;1;57;16;1;21;7;33;5;8;10;67;17;7;7;6;304;16;3;0;11;19;8;13;1;3;10;3;25;19;30;1;11;16;1;3;3;19;40;15;5;3;2;2;1;16;2;5;6;11;3;1;1;0;1;3;21;14;6;22;1;0;3;0;12;8;2;4;2;5;5;3;4;5;4;14;2;2;2;2;1;7;0;0;3;3;12;1;7;0;2;4;1;3;5;0;2;0;0;1;3;0;11;0;1;0;8;1;3;1;4;0;0;3;13;2;1;2;0;4;1;3;1;0;0;2;0;2;1;2;2;4;4;0;1;0;1;1;1;1;2;0;1;0;0;0;0;0
+superpower_Teleportation;4;10;8;8;10;7;17;22;14;1;4;2;12;12;4;2;3;18;0;2;11;21;11;3;6;6;16;84;3;0;1;1;0;0;0;3;8;1;3;2;1;0;2;2;0;6;2;6;13;2;4;0;0;0;0;5;3;5;6;11;2;0;0;0;1;0;1;0;1;8;0;0;7;1;8;5;1;0;0;2;3;0;1;1;0;1;3;2;2;2;4;1;0;0;1;1;1;0;6;0;2;1;0;0;5;0;0;0;0;1;3;1;1;1;1;0;3;0;0;1;2;0;0;1;2;0;0;2;0;2;0;2;1;0;0;0;0;1;0;0;0;0;2;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0
+superpower_Power_Augmentation;1;2;1;2;2;2;3;4;4;1;0;1;1;2;0;2;0;4;0;0;2;3;2;0;1;1;3;3;16;0;0;1;0;0;0;0;4;1;1;1;2;0;1;0;0;0;0;1;3;0;1;0;0;0;0;4;0;0;0;1;0;0;0;0;0;0;1;0;1;3;0;0;1;1;1;1;0;0;0;1;1;1;1;0;1;1;0;0;0;0;1;1;0;0;0;0;1;0;1;1;1;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;1;0;0;0;1;0;0;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Gliding;0;1;2;0;0;1;1;3;1;0;0;0;2;0;0;0;0;1;0;0;0;4;0;0;0;0;0;0;0;8;1;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Toxin_and_Disease_Resistance;1;8;14;3;10;8;17;22;0;1;1;0;13;7;3;1;2;2;0;0;0;8;2;1;0;0;11;1;0;1;56;2;0;2;3;1;0;0;4;2;5;0;0;1;0;1;0;2;9;4;1;1;0;0;0;2;0;1;0;3;0;0;0;2;2;0;1;5;0;4;0;0;2;0;0;0;0;0;0;0;0;1;0;0;0;1;1;0;0;2;2;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;2;0;0;0;0;0;0;1;1;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0
+superpower_Vision_-_Telescopic;4;7;19;8;5;7;15;24;2;3;2;1;15;2;1;11;2;9;5;0;1;22;5;4;4;4;19;1;1;3;2;56;0;1;0;0;2;1;4;16;10;0;8;0;0;0;1;6;12;2;1;2;0;0;0;2;0;1;1;0;0;0;0;1;1;0;8;0;0;2;0;0;0;0;1;1;0;5;0;4;5;2;1;0;1;12;0;0;0;0;0;5;0;0;0;1;10;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;13;0;0;0;2;0;1;0;2;0;0;1;12;0;0;1;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0
+superpower_Animal_Attributes;1;8;6;1;0;6;7;11;2;0;0;0;5;0;2;0;0;1;0;2;0;4;0;0;0;0;8;0;0;0;0;0;32;11;2;3;1;0;1;0;6;0;3;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;1;0;3;5;6;1;3;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0
+superpower_Animal_Oriented_Powers;0;14;11;1;2;9;12;19;2;0;0;0;12;0;2;0;0;1;0;3;0;8;0;0;0;0;13;0;0;0;2;1;11;52;2;2;3;0;3;3;10;0;2;7;0;0;0;2;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;5;8;1;4;1;0;0;0;0;0;0;1;0;0;0;1;0;1;0;1;0;0;1;0;0;1;0;0;0;1;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;2;2;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0
+superpower_Toxikinesis;0;1;2;0;0;1;2;4;0;1;0;0;0;1;1;0;0;0;0;0;0;2;0;1;0;0;1;0;0;0;3;0;2;2;12;1;0;0;1;1;0;0;0;2;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0
+superpower_Empathy;2;3;3;1;1;0;1;4;2;1;1;0;1;3;0;0;0;2;0;0;2;4;1;0;1;1;3;3;0;0;1;0;3;2;1;16;2;0;1;1;0;0;0;2;0;2;1;0;2;0;1;0;0;0;0;0;0;1;0;2;0;1;1;1;2;1;0;2;1;3;1;0;1;0;1;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Size_Changing;1;4;9;8;3;4;6;24;11;1;0;1;5;11;1;5;2;13;1;0;8;17;8;0;4;4;10;8;4;0;0;2;1;3;0;2;72;1;3;2;3;0;1;1;0;4;2;2;16;6;2;0;4;0;0;7;0;4;1;2;1;0;0;0;1;0;1;1;2;14;1;0;4;3;6;2;0;0;2;1;1;1;1;0;2;4;1;1;2;1;4;2;0;0;0;0;1;0;2;0;2;1;0;0;1;0;0;0;0;0;2;0;2;0;1;5;1;0;1;0;1;0;0;1;2;0;0;1;0;2;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Hydrokinesis;1;1;3;1;1;3;1;5;4;4;0;1;0;0;0;0;1;1;0;0;0;2;2;0;1;1;3;1;1;0;0;1;0;0;0;0;1;16;2;1;1;0;1;0;0;0;0;1;1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;0;0;0;1;0;0;0;0;0;2;0;0;0;0;1;1;1;0;0;1;1;2;3;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;1;0;0;1;1;0;2;3;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Endurance;4;11;22;8;7;15;19;33;7;4;3;2;12;2;0;1;0;4;2;0;0;11;2;1;3;3;25;3;1;0;4;4;1;3;1;1;3;2;74;6;11;1;3;2;0;1;0;3;9;5;1;0;1;0;0;0;0;1;2;2;0;0;0;1;2;1;6;3;4;5;0;0;1;0;3;2;1;2;0;1;2;4;3;1;1;5;0;0;0;0;1;2;0;0;2;1;3;0;1;0;0;1;1;1;2;0;0;0;0;0;0;0;4;0;0;0;1;0;1;0;1;0;0;1;4;0;0;1;0;1;0;1;1;0;0;1;0;0;0;0;0;0;1;0;0;1;0;0;0;0;2;0;0;0;0;0;0;0
+superpower_Enhanced_Hearing;3;6;14;12;6;7;18;21;4;2;3;1;13;2;0;9;1;7;2;0;2;20;4;4;2;3;19;2;1;0;2;16;0;3;1;1;2;1;6;56;14;3;6;1;0;1;2;3;13;1;1;0;1;0;0;1;0;1;1;1;1;1;2;1;1;0;8;0;1;1;0;0;1;0;3;2;0;2;0;3;6;1;1;0;2;12;0;0;0;0;1;2;0;0;1;2;10;0;0;0;0;0;0;0;1;0;0;1;2;1;0;0;10;0;0;0;1;0;1;0;2;0;0;1;11;0;0;2;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1
+superpower_Enhanced_Senses;4;22;21;10;10;17;28;38;6;2;3;1;24;0;1;7;1;5;2;3;3;20;4;4;2;3;30;1;2;0;5;10;6;10;0;0;3;1;11;14;96;1;8;4;0;0;0;5;14;2;1;1;0;0;0;1;0;2;2;2;1;0;0;2;1;3;15;10;1;8;0;0;0;0;1;3;0;1;0;2;6;2;1;0;2;9;0;0;0;0;0;4;0;0;0;2;6;0;0;0;1;1;0;1;1;1;1;1;2;1;0;0;8;0;0;0;2;1;2;1;1;0;1;1;8;0;0;1;0;1;0;1;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Sonar;0;0;1;0;0;1;0;1;1;1;0;0;1;0;0;0;0;0;0;0;0;2;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;3;1;8;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;2;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Vision_-_Night;4;10;9;2;1;11;9;12;2;4;2;1;8;1;0;3;2;3;2;2;1;4;2;0;3;2;11;2;1;0;0;8;3;2;0;0;1;1;3;6;8;1;28;5;0;0;0;3;2;0;1;2;0;0;0;1;0;0;0;0;0;0;0;1;1;1;4;3;0;1;0;0;0;0;0;1;0;0;0;2;3;1;1;0;1;2;0;0;0;0;0;3;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;2;0;0;0;3;1;0;0;2;0;0;1;2;0;0;1;0;3;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0
+superpower_Wallcrawling;1;16;10;1;1;15;14;18;2;0;1;0;11;0;0;0;0;2;0;6;1;4;0;1;0;0;16;2;0;0;1;0;6;7;2;2;1;0;2;1;4;0;5;38;0;1;0;3;0;0;1;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;7;9;1;7;1;0;0;0;0;0;0;0;0;0;1;0;0;4;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;6;2;0;1;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;4;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0
+superpower_Energy_Armor;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;2;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Psionic_Powers;0;4;4;3;2;1;5;10;15;0;0;0;3;6;1;5;5;8;0;0;9;12;10;1;2;2;3;6;0;0;1;0;0;0;0;2;4;0;1;1;0;0;0;1;1;62;1;1;3;0;0;0;1;0;0;3;1;8;1;1;1;1;1;0;0;0;0;1;1;2;0;0;2;2;11;1;1;0;0;0;0;0;1;0;0;0;9;7;9;1;6;0;0;0;0;1;0;0;0;1;0;0;0;0;4;0;0;0;0;0;4;3;0;0;0;0;1;0;1;0;1;1;0;1;0;0;0;0;0;1;0;3;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0
+superpower_Omnilingualism;0;0;1;4;1;1;1;5;2;0;0;0;1;2;0;1;0;2;0;0;1;5;2;2;1;1;3;2;0;0;0;1;0;0;0;1;2;0;0;2;0;0;0;0;0;1;12;1;3;2;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;1;0;0;1;0;1;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;0;0;0;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Weapon-based_Powers;11;15;20;7;5;10;21;25;1;3;8;1;12;1;1;3;3;12;6;3;0;13;7;1;3;2;19;6;1;0;2;6;0;2;0;0;2;1;3;3;5;1;3;3;0;1;1;96;5;1;1;3;0;0;0;1;1;0;0;3;0;0;0;6;2;0;6;3;1;5;0;0;1;0;1;1;0;2;1;1;1;0;2;3;1;1;0;0;1;1;1;3;0;0;0;2;1;0;1;0;0;0;0;1;3;0;0;0;0;0;1;0;1;0;0;0;4;1;2;0;1;0;0;1;1;0;0;4;0;4;0;0;0;0;0;0;0;1;0;0;0;2;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0
+superpower_Invulnerability;2;9;28;18;15;10;35;57;11;2;2;1;22;18;1;14;3;19;1;1;11;38;14;6;5;5;40;13;3;0;9;12;0;1;1;2;16;1;9;13;14;0;2;0;0;3;3;5;122;13;4;0;3;0;0;6;1;4;4;7;2;0;0;0;1;0;9;2;2;9;0;0;5;2;9;4;0;2;1;2;3;3;3;0;2;15;0;0;1;1;3;2;0;0;4;2;11;0;2;0;1;3;0;1;2;0;1;0;0;1;2;0;10;0;1;3;1;1;1;0;2;0;0;1;13;0;0;2;0;2;0;1;1;0;0;1;0;1;0;0;0;0;3;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0
+superpower_Self-Sustenance;0;0;12;6;7;4;9;19;5;0;1;0;7;4;3;4;2;10;0;0;2;12;5;1;2;3;15;2;0;0;4;2;0;0;0;0;6;0;5;1;2;0;0;0;0;0;2;1;13;42;2;0;1;0;0;5;0;3;1;3;1;0;0;0;0;0;1;1;2;3;0;0;1;0;4;2;0;0;1;2;0;1;1;0;1;2;1;0;1;1;0;2;0;0;3;1;0;0;2;0;1;1;0;0;0;0;0;0;0;0;1;0;2;0;1;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0
+superpower_Duplication;3;3;2;2;5;1;5;6;2;1;2;1;2;3;1;0;0;3;0;1;3;3;3;0;1;1;5;4;1;0;1;1;0;0;0;1;2;1;1;1;1;0;1;1;0;0;0;1;4;2;16;1;0;0;0;1;0;0;0;1;1;0;0;0;1;0;1;0;0;3;0;0;0;0;1;1;0;0;0;1;3;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;2;0;0;0;0;1;1;0;1;0;1;0;2;0;0;1;2;0;0;1;1;0;0;1;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Radiation_Immunity;2;0;3;0;1;1;1;4;0;2;0;0;1;0;1;2;2;2;3;0;0;4;1;0;2;1;3;0;0;0;1;2;0;0;0;0;0;0;0;0;1;0;2;0;0;0;0;3;0;0;1;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Density_Control;0;2;3;1;0;1;3;6;2;0;0;0;3;2;1;2;1;2;0;0;0;3;1;0;1;1;2;0;0;0;0;0;0;0;0;0;4;0;1;1;0;0;0;0;0;1;0;0;3;1;0;0;16;0;0;1;0;1;2;0;0;0;0;0;0;0;0;1;2;5;0;0;0;0;1;0;0;0;0;0;0;1;1;0;1;1;1;0;1;2;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;2;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0
+superpower_Illumination;0;0;2;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;1;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Molecular_Combustion;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Molecular_Manipulation;0;5;11;4;3;4;8;19;8;0;1;0;6;9;1;8;2;11;0;0;8;12;6;0;0;1;16;5;4;0;2;2;0;0;0;0;7;0;0;1;1;0;1;0;0;3;0;1;6;5;1;0;1;2;1;50;0;4;1;3;1;0;1;0;0;1;0;0;1;7;0;0;3;1;7;0;0;0;1;1;0;1;1;0;2;1;4;3;5;1;4;2;0;0;0;0;1;1;3;0;1;0;0;0;2;0;1;0;0;0;5;0;2;0;1;0;0;0;0;0;1;0;0;1;1;0;0;1;0;0;0;2;0;0;0;0;0;0;0;1;0;0;2;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0
+superpower_Astral_Travel;0;0;0;0;0;0;2;2;2;0;0;0;0;0;0;0;0;1;0;0;0;3;1;0;1;1;2;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;6;2;2;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0
+superpower_Illusions;0;1;4;2;2;0;3;7;13;0;0;0;4;4;1;3;0;3;0;0;4;9;6;2;4;4;5;5;0;0;1;1;0;0;0;1;4;0;1;1;2;0;0;0;0;8;1;0;4;3;0;0;1;0;0;4;2;30;4;3;1;0;0;0;0;1;0;0;1;2;0;0;3;1;7;1;0;0;0;0;0;0;0;0;1;1;10;6;7;2;6;2;0;0;0;0;0;0;2;1;2;1;0;0;2;0;0;0;0;0;2;2;1;1;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;1;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Intangibility;0;2;3;2;1;1;4;7;4;0;0;1;0;2;1;1;1;3;0;0;0;9;2;1;4;6;6;6;0;0;0;1;0;0;0;0;1;0;2;1;2;0;0;0;0;1;0;0;4;1;0;0;2;0;0;1;2;4;26;3;1;0;0;0;0;0;0;1;1;3;0;0;3;0;3;2;0;0;0;0;0;0;0;0;1;2;2;0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;1;0;0;0;1;1;1;1;0;0;0;0;1;0;0;0;0;0;2;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Magic;1;4;6;5;8;3;13;16;5;0;2;1;7;5;0;1;1;7;0;0;2;11;3;2;3;1;11;11;1;0;3;0;0;0;0;2;2;1;2;1;2;0;0;1;0;1;1;3;7;3;1;0;0;0;0;3;2;3;3;50;1;0;0;0;1;0;0;1;0;5;0;0;4;0;3;1;1;0;0;1;1;0;0;1;0;0;2;0;0;0;0;0;0;0;2;1;0;1;5;0;1;0;0;1;3;0;0;0;0;0;1;1;0;1;0;0;1;0;0;1;1;0;1;0;0;0;0;1;0;0;0;1;2;0;0;0;0;3;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0
+superpower_Precognition;0;1;1;0;0;0;2;4;2;0;0;0;1;1;0;0;0;2;0;0;1;3;1;1;1;0;3;2;0;0;0;0;1;1;0;0;1;0;0;1;1;0;0;1;0;1;0;0;2;1;1;0;0;0;0;1;1;1;1;1;10;0;0;0;0;0;0;0;0;1;0;0;0;0;2;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1
+superpower_Audiokinesis;0;1;1;0;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0;3;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;10;4;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Sonic_Scream;0;1;2;0;1;1;1;2;2;0;0;0;0;0;0;1;0;2;0;0;0;4;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;2;0;2;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;4;14;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Human_physical_perfection;12;8;0;4;1;4;4;1;1;0;7;0;1;0;0;2;0;1;0;1;1;1;1;1;0;0;0;0;0;0;2;1;1;0;0;1;0;0;1;1;2;0;1;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;44;5;1;0;0;0;0;0;0;0;0;1;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Stealth;7;9;2;4;2;3;9;3;1;1;7;0;1;1;0;0;0;1;1;1;1;1;0;1;0;0;1;1;0;0;2;1;0;0;1;2;1;0;2;1;1;0;1;1;0;0;0;2;1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;5;22;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;2;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Dexterity;1;4;1;1;0;2;3;4;1;0;0;0;3;0;0;0;0;0;0;1;0;1;1;0;0;0;3;0;0;0;0;0;3;0;0;1;0;0;1;0;3;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;10;2;2;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;2;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Jump;1;11;23;7;6;10;19;30;2;1;0;1;19;1;2;7;0;3;1;6;0;8;2;5;1;1;21;1;1;0;1;8;5;5;1;0;1;1;6;8;15;1;4;7;0;0;0;6;9;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;64;8;0;4;0;0;0;0;1;1;0;1;0;1;2;0;0;3;0;8;0;0;1;1;0;1;0;0;0;1;9;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;6;0;0;0;3;2;1;0;1;0;0;1;8;2;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;3;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0
+superpower_Natural_Weapons;0;15;14;1;2;16;15;22;2;1;0;0;15;2;3;2;0;2;0;7;0;6;0;0;0;0;14;0;0;0;5;0;6;8;1;2;1;0;3;0;10;0;3;9;0;1;0;3;2;1;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;2;8;62;4;9;1;0;0;0;0;0;0;0;0;0;0;1;0;4;0;0;1;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;3;2;0;0;0;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0
+superpower_Natural_Armor;0;2;9;1;1;3;8;9;3;0;0;0;2;1;1;4;1;3;1;0;0;3;1;0;0;1;6;1;1;0;0;0;1;1;0;1;2;0;4;1;1;0;0;1;0;1;0;1;2;2;0;0;2;0;0;1;0;1;1;0;0;0;0;0;0;0;0;4;24;4;1;0;0;0;2;0;0;0;0;0;0;3;3;0;2;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0
+superpower_Shapeshifting;3;13;15;2;8;8;16;32;11;1;2;1;15;9;4;3;2;6;0;4;3;17;5;0;3;2;22;8;3;0;4;2;3;4;0;3;14;1;5;1;8;0;1;7;0;2;1;5;9;3;3;1;5;0;0;7;0;2;3;5;1;0;1;0;1;0;4;9;4;84;1;1;2;1;6;1;0;0;1;1;3;1;1;4;3;4;1;0;0;1;3;3;0;0;0;0;2;1;3;0;1;0;0;0;2;0;0;0;0;1;2;1;2;0;0;5;5;1;1;1;2;0;0;2;3;0;0;1;1;1;0;1;1;0;0;0;0;1;0;0;1;2;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0
+superpower_Sub-Mariner;0;1;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Omnitrix;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Cross-Dimensional_Awareness;1;1;2;3;3;1;3;5;3;0;1;0;2;6;1;1;0;3;0;0;4;5;4;1;2;2;3;7;1;0;2;0;0;0;0;1;4;0;1;1;0;0;0;0;0;2;1;1;5;1;0;0;0;0;0;3;0;3;3;4;0;0;0;0;0;0;0;0;0;2;0;0;20;2;2;1;0;0;0;0;0;0;0;0;0;0;2;0;0;1;2;0;0;0;0;0;0;0;3;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0
+superpower_Reality_Warping;0;0;0;1;0;0;0;3;2;0;0;0;0;1;0;1;0;1;0;0;2;2;2;0;0;0;0;1;1;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0;0;2;0;0;2;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;2;6;2;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Telekinesis;0;4;8;4;4;3;6;17;19;0;1;0;8;6;1;8;1;13;0;0;7;19;14;1;2;1;12;8;1;1;0;1;0;0;0;1;6;0;3;3;1;0;0;0;1;11;1;1;9;4;1;0;1;0;0;7;1;7;3;3;2;1;1;1;0;1;1;0;2;6;0;0;2;2;66;1;0;0;0;1;0;0;0;0;1;3;8;7;8;1;5;1;0;0;1;1;2;1;1;0;0;0;0;1;3;0;0;0;0;0;4;0;0;1;1;0;0;0;0;0;0;0;0;1;3;0;0;2;0;1;1;3;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;1;1
+superpower_Time_Travel;1;1;5;2;3;5;2;7;3;1;0;1;4;1;0;3;0;8;1;0;2;8;5;0;1;3;8;5;1;0;0;1;0;0;0;0;2;1;2;2;3;0;1;0;0;1;0;1;4;2;1;0;0;0;0;0;0;1;2;1;0;0;0;0;0;0;1;0;0;1;0;0;1;0;1;32;0;0;1;2;1;0;0;0;1;2;1;0;0;0;0;1;0;0;0;0;1;0;1;0;1;2;0;0;3;0;0;0;0;0;1;0;1;0;0;0;1;0;0;0;2;0;0;1;1;0;0;1;0;1;0;0;1;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0
+superpower_Probability_Manipulation;1;4;0;0;0;4;2;2;2;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;10;1;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Vision_-_Infrared;0;2;4;2;1;2;4;5;0;0;0;0;3;0;0;1;0;2;3;0;0;4;2;1;0;0;4;0;0;0;0;5;0;1;0;0;0;0;2;2;1;0;0;0;0;0;0;2;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;12;0;1;1;0;0;0;0;2;0;0;0;0;0;0;0;0;0;1;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Electrokinesis;0;1;2;2;2;0;1;4;0;0;1;0;0;1;0;3;1;4;1;0;2;6;2;0;0;0;2;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;0;0;28;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;2;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0
+superpower_Enhanced_Memory;2;3;4;3;1;6;5;5;1;1;1;1;2;0;1;1;0;3;0;0;0;3;1;1;1;2;5;2;1;0;0;4;0;0;0;0;1;1;1;3;2;0;2;0;0;0;1;1;2;2;1;0;0;0;0;1;0;0;0;1;1;0;0;1;1;0;1;0;0;1;0;0;0;0;1;2;0;1;0;18;2;0;0;0;0;1;0;0;0;0;0;2;0;0;1;1;1;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;3;0;0;0;1;0;0;0;2;0;0;1;1;0;0;2;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1
+superpower_Enhanced_Smell;5;6;2;3;4;3;7;5;3;1;5;1;4;1;0;1;0;2;1;1;2;3;2;1;1;1;5;3;1;0;0;5;0;0;0;1;1;1;2;6;6;0;3;1;0;0;0;1;3;0;3;0;0;0;0;0;0;0;0;1;0;0;0;1;2;0;2;0;0;3;0;0;0;0;0;1;0;1;0;2;16;0;0;0;0;2;0;0;0;0;0;1;0;0;0;1;2;0;0;0;0;0;0;0;2;0;0;1;2;2;1;0;3;0;0;0;2;0;0;1;2;0;0;1;2;0;0;1;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Cold_Resistance;0;3;9;1;3;3;6;11;0;0;0;0;3;3;0;0;0;2;3;0;2;3;1;0;0;0;3;0;1;0;1;2;0;1;0;0;1;1;4;1;2;0;1;0;0;0;0;0;3;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;3;1;0;0;0;0;0;0;0;0;0;0;0;28;8;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;3;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Heat_Resistance;0;3;9;0;0;2;7;11;0;0;0;0;2;2;0;1;1;6;3;0;4;6;1;0;0;0;4;1;1;0;0;1;0;0;0;0;1;0;3;1;1;0;1;0;0;1;0;2;3;1;0;1;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;3;1;0;0;0;0;0;0;1;0;0;0;0;8;34;1;1;0;0;0;0;1;2;0;0;0;0;1;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;1;0;0;4;0;0;0;0;0;1;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Symbiote_Costume;0;3;5;0;0;4;4;6;0;0;0;0;5;1;0;0;0;1;1;4;1;2;1;0;0;0;5;1;0;0;0;0;0;1;0;1;0;0;1;0;0;0;0;4;0;0;0;3;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;3;4;0;4;0;0;0;0;0;0;0;0;0;0;0;1;1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Technopath/Cyberpath;0;2;4;1;0;1;4;9;2;0;0;0;2;2;1;3;2;2;1;0;2;6;3;0;0;1;4;0;1;0;0;1;1;0;0;0;2;0;1;2;2;0;1;0;0;0;1;1;2;1;0;0;1;0;0;2;0;1;1;0;0;0;0;0;0;2;0;0;2;3;0;0;0;0;1;1;0;0;1;0;0;1;1;1;22;1;1;1;1;1;2;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0
+superpower_Vision_-_X-Ray;1;2;10;7;5;1;9;16;3;1;0;1;9;1;0;9;0;6;2;0;2;16;4;4;3;2;14;1;1;0;1;12;0;1;0;0;4;1;5;12;9;0;2;0;0;0;0;1;15;2;1;0;1;0;0;1;0;1;2;0;0;0;0;0;0;0;8;0;0;4;0;0;0;0;3;2;0;2;0;1;2;0;0;0;1;32;0;0;0;0;0;2;0;0;0;1;10;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;10;0;0;0;1;0;1;0;2;0;0;1;13;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0
+superpower_Astral_Projection;0;1;3;1;2;0;2;4;11;0;0;0;3;4;1;3;0;3;0;0;3;6;6;1;1;1;2;3;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;9;0;0;0;1;0;0;1;0;0;4;1;10;2;2;0;0;0;0;0;1;0;1;1;1;0;0;2;1;8;1;0;0;0;0;0;0;0;0;1;0;24;6;7;2;5;1;0;0;0;0;0;0;2;1;0;0;0;0;3;0;0;0;0;0;2;3;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Mind_Blast;0;1;2;2;0;0;1;3;9;0;0;0;2;2;1;2;1;2;0;0;2;4;5;0;0;0;2;2;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;3;0;6;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;7;0;0;0;0;0;0;0;0;0;1;0;6;20;7;2;5;1;0;0;0;0;0;0;0;1;0;0;0;0;2;0;0;0;0;0;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Mind_Control;0;2;4;3;0;0;4;6;9;0;1;0;2;3;0;2;2;3;0;0;3;5;6;0;0;1;2;2;0;0;0;0;1;1;1;0;2;0;0;0;0;0;0;1;0;9;0;1;1;1;0;0;1;0;0;5;1;7;1;0;0;0;0;0;0;1;1;0;1;0;0;0;0;1;8;0;0;0;1;0;0;0;0;0;1;0;7;7;26;2;5;1;0;0;0;0;1;0;0;1;0;0;0;0;2;0;0;0;0;0;3;2;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0
+superpower_Mind_Control_Resistance;1;2;3;1;2;1;3;3;3;0;1;0;3;2;1;0;0;0;0;0;0;1;1;0;0;0;2;2;0;0;2;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;2;0;0;1;0;2;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;1;0;0;0;0;0;0;1;1;0;1;0;2;2;2;12;5;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Telepathy_Resistance;3;7;4;4;1;3;3;7;9;0;3;0;4;6;1;2;1;1;0;1;4;4;5;1;1;2;1;4;1;0;2;0;0;0;0;1;4;0;1;1;0;0;0;0;0;6;1;1;3;0;0;0;3;0;0;4;0;6;1;0;0;0;0;1;1;1;0;1;1;3;0;0;2;1;5;0;1;0;0;0;0;1;2;0;2;0;5;5;5;5;38;1;0;0;0;0;0;0;0;1;0;0;0;0;3;0;0;0;0;0;2;1;0;0;0;2;1;0;0;0;0;0;0;0;1;0;0;0;0;1;0;2;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Vision_-_Thermal;3;3;6;1;1;3;2;9;3;3;0;1;3;0;1;3;2;4;2;0;0;6;3;0;4;4;7;1;1;0;0;5;1;1;0;0;2;2;2;2;4;0;3;0;0;0;0;3;2;2;1;2;0;0;0;2;0;2;1;0;0;0;0;0;0;1;1;1;0;3;0;0;0;0;1;1;0;0;0;2;1;1;0;0;1;2;1;1;1;1;1;18;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;3;0;0;0;1;0;1;0;1;0;0;1;2;0;1;2;1;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Hyperkinesis;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Spatial_Awareness;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Clairvoyance;0;0;1;4;1;1;2;4;0;0;0;0;2;0;0;0;0;2;0;0;0;3;0;2;0;0;3;1;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0;0;2;0;4;3;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Magic_Resistance;0;0;3;3;1;1;4;4;0;0;0;0;4;0;0;1;0;1;1;0;0;3;0;2;0;0;3;1;0;0;0;1;0;1;0;0;0;0;1;2;2;0;0;0;0;1;1;2;2;1;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;1;0;0;1;0;1;1;0;1;0;0;1;0;0;0;0;0;0;0;0;1;10;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;2;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Super_Breath;1;2;9;8;5;1;11;13;2;1;0;1;9;0;0;7;0;3;1;0;0;11;2;4;1;1;12;1;1;0;1;10;1;2;1;0;1;1;3;10;6;0;1;1;0;0;0;1;11;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;9;0;0;2;0;0;0;0;2;1;0;2;0;1;2;0;0;0;0;10;0;0;1;0;0;1;0;0;0;1;26;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;8;0;0;0;1;1;0;0;1;0;0;1;10;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0
+superpower_Terrakinesis;0;0;0;0;0;0;1;1;2;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;4;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Cross-Dimensional_Travel;0;0;2;2;3;2;3;6;3;1;0;0;3;3;2;0;0;2;0;0;1;4;2;1;1;0;7;6;1;0;1;0;0;0;0;0;2;1;1;0;0;0;0;0;0;0;0;1;2;2;0;0;0;0;0;3;1;2;1;5;0;0;0;0;0;0;0;0;0;3;0;0;3;0;1;1;0;0;0;1;0;0;0;0;0;0;2;0;0;0;0;0;0;0;1;0;0;0;20;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0
+superpower_Power_Sense;0;0;0;1;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;1;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Darkforce_Manipulation;0;0;1;0;0;0;1;2;2;0;0;0;1;1;0;1;0;1;0;0;1;1;1;1;0;1;2;2;1;0;0;0;0;0;0;0;2;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;2;1;1;0;0;0;0;0;0;0;0;0;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;8;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Gravitokinesis;0;1;5;0;1;0;2;5;1;0;0;0;1;1;0;2;2;4;0;0;2;6;3;0;0;2;4;1;0;0;0;0;0;0;0;0;1;1;1;0;1;0;0;0;0;0;0;0;3;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;2;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;16;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Aerokinesis;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;2;2;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Geokinesis;0;1;3;1;1;2;2;3;0;0;0;0;2;0;0;0;1;0;0;0;0;3;1;0;0;0;3;0;0;0;1;0;0;0;0;0;0;2;1;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;8;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Pyrokinesis;2;4;5;1;2;4;5;7;5;1;1;1;3;3;0;3;1;7;0;0;6;7;5;0;1;1;5;5;1;0;0;1;0;0;0;1;1;3;2;1;1;0;1;1;0;4;0;3;2;0;2;0;0;0;0;2;0;2;0;3;0;0;0;0;1;0;1;0;0;2;0;0;0;0;3;3;2;0;0;1;2;0;6;0;0;1;3;2;2;0;3;1;0;0;0;1;1;1;0;0;0;0;2;1;36;0;0;0;0;0;2;0;1;0;0;0;2;0;4;1;2;0;0;1;2;0;1;4;0;2;0;2;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Energy_Resistance;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;1;1;2;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Photokinesis;0;0;1;0;0;0;0;3;1;0;0;0;0;0;0;0;1;3;0;0;0;3;1;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Echokinesis;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Enhanced_Touch;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;2;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;4;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Radar_Sense;2;2;0;1;1;1;2;1;2;0;2;0;1;1;0;0;0;1;0;1;1;1;1;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Levitation;1;3;1;1;3;1;3;5;4;0;2;1;2;5;0;3;1;6;0;1;3;5;6;0;2;1;3;3;1;0;0;0;0;0;0;1;2;0;0;0;0;0;0;0;0;4;0;1;2;1;1;0;0;0;0;5;0;2;1;1;0;1;1;0;0;0;0;0;1;2;0;0;0;0;4;1;0;0;2;0;1;0;0;0;0;0;2;2;3;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;1;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0
+superpower_Possession;0;1;2;1;1;0;3;2;4;0;0;1;1;2;0;0;0;0;0;0;0;2;0;0;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;1;0;0;0;0;2;1;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;1;2;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;12;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Vision_-_Microscopic;1;2;9;8;5;2;10;12;2;1;0;1;6;1;1;7;0;2;1;0;1;11;1;4;2;3;11;1;1;0;1;13;0;1;0;0;2;1;4;10;8;0;2;0;0;0;0;1;10;2;1;0;0;0;0;2;0;1;1;0;0;0;0;0;0;0;6;0;0;2;0;0;0;0;0;1;0;3;0;3;3;0;0;0;1;10;0;0;0;0;0;3;0;0;0;1;8;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;26;0;0;0;1;0;1;0;2;0;0;1;10;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0
+superpower_Banish;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Timeframe_Control;0;0;1;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1;0;1;0;0;0;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Elasticity;0;1;2;1;0;0;0;2;0;0;0;0;1;3;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;5;0;0;0;0;0;0;0;0;0;1;0;3;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;5;0;0;0;0;0;0;0;0;1;0;0;1;1;0;1;0;0;0;0;1;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Camouflage;3;8;8;1;3;7;8;8;2;1;1;1;6;0;0;0;0;1;0;3;1;1;2;0;1;1;8;3;1;0;0;2;0;2;0;1;1;1;1;1;2;0;3;6;0;1;0;4;1;0;2;0;1;0;0;0;0;1;0;1;0;0;0;0;1;0;3;3;1;5;0;0;0;0;0;1;0;0;0;1;2;0;0;3;0;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;0;0;0;2;0;0;0;0;0;0;1;1;0;0;0;20;0;0;1;2;0;0;1;1;0;0;1;0;1;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Substance_Secretion;0;2;4;0;1;1;3;5;1;1;0;0;2;1;0;0;0;0;0;1;0;1;0;1;0;0;1;0;0;0;2;0;2;2;4;1;0;0;0;0;1;0;1;2;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;2;2;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;14;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0
+superpower_Fire_Resistance;0;0;4;1;0;0;2;5;1;0;0;0;3;1;1;0;0;1;0;0;1;4;0;0;1;1;3;0;0;0;0;1;0;1;0;0;1;0;1;1;2;0;0;0;0;1;0;2;1;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;4;0;0;1;0;0;0;0;0;1;0;0;0;2;0;0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;1;0;0;0;0;0;14;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Heat_Generation;1;1;0;0;1;0;1;1;0;0;1;0;1;0;0;0;0;1;0;0;2;1;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Energy_Constructs;2;3;2;1;2;2;3;3;1;1;1;1;2;1;0;2;1;2;0;0;3;2;1;0;1;1;4;2;1;0;0;2;0;0;0;1;1;1;1;2;1;0;2;1;0;1;0;1;2;0;2;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;1;0;0;2;0;0;0;0;0;2;0;0;0;2;2;0;0;0;1;2;0;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;2;0;0;0;0;0;0;0;2;0;0;0;2;0;0;1;10;0;0;1;2;0;0;1;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0
+superpower_Projection;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Grim_Reaping;0;0;1;0;1;0;1;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Power_Absorption;1;3;1;1;1;1;2;3;3;1;0;1;1;0;0;3;0;3;0;0;0;3;1;1;1;1;3;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;0;1;2;0;0;0;0;1;1;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;1;0;0;14;2;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0
+superpower_Vision_-_Heat;1;3;9;7;5;2;10;14;3;1;0;1;8;1;0;9;1;5;1;0;1;13;2;4;2;2;13;2;1;0;1;12;0;1;0;0;2;1;4;11;8;0;2;0;0;0;0;1;13;1;1;0;0;0;0;1;0;1;2;0;0;0;0;0;0;0;8;0;1;3;0;0;0;0;3;1;1;2;0;1;2;0;1;0;1;13;0;0;0;0;1;2;0;0;0;1;10;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;10;0;0;0;1;0;1;0;2;0;0;2;30;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0
+superpower_Radiation_Absorption;0;0;2;0;1;0;2;3;0;0;0;0;2;0;0;0;0;1;0;0;0;1;0;0;0;0;2;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Thermokinesis;0;0;3;0;0;0;0;3;0;0;0;0;0;0;0;0;1;1;0;0;0;3;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;2;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;10;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Cryokinesis;1;2;5;2;2;3;2;5;3;1;1;1;0;1;0;0;1;4;0;0;0;3;2;0;1;1;2;2;1;1;0;1;0;0;0;0;1;3;1;2;1;0;1;0;0;0;0;4;2;1;1;0;0;0;0;1;0;0;0;1;1;0;0;0;0;0;1;0;0;1;0;0;0;0;2;1;1;0;1;2;1;3;0;0;0;1;0;0;1;0;0;2;0;0;0;0;1;1;0;0;0;0;1;0;4;0;0;0;0;0;1;0;1;0;0;0;1;0;0;0;1;0;0;1;1;0;1;24;1;2;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1
+superpower_Elemental_Transmogrification;0;0;1;0;0;0;1;2;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Magnetokinesis;3;2;4;1;1;3;2;5;2;3;0;1;1;0;0;2;2;4;2;0;0;4;4;0;3;2;4;2;1;0;0;3;0;0;0;0;2;1;1;1;1;0;3;0;0;1;0;4;2;0;1;2;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;1;0;0;0;1;1;1;0;0;0;1;1;0;0;0;0;1;1;1;1;0;1;3;0;0;0;0;1;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;1;0;0;1;1;0;0;2;0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Chlorokinesis;0;0;1;1;0;0;1;3;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;1;0;0;1;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0
+superpower_Resurrection;0;0;2;0;0;1;1;4;4;0;0;0;2;4;2;3;0;1;0;0;2;4;4;0;1;0;3;2;0;0;0;0;0;0;0;1;0;0;1;0;1;0;0;0;0;3;0;0;1;1;0;0;0;0;0;2;0;3;0;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;3;0;0;0;0;0;0;0;0;1;0;0;3;3;2;0;2;0;0;0;0;0;0;0;0;0;0;0;1;0;2;0;1;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0
+superpower_Portal_Creation;0;0;2;0;1;0;2;2;0;0;0;0;0;1;0;0;1;1;0;0;0;2;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;2;0;0;0;0;0;0;0;0;0;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Thirstokinesis;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Power_Nullifier;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Animation;0;0;1;1;0;1;1;2;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Photographic_Reflexes;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Atmokinesis;1;2;1;0;2;1;2;2;1;0;1;0;2;0;0;0;0;0;0;0;1;2;0;0;0;0;2;1;0;0;1;0;0;0;0;1;0;1;0;0;1;0;0;1;0;0;0;1;1;0;1;0;0;0;0;0;0;0;0;3;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;2;0;0;0;0;0;0;0;0;0;0;0;1;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Nova_Force;0;1;1;0;0;1;1;1;0;0;0;0;1;0;0;1;1;1;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Chronokinesis;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Radiation_Control;0;0;2;0;0;0;1;3;0;0;0;0;1;0;1;1;2;1;0;0;0;1;0;0;0;0;2;0;0;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1
+superpower_Web_Creation;0;3;4;0;0;4;4;4;0;0;0;0;4;0;0;0;0;0;0;3;0;0;0;0;0;0;4;0;0;0;0;0;2;2;0;0;0;0;0;0;1;0;1;4;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;3;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Power_Cosmic;0;0;2;1;1;0;2;4;0;0;0;0;0;2;0;1;1;2;0;0;1;4;1;0;0;1;4;2;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;3;2;0;0;0;0;0;2;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Changing_Armor;0;1;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Biokinesis;0;1;0;0;1;1;1;1;1;0;0;0;1;1;0;1;0;1;0;0;0;1;1;0;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Seismic_Power;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0
+superpower_Qwardian_Power_Ring;0;0;1;0;0;0;1;1;0;0;0;0;0;1;0;1;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0
+superpower_Summoning;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;1;0;0;0;1;1;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0
+superpower_Adaptation;0;0;1;0;0;1;1;1;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0
+superpower_Electrical_Transport;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0
+superpower_Insanity;0;1;4;3;0;2;3;3;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;1;0;1;1;1;0;0;0;2;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;10;0;0;0;0;0;0;0
+superpower_Anti-Gravity;0;0;1;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0
+superpower_Matter_Absorption;0;1;0;0;0;0;1;1;0;0;0;0;1;0;0;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0;0
+superpower_Psychokinesis;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0;0
+superpower_Omnipotence;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0;0
+superpower_Death_Touch;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;0;0
+superpower_Intuitive_aptitude;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1
+superpower_Melting;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;2
View
8 code/json-streams/jsonstreams-nodedeps.js → libs/jsonstreams-nodedeps.js
@@ -1,12 +1,12 @@
var require = function (file, cwd) {
var resolved = require.resolve(file, cwd || '/');
var mod = require.modules[resolved];
- if (!mod) throw new Error(
- 'Failed to resolve module ' + file + ', tried ' + resolved
- );
+ if (!mod) {
+ throw 'Failed to resolve module ' + file + ', tried ' + resolved;
+ }
var res = mod._cached ? mod._cached : mod();
return res;
-}
+};
require.paths = [];
require.modules = {};
View
4,460 libs/lodash.js
4,460 additions, 0 deletions not shown
View
9 libs/miso.ds.deps.0.2.1.js
@@ -1,9 +0,0 @@
-/**
-* Miso.Dataset - v0.2.1 - 6/29/2012
-* http://github.com/misoproject/dataset
-* Copyright (c) 2012 Alex Graul, Irene Ros;
-* Dual Licensed: MIT, GPL
-* https://github.com/misoproject/dataset/blob/master/LICENSE-MIT
-* https://github.com/misoproject/dataset/blob/master/LICENSE-GPL
-*/
-(function(a,b){function z(a,b){this._d=a,this._isUTC=!!b}function A(a){return a<0?Math.ceil(a):Math.floor(a)}function B(a){var b=this._data={},c=a.years||a.y||0,d=a.months||a.M||0,e=a.weeks||a.w||0,f=a.days||a.d||0,g=a.hours||a.h||0,h=a.minutes||a.m||0,i=a.seconds||a.s||0,j=a.milliseconds||a.ms||0;this._milliseconds=j+i*1e3+h*6e4+g*36e5,this._days=f+e*7,this._months=d+c*12,b.milliseconds=j%1e3,i+=A(j/1e3),b.seconds=i%60,h+=A(i/60),b.minutes=h%60,g+=A(h/60),b.hours=g%24,f+=A(g/24),f+=e*7,b.days=f%30,d+=A(f/30),b.months=d%12,c+=A(d/12),b.years=c}function C(a,b){var c=a+"";while(c.length<b)c="0"+c;return c}function D(a,b,c){var d=b._milliseconds,e=b._days,f=b._months,g;d&&a._d.setTime(+a+d*c),e&&a.date(a.date()+e*c),f&&(g=a.date(),a.date(1).month(a.month()+f*c).date(Math.min(g,a.daysInMonth())))}function E(a){return Object.prototype.toString.call(a)==="[object Array]"}function F(b){return new a(b[0],b[1]||0,b[2]||1,b[3]||0,b[4]||0,b[5]||0,b[6]||0)}function G(b,c){function p(c){var k,q;switch(c){case"M":return d+1;case"Mo":return d+1+n(d+1);case"MM":return C(d+1,2);case"MMM":return moment.monthsShort[d];case"MMMM":return moment.months[d];case"D":return e;case"Do":return e+n(e);case"DD":return C(e,2);case"DDD":return k=new a(f,d,e),q=new a(f,0,1),~~((k-q)/864e5+1.5);case"DDDo":return k=p("DDD"),k+n(k);case"DDDD":return C(p("DDD"),3);case"d":return g;case"do":return g+n(g);case"ddd":return moment.weekdaysShort[g];case"dddd":return moment.weekdays[g];case"w":return k=new a(f,d,e-g+5),q=new a(k.getFullYear(),0,4),~~((k-q)/864e5/7+1.5);case"wo":return k=p("w"),k+n(k);case"ww":return C(p("w"),2);case"YY":return C(f%100,2);case"YYYY":return f;case"a":return o?o(h,i,!1):h>11?"pm":"am";case"A":return o?o(h,i,!0):h>11?"PM":"AM";case"H":return h;case"HH":return C(h,2);case"h":return h%12||12;case"hh":return C(h%12||12,2);case"m":return i;case"mm":return C(i,2);case"s":return j;case"ss":return C(j,2);case"S":return~~(l/100);case"SS":return C(~~(l/10),2);case"SSS":return C(l,3);case"Z":return(m<0?"-":"+")+C(~~(Math.abs(m)/60),2)+":"+C(~~(Math.abs(m)%60),2);case"ZZ":return(m<0?"-":"+")+C(~~(10*Math.abs(m)/6),4);case"L":case"LL":case"LLL":case"LLLL":case"LT":return G(b,moment.longDateFormat[c]);default:return c.replace(/(^\[)|(\\)|\]$/g,"")}}var d=b.month(),e=b.date(),f=b.year(),g=b.day(),h=b.hours(),i=b.minutes(),j=b.seconds(),l=b.milliseconds(),m=-b.zone(),n=moment.ordinal,o=moment.meridiem;return c.replace(k,p)}function H(a){switch(a){case"DDDD":return o;case"YYYY":return p;case"S":case"SS":case"SSS":case"DDD":return n;case"MMM":case"MMMM":case"ddd":case"dddd":case"a":case"A":return q;case"Z":case"ZZ":return r;case"T":return s;case"MM":case"DD":case"dd":case"YY":case"HH":case"hh":case"mm":case"ss":case"M":case"D":case"d":case"H":case"h":case"m":case"s":return m;default:return new RegExp(a.replace("\\",""))}}function I(a,b,c,d){var e;switch(a){case"M":case"MM":c[1]=b==null?0:~~b-1;break;case"MMM":case"MMMM":for(e=0;e<12;e++)if(moment.monthsParse[e].test(b)){c[1]=e;break}break;case"D":case"DD":case"DDD":case"DDDD":c[2]=~~b;break;case"YY":b=~~b,c[0]=b+(b>70?1900:2e3);break;case"YYYY":c[0]=~~Math.abs(b);break;case"a":case"A":d.isPm=(b+"").toLowerCase()==="pm";break;case"H":case"HH":case"h":case"hh":c[3]=~~b;break;case"m":case"mm":c[4]=~~b;break;case"s":case"ss":c[5]=~~b;break;case"S":case"SS":case"SSS":c[6]=~~(("0."+b)*1e3);break;case"Z":case"ZZ":d.isUTC=!0,e=(b+"").match(w),e&&e[1]&&(d.tzh=~~e[1]),e&&e[2]&&(d.tzm=~~e[2]),e&&e[0]==="+"&&(d.tzh=-d.tzh,d.tzm=-d.tzm)}}function J(b,c){var d=[0,0,1,0,0,0,0],e={tzh:0,tzm:0},f=c.match(k),g,h;for(g=0;g<f.length;g++)h=(H(f[g]).exec(b)||[])[0],b=b.replace(H(f[g]),""),I(f[g],h,d,e);return e.isPm&&d[3]<12&&(d[3]+=12),e.isPm===!1&&d[3]===12&&(d[3]=0),d[3]+=e.tzh,d[4]+=e.tzm,e.isUTC?new a(a.UTC.apply({},d)):F(d)}function K(a,b){var c=Math.min(a.length,b.length),d=Math.abs(a.length-b.length),e=0,f;for(f=0;f<c;f++)~~a[f]!==~~b[f]&&e++;return e+d}function L(a,b){var c,d=a.match(l)||[],e,f=99,g,h,i;for(g=0;g<b.length;g++)h=J(a,b[g]),e=G(new z(h),b[g]).match(l)||[],i=K(d,e),i<f&&(f=i,c=h);return c}function M(b){var c="YYYY-MM-DDT",d;if(t.exec(b)){for(d=0;d<4;d++)if(v[d][1].exec(b)){c+=v[d][0];break}return r.exec(b)?J(b,c+" Z"):J(b,c)}return new a(b)}function N(a,b,c,d){var e=moment.relativeTime[a];return typeof e=="function"?e(b||1,!!c,a,d):e.replace(/%d/i,b||1)}function O(a,b){var c=d(Math.abs(a)/1e3),e=d(c/60),f=d(e/60),g=d(f/24),h=d(g/365),i=c<45&&["s",c]||e===1&&["m"]||e<45&&["mm",e]||f===1&&["h"]||f<22&&["hh",f]||g===1&&["d"]||g<=25&&["dd",g]||g<=45&&["M"]||g<345&&["MM",d(g/30)]||h===1&&["y"]||["yy",h];return i[2]=b,i[3]=a>0,N.apply({},i)}function P(a,b){moment.fn[a]=function(a){var c=this._isUTC?"UTC":"";return a!=null?(this._d["set"+c+b](a),this):this._d["get"+c+b]()}}function Q(a){moment.duration.fn[a]=function(){return this._data[a]}}function R(a,b){moment.duration.fn["as"+a]=function(){return+this/b}}var moment,c="1.6.2",d=Math.round,e,f={},g="en",h=typeof module!="undefined",i="months|monthsShort|monthsParse|weekdays|weekdaysShort|longDateFormat|calendar|relativeTime|ordinal|meridiem".split("|"),j=/^\/?Date\((\-?\d+)/i,k=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|dddd?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|SS?S?|zz?|ZZ?|LT|LL?L?L?)/g,l=/([0-9a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)/gi,m=/\d\d?/,n=/\d{1,3}/,o=/\d{3}/,p=/\d{4}/,q=/[0-9a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+/i,r=/Z|[\+\-]\d\d:?\d\d/i,s=/T/i,t=/^\s*\d{4}-\d\d-\d\d(T(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/,u="YYYY-MM-DDTHH:mm:ssZ",v=[["HH:mm:ss.S",/T\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/T\d\d:\d\d:\d\d/],["HH:mm",/T\d\d:\d\d/],["HH",/T\d\d/]],w=/([\+\-]|\d\d)/gi,x="Month|Date|Hours|Minutes|Seconds|Milliseconds".split("|"),y={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6};moment=function(c,d){if(c===null||c==="")return null;var e,f,g;return moment.isMoment(c)?(e=new a(+c._d),g=c._isUTC):d?E(d)?e=L(c,d):e=J(c,d):(f=j.exec(c),e=c===b?new a:f?new a(+f[1]):c instanceof a?c:E(c)?F(c):typeof c=="string"?M(c):new a(c)),new z(e,g)},moment.utc=function(b,c){return E(b)?new z(new a(a.UTC.apply({},b)),!0):c&&b?moment(b+" +0000",c+" Z").utc():moment(b&&!r.exec(b)?b+"+0000":b).utc()},moment.unix=function(a){return moment(a*1e3)},moment.duration=function(a,b){var c=moment.isDuration(a),d=typeof a=="number",e=c?a._data:d?{}:a;return d&&(b?e[b]=a:e.milliseconds=a),new B(e)},moment.humanizeDuration=function(a,b,c){return moment.duration(a,b===!0?null:b).humanize(b===!0?!0:c)},moment.version=c,moment.defaultFormat=u,moment.lang=function(a,b){var c,d,e=[];if(!a)return g;if(b){for(c=0;c<12;c++)e[c]=new RegExp("^"+b.months[c]+"|^"+b.monthsShort[c].replace(".",""),"i");b.monthsParse=b.monthsParse||e,f[a]=b}if(f[a]){for(c=0;c<i.length;c++)moment[i[c]]=f[a][i[c]]||f.en[i[c]];g=a}else h&&(d=require("./lang/"+a),moment.lang(a,d))},moment.lang("en",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},meridiem:!1,calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[last] dddd [at] LT",sameElse:"L"},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"},ordinal:function(a){var b=a%10;return~~(a%100/10)===1?"th":b===1?"st":b===2?"nd":b===3?"rd":"th"}}),moment.isMoment=function(a){return a instanceof z},moment.isDuration=function(a){return a instanceof B},moment.fn=z.prototype={clone:function(){return moment(this)},valueOf:function(){return+this._d},unix:function(){return Math.floor(+this._d/1e3)},toString:function(){return this._d.toString()},toDate:function(){return this._d},utc:function(){return this._isUTC=!0,this},local:function(){return this._isUTC=!1,this},format:function(a){return G(this,a?a:moment.defaultFormat)},add:function(a,b){var c=b?moment.duration(+b,a):moment.duration(a);return D(this,c,1),this},subtract:function(a,b){var c=b?moment.duration(+b,a):moment.duration(a);return D(this,c,-1),this},diff:function(a,b,c){var e=this._isUTC?moment(a).utc():moment(a).local(),f=(this.zone()-e.zone())*6e4,g=this._d-e._d-f,h=this.year()-e.year(),i=this.month()-e.month(),j=this.date()-e.date(),k;return b==="months"?k=h*12+i+j/30:b==="years"?k=h+(i+j/30)/12:k=b==="seconds"?g/1e3:b==="minutes"?g/6e4:b==="hours"?g/36e5:b==="days"?g/864e5:b==="weeks"?g/6048e5:g,c?k:d(k)},from:function(a,b){return moment.duration(this.diff(a)).humanize(!b)},fromNow:function(a){return this.from(moment(),a)},calendar:function(){var a=this.diff(moment().sod(),"days",!0),b=moment.calendar,c=b.sameElse,d=a<-6?c:a<-1?b.lastWeek:a<0?b.lastDay:a<1?b.sameDay:a<2?b.nextDay:a<7?b.nextWeek:c;return this.format(typeof d=="function"?d.apply(this):d)},isLeapYear:function(){var a=this.year();return a%4===0&&a%100!==0||a%400===0},isDST:function(){return this.zone()<moment([this.year()]).zone()||this.zone()<moment([this.year(),5]).zone()},day:function(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return a==null?b:this.add({d:a-b})},sod:function(){return moment(this).hours(0).minutes(0).seconds(0).milliseconds(0)},eod:function(){return this.sod().add({d:1,ms:-1})},zone:function(){return this._isUTC?0:this._d.getTimezoneOffset()},daysInMonth:function(){return moment(this).month(this.month()+1).date(0).date()}};for(e=0;e<x.length;e++)P(x[e].toLowerCase(),x[e]);P("year","FullYear"),moment.duration.fn=B.prototype={weeks:function(){return A(this.days()/7)},valueOf:function(){return this._milliseconds+this._days*864e5+this._months*2592e6},humanize:function(a){var b=+this,c=moment.relativeTime,d=O(b,!a);return a&&(d=(b<=0?c.past:c.future).replace(/%s/i,d)),d}};for(e in y)y.hasOwnProperty(e)&&(R(e,y[e]),Q(e.toLowerCase()));R("Weeks",6048e5),h&&(module.exports=moment),typeof window!="undefined"&&typeof ender=="undefined"&&(window.moment=moment),typeof define=="function"&&define.amd&&define("moment",[],function(){return moment})})(Date),function(a,b){function N(a){return new O(a)}function O(a){if(a&&a._wrapped)return a;this._wrapped=a}function X(){var a,b,c,e=-1,f=arguments.length,g={bottom:"",exit:"",init:"",top:"",arrayBranch:{beforeLoop:"",loopExp:"++index < length"},objectBranch:{beforeLoop:""}};while(++e<f){a=arguments[e];for(b in a)c=(c=a[b])==null?"":c,/beforeLoop|loopExp|inLoop/.test(b)?(typeof c=="string"&&(c={array:c,object:c}),g.arrayBranch[b]=c.array,g.objectBranch[b]=c.object):g[b]=c}var h=g.args,i=g.arrayBranch,j=g.objectBranch,l=/^[^,]+/.exec(h)[0],m=j.loopExp,n=/\S+$/.exec(m||l)[0];g.firstArg=l,g.hasDontEnumBug=d,g.hasExp="hasOwnProperty.call("+n+", index)",g.iteratedObject=n,g.shadowed=k,g.useHas=g.useHas!==!1,g.exit||(g.exit="if (!"+l+") return result");if(l=="object"||!i.inLoop)g.arrayBranch=null;m||(j.loopExp="index in "+n);var o=Function("arrayClass, funcClass, hasOwnProperty, identity, iteratorBind, objectTypes, slice, stringClass, toString",'"use strict"; return function('+h+") {\n"+P(g)+"\n}");return o(t,w,D,cB,ba,r,F,z,G)}function Y(a,c){return a=a.criteria,c=c.criteria,a===b?1:c===b?-1:a<c?-1:a>c?1:0}function Z(a,b){return n[b]}function $(a){return"\\"+s[a]}function _(a){return q[a]}function ba(a,b){return function(c,d,e){return a.call(b,c,d,e)}}function bb(){}function bd(a,b){var c=n.length;return n[c]="'+\n_.escape("+b+") +\n'",m+c}function be(a,b){var c=n.length;return n[c]="'+\n((__t = ("+b+")) == null ? '' : __t) +\n'",m+c}function bf(a,b){var c=n.length;return n[c]="';\n"+b+";\n__p += '",m+c}function br(a,b,c,d){if(!a)return c;var e=a.length,f=arguments.length<3;d&&(b=ba(b,d));if(e===e>>>0){e&&f&&(c=a[--e]);while(e--)c=b(c,a[e],e,a);return c}var g,h=cw(a);e=h.length,e&&f&&(c=a[h[--e]]);while(e--)g=h[e],c=b(c,a[g],g,a);return c}function bu(a,b,c){if(typeof b=="string"){var d=b;b=function(a){return a[d]}}else c&&(b=ba(b,c));var e=bg(a,b).sort(Y),f=e.length;while(f--)e[f]=e[f].value;return e}function bv(a){if(!a)return[];if(a.toArray&&G.call(a.toArray)==w)return a.toArray();var b=a.length;return b===b>>>0?F.call(a):cz(a)}function bw(a){var b=[];if(!a)return b;var c=-1,d=a.length;while(++c<d)a[c]&&b.push(a[c]);return b}function bx(a){var b=[];if(!a)return b;var c=-1,d=a.length,e=C.apply(b,arguments);while(++c<d)bA(e,a[c],d)<0&&b.push(a[c]);return b}function by(a,b,c){if(a)return b==null||c?a[0]:F.call(a,0,b)}function bz(a,b){var c=[];if(!a)return c;var d,e=-1,f=a.length;while(++e<f)d=a[e],ch(d)?E.apply(c,b?d:bz(d)):c.push(d);return c}function bA(a,b,c){if(!a)return-1;var d=-1,e=a.length;if(c)if(typeof c=="number")d=(c<0?Math.max(0,e+c):c)-1;else return d=bK(a,b),a[d]===b?d:-1;while(++d<e)if(a[d]===b)return d;return-1}function bB(a,b,c){return a?F.call(a,0,-(b==null||c?1:b)):[]}function bC(a){var b=[];if(!a)return b;var c,d=-1,e=a.length,f=F.call(arguments,1);while(++d<e)c=a[d],bA(b,c)<0&&bi(f,function(a){return bA(a,c)>-1})&&b.push(c);return b}function bD(a,b,c){if(a){var d=a.length;return b==null||c?a[d-1]:F.call(a,-b||d)}}function bE(a,b,c){if(!a)return-1;var d=a.length;c&&typeof c=="number"&&(d=(c<0?Math.max(0,d+c):Math.min(c,d-1))+1);while(d--)if(a[d]===b)return d;return-1}function bF(a,b,c){var d=-Infinity,e=d;if(!a)return e;var f,g=-1,h=a.length;if(!b){while(++g<h)a[g]>e&&(e=a[g]);return e}c&&(b=ba(b,c));while(++g<h)f=b(a[g],g,a),f>d&&(d=f,e=a[g]);return e}function bG(a,b,c){var d=Infinity,e=d;if(!a)return e;var f,g=-1,h=a.length;if(!b){while(++g<h)a[g]<e&&(e=a[g]);return e}c&&(b=ba(b,c));while(++g<h)f=b(a[g],g,a),f<d&&(d=f,e=a[g]);return e}function bH(a,b,c){c||(c=1),b==null&&(b=a||0,a=0);var d=-1,e=Math.max(0,Math.ceil((b-a)/c)),f=Array(e);while(++d<e)f[d]=a,a+=c;return f}function bI(a,b,c){return a?F.call(a,b==null||c?1:b):[]}function bJ(a){if(!a)return[];var b,c=-1,d=a.length,e=Array(d);while(++c<d)b=Math.floor(Math.random()*(c+1)),e[c]=e[b],e[b]=a[c];return e}function bK(a,b,c,d){if(!a)return 0;var e,f=0,g=a.length;if(c){d&&(c=bQ(c,d)),b=c(b);while(f<g)e=f+g>>>1,c(a[e])<b?f=e+1:g=e}else while(f<g)e=f+g>>>1,a[e]<b?f=e+1:g=e;return f}function bL(){var a=-1,b=[],c=C.apply(b,arguments),d=c.length;while(++a<d)bA(b,c[a])<0&&b.push(c[a]);return b}function bM(a,b,c,d){var e=[];if(!a)return e;var f,g=-1,h=a.length,i=[];typeof b=="function"&&(d=c,c=b,b=!1),c?d&&(c=ba(c,d)):c=cB;while(++g<h){f=c(a[g],g,a);if(b?!g||i[i.length-1]!==f:bA(i,f)<0)i.push(f),e.push(a[g])}return e}function bN(a){var b=[];if(!a)return b;var c=-1,d=a.length;while(++c<d)bA(arguments,a[c],1)<0&&b.push(a[c]);return b}function bO(a){if(!a)return[];var b=-1,c=bF(bp(arguments,"length")),d=Array(c);while(++b<c)d[b]=bp(arguments,b);return d}function bP(a,b){return a<1?b():function(){if(--a<1)return b.apply(this,arguments)}}function bQ(a,b){function f(){var g=arguments,h=b;d||(a=b[c]),e.length&&(g=g.length?C.apply(e,g):e);if(this instanceof f){bb.prototype=a.prototype,h=new bb;var i=a.apply(h,g);return r[typeof i]&&i!==null?i:h}return a.apply(h,g)}var c,d=G.call(a)==w;if(!d)c=b,b=a;else if(H)return H.call.apply(H,arguments);var e=F.call(arguments,2);return f}function bR(a){var b=arguments,c=1;b.length==1&&(c=0,b=ce(a));for(var d=b.length;c<d;c++)a[b[c]]=bQ(a[b[c]],a);return a}function bS(){var a=arguments;return function(){var b=arguments,c=a.length;while(c--)b=[a[c].apply(this,b)];return b[0]}}function bT(a,b,c){function h(){g=null,c||a.apply(f,d)}var d,e,f,g;return function(){var i=c&&!g;return d=arguments,f=this,L(g),g=M(h,b),i&&(e=a.apply(f,d)),e}}function bU(a,c){var d=F.call(arguments,2);return M(function(){return a.apply(b,d)},c)}function bV(a){var c=F.call(arguments,1);return M(function(){return a.apply(b,c)},1)}function bW(a,b){var c={};return function(){var d=b?b.apply(this,arguments):arguments[0];return D.call(c,d)?c[d]:c[d]=a.apply(this,arguments)}}function bX(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),b)}}function bY(a){var b=F.call(arguments,1),c=b.length;return function(){var d,e=arguments;return e.length&&(b.length=c,E.apply(b,e)),d=b.length==1?a.call(this,b[0]):a.apply(this,b),b.length=c,d}}function bZ(a,b){function h(){g=new Date,f=null,a.apply(e,c)}var c,d,e,f,g=0;return function(){var i=new Date,j=b-(i-g);return c=arguments,e=this,j<=0?(g=i,d=a.apply(e,c)):f||(f=M(h,j)),d}}function b$(a,b){return function(){var c=[a];return arguments.length&&E.apply(c,arguments),b.apply(this,c)}}function b_(a){return r[typeof a]&&a!==null?ch(a)?a.slice():cb({},a):a}function cf(a,b){return D.call(a,b)}function ci(a){return a===!0||a===!1||G.call(a)==u}function cj(a){return G.call(a)==v}function ck(a){return!!a&&a.nodeType==1}function cm(a,b,c){c||(c=[]);if(a===b)return a!==0||1/a==1/b;if(a==null||b==null)return a===b;a._chain&&(a=a._wrapped),b._chain&&(b=b._wrapped);if(a.isEqual&&G.call(a.isEqual)==w)return a.isEqual(b);if(b.isEqual&&G.call(b.isEqual)==w)return b.isEqual(a);var e=G.call(a);if(e!=G.call(b))return!1;switch(e){case z:return a==String(b);case x:return a!=+a?b!=+b:a==0?1/a==1/b:a==+b;case u:case v:return+a==+b;case y:return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if(typeof a!="object"||typeof b!="object")return!1;var f=c.length;while(f--)if(c[f]==a)return!0;var g=-1,h=!0,i=0;c.push(a);if(e==t){i=a.length,h=i==b.length;if(h)while(i--)if(!(h=cm(a[i],b[i],c)))break}else{if("constructor"in a!="constructor"in b||a.constructor!=b.constructor)return!1;for(var j in a)if(D.call(a,j)){i++;if(!(h=D.call(b,j)&&cm(a[j],b[j],c)))break}if(h){for(j in b)if(D.call(b,j)&&!(i--))break;h=!i}if(h&&d)while(++g<7){j=k[g];if(D.call(a,j)&&!(h=D.call(b,j)&&cm(a[j],b[j],c)))break}}return c.pop(),h}function cn(a){return J(a)&&G.call(a)==x}function co(a){return G.call(a)==w}function cp(a){return r[typeof a]&&a!==null}function cq(a){return G.call(a)==x&&a!=+a}function cr(a){return a===null}function cs(a){return G.call(a)==x}function ct(a){return G.call(a)==y}function cu(a){return G.call(a)==z}function cv(a){return a===b}function cx(a){var b,c=0,d=C.apply(A,arguments),e=d.length,f={};while(++c<e)b=d[c],b in a&&(f[b]=a[b]);return f}function cy(a){if(!a)return 0;var b=a.length;return b===b>>>0?a.length:cw(a).length}function cA(a){return a==null?"":(a+"").replace(i,_)}function cB(a){return a}function cC(a){bl(ce(a),function(b){var c=N[b]=a[b];O.prototype[b]=function(){var a=[this._wrapped];arguments.length&&E.apply(a,arguments);var b=c.apply(N,a);return this._chain&&(b=new O(b),b._chain=!0),b}})}function cD(){return a._=f,this}function cE(a,b){if(!a)return null;var c=a[b];return G.call(c)==w?a[b]():c}function cF(a,b,c){c||(c={});var d,e,f,g=N.templateSettings,i=c.escape,k=c.evaluate,m=c.interpolate,p=c.variable;return i==null&&(i=g.escape),k==null&&(k=g.evaluate),m==null&&(m=g.interpolate),i&&(a=a.replace(i,bd)),m&&(e=a!=(a=a.replace(m,be))),k&&(d=a!=(a=a.replace(k,bf))),a="__p='"+a.replace(j,$).replace(h,Z)+"';\n",n.length=0,p||(p=g.variable,a="with ("+p+" || {}) {\n"+a+"\n}\n"),a="function("+p+") {\n"+"var __p"+(e?", __t":"")+(d?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+a+"return __p\n}",o&&(a+="\n//@ sourceURL=/lodash/template/source["+l++ +"]"),f=Function("_","return "+a)(N),b?f(b):(f.source=a,f)}function cG(a,b,c){var d=-1;if(c)while(++d<a)b.call(c,d);else while(++d<a)b(d)}function cH(a){var b=e++;return a?a+b:b}function cI(a){return a=new O(a),a._chain=!0,a}function cJ(a,b){return b(a),a}function cK(){return this._chain=!0,this}function cL(){return this._wrapped}"use strict";var c=typeof exports=="object"&&exports&&(typeof global=="object"&&global&&global==global.global&&(a=global),exports),d=!{valueOf:0}.propertyIsEnumerable("valueOf"),e=0,f=a._,g=RegExp("^"+({}.valueOf+"").replace(/[.*+?^=!:${}()|[\]\/\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),h=/__token__(\d+)/g,i=/[&<"']/g,j=/['\n\r\t\u2028\u2029\\]/g,k=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],l=0,m="__token__",n=[];try{var o=(Function("//@")(),!0)}catch(p){}var q={"&":"&amp;","<":"&lt;",'"':"&quot;","'":"&#x27;"},r={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,"undefined":!1},s={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},t="[object Array]",u="[object Boolean]",v="[object Date]",w="[object Function]",x="[object Number]",y="[object RegExp]",z="[object String]",A=Array.prototype,B=Object.prototype,C=A.concat,D=B.hasOwnProperty,E=A.push,F=A.slice,G=B.toString,H=g.test(H=F.bind)&&/\n|Opera/.test(H+G.call(a.opera))&&H,I=g.test(I=Array.isArray)&&I,J=a.isFinite,K=g.test(K=Object.keys)&&K,L=a.clearTimeout,M=a.setTimeout;N.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:"obj"};var P=cF("var index, result<% if (init) { %> = <%= init %><% } %>;\n<%= exit %>;\n<%= top %>;\n<% if (arrayBranch) { %>var length = <%= firstArg %>.length; index = -1; <% if (objectBranch) { %>\nif (length === length >>> 0) {<% } %>\n <%= arrayBranch.beforeLoop %>;\n while (<%= arrayBranch.loopExp %>) {\n <%= arrayBranch.inLoop %>;\n } <% if (objectBranch) { %>\n}\n<% }}if (objectBranch) { if (arrayBranch) { %>else {\n<% } if (!hasDontEnumBug) { %> var skipProto = typeof <%= iteratedObject %> == 'function';\n<% } %> <%= objectBranch.beforeLoop %>;\n for (<%= objectBranch.loopExp %>) { \n<% if (hasDontEnumBug) { if (useHas) { %> if (<%= hasExp %>) {\n <% } %> <%= objectBranch.inLoop %>;<% if (useHas) { %>\n }<% } } else { %> if (!(skipProto && index == 'prototype')<% if (useHas) { %> && <%= hasExp %><% } %>) {\n <%= objectBranch.inLoop %>;\n } <% } %>\n } <% if (hasDontEnumBug) { %>\n var ctor = <%= iteratedObject %>.constructor;\n <% for (var k = 0; k < 7; k++) { %>\n index = '<%= shadowed[k] %>';\n if (<% if (shadowed[k] == 'constructor') { %>!(ctor && ctor.prototype === <%= iteratedObject %>) && <% } %><%= hasExp %>) {\n <%= objectBranch.inLoop %>;\n }<% } } if (arrayBranch) { %>\n}<% }} %>\n<%= bottom %>;\nreturn result"),Q={args:"collection, callback, thisArg",init:"collection",top:"if (!callback) {\n callback = identity\n}\nelse if (thisArg) {\n callback = iteratorBind(callback, thisArg)\n}",inLoop:"callback(collection[index], index, collection)"},R={init:"true",inLoop:"if (!callback(collection[index], index, collection)) return !result"},S={args:"object",init:"object",top:"for (var source, sourceIndex = 1, length = arguments.length; sourceIndex < length; sourceIndex++) {\n source = arguments[sourceIndex];\n"+(d?" if (source) {":""),loopExp:"index in source",useHas:!1,inLoop:"object[index] = source[index]",bottom:(d?" }\n":"")+"}"},T={init:"[]",inLoop:"callback(collection[index], index, collection) && result.push(collection[index])"},U={top:"if (thisArg) callback = iteratorBind(callback, thisArg)"},V={inLoop:{object:Q.inLoop}},W={init:"",exit:"if (!collection) return []",beforeLoop:{array:"result = Array(length)",object:"result = []"},inLoop:{array:"result[index] = callback(collection[index], index, collection)",object:"result.push(callback(collection[index], index, collection))"}},bc=X({args:"object",exit:"if (!objectTypes[typeof object] || object === null) throw TypeError()",init:"[]",inLoop:"result.push(index)"}),bg=X(W,{args:"collection, callback",inLoop:{array:"result[index] = {\n criteria: callback(collection[index], index, collection),\n value: collection[index]\n}",object:"result.push({\n criteria: callback(collection[index], index, collection),\n value: collection[index]\n})"}}),bh=X({args:"collection, target",init:"false",inLoop:"if (collection[index] === target) return true"}),bi=X(Q,R),bj=X(Q,T),bk=X(Q,U,{init:"",inLoop:"if (callback(collection[index], index, collection)) return collection[index]"}),bl=X(Q,U),bm=X(Q,{init:"{}",top:"var prop, isFunc = typeof callback == 'function';\nif (isFunc && thisArg) callback = iteratorBind(callback, thisArg)",inLoop:"prop = isFunc\n ? callback(collection[index], index, collection)\n : collection[index][callback];\n(hasOwnProperty.call(result, prop) ? result[prop] : result[prop] = []).push(collection[index])"}),bn=X(W,{args:"collection, methodName",top:"var args = slice.call(arguments, 2),\n isFunc = typeof methodName == 'function'",inLoop:{array:"result[index] = (isFunc ? methodName : collection[index][methodName]).apply(collection[index], args)",object:"result.push((isFunc ? methodName : collection[index][methodName]).apply(collection[index], args))"}}),bo=X(Q,W),bp=X(W,{args:"collection, property",inLoop:{array:"result[index] = collection[index][property]",object:"result.push(collection[index][property])"}}),bq=X({args:"collection, callback, accumulator, thisArg",init:"accumulator",top:"var noaccum = arguments.length < 3;\nif (thisArg) callback = iteratorBind(callback, thisArg)",beforeLoop:{array:"if (noaccum) result = collection[++index]"},inLoop:{array:"result = callback(result, collection[index], index, collection)",object:"result = noaccum\n ? (noaccum = false, collection[index])\n : callback(result, collection[index], index, collection)"}}),bs=X(Q,T,{inLoop:"!"+T.inLoop}),bt=X(Q,R,{init:"false",inLoop:R.inLoop.replace("!","")}),ca=X(S,{inLoop:"if (object[index] == null)"+S.inLoop}),cb=X(S),cc=X(Q,U,V,{useHas:!1}),cd=X(Q,U,V),ce=X({args:"object",init:"[]",useHas:!1,inLoop:"if (toString.call(object[index]) == funcClass) result.push(index)",bottom:"result.sort()"}),cg=function(a){return G.call(a)=="[object Arguments]"};cg(arguments)||(cg=function(a){return!!a&&!!D.call(a,"callee")});var ch=I||function(a){return G.call(a)==t},cl=X({args:"value",init:"true",top:"var className = toString.call(value);\nif (className == arrayClass || className == stringClass) return !value.length",inLoop:{object:"return false"}}),cw=K?function(a){return typeof a=="function"?bc(a):K(a)}:bc,cz=X({args:"object",init:"[]",inLoop:"result.push(object[index])"});N.VERSION="0.3.2",N.after=bP,N.bind=bQ,N.bindAll=bR,N.chain=cI,N.clone=b_,N.compact=bw,N.compose=bS,N.contains=bh,N.debounce=bT,N.defaults=ca,N.defer=bV,N.delay=bU,N.difference=bx,N.escape=cA,N.every=bi,N.extend=cb,N.filter=bj,N.find=bk,N.first=by,N.flatten=bz,N.forEach=bl,N.forIn=cc,N.forOwn=cd,N.functions=ce,N.groupBy=bm,N.has=cf,N.identity=cB,N.indexOf=bA,N.initial=bB,N.intersection=bC,N.invoke=bn,N.isArguments=cg,N.isArray=ch,N.isBoolean=ci,N.isDate=cj,N.isElement=ck,N.isEmpty=cl,N.isEqual=cm,N.isFinite=cn,N.isFunction=co,N.isNaN=cq,N.isNull=cr,N.isNumber=cs,N.isObject=cp,N.isRegExp=ct,N.isString=cu,N.isUndefined=cv,N.keys=cw,N.last=bD,N.lastIndexOf=bE,N.map=bo,N.max=bF,N.memoize=bW,N.min=bG,N.mixin=cC,N.noConflict=cD,N.once=bX,N.partial=bY,N.pick=cx,N.pluck=bp,N.range=bH,N.reduce=bq,N.reduceRight=br,N.reject=bs,N.rest=bI,N.result=cE,N.shuffle=bJ,N.size=cy,N.some=bt,N.sortBy=bu,N.sortedIndex=bK,N.tap=cJ,N.template=cF,N.throttle=bZ,N.times=cG,N.toArray=bv,N.union=bL,N.uniq=bM,N.uniqueId=cH,N.values=cz,N.without=bN,N.wrap=b$,N.zip=bO,N.all=bi,N.any=bt,N.collect=bo,N.detect=bk,N.each=bl,N.foldl=bq,N.foldr=br,N.head=by,N.include=bh,N.inject=bq,N.methods=ce,N.select=bj,N.tail=bI,N.take=by,N.unique=bM,N._iteratorTemplate=P,N._shimKeys=bc,O.prototype=N.prototype,cC(N),O.prototype.chain=cK,O.prototype.value=cL,bl(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=A[a];O.prototype[a]=function(){var a=this._wrapped;return b.apply(a,arguments),a.length===0&&delete a[0],this._chain&&(a=new O(a),a._chain=!0),a}}),bl(["concat","join","slice"],function(a){var b=A[a];O.prototype[a]=function(){var a=this._wrapped,c=b.apply(a,arguments);return this._chain&&(c=new O(c),c._chain=!0),c}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(a._=N,define(function(){return N})):c?typeof module=="object"&&module&&module.exports==c?(module.exports=N)._=N:c._=N:a._=N}(this),function(){var a=this.math={};a.mean=a.ave=a.average=function(b,c){return a.sum(b,c)/_(b).size()},a.median=function(b){var c=(b.length+1)/2,d=a.sort(b);return d.length%2?d[c-1]:(d[c-1.5]+d[c-.5])/2},a.pow=function(a,b){if(_.isNumber(a))return Math.pow(a,b);if(_.isArray(a))return _.map(a,function(a){return _.pow(a,b)})},a.scale=function(a,b){var b=b||1,c=_.max(a);return _.map(a,function(a){return a*(b/c)})},a.slope=function(a,b){return(b[1]-a[1])/(b[0]-a[0])},a.sort=function(a){return a.sort(function(a,b){return a-b})},a.stdDeviation=a.sigma=function(a){return Math.sqrt(_(a).variance())},a.sum=function(a,b){if(_.isArray(a)&&typeof a[0]=="number")var c=a;else var b=b||"value",c=_(a).pluck(b);var d=0;for(var e=0,f=c.length;e<f;e++)d+=c[e];return d},a.transpose=function(a){var b=[];return _(a).each(function(a,c){_(a).each(function(a,d){b[d]||(b[d]=[]),b[d][c]=a})}),b},a.variance=function(a){var b=_(a).mean();return _(a).chain().map(function(a){return _(a-b).pow(2)}).mean().value()},_.mixin(a)}(),function(a){function p(a){var b=o[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var b={},c=Array.prototype,d=Object.prototype,e=d.hasOwnProperty,f=d.toString,g=c.forEach,h=c.slice,i=function(a,c,d){var f,h,i;if(!a)return;if(g&&a.forEach===g)a.forEach(c,d);else if(a.length===+a.length){for(h=0,i=a.length;h<i;h++)if(h in a&&c.call(d,a[h],h,a)===b)return}else for(f in a)if(e.call(a,f)&&c.call(d,a[f],f,a)===b)return},j=function(a){return!!(a&&a.constructor&&a.call&&a.apply)},k=function(a){return i(h.call(arguments,1),function(b){var c;for(c in b)b[c]!==void 0&&(a[c]=b[c])}),a},l={"[object Array]":"array","[object Function]":"function"},m=function(a){return a?l[f.call(a)]||"object":String(a)},n={},o={};n.Callbacks=function(a){a=a?o[a]||p(a):{};var b=[],c=[],d,e,f,g,h,i,j=function(c){var d,e,f,g,h;for(d=0,e=c.length;d<e;d++)f=c[d],g=m(f),g==="array"?j(f):g==="function"&&(!a.unique||!l.has(f))&&b.push(f)},k=function(j,k){k=k||[],d=!a.memory||[j,k],e=!0,f=!0,i=g||0,g=0,h=b.length;for(;b&&i<h;i++)if(b[i].apply(j,k)===!1&&a.stopOnFalse){d=!0;break}f=!1,b&&(a.once?d===!0?l.disable():b=[]:c&&c.length&&(d=c.shift(),l.fireWith(d[0],d[1])))},l={add:function(){if(b){var a=b.length;j(arguments),f?h=b.length:d&&d!==!0&&(g=a,k(d[0],d[1]))}return this},remove:function(){if(b){var c=arguments,d=0,e=c.length;for(;d<e;d++)for(var g=0;g<b.length;g++)if(c[d]===b[g]){f&&g<=h&&(h--,g<=i&&i--),b.splice(g--,1);if(a.unique)break}}return this},has:function(a){if(b){var c=0,d=b.length;for(;c<d;c++)if(a===b[c])return!0}return!1},empty:function(){return b=[],this},disable:function(){return b=c=d=undefined,this},disabled:function(){return!b},lock:function(){return c=undefined,(!d||d===!0)&&l.disable(),this},locked:function(){return!c},fireWith:function(b,e){return c&&(f?a.once||c.push([b,e]):(!a.once||!d)&&k(b,e)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!e}};return l},n.Deferred=function(a){var b=n.Callbacks("once memory"),c=n.Callbacks("once memory"),d=n.Callbacks("memory"),e="pending",f={resolve:b,reject:c,notify:d},g={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){return h.done(a).fail(b).progress(c),this},always:function(){return h.done.apply(h,arguments).fail.apply(h,arguments),this},pipe:function(a,b,c){return n.Deferred(function(d){i({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=a[0],e=a[1],f;j(c)?h[b](function(){f=c.apply(this,arguments),f&&j(f.promise)?f.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===h?d:this,[f])}):h[b](d[e])})}).promise()},promise:function(a){if(!a)a=g;else for(var b in g)a[b]=g[b];return a}},h=g.promise({}),k;for(k in f)h[k]=f[k].fire,h[k+"With"]=f[k].fireWith;return h.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(h,h),h},n.when=function(a){function l(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--f||i.resolveWith(i,b)}}function m(a){return function(b){e[a]=arguments.length>1?h.call(arguments,0):b,i.notifyWith(k,e)}}var b=h.call(arguments,0),c=0,d=b.length,e=new Array(d),f=d,g=d,i=d<=1&&a&&j(a.promise)?a:n.Deferred(),k=i.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&j(b[c].promise)?b[c].promise().then(l(c),i.reject,m(c)):--f;f||i.resolveWith(i,b)}else i!==a&&i.resolveWith(i,d?[a]:[]);return k},typeof module!="undefined"&&module.exports?module.exports=n:typeof a._!="undefined"?a._.mixin(n):a._=n}(this),function(a,_){var b=a.Miso={};b.typeOf=function(a,c){var d=_.keys(b.types),e;return d.push(d.splice(_.indexOf(d,"string"),1)[0]),d.push(d.splice(_.indexOf(d,"mixed"),1)[0]),e=_.find(d,function(d){return b.types[d].test(a,c)}),e=_.isUndefined(e)?"string":e,e},b.types={mixed:{name:"mixed",coerce:function(a){return a},test:function(a){return!0},compare:function(a,b){return a<b?-1:a>b?1:0},numeric:function(a){return _.isNaN(Number(a))?null:Number(a)}},string:{name:"string",coerce:function(a){return a==null?null:a.toString()},test:function(a){return a===null||typeof a=="undefined"||typeof a=="string"},compare:function(a,b){return a==null&&b!=null?-1:a!=null&&b==null?1:a<b?-1:a>b?1:0},numeric:function(a){return _.isNaN(+a)||a===null?null:_.isNumber(+a)?+a:null}},"boolean":{name:"boolean",regexp:/^(true|false)$/,coerce:function(a){return a==="false"?!1:Boolean(a)},test:function(a){return a===null||typeof a=="undefined"||typeof a=="boolean"||this.regexp.test(a)?!0:!1},compare:function(a,b){return a==null&&b!=null?-1:a!=null&&b==null?1:a==null&&b==null?0:a===b?0:a<b?-1:1},numeric:function(a){return _.isNaN(a)?null:a?1:0}},number:{name:"number",regexp:/^[\-\.]?[0-9]+([\.][0-9]+)?$/,coerce:function(a){return _.isNull(a)?null:_.isNaN(a)?null:+a},test:function(a){return a===null||typeof a=="undefined"||typeof a=="number"||this.regexp.test(a)?!0:!1},compare:function(a,b){return a==null&&b!=null?-1:a!=null&&b==null?1:a==null&&b==null?0:a===b?0:a<b?-1:1},numeric:function(a){return a}},time:{name:"time",format:"DD/MM/YYYY",_formatLookup:[["DD","\\d{2}"],["D","\\d{1}|\\d{2}"],["MM","\\d{2}"],["M","\\d{1}|\\d{2}"],["YYYY","\\d{4}"],["YY","\\d{2}"],["A","[AM|PM]"],["hh","\\d{2}"],["h","\\d{1}|\\d{2}"],["mm","\\d{2}"],["m","\\d{1}|\\d{2}"],["ss","\\d{2}"],["s","\\d{1}|\\d{2}"],["ZZ","[-|+]\\d{4}"],["Z","[-|+]\\d{2}:\\d{2}"]],_regexpTable:{},_regexp:function(a){if(this._regexpTable[a])return new RegExp(this._regexpTable[a],"g");var b=a;return _.each(this._formatLookup,function(a){b=b.replace(a[0],a[1])},this),b=b.split("/").join("\\/"),this._regexpTable[a]=b,new RegExp(this._regexpTable[a],"g")},coerce:function(a,b){b=b||{};if(_.isString(a)){var c=b.format||this.format;return moment(a,b.format)}return _.isNumber(a)?moment(a):a},test:function(a,b){b=b||{};if(a===null||typeof a=="undefined")return!0;if(_.isString(a)){var c=b.format||this.format,d=this._regexp(c);return d.test(a)}return!0},compare:function(a,b){return a<b?-1:a>b?1:0},numeric:function(a){return a.valueOf()}}}}(this,_),function(a,_){var b=a.Miso||(a.Miso={});b.Event=function(a){_.isArray(a)||(a=[a]),this.deltas=a},_.extend(b.Event.prototype,{affectedColumns:function(){var a=[];return _.each(this.deltas,function(b){b.old=b.old||[],b.changed=b.changed||[],a=_.chain(a).union(_.keys(b.old),_.keys(b.changed)).reject(function(a){return a==="_id"}).value()}),a}}),_.extend(b.Event,{isRemove:function(a){return _.isUndefined(a.changed)||_.keys(a.changed).length===0?!0:!1},isAdd:function(a){return _.isUndefined(a.old)||_.keys(a.old).length===0?!0:!1},isUpdate:function(a){return!this.isRemove(a)&&!this.isAdd(a)?!0:!1}}),b.Events={},b.Events.bind=function(a,b,c){var d=this._callbacks||(this._callbacks={}),e=d[a]||(d[a]={}),f=e.tail||(e.tail=e.next={});return f.callback=b,f.context=c,e.tail=f.next={},this},b.Events.unbind=function(a,b){var c,d,e;if(!a)this._callbacks=null;else if(c=this._callbacks)if(!b)c[a]={};else if(d=c[a])while((e=d)&&(d=d.next)){if(d.callback!==b)continue;e.next=d.next,d.context=d.callback=null;break}return this},b.Events.trigger=function(a){var b,c,d,e,f,g=["all",a];if(!(c=this._callbacks))return this;while(f=g.pop()){if(!(b=c[f]))continue;e=f==="all"?arguments:Array.prototype.slice.call(arguments,1);while(b=b.next)(d=b.callback)&&d.apply(b.context||this,e)}return this},b.Events._buildEvent=function(a){return new b.Event(a)}}(this,_),function(a,_){var b=a.Miso||{};b.Builder={detectColumnType:function(a,c){var d=_.inject(c.slice(0,5),function(a,c){var d=b.typeOf(c);return c!==""&&a.indexOf(d)===-1&&!_.isNull(c)&&a.push(d),a},[]);return d.length===1?a.type=d[0]:a.type="mixed",a},detectColumnTypes:function(a,c){_.each(c,function(c,d){var e=a.column(d);if(e.type){e.force=!0;return}b.Builder.detectColumnType(e,c)},this)},cacheRows:function(a){b.Builder.clearRowCache(a),_.each(a._columns[a._columnPositionByName._id].data,function(b,c){a._rowPositionById[b]=c,a._rowIdByPosition.push(b)},a);var c=_.uniq(_.map(a._columns,function(a){return a.data.length}));if(c.length>1)throw new Error("Row lengths need to be the same. Empty values should be set to null."+_.map(a._columns,function(a){return a.data+"|||"}));a.length=c[0]},clearRowCache:function(a){a._rowPositionById={},a._rowIdByPosition=[]},cacheColumns:function(a){a._columnPositionByName={},_.each(a._columns,function(b,c){a._columnPositionByName[b.name]=c})}},Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){for(var c=b||0,d=this.length;c<d;c++)if(this[c]===a)return c;return-1})}(this,_),function(a,_){var b=a.Miso;b.Column=function(a){return _.extend(this,a),this._id=a.id||_.uniqueId(),this.data=a.data||[],this},_.extend(b.Column.prototype,{toNumeric:function(a){return b.types[this.type].numeric(a)},numericAt:function(a){return this.toNumeric(this.data[a])},coerce:function(){this.data=_.map(this.data,function(a){return b.types[this.type].coerce(a,this)},this)},_sum:function(){return _.sum(this.data)},_mean:function(){var a=0;for(var c=0;c<this.data.length;c++)a+=this.numericAt(c);return a/=this.data.length,b.types[this.type].coerce(a,this)},_median:function(){return b.types[this.type].coerce(_.median(this.data),this)},_max:function(){var a=-Infinity;for(var c=0;c<this.data.length;c++)this.data[c]!==null&&b.types[this.type].compare(this.data[c],a)>0&&(a=this.numericAt(c));return b.types[this.type].coerce(a,this)},_min:function(){var a=Infinity;for(var c=0;c<this.data.length;c++)this.data[c]!==null&&b.types[this.type].compare(this.data[c],a)<0&&(a=this.numericAt(c));return b.types[this.type].coerce(a,this)}}),b.DataView=function(a){if(typeof a!="undefined"){a=a||(a={});if(_.isUndefined(a.parent))throw new Error("A view must have a parent specified.");this.parent=a.parent,this._initialize(a)}},_.extend(b.DataView.prototype,{_initialize:function(a){this.parent.syncable===!0&&(_.extend(this,b.Events),this.syncable=!0),this.filter={columns:this._columnFilter(a.filter.columns||undefined),rows:this._rowFilter(a.filter.rows||undefined)},this._columns=this._selectData(),b.Builder.cacheColumns(this),b.Builder.cacheRows(this),this.syncable&&this.parent.bind("change",this._sync,this)},_sync:function(a){var c=a.deltas,d=null;_.each(c,function(c,e){var f=this._rowPositionById[c._id];if(typeof f=="undefined"&&b.Event.isAdd(c))this.filter.rows&&this.filter.rows(c.changed)&&(this._add(c.changed),d="add");else{if(f==="undefined")return;_.each(c.changed,function(a,b){var c=this._columnPositionByName[b];if(_.isUndefined(c))return;this._columns[c].data[f]=a,d="update"},this)}var g=this.rowByPosition(f);if(b.Event.isRemove(c)||this.filter.row&&!this.filter.row(g)){var h={_id:c._id,old:this.rowByPosition(f),changed:{}};a.deltas.splice(e,1,h),this._remove(f),d="delete"}},this),this.syncable&&(this.trigger(d,a),this.trigger("change",a))},where:function(a,c){return c=c||{},c.filter=c.filter||{},_.isFunction(a)?c.filter.rows=a:c.filter=a,c.parent=this,new b.DataView(c)},_selectData:function(){var a=[];return _.each(this.parent._columns,function(c){this.filter.columns(c)&&a.push(new b.Column({name:c.name,data:[],type:c.type,_id:c._id}))},this),this.parent.each(function(b){if(!this.filter.rows(b))return;for(var c=0;c<a.length;c++)a[c].data.push(b[a[c].name])},this),a},_columnFilter:function(a){var b;return _.isUndefined(a)?b=function(){return!0}:(_.isString(a)&&(a=[a]),a.push("_id"),b=function(b){return _.indexOf(a,b.name)===-1?!1:!0}),b},_rowFilter:function(a){var b;return _.isNumber(a)&&(a=[a]),_.isUndefined(a)?b=function(){return!0}:_.isFunction(a)?b=a:b=function(b){return _.indexOf(a,b._id)===-1?!1:!0},b},column:function(a){return this._column(a)},_column:function(a){if(_.isUndefined(this._columnPositionByName))return undefined;var b=this._columnPositionByName[a];return this._columns[b]},columns:function(a){return new b.DataView({filter:{columns:a},parent:this})},columnNames:function(){var a=_.pluck(this._columns,"name");return _.reject(a,function(a){return a==="_id"||a==="_oids"})},hasColumn:function(a){return!_.isUndefined(this._columnPositionByName[a])},each:function(a,b){for(var c=0;c<this.length;c++)a.apply(b||this,[this.rowByPosition(c),c])},reverseEach:function(a,b){for(var c=this.length-1;c>=0;c--)a.apply(b||this,[this.rowByPosition(c),c])},eachColumn:function(a,b){var c=this.columnNames();for(var d=0;d<c.length;d++)a.apply(b||this,[c[d],this.column(c[d]),d])},rowByPosition:function(a){return this._row(a)},rowById:function(a){return this._row(this._rowPositionById[a])},_row:function(a){var b={};return _.each(this._columns,function(c){b[c.name]=c.data[a]}),b},_remove:function(a){var b=this._rowPositionById[a];return _.each(this._columns,function(a){a.data.splice(b,1)}),delete this._rowPositionById[a],this._rowIdByPosition.splice(b,1),this.length--,this},_add:function(a,c){_.each(a,function(c,d){var e=this.column(d);if(typeof e!="undefined"){var f=b.types[e.type];if(e.force||f.test(a[e.name],e))_.isUndefined(e.before)||(a[e.name]=e.before(a[e.name])),a[e.name]=f.coerce(a[e.name],e);else throw"incorrect value '"+a[e.name]+"' of type "+b.typeOf(a[e.name],e)+" passed to column with type "+e.type}},this);if(_.isUndefined(this.comparator))_.each(this._columns,function(b){b.data.push(!_.isUndefined(a[b.name])&&!_.isNull(a[b.name])?a[b.name]:null)}),this.length++,this._rowIdByPosition=this._rowIdByPosition||(this._rowIdByPosition=[]),this._rowPositionById=this._rowPositionById||(this._rowPositionById={}),this._rowIdByPosition.push(a._id),this._rowPositionById[a._id]=this._rowIdByPosition.length;else{var d=function(a,b,c){Array.prototype.splice.apply(c,[a,0].concat(b))},e;this.length++;for(e=0;e<this.length;e++){var f=this.rowByPosition(e);if(_.isUndefined(f._id)||this.comparator(a,f)<0){_.each(this._columns,function(b){d(e,a[b.name]?a[b.name]:null,b.data)});break}}this._rowIdByPosition=[],this._rowPositionById={},this.each(function(a,b){this._rowIdByPosition.push(a._id),this._rowPositionById[a._id]=b})}return this},rows:function(a){return new b.DataView({filter:{rows:a},parent:this})},sort:function(a){var b={};_.isFunction(a)?b.comparator=a:b=a||b,b.comparator&&(this.comparator=b.comparator);if(_.isUndefined(this.comparator))throw new Error("Cannot sort without this.comparator.");var c=this.length,d;if(c===1)return;var e=_.bind(function(a,b){var c=this.rowByPosition(b);_.each(c,function(c,d){var e=this._columnPositionByName[d],f=this._columns[e].data[a];this._columns[e].data.splice(a,1,c),this._columns[e].data.splice(b,1,f)},this)},this),f=_.bind(function(a,b){var c=a,d;while(c*2<=b){d=c*2;var f=this.rowByPosition(c);d+1<b&&this.comparator(this.rowByPosition(d),this.rowByPosition(d+1))<0&&d++;if(this.comparator(f,this.rowByPosition(d))<0)e(c,d),c=d;else return}},this),g=function(a){var b=Math.round((a-2)/2);while(b>=0)f(b,a-1),b--};if(c>2){g(c),d=c-1;while(d>1)e(d,0),d--,f(0,d)}else this.comparator(this.rowByPosition(0),this.rowByPosition(1))>0&&e(0,1);return this.comparator(this.rowByPosition(this.length-2),this.rowByPosition(this.length-1))>0&&e(this.length-1,this.length-2),this.syncable&&b.silent&&this.trigger("sort"),this},toJSON:function(){var a=[];for(var b=0;b<this.length;b++)a.push(this.rowByPosition(b));return a}})}(this,_),function(a,_){var b=a.Miso;b.Product=b.Product||function(a){a=a||{},this.func=a.func;if(a.columns){var b=a.columns;_.isArray(a.columns)&&(b=a.columns[0]),this.valuetype=b.type,this.numeric=function(){return b.toNumeric(this.value)}}return this.func({silent:!0}),this},_.extend(b.Product.prototype,b.Events,{val:function(){return this.value},type:function(){return this.valuetype},_sync:function(a){this.func()},_buildDelta:function(a,b){return{old:a,changed:b}}}),b.Product.define=function(a){return function(c,d){d=d||{};var e=this._findColumns(c),f=this;d.type=d.type||e[0].type,d.typeOptions=d.typeOptions||e[0].typeOptions;var g=function(){var c=a.call(f,e,d);return b.types[d.type].coerce(c,d.typeOptions)};if(this.syncable){var h=new b.Product({columns:e,func:function(a){a=a||{};var b=this._buildDelta(this.value,g.call(f));this.value=b.changed;if(f.syncable){var c=this._buildEvent(b);!_.isUndefined(b.old)&&!a.silent&&b.old!==b.changed&&this.trigger("change",c)}}});return this.bind("change",h._sync,h),h}return g.call(f)}},_.extend(b.DataView.prototype,{_findColumns:function(a){var b=[];return _.isUndefined(a)&&(a=this.columnNames()),a=_.isArray(a)?a:[a],_.each(a,function(a){a=this._columns[this._columnPositionByName[a]],b.push(a)},this),b},sum:b.Product.define(function(a,c){return _.each(a,function(a){if(a.type===b.types.time.name)throw new Error("Can't sum up time")}),_.sum(_.map(a,function(a){return a._sum()}))}),max:b.Product.define(function(a,b){return _.max(_.map(a,function(a){return a._max()}))}),min:b.Product.define(function(a,b){return _.min(_.map(a,function(a){return a._min()}))}),mean:b.Product.define(function(a,c){var d=[];_.each(a,function(a){d.push(a.data)}),d=_.flatten(d);var e=a[0].type;return d=_.map(d,function(a){return b.types[e].numeric(a)}),_.mean(d)})})}(this,_),function(a,_,moment){var b=a.Miso;b.Dataset=function(a){this.length=0,this._columns=[],this._columnPositionByName={},typeof a!="undefined"&&(a=a||{},this._initialize(a))},b.Dataset.prototype=new b.DataView,_.extend(b.Dataset.prototype,{_initialize:function(a){a.sync===!0&&(_.extend(this,b.Events),this.syncable=!0),this.importer=a.importer||null,this.parser=a.parser||b.Parsers.Obj,_.isUndefined(a.parser)&&(a.strict?this.parser=b.Parsers.Strict:a.delimiter&&(this.parser=b.Parsers.Delimited)),this.importer===null&&(a.url?a.interval?(this.importer=b.Importers.Polling,this.interval=a.interval):this.importer=b.Importers.Remote:this.importer=b.Importers.Local),this.parser=new this.parser(a),this.parser instanceof b.Parsers.Delimited&&(a.dataType="text"),this.importer=new this.importer(a),a.comparator&&(this.comparator=a.comparator),a.ready&&(this.ready=a.ready),a.resetOnFetch&&(this.resetOnFetch=a.resetOnFetch),a.uniqueAgainst&&(this.uniqueAgainst=a.uniqueAgainst),_.isUndefined(a.data)&&_.isUndefined(a.url)&&this._addIdColumn(),a.deferred?this.deferred=a.deferred:this.deferred=new _.Deferred,a.columns&&this.addColumns(a.columns)},fetch:function(a){a=a||{};var b=this.deferred;if(_.isNull(this.importer))throw"No importer defined";return this.importer.fetch({success:_.bind(function(c){try{this._apply(c)}catch(d){if(a.error)a.error.call(this,d);else throw d}this.comparator&&this.sort(),this.ready&&this.ready.call(this),a.success&&a.success.call(this),b.resolveWith(this,[this])},this),error:_.bind(function(c){a.error&&a.error.call(this,c),b.reject(c)},this)}),b.promise()},_applications:{againstColumn:function(a){var b=[],c=_.keys(a),d,e=this.column(this.uniqueAgainst),f=a[this._columns[1].name].length,g=_.max(_.map(c,function(b){return a[b].length},this)),h=[],i;for(i=0;i<f;i++){var j=a[this.uniqueAgainst][i];e.data.indexOf(j)!==-1&&h.push(i)}h.sort().reverse();for(i=0;i<g;i++)if(h.indexOf(i)===-1){d={};for(var k=0;k<c.length;k++)d[c[k]]=a[c[k]][i];b.push(d)}this.add(b)},blind:function(a){var b,c,d=[],e,f=_.keys(a),g=_.max(_.map(f,function(b){return a[b].length},this));for(var h=0;h<g;h++){e={};for(var i=0;i<f.length;i++)e[f[i]]=a[f[i]][h];d.push(e)}this.add(d)}},_apply:function(a){var c=this.parser.parse(a);if(!this.fetched)this._addIdColumn(),this.addColumns(_.map(c.columns,function(a){return{name:a}})),b.Builder.detectColumnTypes(this,c.data),this._applications.blind.call(this,c.data),this.fetched=!0;else if(this.resetOnFetch)this.reset(),this._applications.blind.call(this,c.data);else if(this.uniqueAgainst){if(!this.hasColumn(this.uniqueAgainst))throw new Error("You requested a unique add against a column that doesn't exist.");this._applications.againstColumn.call(this,c.data)}else this._applications.blind.call(this,c.data);b.Builder.cacheRows(this)},addColumns:function(a){_.each(a,function(a){this.addColumn(a)},this)},addColumn:function(a){return _.isUndefined(this.column(a.name))?(a=new b.Column(a),this._columns.push(a),this._columnPositionByName[a.name]=this._columns.length-1,a):!1},_addIdColumn:function(a){if(!_.isUndefined(this.column("_id")))return;var b=[];a&&a>0&&_.times(a,function(){b.push(_.uniqueId())}),this.addColumn({name:"_id",type:"number",data:b});if(this._columnPositionByName._id!==0){var c=this._columns[this._columnPositionByName._id],d=this._columnPositionByName._id;this._columns.splice(d,1),this._columns.unshift(c),this._columnPositionByName._id=0,_.each(this._columnPositionByName,function(a,b){b!=="_id"&&this._columnPositionByName[b]<d&&this._columnPositionByName[b]++},this)}},add:function(a,b){b=b||{},_.isArray(a)||(a=[a]);var c=[];_.each(a,function(a){a._id||(a._id=_.uniqueId()),this._add(a,b),this.syncable&&!b.silent&&c.push({changed:a})},this);if(this.syncable&&!b.silent){var d=this._buildEvent(c);this.trigger("add",d),this.trigger("change",d)}return this},remove:function(a,b){a=this._rowFilter(a);var c=[],d=[];this.each(function(b,e){a(b)&&(d.push(b._id),c.push({old:b}))}),_.each(d,function(a){this._remove(a)},this);if(this.syncable&&(!b||!b.silent)){var e=this._buildEvent(c);this.trigger("remove",e),this.trigger("change",e)}},update:function(a,c,d){var e,f=[],g=_.bind(function(a,d){var g,h;_.isFunction(c)?h=c.apply(this,[a]):h=c,e=_.keys(h),_.each(e,function(a){g=this.column(a);var c=b.types[g.type];if(c)if(c.test(h[g.name],g))_.isUndefined(g.before)||(h[g.name]=g.before(h[g.name])),h[g.name]=c.coerce(h[g.name],g);else throw"incorrect value '"+h[g.name]+"' of type "+b.typeOf(h[g.name],g)+" passed to column with type "+g.type;g.data[d]=h[g.name]},this),f.push({_id:a._id,old:a,changed:h})},this);_.isString(a)&&(a=[a]);if(_.isArray(a)){var h,i;_.each(a,function(a){h=this.rowById(a),i=this._rowPositionById[a],g(h,i)})}else a=this._rowFilter(a),this.each(function(b,c){a(b)&&g(b,c)},this);if(this.syncable&&(!d||!d.silent)){var j=this._buildEvent(f);this.trigger("update",j),this.trigger("change",j)}return this},reset:function(a){_.each(this._columns,function(a){a.data=[]}),this.length=0,this.syncable&&(!a||!a.silent)&&this.trigger("reset")}})}(this,_,moment),function(a,_){var b=a.Miso||(a.Miso={});b.Derived=function(a){a=a||{},b.Dataset.call(this),this.parent=a.parent,this.method=a.method,this._addIdColumn(),this.addColumn({name:"_oids",type:"mixed"}),this.parent.syncable&&(_.extend(this,b.Events),this.syncable=!0,this.parent.bind("change",this._sync,this))},b.Derived.prototype=new b.Dataset,_.extend(b.Derived.prototype,{_sync:function(a){this.func.call(this.args),this.trigger("change")}}),_.extend(b.DataView.prototype,{movingAverage:function(a,c,d){d=d||{};var e=new b.Derived({parent:this,method:d.method||_.mean,size:c,args:arguments});this.eachColumn(function(a){e.addColumn({name:a,type:this.column(a).type,data:[]})},this),b.Builder.cacheColumns(e);var f=function(){var d=[];typeof a=="string"&&(a=[a]),this.column("_id").data=this.parent.column("_id").data.slice(c-1,this.parent.length),this.eachColumn(function(b,d,e){a.indexOf(b)===-1&&b!=="_oids"?d.data=this.parent.column(b).data.slice(c-1,this.parent.length):d.data=_.movingAvg(this.parent.column(b).data,c,this.method)},this),this.length=this.parent.length-c+1;var e=this.column("_oids");e.data=[];for(var f=0;f<this.length;f++)e.data.push(this.parent.column("_id").data.slice(f,f+c));return b.Builder.cacheRows(this),this};return e.func=_.bind(f,e),e.func.call(e.args)},countBy:function(a,c){function j(a,c,d){var e;for(e=0;e<a.length;e++)if(b.types[d].compare(a[e],c)===0)return e;return-1}c=c||{};var d=new b.Derived({parent:this,method:_.sum,args:arguments}),e=this.column(a);d.addColumn({name:a,type:e.type}),d.addColumn({name:"count",type:"number"}),d.addColumn({name:"_oids",type:"mixed"}),b.Builder.cacheColumns(d);var f=d._column(a).data,g=d._column("count").data,h=d._column("_oids").data,i=d._column("_id").data;return this.each(function(b){var c=j(f,b[a],e.type);c===-1?(f.push(b[a]),i.push(_.uniqueId()),g.push(1),h.push([b._id])):(g[c]+=1,h[c].push(b._id))}),b.Builder.cacheRows(d),d},groupBy:function(a,c,d){d=d||{};var e=new b.Derived({parent:this,method:d.method||_.sum,args:arguments});d&&d.preprocess&&(e.preprocess=d.preprocess);var f=_.union([a],c);_.each(f,function(a){this.addColumn({name:a,type:this.parent.column(a).type})},e),b.Builder.cacheColumns(e);var g=function(){b.Builder.clearRowCache(this);var d={},e=0,f=this._columnPositionByName[a],g=this.parent.column(a);for(var h=0;h<this.parent.length;h++){var i=null;this.preprocess?i=this.preprocess(g.data[h]):i=g.data[h],_.isUndefined(d[i])&&(d[i]=e,_.each(c,function(a){var b=this.column(a),c=this.column("_id");b.data[e]=[],c.data[e]=_.uniqueId()},this),this.column(a).data[e]=i,e++),_.each(c,function(a){var b=this.column(a),c=this.parent.column(a).data[h],e=d[i];b.data[e].push(this.parent.rowByPosition(h))},this)}var j=this._columns[this._columnPositionByName._oids];return j.data=[],_.each(c,function(a){var b=this.column(a);_.each(b.data,function(c,d){_.isArray(c)&&(j.data[d]=j.data[d]||[],j.data[d].push(_.map(c,function(a){return a._id})),j.data[d]=_.flatten(j.data[d]),b.data[d]=this.method(_.map(c,function(b){return b[a]})),this.length++)},this)},this),b.Builder.cacheRows(this),this};return e.func=_.bind(g,e),e.func.call(e.args)}})}(this,_),function(a,_){var b=a.Miso||(a.Miso={});b.Importers=function(a,b){},b.Importers.prototype.extract=function(a){return a=_.clone(a),a}}(this,_),function(a,_){var b=a.Miso||(a.Miso={});b.Importers.Local=function(a){a=a||{},this.data=a.data||null,this.extract=a.extract||this.extract},_.extend(b.Importers.Local.prototype,b.Importers.prototype,{fetch:function(a){var b=a.data?a.data:this.data;a.success(this.extract(b))}})}(this,_),function(a,_){var b=a.Miso||(a.Miso={});b.Importers.Remote=function(a){a=a||{},this._url=a.url,this.extract=a.extract||this.extract,this.params={type:"GET",url:_.isFunction(this._url)?_.bind(this._url,this):this._url,dataType:a.dataType?a.dataType:a.jsonp?"jsonp":"json",callback:a.callback}},_.extend(b.Importers.Remote.prototype,b.Importers.prototype,{fetch:function(a){var c=_.bind(function(b){a.success(this.extract(b))},this);this.callback&&(window[this.callback]=c),b.Xhr(_.extend(this.params,{success:this.callback?this.callback:c,error:a.error}))}});var c={url:"",data:"",dataType:"",success:function(){},type:"GET",async:!0,xhr:function(){return new a.XMLHttpRequest}},d=/\?/;b.Xhr=function(a){a.dataType=a.dataType&&a.dataType.toLowerCase()||null;var e=_.isFunction(a.url)?a.url():a.url;if(!(!a.dataType||a.dataType!=="jsonp"&&a.dataType!=="script")){b.Xhr.getJSONP(e,a.success,a.dataType==="script",a.error,a.callback);return}var f=_.extend({},c,a,{url:e});f.ajax=f.xhr();if(f.ajax)return f.type==="GET"&&f.data&&(f.url+=(d.test(f.url)?"&":"?")+f.data,f.data=null),f.ajax.open(f.type,f.url,f.async),f.ajax.send(f.data||null),b.Xhr.httpData(f)},b.Xhr.getJSONP=function(a,b,c,d,e){if(c){var f=document.querySelectorAll('script[src="'+a+'"]');if(f.length){b&&b(!0);return}}var g=document.head||document.getElementsByTagName("head")[0]||document.documentElement,h=document.createElement("script"),i=a.split("?")[1],j=!1,k=[],l;i&&!c&&(k=i.split("&")),k.length&&(l=k[k.length-1].split("="));if(!e){var m=_.uniqueId("callback");e=k.length?l[1]?l[1]:m:m}!i&&!c&&(a+="?");if(!i||!/callback/.test(i))i&&(a+="&"),a+="callback="+e;e&&!c&&(!window[e]||(e=e+ +(new Date)+_.uniqueId()),window[e]=function(a){b&&b(a),j=!0},l&&(a=a.replace(l.join("="),l[0]+"="+e))),h.onload=h.onreadystatechange=function(){if(!h.readyState||/loaded|complete/.test(h.readyState)){c&&b&&b();if(j){try{delete window[e]}catch(a){window[e]=void 0}g.removeChild(h)}}},h.onerror=function(a){d&&d.call(null,a)},h.src=a,g.insertBefore(h,g.firstChild);return},b.Xhr.httpData=function(a){var b,c=null;return a.ajax.onreadystatechange=function(){if(a.ajax.readyState===4){try{c=JSON.parse(a.ajax.responseText)}catch(d){}b={xml:a.ajax.responseXML,text:a.ajax.responseText,json:c},a.dataType&&(b=b[a.dataType]),/(2..)/.test(a.ajax.status)?a.success.call(a.ajax,b):a.error&&a.error.call(null,a.ajax.statusText)}},b}}(this,_),function(a,_){var b=a.Miso||(a.Miso={});b.Importers.Polling=function(a){a=a||{},this.interval=a.interval||1e3,this._def=null,b.Importers.Remote.apply(this,[a])},_.extend(b.Importers.Polling.prototype,b.Importers.Remote.prototype,{fetch:function(c){this._def===null&&(this._def=_.Deferred(),this.success_callback=_.bind(function(a){c.success(this.extract(a)),this._def.resolve(this)},this),this.error_callback=_.bind(function(a){c.error(a),this._def.reject(a)},this)),_.when(this._def.promise()).then(function(a){var b=_.bind(function(){this.fetch({success:this.success_callback,error:this.error_callback})},a);a._timeout=setTimeout(b,a.interval),a._def=_.Deferred()}),b.Xhr(_.extend(this.params,{success:this.success_callback,error:this.error_callback})),a.imp=this},stop:function(){this._def!==null&&this._def.reject(),typeof this._timeout!="undefined"&&clearTimeout(this._timeout)},start:function(){this._def!==null&&(this._def=_.Deferred(),this.fetch())}})}(this,_),function(a,_){var b=a.Miso||(a.Miso={});b.Importers.GoogleSpreadsheet=function(a){a=a||{};if(a.url)a.url=a.url;else{if(_.isUndefined(a.key))throw new Error("Set options 'key' properties to point to your google document.");a.fast?(a.url="https://spreadsheets.google.com/tq?key="+a.key,typeof a.sheetName=="undefined"&&(a.sheetName="Sheet1"),a.url+="&sheet="+a.sheetName,this.callback="misodsgs"+(new Date).getTime(),a.url+="&tqx=version:0.6;responseHandler:"+this.callback,a.url+=";reqId:0;out:json&tq&_=1335871249558#",delete a.sheetName):a.url="https://spreadsheets.google.com/feeds/cells/"+a.key+"/"+a.worksheet+"/public/basic?alt=json-in-script&callback=",delete a.key}return this.params={type:"GET",url:a.url,dataType:"jsonp"},this},_.extend(b.Importers.GoogleSpreadsheet.prototype,b.Importers.Remote.prototype)}(this,_),function(a,_){var b=a.Miso||(a.Miso={});b.Parsers=function(a){this.options=a||{}},_.extend(b.Parsers.prototype,{parse:function(){}})}(this,_),function(a,_){var b=a.Miso||(a.Miso={});b.Parsers.Strict=function(a){this.options=a||{}},_.extend(b.Parsers.Strict.prototype,b.Parsers.prototype,{parse:function(a){var b={},c=[];return _.each(a.columns,function(a){if(c.indexOf(a.name)!==-1)throw new Error('You have more than one column named "'+a.name+'"');c.push(a.name),b[a.name]=a.data}),{columns:c,data:b}}})}(this,_),function(a,_){var b=a.Miso||(a.Miso={});b.Parsers.Obj=b.Parsers,_.extend(b.Parsers.Obj.prototype,b.Parsers.prototype,{parse:function(a){var b=_.keys(a[0]),c={};return _.each(b,function(a){c[a]=[]}),_.each(b,function(b){_.times(a.length,function(d){c[b].push(a[d][b])})}),{columns:b,data:c}}})}(this,_),function(a,_){var b=a.Miso||(a.Miso={});b.Parsers.GoogleSpreadsheet=function(a){this.fast=a.fast||!1},_.extend(b.Parsers.GoogleSpreadsheet.prototype,b.Parsers.prototype,{parse:function(a){var b=[],c=[],d={},e;if(typeof a.status!="undefined"&&a.status==="error")throw new Error("You can't use the fast importer for this url. Disable the fast flag");if(this.fast){b=_.pluck(a.table.cols,"label");if(_.unique(b).length<b.length){var f="";throw _.inject(b,function(a,b){return a[b]=a[b]+1||1,a[b]>1&&(f=b),a},{}),new Error('You have more than one column named "'+f+'"')}_.each(a.table.rows,function(a){a=a.c;for(e=0;e<a.length;e++)c[e]=c[e]||[],a[e].v===""?c[e].push(null):c[e].push(a[e].v)}),_.each(b,function(a,b){d[a]=c[b]})}else{var g=/([A-Z]+)(\d+)/,h={};_.each(a.feed.entry,function(a,d){var e=g.exec(a.title.$t),f=e[1],i=parseInt(e[2],10);if(i===1){if(b.indexOf(a.content.$t)!==-1)throw new Error('You have more than one column named "'+a.content.$t+'"');h[f]=c.length,b[h[f]]=a.content.$t,c[h[f]]=[]}else{var j=h[f];c[j][i-1]=a.content.$t}},this),_.each(c,function(a,e){a.length=_.max(_.pluck(c,"length")),a.splice(0,1);for(var f=0;f<a.length;f++)if(_.isUndefined(a[f])||a[f]==="")a[f]=null;d[b[e]]=a})}return{columns:b,data:d}}})}(this,_),function(a,_){var b=a.Miso||(a.Miso={});b.Parsers.Delimited=function(a){a=a||{},this.delimiter=a.delimiter||",",this.skipRows=a.skipRows||0,this.emptyValue=a.emptyValue||null,this.__delimiterPatterns=new RegExp("(\\"+this.delimiter+"|\\r?\\n|\\r|^)"+'(?:"([^"]*(?:""[^"]*)*)"|'+'([^"\\'+this.delimiter+"\\r\\n]*))","gi")},typeof String.prototype.trim!="function"&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),_.extend(b.Parsers.Delimited.prototype,b.Parsers.prototype,{parse:function(a){var b=[],c={},d={},e=function(a){d[a]||(d[a]=0);var b=a+d[a];return d[a]+=1,b},f=function(a,d,f,g,h){f=f||",";var i=null,j=0,k=!1,l=-1,m=0;try{d=d.replace(/\s+$/,"").replace(/^[\r|\n|\s]+[\r|\n]/,"\n");if(g>0){var n=0,o=0,p=d.length;while(n<g&&o<p)/\n|\r|\r\n/.test(d.charAt(o))&&n++,o++;d=d.slice(o,p)}function q(a){var d=a[1];if(d.length&&d!==f){m++;if(l<j-1)throw m--,new Error("Not enough items in row");k=!0,l=0}else k||j++,l++;var g=null;a[2]?g=a[2].replace(new RegExp('""',"g"),'"'):g=a[3];if(k){g===""&&(g=h);if(typeof c[b[l]]=="undefined")throw new Error("Too many items in row");c[b[l]].push(g)}else{var i=function(a){var c=e(a);while(b.indexOf(c)!==-1)c=e(a);return c};if(_.isUndefined(g)||g==="")g="X";b.indexOf(g)!==-1&&(g=i(g)),b.push(g),c[g]=[]}}(new RegExp("^"+f)).test(d)&&q(["","",undefined,""]);while(i=a.exec(d))q(i)}catch(r){throw new Error("Error while parsing delimited data on row "+m+". Message: "+r.message)}return{columns:b,data:c}};return f(this.__delimiterPatterns,a,this.delimiter,this.skipRows,this.emptyValue)}})}(this,_)
View
3,461 libs/miso.ds.js
@@ -0,0 +1,3461 @@
+/**
+* Miso.Dataset - v0.2.2 - 9/27/2012
+* http://github.com/misoproject/dataset
+* Copyright (c) 2012 Alex Graul, Irene Ros;
+* Dual Licensed: MIT, GPL
+* https://github.com/misoproject/dataset/blob/master/LICENSE-MIT
+* https://github.com/misoproject/dataset/blob/master/LICENSE-GPL
+*/
+
+(function(global, _, moment) {
+
+ global.Miso = global.Miso || {};
+
+ /**
+ * Instantiates a new dataset.
+ * Parameters:
+ * options - optional parameters.
+ * data : "Object - an actual javascript object that already contains the data",
+ * url : "String - url to fetch data from",
+ * sync : Set to true to be able to bind to dataset changes. False by default.
+ * jsonp : "boolean - true if this is a jsonp request",
+ * delimiter : "String - a delimiter string that is used in a tabular datafile",
+ * strict : "Whether to expect the json in our format or whether to interpret as raw array of objects, default false",
+ * extract : "function to apply to JSON before internal interpretation, optional"
+ * ready : the callback function to act on once the data is fetched. Isn't reuired for local imports
+ * but is required for remote url fetching.
+ * columns: A way to manually override column type detection. Expects an array of
+ * objects of the following structure:
+ * { name : 'columnname', type: 'columntype',
+ * ... (additional params required for type here.) }
+ * comparator : function (optional) - takes two rows and returns 1, 0, or -1 if row1 is
+ * before, equal or after row2.
+ * deferred : by default we use underscore.deferred, but if you want to pass your own (like jquery's) just
+ * pass it here.
+ * importer : The classname of any importer (passes through auto detection based on parameters.
+ * For example: <code>Miso.Importers.Polling</code>.
+ * parser : The classname of any parser (passes through auto detection based on parameters.
+ * For example: <code>Miso.Parsers.Delimited</code>.
+ * resetOnFetch : set to true if any subsequent fetches after first one should overwrite the
+ * current data.
+ * uniqueAgainst : Set to a column name to check for duplication on subsequent fetches.
+ * interval : Polling interval. Set to any value in milliseconds to enable polling on a url.
+ }
+ */
+ global.Miso.Dataset = function(options) {
+ this.length = 0;
+
+ this._columns = [];
+ this._columnPositionByName = {};
+ this._computedColumns = [];
+
+ if (typeof options !== "undefined") {
+ options = options || {};
+ this._initialize(options);
+ }
+ };
+}(this, _, moment));
+
+(function(global, _) {
+
+ var Dataset = global.Miso.Dataset;
+
+ /**
+ * A single column in a dataset
+ * Parameters:
+ * options
+ * name
+ * type (from Miso.types)
+ * data (optional)
+ * before (a pre coercion formatter)
+ * format (for time type.)
+ * any additional arguments here..
+ * Returns:
+ * new Miso.Column
+ */
+ Dataset.Column = function(options) {
+ _.extend(this, options);
+ this._id = options.id || _.uniqueId();
+ this.data = options.data || [];
+ return this;
+ };
+
+ _.extend(Dataset.Column.prototype, {
+
+ /**
+ * Converts any value to this column's type for a given position
+ * in some source array.
+ * Parameters:
+ * value
+ * Returns:
+ * number
+ */
+ toNumeric : function(value) {
+ return Dataset.types[this.type].numeric(value);
+ },
+
+ /**
+ * Returns the numeric representation of a datum at any index in this
+ * column.
+ * Parameters:
+ * index - position in data array
+ * Returns
+ * number
+ */
+ numericAt : function(index) {
+ return this.toNumeric(this.data[index]);
+ },
+
+ /**
+ * Coerces the entire column's data to the column type.
+ */
+ coerce : function() {
+ this.data = _.map(this.data, function(datum) {
+ return Dataset.types[this.type].coerce(datum, this);
+ }, this);
+ },
+
+ /**
+ * If this is a computed column, it calculates the value
+ * for this column and adds it to the data.
+ * Parameters:
+ * row - the row from which column is computed.
+ * i - Optional. the index at which this value will get added.
+ * Returns
+ * val - the computed value
+ */
+ compute : function(row, i) {
+ if (this.func) {
+ var val = this.func(row);
+ if (typeof i !== "undefined") {
+ this.data[i] = val;
+ } else {
+ this.data.push(val);
+ }
+
+ return val;
+ }
+ },
+
+ /**
+ * returns true if this is a computed column. False otherwise.
+ */
+ isComputed : function() {
+ return !_.isUndefined(this.func);
+ },
+
+ _sum : function() {
+ return _.sum(this.data);
+ },
+
+ _mean : function() {
+ var m = 0;
+ for (var j = 0; j < this.data.length; j++) {
+ m += this.numericAt(j);
+ }
+ m /= this.data.length;
+ return Dataset.types[this.type].coerce(m, this);
+ },
+
+ _median : function() {
+ return Dataset.types[this.type].coerce(_.median(this.data), this);
+ },
+
+ _max : function() {
+ var max = -Infinity;
+ for (var j = 0; j < this.data.length; j++) {
+ if (this.data[j] !== null) {
+ if (Dataset.types[this.type].compare(this.data[j], max) > 0) {
+ max = this.numericAt(j);
+ }
+ }
+ }
+
+ return Dataset.types[this.type].coerce(max, this);
+ },
+
+ _min : function() {
+ var min = Infinity;
+ for (var j = 0; j < this.data.length; j++) {
+ if (this.data[j] !== null) {
+ if (Dataset.types[this.type].compare(this.data[j], min) < 0) {
+ min = this.numericAt(j);
+ }
+ }
+ }
+ return Dataset.types[this.type].coerce(min, this);
+ }
+ });
+
+ /**
+ * Creates a new view.
+ * Parameters
+ * options - initialization parameters:
+ * parent : parent dataset
+ * filter : filter specification TODO: document better
+ * columns : column name or multiple names
+ * rows : rowId or function
+ * Returns
+ * new Miso.Dataview.
+ */
+ Dataset.DataView = function(options) {
+ if (typeof options !== "undefined") {
+ options = options || (options = {});
+
+ if (_.isUndefined(options.parent)) {
+ throw new Error("A view must have a parent specified.");
+ }
+ this.parent = options.parent;
+ this._initialize(options);
+ }
+ };
+
+ _.extend(Dataset.DataView.prototype, {
+
+ _initialize: function(options) {
+
+ // is this a syncable dataset? if so, pull
+ // required methoMiso and mark this as a syncable dataset.
+ if (this.parent.syncable === true) {
+ _.extend(this, Dataset.Events);
+ this.syncable = true;
+ }
+
+ this.idAttribute = this.parent.idAttribute;
+
+ // save filter
+ this.filter = { };
+ this.filter.columns = _.bind(this._columnFilter(options.filter.columns || undefined), this);
+ this.filter.rows = _.bind(this._rowFilter(options.filter.rows || undefined), this);
+
+ // initialize columns.
+ this._columns = this._selectData();
+
+ Dataset.Builder.cacheColumns(this);
+ Dataset.Builder.cacheRows(this);
+
+ // bind to parent if syncable
+ if (this.syncable) {
+ this.parent.bind("change", this._sync, this);
+ }
+ },
+
+ // Syncs up the current view based on a passed delta.
+ _sync : function(event) {
+ var deltas = event.deltas, eventType = null;
+
+ // iterate over deltas and update rows that are affected.
+ _.each(deltas, function(d, deltaIndex) {
+
+ // find row position based on delta _id
+ var rowPos = this._rowPositionById[d[this.idAttribute]];
+
+ // ===== ADD NEW ROW
+
+ if (typeof rowPos === "undefined" && Dataset.Event.isAdd(d)) {
+ // this is an add event, since we couldn't find an
+ // existing row to update and now need to just add a new
+ // one. Use the delta's changed properties as the new row
+ // if it passes the filter.
+ if (this.filter.rows && this.filter.rows(d.changed)) {
+ this._add(d.changed);
+ eventType = "add";
+ }
+ } else {
+
+ //===== UPDATE EXISTING ROW
+ if (rowPos === "undefined") { return; }
+
+ // iterate over each changed property and update the value
+ _.each(d.changed, function(newValue, columnName) {
+
+ // find col position based on column name
+ var colPos = this._columnPositionByName[columnName];
+ if (_.isUndefined(colPos)) { return; }
+ this._columns[colPos].data[rowPos] = newValue;
+
+ eventType = "update";
+ }, this);
+ }
+
+
+ // ====== DELETE ROW (either by event or by filter.)
+ // TODO check if the row still passes filter, if not
+ // delete it.
+ var row = this.rowByPosition(rowPos);
+
+ // if this is a delete event OR the row no longer
+ // passes the filter, remove it.
+ if (Dataset.Event.isRemove(d) ||
+ (this.filter.row && !this.filter.row(row))) {
+
+ // Since this is now a delete event, we need to convert it
+ // to such so that any child views, know how to interpet it.
+
+ var newDelta = {
+ old : this.rowByPosition(rowPos),
+ changed : {}
+ };
+ newDelta[this.idAttribute] = d[this.idAttribute];
+
+ // replace the old delta with this delta
+ event.deltas.splice(deltaIndex, 1, newDelta);
+
+ // remove row since it doesn't match the filter.
+ this._remove(rowPos);
+ eventType = "delete";
+ }
+
+ }, this);
+
+ // trigger any subscribers
+ if (this.syncable) {
+ this.trigger(eventType, event);
+ this.trigger("change", event);
+ }
+ },
+
+ /**
+ * Returns a dataset view based on the filtration parameters
+ * Parameters:
+ * filter - object with optional columns array and filter object/function
+ * options - Options.
+ * Returns:
+ * new Miso.Dataset.DataView
+ */
+ where : function(filter, options) {
+ options = options || {};
+ options.filter = options.filter || {};
+ if ( _.isFunction(filter) ) {
+ options.filter.rows = filter;
+ } else {
+ options.filter = filter;
+ }
+
+ options.parent = this;
+
+ return new Dataset.DataView(options);
+ },
+
+ _selectData : function() {
+ var selectedColumns = [];
+
+ _.each(this.parent._columns, function(parentColumn) {
+
+ // check if this column passes the column filter
+ if (this.filter.columns(parentColumn)) {
+ selectedColumns.push(new Dataset.Column({
+ name : parentColumn.name,
+ data : [],
+ type : parentColumn.type,
+ _id : parentColumn._id
+ }));
+ }
+
+ }, this);
+
+ // get the data that passes the row filter.
+ this.parent.each(function(row) {
+
+ if (!this.filter.rows(row)) {
+ return;
+ }
+
+ for(var i = 0; i < selectedColumns.length; i++) {
+ selectedColumns[i].data.push(row[selectedColumns[i].name]);
+ }
+ }, this);
+
+ return selectedColumns;
+ },
+
+ /**
+ * Returns a normalized version of the column filter function
+ * that can be executed.
+ * Parameters:
+ * columnFilter - function or column name
+ */
+ _columnFilter: function(columnFilter) {
+ var columnSelector;
+
+ // if no column filter is specified, then just
+ // return a passthrough function that will allow
+ // any column through.
+ if (_.isUndefined(columnFilter)) {
+ columnSelector = function() {
+ return true;
+ };
+ } else { //array
+ if (_.isString(columnFilter) ) {
+ columnFilter = [ columnFilter ];
+ }
+ columnFilter.push(this.idAttribute);
+ columnSelector = function(column) {
+ return _.indexOf(columnFilter, column.name) === -1 ? false : true;
+ };
+ }
+
+ return columnSelector;
+ },
+
+ /**
+ * Returns a normalized row filter function
+ * that can be executed
+ */
+ _rowFilter: function(rowFilter) {
+
+ var rowSelector;
+
+ //support for a single ID;
+ if (_.isNumber(rowFilter)) {
+ rowFilter = [rowFilter];
+ }
+
+ if (_.isUndefined(rowFilter)) {
+ rowSelector = function() {
+ return true;
+ };
+
+ } else if (_.isFunction(rowFilter)) {
+ rowSelector = rowFilter;
+
+ } else { //array
+ rowSelector = _.bind(function(row) {
+ return _.indexOf(rowFilter, row[this.idAttribute]) === -1 ?
+ false :
+ true;
+ }, this);
+ }
+
+ return rowSelector;
+ },
+
+ /**
+ * Returns a dataset view of the given column name
+ * Parameters:
+ * name - name of the column to be selected
+ * Returns:
+ * Miso.Column.
+ */
+ column : function(name) {
+ return this._column(name);
+ },
+
+ _column : function(name) {
+ if (_.isUndefined(this._columnPositionByName)) { return undefined; }
+ var pos = this._columnPositionByName[name];
+ return this._columns[pos];
+ },
+
+ /**
+ * Returns a dataset view of the given columns
+ * Parameters:
+ * columnsArray - an array of column names
+ * Returns:
+ * Miso.DataView.
+ */
+ columns : function(columnsArray) {
+ return new Dataset.DataView({
+ filter : { columns : columnsArray },
+ parent : this
+ });
+ },
+
+ /**
+ * Returns the names of all columns, not including id column.
+ * Returns:
+ * columnNames array
+ */
+ columnNames : function() {
+ var cols = _.pluck(this._columns, 'name');
+ return _.reject(cols, function( colName ) {
+ return colName === this.idAttribute || colName === '_oids';
+ }, this);
+ },
+
+ /**
+ * Returns true if a column exists, false otherwise.
+ * Parameters:
+ * name (string)
+ * Returns
+ * true | false
+ */
+ hasColumn : function(name) {
+ return (!_.isUndefined(this._columnPositionByName[name]));
+ },
+
+ /**
+ * Iterates over all rows in the dataset
+ * Paramters:
+ * iterator - function that is passed each row
+ * iterator(rowObject, index, dataset)
+ * context - options object. Optional.
+ */
+ each : function(iterator, context) {
+ for(var i = 0; i < this.length; i++) {
+ iterator.apply(context || this, [this.rowByPosition(i), i]);
+ }
+ },
+
+ /**
+ * Iterates over all rows in the dataset in reverse order
+ * Parameters:
+ * iterator - function that is passed each row
+ * iterator(rowObject, index, dataset)
+ * context - options object. Optional.
+ */
+ reverseEach : function(iterator, context) {
+ for(var i = this.length-1; i >= 0; i--) {
+ iterator.apply(context || this, [this.rowByPosition(i), i]);
+ }
+ },
+
+ /**
+ * Iterates over each column.
+ * Parameters:
+ * iterator - function that is passed:
+ * iterator(colName, column, index)
+ * context - options object. Optional.
+ */
+ eachColumn : function(iterator, context) {
+ // skip id col
+ var cols = this.columnNames();
+ for(var i = 0; i < cols.length; i++) {
+ iterator.apply(context || this, [cols[i], this.column(cols[i]), i]);
+ }
+ },
+
+ /**
+ * Returns a single row based on its position (NOT ID.)
+ * Paramters:
+ * i - position index
+ * Returns:
+ * row object representation
+ */
+ rowByPosition : function(i) {
+ return this._row(i);
+ },
+
+ /**
+ * Returns a single row based on its id (NOT Position.)
+ * Parameters:
+ * id - unique id
+ * Returns:
+ * row object representation