summaryrefslogtreecommitdiff
path: root/priv/static/metrics-graphics-3.0-alpha3/examples
diff options
context:
space:
mode:
Diffstat (limited to 'priv/static/metrics-graphics-3.0-alpha3/examples')
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/charts/annotations.htm338
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/charts/auto-time-formatting.htm296
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/charts/axes.htm486
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/charts/brushing_zooming.htm166
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/charts/data.htm386
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/charts/experimental.htm1159
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/charts/lines.htm335
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/charts/multilines.htm368
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/charts/other.htm48
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/charts/rollovers.htm309
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/charts/updating.htm169
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/css/highlightjs-default.css153
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo-accessible.css26
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo-dark.css686
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo.css220
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/css/railscasts.css187
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/brief-1.json402
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/brief-2.json402
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/confidence_band.json548
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users1.json483
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users2.json1448
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users3.json1448
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/firefox_releases.json168
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/float.json802
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/log.json802
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/make_fake_data.py56
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden-accessor.json57
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden-multi.json1436
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden.json39
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-y.json35
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/multiline.json902
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/neg1.json602
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/neg2.json30
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/nh-gop.tsv6
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/points1.json802
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/small-range.json26
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/some_currency.json402
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/some_percentage.json482
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/split_by.json548
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/ufo-sightings.json266
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/ufo_dates.csv22841
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/data/xnotdate.json34
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/examples.htm113
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/images/divider.pngbin0 -> 2879 bytes
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/images/logo.svg242
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/index.htm269
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/interactive-demo.htm236
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/js/lib/highlight.pack.js1
-rwxr-xr-xpriv/static/metrics-graphics-3.0-alpha3/examples/js/lib/mode-javascript.js1
-rwxr-xr-xpriv/static/metrics-graphics-3.0-alpha3/examples/js/lib/worker-javascript.js1
-rw-r--r--priv/static/metrics-graphics-3.0-alpha3/examples/js/main.js125
51 files changed, 41387 insertions, 0 deletions
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/charts/annotations.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/annotations.htm
new file mode 100644
index 0000000..5bd4d11
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/annotations.htm
@@ -0,0 +1,338 @@
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='markers'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/some_percentage.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/some_percentage.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ var markers = [{
+ 'date': new Date('2014-02-01T00:00:00.000Z'),
+ 'label': '1st Milestone'
+ }, {
+ 'date': new Date('2014-03-15T00:00:00.000Z'),
+ 'label': '2nd Milestone'
+ }];
+
+ MG.data_graphic({
+ title: "Markers",
+ description: "Markers are vertical lines that can be added at arbitrary points. Markers that are close to each other won't collide.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ markers: markers,
+ format: 'percentage',
+ target: '#markers'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='markers-clickable'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/some_percentage.json'>data</a></div>
+
+ <pre><code class='javascript'>d3.json('data/some_percentage.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ var clicker = function() {
+ window.open('https://www.youtube.com/watch?v=dQw4w9WgXcQ', '_blank');
+ };
+
+ var markers = [{
+ 'date': new Date('2014-02-01T00:00:00.000Z'),
+ 'label': "Click me",
+ 'click': clicker
+ }, {
+ 'date': new Date('2014-03-15T00:00:00.000Z'),
+ 'label': "Nothing to see here"
+ }];
+
+ MG.data_graphic({
+ title: "Clickable Markers",
+ description: "You can assign arbitrary functions to markers' click events.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ markers: markers,
+ format: 'percentage',
+ target: '#markers-clickable'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='markers-mouseover'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/some_percentage.json'>data</a></div>
+
+ <pre><code class='javascript'>d3.json('data/some_percentage.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ var mouseover = function() {
+ alert("You are over me!");
+ };
+
+ var markers = [{
+ 'date': new Date('2014-02-01T00:00:00.000Z'),
+ 'label': "Place your mouse here",
+ 'mouseover': mouseover
+ }, {
+ 'date': new Date('2014-03-15T00:00:00.000Z'),
+ 'label': "Nothing to see here"
+ }];
+
+ MG.data_graphic({
+ title: "Mouse Over Markers",
+ description: "You can assign arbitrary functions to markers' mouseover events.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ markers: markers,
+ format: 'percentage',
+ target: '#markers-mouseover'
+ });</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='markers-mouseout'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/some_percentage.json'>data</a></div>
+
+ <pre><code class='javascript'>d3.json('data/some_percentage.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ var mouseout = function() {
+ alert("You just left me!");
+ };
+
+ var markers = [{
+ 'date': new Date('2014-02-01T00:00:00.000Z'),
+ 'label': "Place your mouse here and out!",
+ 'mouseout': mouseout
+ }, {
+ 'date': new Date('2014-03-15T00:00:00.000Z'),
+ 'label': "Nothing to see here"
+ }];
+
+ MG.data_graphic({
+ title: "Mouse Out Markers",
+ description: "You can assign arbitrary functions to markers' mouseout events.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ markers: markers,
+ format: 'percentage',
+ target: '#markers-mouseout'
+ });</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='baselines'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users1.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Baselines",
+ description: "Baselines are horizontal lines that can added at arbitrary points.",
+ data: data,
+ baselines: [{value: 160000000, label: 'a baseline'}],
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#baselines'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center mg-main-area-solid' id='spike'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users1.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+
+ var markers = [{
+ 'date': new Date('2014-03-17T00:00:00.000Z'),
+ 'label': 'Look, a spike!'
+ }];
+
+ MG.data_graphic({
+ title: "Annotating a Point",
+ description: "By setting the graphic's target a class name of mg-main-area-solid, markers don't extend down to the bottom of the graphic, which better draws attention to, say, spikes.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ markers: markers,
+ target: '#spike'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+<script>
+MG._hooks = {};
+d3.json('data/some_percentage.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ var markers = [{
+ 'date': new Date('2014-02-01T00:00:00.000Z'),
+ 'label': '1st Milestone'
+ }, {
+ 'date': new Date('2014-03-15T00:00:00.000Z'),
+ 'label': '2nd Milestone'
+ }];
+
+ MG.data_graphic({
+ title: "Markers",
+ description: "Markers are vertical lines that can be added at arbitrary points. Markers that are close to each other won't collide.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ markers: markers,
+ format: 'percentage',
+ target: '#markers'
+ });
+
+ var clicker = function() {
+ window.open('https://www.youtube.com/watch?v=dQw4w9WgXcQ', '_blank');
+ };
+
+ markers = [{
+ 'date': new Date('2014-02-01T00:00:00.000Z'),
+ 'label': "Click me",
+ 'click': clicker
+ }, {
+ 'date': new Date('2014-03-15T00:00:00.000Z'),
+ 'label': "Nothing to see here"
+ }];
+
+ MG.data_graphic({
+ title: "Clickable Markers",
+ description: "You can assign arbitrary functions to markers' click events.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ markers: markers,
+ format: 'percentage',
+ target: '#markers-clickable'
+ });
+
+ var mouseover = function() {
+ alert("You are over me!");
+ };
+
+ markers = [{
+ 'date': new Date('2014-02-01T00:00:00.000Z'),
+ 'label': "Place your mouse here",
+ 'mouseover': mouseover
+ }, {
+ 'date': new Date('2014-03-15T00:00:00.000Z'),
+ 'label': "Nothing to see here"
+ }];
+
+ MG.data_graphic({
+ title: "Mouse Over Markers",
+ description: "You can assign arbitrary functions to markers' mouseover events.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ markers: markers,
+ format: 'percentage',
+ target: '#markers-mouseover'
+ });
+
+ var mouseout = function() {
+ alert("You just left me!");
+ };
+
+ markers = [{
+ 'date': new Date('2014-02-01T00:00:00.000Z'),
+ 'label': "Place your mouse here and out!",
+ 'mouseout': mouseout
+ }, {
+ 'date': new Date('2014-03-15T00:00:00.000Z'),
+ 'label': "Nothing to see here"
+ }];
+
+ MG.data_graphic({
+ title: "Mouse Out Markers",
+ description: "You can assign arbitrary functions to markers' mouseout events.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ markers: markers,
+ format: 'percentage',
+ target: '#markers-mouseout'
+ });
+
+});
+
+d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Baselines",
+ description: "Baselines are horizontal lines that can added at arbitrary points.",
+ data: data,
+ baselines: [{value: 160000000, label: 'goal'}],
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#baselines'
+ });
+});
+
+d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+
+ var markers = [{
+ 'date': new Date('2014-03-17T00:00:00.000Z'),
+ 'label': 'Look, a spike!'
+ }];
+
+ MG.data_graphic({
+ title: "Annotating a Point",
+ description: "By setting the graphic's target a class name of main-area-solid, markers don't extend down to the bottom of the graphic, which better draws attention to, say, spikes.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ markers: markers,
+ target: '#spike'
+ });
+});
+</script>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/charts/auto-time-formatting.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/auto-time-formatting.htm
new file mode 100644
index 0000000..af132dd
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/auto-time-formatting.htm
@@ -0,0 +1,296 @@
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='row'>
+ <div class='col-lg-12 text-center' id='time1'></div>
+ <div class='col-lg-12 text-center' id='time2'></div>
+ <div class='col-lg-12 text-center' id='time3'></div>
+ <div class='col-lg-12 text-center' id='time4'></div>
+ <div class='col-lg-12 text-center' id='many-months'></div>
+ <div class='col-lg-12 text-center' id='a-few-years'></div>
+ <div class='col-lg-12 text-center' id='years'></div>
+ <div class='col-lg-12 text-center' id='decades'></div>
+ <div class='col-lg-12 text-center' id='centuries'></div>
+
+ </div>
+ </div>
+ <div class='col-lg-5'>
+
+ <pre><code class='javascript'>function fake_data(length, seconds) {
+ var d = new Date();
+ var v = 100000;
+ var data=[];
+
+ for (var i = 0; i < length; i++) {
+ v += (Math.random() - 0.5) * 10000;
+ data.push({date: MG.clone(d), value: v});
+ d = new Date(d.getTime() + seconds * 1000);
+ }
+ return data;
+}
+
+function fake_days(length) {
+ var d = new Date();
+ var v = 100000;
+
+ var data = [];
+ for (var i = 0; i < length; i++) {
+ v += (Math.random() - 0.5) * 10000;
+ if (v < 0) v = 0;
+ data.push({date: MG.clone(d), value: v});
+ d.setDate(d.getDate() + 1);
+ }
+ return data;
+}
+
+function fake_years(length) {
+ var y = 2015;
+ var d = new Date(y,0,1);
+ out = [];
+ v = 100000;
+ for (var i = 0; i < length; i++) {
+ v += (Math.random()-.5) * 10000;
+ out.push({value:v, date: MG.clone(d)});
+ y -=1;
+ d = new Date(y,0,1);
+ }
+ out.reverse();
+ return out;
+}
+
+
+var less_than_a_minute = fake_data(25, 1);
+var less_than_a_day = fake_data(25,60 * 20);
+var a_few_days = fake_data(75,60 * 60);
+var many_days = fake_days(60);
+var many_many_many_days = fake_days(365*2);
+var a_few_years = fake_days(365*4);
+
+MG.data_graphic({
+ title: "European Clock",
+ description: 'By setting european_clock to true, you can default to European-style time. This is at the moment experimental, and the formatting may change.',
+ data: less_than_a_minute,
+ target: '#european',
+ european_clock: true,
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Less Than A Minute",
+ data: less_than_a_minute,
+ target: '#time1',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Less Than A Day",
+ data: less_than_a_day,
+ target: '#time2',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "A Few Days",
+ data: a_few_days,
+ target: '#time3',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Over A Large Span of Days",
+ data: many_days,
+ target: '#time4',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Over Many Months",
+ data: many_many_many_days,
+ target: '#many-months',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Over A Few Years",
+ data: a_few_years,
+ target: '#a-few-years',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Over Centuries",
+ data: fake_years(300),
+ target: '#centuries',
+ width: 600,
+ height: 200,
+ right: 40
+});</code></pre>
+
+ </div>
+ </div>
+
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='row'>
+ <div class='col-lg-12 text-center' id='european'></div>
+ </div>
+ </div>
+ <div class='col-lg-5'>
+
+ <pre><code class='javascript'>MG.data_graphic({
+ title: "European Clock",
+ description: 'By setting european_clock to true, you can default to European-style time. This is at the moment experimental, and the formatting may change.',
+ data: less_than_a_minute,
+ target: '#european',
+ european_clock: true,
+ width: 600,
+ height: 200,
+ right: 40
+});
+ </code></pre>
+
+ </div>
+ </div>
+
+<script>
+MG._hooks = {};
+function fake_data(length, seconds) {
+ var d = new Date();
+ var v = 100000;
+ var data=[];
+
+ for (var i = 0; i < length; i++) {
+ v += (Math.random() - 0.5) * 10000;
+ data.push({date: MG.clone(d), value: v});
+ d = new Date(d.getTime() + seconds * 1000);
+ }
+ return data;
+}
+
+function fake_days(length) {
+ var d = new Date();
+ var v = 100000;
+
+ var data = [];
+ for (var i = 0; i < length; i++) {
+ v += (Math.random() - 0.5) * 10000;
+ if (v < 0) v = 0;
+ data.push({date: MG.clone(d), value: v});
+ d.setDate(d.getDate() + 1);
+ }
+ return data;
+}
+
+function fake_years(length) {
+ var y = 2015;
+ var d = new Date(y,0,1);
+ out = [];
+ v = 100000;
+ for (var i = 0; i < length; i++) {
+ v += (Math.random()-.5) * 10000;
+ out.push({value:v, date: MG.clone(d)});
+ y -=1;
+ d = new Date(y,0,1);
+ }
+ out.reverse();
+ return out;
+}
+
+
+var less_than_a_minute = fake_data(25, 1);
+var less_than_a_day = fake_data(25,60 * 20);
+var a_few_days = fake_data(75,60 * 60);
+var many_days = fake_days(80);
+var many_many_many_days = fake_days(365*2);
+var a_few_years = fake_days(365*3);
+
+MG.data_graphic({
+ title: "European Clock",
+ description: 'By setting european_clock to true, you can default to European-style time. This is at the moment experimental, and the formatting may change.',
+ data: less_than_a_minute,
+ target: '#european',
+ european_clock: true,
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Less Than A Minute",
+ data: less_than_a_minute,
+ target: '#time1',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Less Than A Day",
+ data: less_than_a_day,
+ target: '#time2',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "A Few Days",
+ data: a_few_days,
+ target: '#time3',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Over A Large Span of Days",
+ data: many_days,
+ width:600,
+ target: '#time4',
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Over Many Months",
+ data: many_many_many_days,
+ target: '#many-months',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Over A Few Years",
+ data: a_few_years,
+ target: '#a-few-years',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+MG.data_graphic({
+ title: "Over Centuries",
+ data: fake_years(300),
+ target: '#centuries',
+ width: 600,
+ height: 200,
+ right: 40
+});
+
+
+</script>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/charts/axes.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/axes.htm
new file mode 100644
index 0000000..375120a
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/axes.htm
@@ -0,0 +1,486 @@
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='xnotdate'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/xnotdate.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/xnotdate.json', function(data) {
+ MG.data_graphic({
+ title: "Axis Labels",
+ description: "A graphic where we're not plotting dates on the x-axis and where the axes include labels and the line animates on load. We've also enabled extended ticks along the y-axis.",
+ data: data,
+ animate_on_load: true,
+ area: false,
+ width: 600,
+ height: 240,
+ right: 40,
+ left: 90,
+ bottom: 50,
+ y_extended_ticks: true,
+ target: '#xnotdate',
+ x_accessor: 'males',
+ y_accessor: 'females',
+ x_label: 'males',
+ y_label: 'females',
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='percentage'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/some_percentage.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/some_percentage.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Some Percentages",
+ description: "Here is an example that shows percentages.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ format: 'percentage',
+ target: '#percentage'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='currency'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/some_currency.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/some_currency.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Some Currency",
+ description: "Here is an example that uses custom units for currency.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#currency',
+ yax_units: '$'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='log1'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/log.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/log.json', function(data) {
+ data = [data];
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Log Scale",
+ description: "You can change the y-axis' scale to logarithmic by setting <i>y_scale_type</i> to <i>log</i>.",
+ data: data,
+ y_scale_type: 'log',
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#log1'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='col-lg-12 text-center' id='hidden1'></div>
+ <div class='col-lg-12 text-center' id='hidden2'></div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'>
+ <a href='data/fake_users1.json'>data 1</a>,
+ <a href='data/brief-1.json'>data 2</a>
+ </div>
+
+<pre><code class='javascript'>d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "No X Axis",
+ description: "You can hide either axis by setting <i>x_axis</i> or <i>y_axis</i> to false.",
+ data: data,
+ decimals: 0,
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#hidden1',
+ area: false,
+ x_axis: false,
+ });
+});
+
+d3.json('data/brief-1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "No Y Axis",
+ description: "You can hide either axis by setting <i>x_axis</i> or <i>y_axis</i> to false.",
+ data: data,
+ decimals: 0,
+ width: 600,
+ height: 200,
+ right: 20,
+ xax_count: 4,
+ target: '#hidden2',
+ area: false,
+ y_axis: false
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='y_rug'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users1.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Rug Plots",
+ description: "You can set rug plots either axis by setting <i>x_rug</i> or <i>y_rug</i> to true.",
+ data: data,
+ decimals: 0,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#y_rug',
+ area: false,
+ y_rug: true
+ });
+});</code></pre>
+
+ </div>
+</div>
+
+
+
+
+
+
+
+
+
+
+<div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='row'>
+ <div class='col-lg-6 text-center' id='axis-pos-1'></div>
+ <div class='col-lg-6 text-center' id='axis-pos-2'></div>
+ </div>
+ <div class='row'>
+ <div class='col-lg-6 text-center' id='axis-pos-3'></div>
+ <div class='col-lg-6 text-center' id='axis-pos-4'></div>
+ </div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'>
+ <a href='data/fake_users1.json'>data 1</a>,
+ <a href='data/brief-1.json'>data 2</a>
+ </div>
+
+<pre><code class='javascript'>d3.json('data/brief-1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ var position = [['left', 'top'],['right', 'top'], ['left', 'bottom'], ['right', 'bottom']];
+ position.forEach(function(pos,i) {
+ console.log(pos,i)
+ var i = i+1;
+
+ MG.data_graphic({
+ title: "Axis Positions: " + pos[0] +', ' + pos[1],
+ description: "Set <i>x_axis_position: " + pos[1] + "</i> and <i>x_axis_position: " + pos[0] +"</i>.",
+ x_axis_position: pos[1],
+ y_axis_position: pos[0],
+ data: data,
+ decimals: 0,
+ left: pos[0] === 'right' ? 20 : 50,
+ right: pos[0] === 'left' ? 20 : 50,
+ top: pos[1] === 'bottom' ? 50 : 50,
+ bottom: pos[1] === 'top' ? 25 : 50,
+ target: '#axis-pos-'+i,
+ area: false
+ });
+ })
+});</code></pre>
+
+ </div>
+</div>
+
+
+<script>
+d3.json('data/brief-1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ var position = [['left', 'top'],['right', 'top'], ['left', 'bottom'], ['right', 'bottom']];
+ position.forEach(function(pos,i) {
+ var i = i+1;
+
+ MG.data_graphic({
+ title: "Axis Positions: " + pos[0] +', ' + pos[1],
+ description: "Set <i>x_axis_position: " + pos[1] + "</i> and <i>x_axis_position: " + pos[0] +"</i>.",
+ x_axis_position: pos[1],
+ y_axis_position: pos[0],
+ data: data,
+ decimals: 0,
+ left: pos[0] === 'right' ? 20 : 50,
+ right: pos[0] === 'left' ? 20 : 50,
+ top: pos[1] === 'bottom' ? 50 : 50,
+ bottom: pos[1] === 'top' ? 25 : 50,
+ target: '#axis-pos-'+i,
+ area: false
+ });
+ })
+});
+</script>
+
+
+
+
+
+
+
+
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='col-lg-6 text-center' id='neg1'></div>
+ <div class='col-lg-6 text-center' id='neg2'></div>
+ <div class='col-lg-6 text-center' id='y-axis-not-zero'></div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'>
+ <a href='data/neg1.json'>data 1</a>,
+ <a href='data/neg2.json'>data 2</a>
+ </div>
+
+<pre><code class='javascript'>d3.json('data/neg1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Negative Values 1",
+ description: "MG defaults to 0 on the y-axis as min if there are no negative numbers. If there are negatives, should provide some buffer below.",
+ data: data,
+ width: 295,
+ height: 220,
+ right: 10,
+ target: '#neg1'
+ });
+
+ var data2 = MG.clone(data).map(function(d) {
+ d.value = d.value + 550;
+ return d;
+ });
+
+ MG.data_graphic({
+ title: "Y-Axis Not Zero",
+ data: data2,
+ width: 295,
+ height: 220,
+ right: 10,
+ min_y_from_data: true,
+ yax_units: '$',
+ target: '#y-axis-not-zero',
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});
+
+d3.json('data/neg2.json', function(data) {
+ MG.data_graphic({
+ title: "Negative Values 2",
+ data: data,
+ width: 295,
+ height: 220,
+ right: 10,
+ target: '#neg2',
+ x_accessor: 'subject',
+ y_accessor: 'measure'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+<script>
+MG._hooks = {};
+d3.json('data/xnotdate.json', function(data) {
+ MG.data_graphic({
+ title: "Axis Labels",
+ description: "A graphic where we're not plotting dates on the x-axis and where the axes include labels and the line animates on load. We've also enabled extended ticks along the y-axis.",
+ data: data,
+ animate_on_load: true,
+ area: false,
+ width: 600,
+ height: 240,
+ right: 40,
+ left: 90,
+ bottom: 50,
+ y_extended_ticks: true,
+ target: '#xnotdate',
+ x_accessor: 'males',
+ y_accessor: 'females',
+ x_label: 'males',
+ y_label: 'females',
+ });
+});
+
+d3.json('data/some_percentage.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Some Percentages",
+ description: "Here is an example that shows percentages.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ format: 'percentage',
+ target: '#percentage'
+ });
+});
+
+d3.json('data/some_currency.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Some Currency",
+ description: "Here is an example that uses custom units for currency.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#currency',
+ yax_units: '$'
+ });
+});
+
+d3.json('data/log.json', function(data) {
+ data = [data];
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Log Scale",
+ description: "You can change the y-axis' scale to logarithmic by setting <i>y_scale_type</i> to <i>log</i>.",
+ data: data,
+ y_scale_type: 'log',
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#log1'
+ });
+});
+
+d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "No X Axis",
+ description: "You can hide either axis by setting <i>x_axis</i> or <i>y_axis</i> to false.",
+ data: data,
+ decimals: 0,
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#hidden1',
+ area: false,
+ x_axis: false,
+ });
+});
+
+d3.json('data/brief-1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "No Y Axis",
+ description: "You can hide either axis by setting <i>x_axis</i> or <i>y_axis</i> to false.",
+ data: data,
+ decimals: 0,
+ width: 600,
+ height: 200,
+ right: 20,
+ xax_count: 4,
+ target: '#hidden2',
+ area: false,
+ y_axis: false
+ });
+});
+
+d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Rug Plots",
+ description: "You can set rug plots either axis by setting <i>x_rug</i> or <i>y_rug</i> to true.",
+ data: data,
+ decimals: 0,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#y_rug',
+ area: false,
+ y_rug: true
+ });
+});
+
+d3.json('data/neg1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Negative Values 1",
+ description: "MG defaults to 0 on the y-axis as min if there are no negative numbers. If there are negatives, should provide some buffer below.",
+ data: data,
+ width: 295,
+ height: 220,
+ right: 10,
+ target: '#neg1'
+ });
+
+ var data2 = MG.clone(data).map(function(d) {
+ d.value = d.value + 550;
+ return d;
+ });
+
+ MG.data_graphic({
+ title: "Y-Axis Not Zero",
+ data: data2,
+ width: 295,
+ height: 220,
+ right: 10,
+ min_y_from_data: true,
+ yax_units: '$',
+ target: '#y-axis-not-zero',
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});
+
+d3.json('data/neg2.json', function(data) {
+ MG.data_graphic({
+ title: "Negative Values 2",
+ data: data,
+ width: 295,
+ height: 220,
+ right: 10,
+ target: '#neg2',
+ x_accessor: 'subject',
+ y_accessor: 'measure'
+ });
+});
+</script>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/charts/brushing_zooming.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/brushing_zooming.htm
new file mode 100644
index 0000000..e23e35d
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/brushing_zooming.htm
@@ -0,0 +1,166 @@
+ <div class='row trunk-section'>
+ <div class='col-lg-7'>
+ <div class='row'>
+ <div class='col-lg-12 text-center' id='basic_brushing'></div>
+ <div class='col-lg-12 text-center' id='point_chart_brushing'></div>
+ </div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users3.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+ MG.data_graphic({
+ title: "Basic Brushing &amp; Zooming",
+ description: "This is a simple example of brushing and zooming. You can set 'brush' as 'xy', 'x', 'y' to specify the axis(es) that may be brushed.",
+ data: data,
+ top: 70,
+ width: 600,
+ height: 240,
+ right: 40,
+ missing_is_hidden: true,
+ target: '#basic_brushing',
+ brush: 'xy',
+ });
+});
+
+d3.json('data/points1.json', function(data) {
+ MG.data_graphic({
+ title: "Point Chart Brushing",
+ description: "Brushing and zooming also works for point charts.",
+ data: data,
+ chart_type: 'point',
+ width: 600,
+ height: 240,
+ right: 40,
+ target: '#point_chart_brushing',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ y_rug: true,
+ brush: 'xy',
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7'>
+ <div class='row'>
+ <div class='col-lg-12 text-center' id='main'></div>
+ <div class='col-lg-12 text-center' id='overview_plot'></div>
+ </div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users3.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+ const main = {
+ title: "Overview Plot",
+ description: "This is a simple example of an overview plot. You can create an overview plot by creating another chart with 'zoom_target' option and then setting it as the object of the main chart.",
+ data: data,
+ top: 70,
+ width: 600,
+ height: 200,
+ right: 40,
+ missing_is_hidden: true,
+ target: '#main',
+ brush: 'xy',
+ }
+ MG.data_graphic(main);
+ MG.data_graphic({
+ data: data,
+ width: 600,
+ height: 50,
+ top: 8,
+ bottom: 0,
+ right: 40,
+ missing_is_hidden: true,
+ target: '#overview_plot',
+ brush: 'x',
+ zoom_target: main,
+ x_axis: false,
+ y_axis: false,
+ showActivePoint: false,
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+<script>
+d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+ MG.data_graphic({
+ title: "Basic Brushing & Zooming",
+ description: "This is a simple example of brushing and zooming. You can set 'brush' as 'xy', 'x', 'y' to specify the axis(es) that may be brushed.",
+ data: data,
+ top: 70,
+ width: 600,
+ height: 240,
+ right: 40,
+ missing_is_hidden: true,
+ target: '#basic_brushing',
+ brush: 'xy',
+ });
+});
+
+d3.json('data/points1.json', function(data) {
+ MG.data_graphic({
+ title: "Point Chart Brushing",
+ description: "Brushing and zooming also works for point charts.",
+ data: data,
+ chart_type: 'point',
+ width: 600,
+ height: 240,
+ right: 40,
+ target: '#point_chart_brushing',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ y_rug: true,
+ brush: 'xy',
+ });
+});
+
+d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+ const main = {
+ title: "Overview Plot",
+ description: "This is a simple example of an overview plot. You can create an overview plot by creating another chart with 'zoom_target' option and then setting it as the object of the main chart.",
+ data: data,
+ top: 70,
+ width: 600,
+ height: 200,
+ right: 40,
+ missing_is_hidden: true,
+ target: '#main',
+ brush: 'xy',
+ }
+ MG.data_graphic(main);
+ MG.data_graphic({
+ data: data,
+ width: 600,
+ height: 50,
+ top: 8,
+ bottom: 0,
+ right: 40,
+ missing_is_hidden: true,
+ target: '#overview_plot',
+ brush: 'x',
+ zoom_target: main,
+ x_axis: false,
+ y_axis: false,
+ showActivePoint: false,
+ });
+});
+
+</script>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/charts/data.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/data.htm
new file mode 100644
index 0000000..aa0f076
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/data.htm
@@ -0,0 +1,386 @@
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='row'>
+ <div class='col-lg-12 text-center' id='missing-y'></div>
+ </div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'>
+ <a href='data/missing-y.json'>data</a>
+ </div>
+
+<pre><code class='javascript'>d3.json('data/missing-y.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Few Observations",
+ description: "We sometimes have only a few observations. By setting <i>missing_is_zero: true</i>, missing values for a time-series will be interpreted as zeros. In this example, we've overridden the rollover callback to show 'no data' for missing observations and have set the <i>min_x</i> and <i>max_x</i> options in order to expand the date range.",
+ data: data,
+ interpolate: d3.curveLinear,
+ missing_is_zero: true,
+ width: 600,
+ height: 200,
+ right: 40,
+ min_x: new Date('2014-01-01'),
+ max_x: new Date('2014-06-01'),
+ target: '#missing-y',
+ mouseover: function(d, i) {
+ var df = d3.timeFormat('%b %d, %Y');
+ var date = df(d.date);
+ var y_val = (d.value === 0) ? 'no data' : d.value;
+
+ d3.select('#missing-y svg .mg-active-datapoint')
+ .text(date + ' ' + y_val);
+ }
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='missing_is_hidden'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/missing-is-hidden.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/missing-is-hidden.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Broken Lines",
+ description: "Setting <i>missing_is_hidden</i> to true will hide missing ranges rather than considering them to be zeros or interpolating between the two points on either side.",
+ data: data,
+ missing_is_hidden: true,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#missing_is_hidden',
+ area: false,
+ show_secondary_x_label: false
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='missing_is_hidden_accessor'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/missing-is-hidden-accessor.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/missing-is-hidden-accessor.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Broken Lines (Missing Data Points)",
+ description: "You can hide individual data points on a particular attribute by setting <i>missing_is_hidden_accessor</i>. Data points whose y-accessor values are null are also hidden.",
+ data: data,
+ missing_is_hidden: true,
+ missing_is_hidden_accessor: 'dead',
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#missing_is_hidden_accessor'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='row'>
+ <div class='col-lg-12 text-center' id='missing-data'></div>
+ </div>
+ </div>
+ <div class='col-lg-5'>
+
+<pre><code class='javascript'>MG.data_graphic({
+ title: "Missing Data",
+ description: "This is an example of a graphic whose data is currently missing. We've also set the <i>error</i> option, which appends an error icon to the title and logs an error to the browser's console.",
+ error: 'This data is blocked by Lorem Ipsum. Get your **** together, Ipsum.',
+ chart_type: 'missing-data',
+ missing_text: 'This is an example of a missing chart',
+ target: '#missing-data',
+ width: 600,
+ height: 200
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='row'>
+ <div class='col-lg-12 text-center' id='missing1'></div>
+ </div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'>
+ <a href='data/fake_users2.json'>data</a>
+ </div>
+
+<pre><code class='javascript'>d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ var all_the_data = MG.clone(data[0]);
+ for (i = 1; i < data.length; i++){
+ for (var j = 0; j < data[i].length; j++) {
+ if (i === 2 && all_the_data[j].date < new Date('2014-02-01')) {
+ } else {
+ all_the_data[j]['value' + (i + 1)] = data[i][j].value;
+ }
+ }
+ }
+
+ MG.data_graphic({
+ title: "Handling Different Sized Lines in a Single Array",
+ description: "How do you handle data with multiple implied time series lengths?",
+ data: all_the_data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#missing1',
+ linked: true,
+ x_accessor: 'date',
+ y_accessor: ['value', 'value2', 'value3']
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='row'>
+ <div class='col-lg-12 text-center' id='display_active_point_01'></div>
+ </div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'>
+ <a href='data/fake_users2.json'>data</a>
+ </div>
+
+ <pre><code class='javascript'>d3.json('data/fake_users1.json', function(data) {
+
+ for (var i = 0; i < data.length; i++) {
+ data[i].active = (i % 5 === 0);
+ }
+
+ data = MG.convert.date(data, 'date');
+
+ MG.data_graphic({
+ title: "Show active points on line chart",
+ description: "This line chart displays pre-defined active points",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ point_size: 3,
+ active_point_on_lines: true,
+ active_point_accessor: 'active',
+ active_point_size: 2,
+ target: '#display_active_point_01',
+ aggregate_rollover: true
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='row'>
+ <div class='col-lg-12 text-center' id='display_active_point_02'></div>
+ </div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'>
+ <a href='data/fake_users2.json'>data</a>
+ </div>
+
+ <pre><code class='javascript'>d3.json('data/fake_users2.json', function(data) {
+
+ for (var i = 0; i < data.length; i++) {
+ for (var j = 0; j < data[i].length; j++) {
+ if (i === 0) {
+ data[i][j].active = (j % 5 === 0);
+ }
+ if (i === 1) {
+ data[i][j].active = (j % 10 === 0);
+ }
+ }
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Show active points on multi-lines chart",
+ description: "This multi-lines chart displays pre-defined active points for each lines",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ point_size: 3,
+ active_point_on_lines: true,
+ active_point_accessor: 'active',
+ active_point_size: 2,
+ target: '#display_active_point_01',
+ aggregate_rollover: true
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+<script>
+MG._hooks = {};
+d3.json('data/missing-y.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Few Observations",
+ description: "We sometimes have only a few observations. By setting <i>missing_is_zero: true</i>, missing values for a time-series will be interpreted as zeros. In this example, we've overridden the rollover callback to show 'no data' for missing observations and have set the <i>min_x</i> and <i>max_x</i> options in order to expand the date range.",
+ data: data,
+ interpolate: d3.curveLinear,
+ missing_is_zero: true,
+ width: 600,
+ height: 200,
+ right: 40,
+ min_x: new Date('2014-01-01'),
+ max_x: new Date('2014-06-01'),
+ target: '#missing-y',
+ mouseover: function(d, i) {
+ var df = d3.timeFormat('%b %d, %Y');
+ var date = df(d.date);
+ var y_val = (d.value === 0) ? 'no data' : d.value;
+
+ d3.select('#missing-y svg .mg-active-datapoint')
+ .text(date + ' ' + y_val);
+ }
+ });
+});
+
+d3.json('data/missing-is-hidden.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Broken Lines (Missing Data Range)",
+ description: "Setting <i>missing_is_hidden</i> to true will hide missing ranges rather than considering them to be zeros or interpolating between the two points on either side.",
+ data: data,
+ missing_is_hidden: true,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#missing_is_hidden',
+ area: false,
+ show_secondary_x_label: false
+ });
+});
+
+d3.json('data/missing-is-hidden-accessor.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Broken Lines (Missing Data Points)",
+ description: "You can hide individual data points on a particular attribute by setting <i>missing_is_hidden_accessor</i>. Data points whose y-accessor values are null are also hidden.",
+ data: data,
+ missing_is_hidden: true,
+ missing_is_hidden_accessor: 'dead',
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#missing_is_hidden_accessor'
+ });
+});
+
+
+MG.data_graphic({
+ title: "Missing Data",
+ chart_type: 'missing-data',
+ description: "This is an example of a graphic whose data is currently missing. We've also set the <i>error</i> option, which appends an error icon to the title and logs an error to the browser's console.",
+ error: 'This data is blocked by Lorem Ipsum. Get your **** together, Ipsum.',
+ missing_text: 'This is an example of a missing chart',
+ target: '#missing-data',
+ width: 600,
+ height: 200
+});
+
+d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ var all_the_data = MG.clone(data[0]);
+ for (i = 1; i < data.length; i++){
+ for (var j = 0; j < data[i].length; j++) {
+ if (i === 2 && all_the_data[j].date < new Date('2014-02-01')) {
+ } else {
+ all_the_data[j]['value' + (i + 1)] = data[i][j].value;
+ }
+ }
+ }
+
+ MG.data_graphic({
+ title: "Handling Different Sized Lines in a Single Array",
+ description: "How do you handle data with multiple implied time series lengths?",
+ data: all_the_data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#missing1',
+ linked: true,
+ x_accessor: 'date',
+ y_accessor: ['value', 'value2', 'value3']
+ });
+});
+
+d3.json('data/fake_users1.json', function(data) {
+
+ for (var i = 0; i < data.length; i++) {
+ data[i].active = (i % 5 === 0);
+ }
+
+ data = MG.convert.date(data, 'date');
+
+ MG.data_graphic({
+ title: "Show active points on line chart",
+ description: "This line chart displays pre-defined active points",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ point_size: 3,
+ active_point_on_lines: true,
+ active_point_accessor: 'active',
+ active_point_size: 2,
+ target: '#display_active_point_01',
+ aggregate_rollover: true
+ });
+});
+
+d3.json('data/fake_users2.json', function(data) {
+
+ for (var i = 0; i < data.length; i++) {
+ for (var j = 0; j < data[i].length; j++) {
+ if (i === 0) {
+ data[i][j].active = (j % 5 === 0);
+ }
+ if (i === 1) {
+ data[i][j].active = (j % 10 === 0);
+ }
+ }
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Show active points on multi-lines chart",
+ description: "This multi-lines chart displays pre-defined active points for each lines",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ point_size: 3,
+ active_point_on_lines: true,
+ active_point_accessor: 'active',
+ active_point_size: 2,
+ target: '#display_active_point_02',
+ aggregate_rollover: true
+ });
+});
+</script>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/charts/experimental.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/experimental.htm
new file mode 100644
index 0000000..725a8d3
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/experimental.htm
@@ -0,0 +1,1159 @@
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='col-lg-6 text-center' id='scatter-simple'></div>
+ <div class='col-lg-6 text-center' id='categorical1'></div>
+ <div class='col-lg-6 text-center' id='categorical2'></div>
+ <div class='col-lg-6 text-center' id='scatter-line-best-fit'></div>
+ <div class='col-lg-6 text-center' id='scatter-size-and-color'></div>
+ <div class='col-lg-6 text-center' id='sls-time-series'></div>
+ <div class='col-lg-6 text-center' id='highlight'></div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/points1.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/points1.json', function(data) {
+ MG.data_graphic({
+ title: "Simple Scatterplot",
+ description: "This is an example of a simple scatterplot, in which we have enabled rug plots on the y-axis by setting the <i>y_rug</i> option to true.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#scatter-simple',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ mouseover: function(d, i) { console.log(d,i); },
+ y_rug: true
+ });
+
+ MG.data_graphic({
+ title: "Automatic Category Coloring",
+ description: "By setting <i>color_type</i> to 'category' you can color the points according to another discrete value.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#categorical1',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ color_accessor: 'v',
+ color_type:'category',
+ y_rug: true
+ });
+
+ MG.data_graphic({
+ title: "Custom Category Color Mapping",
+ description: "You can specify the color domain and the corresponding color range to get custom mapping of categories to colors.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#categorical2',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ color_accessor: 'v',
+ color_domain: ['cat_0', 'cat_1', 'other'],
+ color_range: ['blue', 'gray', 'black'],
+ color_type: 'category',
+ x_rug: true
+ });
+
+ MG.data_graphic({
+ title: "Simple Line of Best Fit",
+ description: "For any scatterplot, set <i>least_squares</i> to true to add.",
+ data: data,
+ least_squares: true,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#scatter-line-best-fit',
+ x_accessor: 'x',
+ y_accessor: 'y'
+ });
+
+ MG.data_graphic({
+ title: "Points Highlighting",
+ description: "You can set <i>highlight</i> to filter the points you want to highlight.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#highlight',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ y_rug: true,
+ highlight: (d, i) => d.z > 2
+ });
+});
+
+d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Another Least Squares Example",
+ description: "Least squares effortlessly works with dates or times on axes.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ left: 60,
+ right: 10,
+ least_squares: true,
+ target: '#sls-time-series',
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});
+
+var color_range = (theme === 'light') ? null : ['white','yellow'];
+
+d3.json('data/points1.json', function(data) {
+ MG.data_graphic({
+ title: "Scatterplot with Size and Color",
+ description: "Scatterplots have <i>x_accessor</i>, <i>y_accessor</i>, <i>size_accessor</i>, and <i>color_accessor</i>. For the last two you can also provide domain and range functions, to make it easy to change the color ranges. Colors default to red and blue, but can be overridden by passing an array of colors to <i>color_range</i>, as we've done in this example for the dark theme.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#scatter-size-and-color',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ color_accessor:'z',
+ color_range: color_range,
+ size_accessor:'w',
+ x_rug: true,
+ y_rug: true
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+
+<div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='row'>
+ <div class='col-lg-6 text-center' id='point-categorical'></div>
+ <div class='col-lg-6 text-center' id='bar-categorical'></div>
+ </div>
+
+ <div class='row'>
+ <div class='col-lg-6 text-center' id='point-categorical2'></div>
+ <div class='col-lg-6 text-center' id='bar-categorical2'></div>
+
+ </div>
+ <div class='row'>
+ <div class='col-lg-6 text-center' id='point-categorical-group'></div>
+ <div class='col-lg-6 text-center' id='bar-categorical-group'>
+ </div>
+
+ </div>
+ <div class='row'>
+ <div class='col-lg-12 text-center' id='point-categorical-group-horizontal'></div>
+ </div>
+ <div class='row'>
+ <div class='col-lg-12 text-center' id='bar-categorical-group-horizontal'></div>
+ </div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/nh-gop.tsv'>data</a></div>
+
+<pre><code class='javascript'>
+d3.tsv('data/nh-gop.tsv', function(data) {
+ var polls = [];
+ var who = ['Bush', 'Rubio', 'Trump', 'Cruz'];
+ data.forEach(function(p){
+ who.forEach(function(d){
+ var out = {};
+ out.candidate = d;
+ out.number = p[d] === '--' ? 0 : parseFloat(p[d]);
+ out.poll = p.Poll;
+ out.size = Math.random();
+ out.when = p.Date;
+ polls.push(out);
+ })
+ });
+
+ var trump = polls.filter(function(d){
+ return d.poll == 'PPP (D)';
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: X, points',
+ data: trump,
+ chart_type: 'point',
+ y_accessor: 'number',
+ x_accessor: 'candidate',
+ height:400,
+ width:300,
+ target: '#point-categorical',
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: X, bars',
+ data: trump,
+ chart_type: 'bar',
+ y_accessor: 'number',
+ x_accessor: 'candidate',
+ height:400,
+ width:300,
+ target: '#bar-categorical',
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: Y, points',
+ data: trump,
+ chart_type: 'point',
+ x_accessor: 'number',
+ y_accessor: 'candidate',
+ height:400,
+ width:300,
+ target: '#point-categorical2',
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: Y, bars',
+ data: trump,
+ chart_type: 'bar',
+ x_accessor: 'number',
+ y_accessor: 'candidate',
+ height:400,
+ width:300,
+ target: '#bar-categorical2',
+ })
+
+ MG.data_graphic({
+ title: 'Y points, groups',
+ data: polls,
+ chart_type: 'point',
+ y_axis_type: 'categorical',
+ x_accessor: 'number',
+ y_accessor: 'candidate',
+ ygroup_accessor: 'poll',
+ size_accessor: 'size',
+ size_domain: [0,1],
+ size_range: [3,6],
+ height:550,
+ width:300,
+ left:100,
+ target: '#point-categorical-group'
+ })
+
+ MG.data_graphic({
+ title: 'Y bars, groups',
+ data: polls,
+ chart_type: 'bar',
+ y_axis_type: 'categorical',
+ x_accessor: 'number',
+ y_accessor: 'candidate',
+ ygroup_accessor: 'poll',
+ height:550,
+ width:300,
+ left:100,
+ right:40,
+ target: '#bar-categorical-group'
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: Y, groups, horizontal',
+ data: polls,
+ chart_type: 'point',
+ y_accessor: 'number',
+ x_accessor: 'candidate',
+ xgroup_accessor: 'poll',
+ size_accessor: 'size',
+ size_domain: [0,1],
+ size_range: [3,6],
+ height:350,
+ width:700,
+ target: '#point-categorical-group-horizontal'
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: Y, groups, horizontal',
+ data: polls,
+ chart_type: 'bar',
+ y_accessor: 'number',
+ x_accessor: 'candidate',
+ xgroup_accessor: 'poll',
+ size_accessor: 'size',
+ size_domain: [0,1],
+ size_range: [3,6],
+ height:350,
+ width:700,
+ target: '#bar-categorical-group-horizontal'
+ })
+})
+</code></pre>
+
+ </div>
+</div>
+
+
+<script>
+d3.tsv('data/nh-gop.tsv', function(data) {
+ var polls = [];
+ var who = ['Bush', 'Rubio', 'Trump', 'Cruz'];
+ data.forEach(function(p,j){
+ who.forEach(function(d,i){
+ var out = {};
+ out.candidate = d;
+ out.number = p[d] === '--' ? 0 : parseFloat(p[d]);
+ out.poll = p.Poll;
+ out.size = Math.random();
+ out.when = p.Date;
+ out.reference = Math.floor(Math.random() * 20 + 1);
+ out.comparison = j+i + 1;
+ polls.push(out);
+ })
+ });
+
+ var trump = polls.filter(function(d){
+ return d.poll == 'PPP (D)';
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: X, points',
+ data: trump,
+ chart_type: 'point',
+ y_accessor: 'number',
+ x_accessor: 'candidate',
+ height:300,
+ width:300,
+ target: '#point-categorical',
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: X, bars',
+ data: trump,
+ chart_type: 'bar',
+ y_accessor: 'number',
+ x_accessor: 'candidate',
+ height:300,
+ width:300,
+ target: '#bar-categorical',
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: Y, points',
+ data: trump,
+ chart_type: 'point',
+ x_accessor: 'number',
+ y_accessor: 'candidate',
+ height:300,
+ width:300,
+ target: '#point-categorical2',
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: Y, bars',
+ data: trump,
+ chart_type: 'bar',
+ x_accessor: 'number',
+ y_accessor: 'candidate',
+ height:300,
+ width:300,
+ target: '#bar-categorical2',
+ })
+
+ MG.data_graphic({
+ title: 'Y points, groups',
+ data: polls,
+ chart_type: 'point',
+ y_axis_type: 'categorical',
+ x_accessor: 'number',
+ y_accessor: 'candidate',
+ ygroup_accessor: 'poll',
+ size_accessor: 'size',
+ size_domain: [0,1],
+ size_range: [3,6],
+ height:550,
+ width:300,
+ left:100,
+ target: '#point-categorical-group'
+ })
+
+ MG.data_graphic({
+ title: 'Y bars, groups',
+ data: polls,
+ chart_type: 'bar',
+ y_axis_type: 'categorical',
+ x_accessor: 'number',
+ y_accessor: 'candidate',
+ ygroup_accessor: 'poll',
+ height:550,
+ width:300,
+ left:100,
+ target: '#bar-categorical-group'
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: Y, groups, horizontal',
+ data: polls,
+ chart_type: 'point',
+ y_accessor: 'number',
+ x_accessor: 'candidate',
+ xgroup_accessor: 'poll',
+ size_accessor: 'size',
+ size_domain: [0,1],
+ size_range: [3,6],
+ height:300,
+ width:650,
+ target: '#point-categorical-group-horizontal'
+ })
+
+ MG.data_graphic({
+ title: 'Categorical Scale: Y, groups, horizontal',
+ data: polls,
+ chart_type: 'bar',
+ y_accessor: 'number',
+ x_accessor: 'candidate',
+ xgroup_accessor: 'poll',
+ size_accessor: 'size',
+ size_domain: [0,1],
+ size_range: [3,6],
+ height:300,
+ width:650,
+ target: '#bar-categorical-group-horizontal'
+ })
+})
+</script>
+
+
+
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='col-lg-6 text-center' id='histogram1'></div>
+ <div class='col-lg-6 text-center' id='histogram2'></div>
+ <div class='col-lg-6 text-center' id='histogram3'></div>
+ <div class='col-lg-6 text-center' id='histogram4'></div>
+ <div class='col-lg-12 text-center' id='time-hist'></div>
+ <div class='col-lg-12 text-center' id='ufos'></div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/ufo_dates.csv'>data</a></div>
+
+<pre><code class='javascript'>var values = d3.range(10000).map(d3.randomBates(10));
+
+MG.data_graphic({
+ title: "Histogram 1",
+ description: "Raw data values being fed in. Here, we specify the number of bins to be 50 and have bar margins set to 0. The histogram graphic type includes the ability to <a href='http://en.wikipedia.org/wiki/Freedman%E2%80%93Diaconis_rule'>bin data</a>.",
+ data: values,
+ chart_type: 'histogram',
+ width: 295,
+ height: 180,
+ right: 10,
+ bins: 50,
+ bar_margin: 0,
+ target: '#histogram1',
+ y_extended_ticks: true,
+ mouseover: function(d, i) {
+ var pf = d3.format(',.2f');
+ d3.select('#histogram1 svg .mg-active-datapoint')
+ .text('Value: ' + pf(d.x) + ' Count: ' + d.y);
+ }
+});
+
+d3.csv('data/ufo_dates.csv', function(ufos){
+ var data = ufos.map(function(d){
+ return parseInt(d.value) / 30;
+ });
+ data.sort();
+ MG.data_graphic({
+ title: "Difference in UFO Sighting and Reporting Dates (in months)",
+ description: "Semi-real data about the reported differences between the supposed sighting of a UFO and the date it was reported.",
+ data: data,
+ chart_type: 'histogram',
+ width: 600,
+ height: 300,
+ right: 40,
+ bar_margin: 0,
+ bins: 150,
+ target: '#ufos',
+ y_extended_ticks: true,
+ mouseover: function(d, i) {
+ var pf = d3.format(',.2f');
+ d3.select('#ufos svg .mg-active-datapoint')
+ .text(pf(d.x) + ' months Volume: ' + pf(d.y));
+ }
+ });
+});
+
+var second = d3.range(10000).map(function(d) { return Math.random() * 10; });
+second = d3.histogram()(second)
+ .map(function(d) {
+ return {'count': d.y, 'value': d.x};
+});
+
+MG.data_graphic({
+ title: "Histogram 2",
+ description: "Already binned data being fed in.",
+ data: second,
+ binned: true,
+ chart_type: 'histogram',
+ width: 295,
+ height: 180,
+ right: 10,
+ target: '#histogram2',
+ y_extended_ticks: true,
+ x_accessor: 'value',
+ y_accessor: 'count',
+ mouseover: function(d, i) {
+ var pf = d3.format(',.2f');
+ d3.select('#histogram2 svg .mg-active-datapoint')
+ .text('Value: ' + pf(d.x) + ' Count: ' + d.y);
+ }
+});
+
+var third = d3.range(10000).map(d3.randomBates(10));
+third = third.map(function(d,i){ return {val1: d, val2: i}; });
+
+MG.data_graphic({
+ title: "Histogram 3",
+ description: "Unbinned, but in same format as other line chart data.",
+ data: third,
+ chart_type: 'histogram',
+ width: 295,
+ height: 180,
+ right: 10,
+ target: '#histogram3',
+ linked: true,
+ y_extended_ticks: true,
+ x_accessor: 'val1',
+ mouseover: function(d, i) {
+ var pf = d3.format(',.2f');
+ d3.select('#histogram3 svg .mg-active-datapoint')
+ .text('Value: ' + pf(d.x) + ' Count: ' + d.y);
+ }
+});
+
+// check for negative values, for sanity.
+var fourth = d3.range(10000).map(d3.randomBates(10));
+fourth = fourth.map(function(d,i){ return d - 0.5; });
+
+MG.data_graphic({
+ title: "Histogram 4",
+ description: "Sanity-checking negative data.",
+ data: fourth,
+ chart_type: 'histogram',
+ width: 295,
+ height: 180,
+ right: 10,
+ target: '#histogram4',
+ y_extended_ticks: true,
+ x_accessor: 'val1',
+ mouseover: function(d, i) {
+ var pf = d3.format(',.2f');
+ d3.select('#histogram4 svg .mg-active-datapoint')
+ .text('Value: ' + pf(d.x) + ' Count: ' + d.y);
+ }
+});
+
+var hist1 = fake_data(25, 60).map(function(d){
+ d.value = Math.round(d.value);
+ return d;
+});
+
+MG.data_graphic({
+ title: "Histograms can be time series as well",
+ data: hist1,
+ target: '#time-hist',
+ chart_type: 'histogram',
+ width: 600,
+ height: 200,
+ binned: true,
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='table1'></div>
+ <div class='col-lg-5'>
+
+<pre><code class='javascript'>var table_data = [
+ { 'year': 1852, 'value1': 10.2, 'value2': 1030004.43423,'share': 0.12, 'total': 34003400, 'temp': 43, 'geo': 'United Kingdom', 'description': "Having a way of describing a row can be useful." },
+ { 'year': 1901, 'value1': 10.1, 'value2': 54003.223, 'share': 0.11, 'total': 4302100, 'temp': 55, 'geo': 'United States', 'description': "More made-up numbers." },
+ { 'year': 1732, 'value1': 4.3, 'value2': 1004.91422, 'share': 0.14, 'total': 4300240, 'temp': 42, 'geo': 'France', 'description': "We didn't specify a title for this column." },
+ { 'year': 1945, 'value1': 2.9, 'value2': 2430.121, 'share': 0.23, 'total': 24000000, 'temp': 54, 'geo': 'Brazil', 'description': "Brazil, Brazil." },
+ { 'year': 1910, 'value1': 1.0, 'value2': 5432.3, 'share': 0.19, 'total': 130000, 'temp': 52, 'geo': 'India', 'description': "Last description in the whole thing." }
+];
+
+var table1 = MG.data_table({
+ title: "A Data Table",
+ description: "A table is often the most appropriate way to present data. We aim to make the creation of data tables very simple. We are working on implementing sparklines, bullet charts, and other niceties.",
+ data: table_data,
+ show_tooltips: true
+ })
+ .target('#table1')
+ .title({
+ accessor: 'geo',
+ secondary_accessor:'year',
+ label: 'Country',
+ description: "These are arbitrary countries with arbitrary years underneath."
+ })
+ .number({ accessor: 'value1', label: 'Size', value_formatter: function(d){ return d + ' yrds'; }})
+ .number({ accessor: 'value2', label: 'Score', round: 2, font_weight: 'bold' })
+ .number({ accessor: 'temp', label: 'Temp.', format: 'temperature', width: 100, color: 'gray' })
+ .number({
+ accessor: 'total',
+ label: 'Volume',
+ format: 'count', currency: '$',
+ width: 100,
+ font_weight: function(d){ return d < 5000000 ? 'bold' : 'normal'; },
+ color: function(d){ return d < 5000000 ? '#f70101' : 'auto'; }
+ })
+ .number({ accessor: 'share', label: 'Share', format: 'percentage', width: 100 })
+ .text({ accessor: 'description', width: 240, font_style: 'italic' })
+ .display();</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='buttons'></div>
+ <div class='col-lg-5'>
+
+<pre><code class='javascript'>var bdata = [
+ {a:'apples', b:'quartz'},
+ {a:'bananas', b:'pyrite'},
+ {a:'durian', b:'obsidian'}
+];
+
+var resolution_features = ['weekly', 'monthly'];
+
+var buttons = MG.button_layout('#buttons')
+ .data(bdata)
+ .manual_button('Time Scale', resolution_features, function(){ console.log('switched time scales'); })
+ .button('a', 'Fruit')
+ .button('b', 'Rock')
+ .callback(function(){
+ console.log('made it');
+ return false;
+ })
+ .display();</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class="tooltip"></div>
+ <style>
+ .tooltip {
+ display: none;
+ min-height: 32px;
+ min-width: 100px;
+ padding: 12px;
+ margin-bottom: 8px;
+ background-color: #333;
+ color: white;
+ opacity: 0.7;
+ text-align: left;
+ }
+ </style>
+ <div class='col-lg-12 text-center' id='tooltip-line-chart'></div>
+ <div class='col-lg-12 text-center' id='tooltip-point-chart'></div>
+ </div>
+ <div class='col-lg-5'>
+
+<pre><code class='html'>&#x3C;div class=&#x22;tooltip&#x22;&#x3E;&#x3C;/div&#x3E;
+&#x3C;style&#x3E;
+.tooltip {
+ display: none;
+ min-height: 32px;
+ min-width: 100px;
+ padding: 12px;
+ margin-bottom: 8px;
+ background-color: #333;
+ color: white;
+ opacity: 0.7;
+ text-align: left;
+}
+&#x3C;/style&#x3E;
+</code></pre>
+
+<pre><code class='javascript'>const tooltipEl = d3.select('.tooltip').node();
+const tooltip = new Popper(document.documentElement, tooltipEl, { placement: 'top' });
+tooltipEl.addEventListener('mouseover', () => {
+ tooltipEl.style.display = 'block';
+})
+tooltipEl.addEventListener('mouseout', () => {
+ tooltipEl.style.display = 'none';
+})
+
+d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Tooltip on line chart",
+ description: "Using popper.js and the mouseover callback, you can easily create a tooltip when the user hovers over a particular datapoint.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#tooltip-line-chart',
+ x_accessor: 'date',
+ y_accessor: 'value',
+ show_rollover_text: false,
+ mouseover: (d, i) => {
+ tooltipEl.style.display = 'block';
+ tooltipEl.innerText = `date: ${d3.timeFormat('%b %e, %Y')(d.date)}\nvalue: ${d.value}`;
+ tooltip.reference = d3.select(`#tooltip-line-chart .mg-line-rollover-circle`).node();
+ tooltip.update();
+ },
+ mouseout: () => {
+ tooltipEl.style.display = 'none';
+ }
+ });
+});
+
+d3.json('data/points1.json', function(data) {
+ MG.data_graphic({
+ title: "Tooltip on point chart",
+ description: "This technique also works for point charts.",
+ data: data,
+ chart_type: 'point',
+ width: 600,
+ height: 350,
+ right: 10,
+ target: '#tooltip-point-chart',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ show_rollover_text: false,
+ mouseover: (d, i) => {
+ tooltipEl.style.display = 'block';
+ tooltipEl.innerText = `X: ${d.data.x}\nY: ${d.data.y}`;
+ tooltip.reference = d3.select(`#tooltip-point-chart .mg-points .path-${i}`).node();
+ tooltip.update();
+ },
+ mouseout: (d, i) => {
+ tooltipEl.style.display = 'none';
+ }
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+
+<script>
+MG._hooks = {};
+d3.json('data/points1.json', function(data) {
+ MG.data_graphic({
+ title: "Simple Scatterplot",
+ description: "This is an example of a simple scatterplot, in which we have enabled rug plots on the y-axis by setting the <i>y_rug</i> option to true.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#scatter-simple',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ y_rug: true
+ });
+
+ MG.data_graphic({
+ title: "Automatic Category Coloring",
+ description: "By setting <i>color_type</i> to 'category' you can color the points according to another discrete value.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#categorical1',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ color_accessor: 'v',
+ color_type: 'category',
+ y_rug: true
+ });
+
+ MG.data_graphic({
+ title: "Custom Category Color Mapping",
+ description: "You can specify the color domain and the corresponding color range to get custom mapping of categories to colors.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#categorical2',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ color_accessor: 'v',
+ color_domain: ['cat_0', 'cat_1', 'other'],
+ color_range: ['blue', 'gray', 'black'],
+ color_type: 'category',
+ x_rug: true
+ });
+
+ MG.data_graphic({
+ title: "Simple Line of Best Fit",
+ description: "For any scatterplot, set <i>least_squares</i> to true to add.",
+ data: data,
+ least_squares: true,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#scatter-line-best-fit',
+ x_accessor: 'x',
+ y_accessor: 'y'
+ });
+
+ MG.data_graphic({
+ title: "Points Highlighting",
+ description: "You can set <i>highlight</i> to filter the points you want to highlight.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#highlight',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ y_rug: true,
+ highlight: (d, i) => d.z > 2
+ });
+});
+
+d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Another Least Squares Example",
+ description: "Least squares effortlessly works with dates or times on axes.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ left: 60,
+ right: 10,
+ least_squares: true,
+ target: '#sls-time-series',
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});
+
+var color_range = (theme === 'light') ? null : ['white','yellow'];
+
+d3.json('data/points1.json', function(data) {
+ MG.data_graphic({
+ title: "Scatterplot with Size and Color",
+ description: "Scatterplots have <i>x_accessor</i>, <i>y_accessor</i>, <i>size_accessor</i>, and <i>color_accessor</i>. For the last two you can also provide domain and range functions, to make it easy to change the color ranges. Colors default to red and blue, but can be overridden by passing an array of colors to <i>color_range</i>, as we've done in this example for the dark theme.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#scatter-size-and-color',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ color_accessor: 'z',
+ color_range: color_range,
+ size_accessor: 'w',
+ x_rug: true,
+ y_rug: true
+ });
+});
+
+var values = d3.range(10000).map(d3.randomBates(10));
+
+MG.data_graphic({
+ title: "Histogram 1",
+ description: "Raw data values being fed in. Here, we specify the number of bins to be 50 and have bar margins set to 0. The histogram graphic type includes the ability to <a href='http://en.wikipedia.org/wiki/Freedman%E2%80%93Diaconis_rule'>bin data</a>.",
+ data: values,
+ chart_type: 'histogram',
+ width: 295,
+ height: 180,
+ bins: 50,
+ bar_margin: 0,
+ target: '#histogram1',
+ y_extended_ticks: true,
+ mouseover: function(d, i) {
+ var pf = d3.format(',.2f');
+ d3.select('#histogram1 svg .mg-active-datapoint')
+ .text('Value: ' + pf(d.x) + ' Count: ' + d.y);
+ }
+});
+
+d3.csv('data/ufo_dates.csv', function(ufos){
+ var data = ufos.map(function(d){
+ return parseInt(d.value) / 30;
+ });
+ data.sort();
+ MG.data_graphic({
+ title: "Difference in UFO Sighting and Reporting Dates (in months)",
+ description: "Semi-real data about the reported differences between the supposed sighting of a UFO and the date it was reported.",
+ data: data,
+ chart_type: 'histogram',
+ width: 600,
+ height: 300,
+ right: 40,
+ bar_margin: 0,
+ bins: 150,
+ target: '#ufos',
+ y_extended_ticks: true,
+ mouseover: function(d, i) {
+ var pf = d3.format(',.2f');
+ d3.select('#ufos svg .mg-active-datapoint')
+ .text(pf(d.x) + ' months Volume: ' + d.y);
+ }
+ });
+});
+
+var second = d3.range(10000).map(function(d) { return Math.random() * 10; });
+second = d3.histogram()(second)
+ .map(function(d) {
+ return {'value': d.x0, 'count': d.length};
+});
+
+MG.data_graphic({
+ title: "Histogram 2",
+ description: "Already binned data being fed in.",
+ data: second,
+ binned: true,
+ chart_type: 'histogram',
+ width: 295,
+ height: 180,
+ target: '#histogram2',
+ y_extended_ticks: true,
+ x_accessor: 'value',
+ y_accessor: 'count',
+ mouseover: function(d, i) {
+ var pf = d3.format(',.2f');
+ d3.select('#histogram2 svg .mg-active-datapoint')
+ .text('Value: ' + pf(d.x) + ' Count: ' + d.y);
+ }
+});
+
+var third = d3.range(10000).map(d3.randomBates(10));
+third = third.map(function(d,i){ return {val1: d, val2: i}; });
+
+MG.data_graphic({
+ title: "Histogram 3",
+ description: "Unbinned, but in same format as other line chart data.",
+ data: third,
+ chart_type: 'histogram',
+ width: 295,
+ height: 180,
+ target: '#histogram3',
+ linked: true,
+ y_extended_ticks: true,
+ x_accessor: 'val1',
+ mouseover: function(d, i) {
+ var pf = d3.format(',.2f');
+ d3.select('#histogram3 svg .mg-active-datapoint')
+ .text('Value: ' + pf(d.x) + ' Count: ' + d.y);
+ }
+});
+
+// check for negative values, for sanity.
+var fourth = d3.range(10000).map(d3.randomBates(10));
+fourth = fourth.map(function(d,i){ return d - 0.5; });
+
+MG.data_graphic({
+ title: "Histogram 4",
+ description: "Sanity-checking negative data.",
+ data: fourth,
+ chart_type: 'histogram',
+ width: 295,
+ height: 180,
+ target: '#histogram4',
+ y_extended_ticks: true,
+ x_accessor: 'val1',
+ mouseover: function(d, i) {
+ var pf = d3.format(',.2f');
+ d3.select('#histogram4 svg .mg-active-datapoint')
+ .text('Value: ' + pf(d.x) + ' Count: ' + d.y);
+ }
+});
+
+var hist1 = fake_data(25, 60).map(function(d){
+ d.value = Math.round(d.value);
+ return d;
+});
+
+MG.data_graphic({
+ title: "Histograms can be time series as well",
+ data: hist1,
+ target: '#time-hist',
+ chart_type: 'histogram',
+ width: 600,
+ height: 200,
+ binned: true,
+});
+
+var table_data = [
+ { 'year': 1852, 'value1': 10.2, 'value2': 1030004.43423,'share': 0.12, 'total': 34003400, 'temp': 43, 'geo': 'United Kingdom', 'description': "Having a way of describing a row can be useful." },
+ { 'year': 1901, 'value1': 10.1, 'value2': 54003.223, 'share': 0.11, 'total': 4302100, 'temp': 55, 'geo': 'United States', 'description': "More made-up numbers." },
+ { 'year': 1732, 'value1': 4.3, 'value2': 1004.91422, 'share': 0.14, 'total': 4300240, 'temp': 42, 'geo': 'France', 'description': "We didn't specify a title for this column." },
+ { 'year': 1945, 'value1': 2.9, 'value2': 2430.121, 'share': 0.23, 'total': 24000000, 'temp': 54, 'geo': 'Brazil', 'description': "Brazil, Brazil." },
+ { 'year': 1910, 'value1': 1.0, 'value2': 5432.3, 'share': 0.19, 'total': 130000, 'temp': 52, 'geo': 'India', 'description': "Last description in the whole thing." }
+];
+
+var table1 = MG.data_table({
+ title: "A Data Table",
+ description: "A table is often the most appropriate way to present data. We aim to make the creation of data tables very simple. We are working on implementing sparklines, bullet charts, and other niceties.",
+ data: table_data,
+ show_tooltips: true
+ })
+ .target('#table1')
+ .title({
+ accessor: 'geo',
+ secondary_accessor:'year',
+ label: 'Country',
+ description: "These are arbitrary countries with arbitrary years underneath."
+ })
+ .number({ accessor: 'value1', label: 'Size', value_formatter: function(d){ return d + ' yrds'; }})
+ .number({ accessor: 'value2', label: 'Score', round: 2, font_weight: 'bold' })
+ .number({ accessor: 'temp', label: 'Temp.', format: 'temperature', width: 100, color: 'gray' })
+ .number({
+ accessor: 'total',
+ label: 'Volume',
+ format: 'count', currency: '$',
+ width: 100,
+ font_weight: function(d){ return d < 5000000 ? 'bold' : 'normal'; },
+ color: function(d){ return d < 5000000 ? '#f70101' : 'auto'; }
+ })
+ .number({ accessor: 'share', label: 'Share', format: 'percentage', width: 100 })
+ .text({ accessor: 'description', width: 240, font_style: 'italic' })
+ .display();
+
+var bdata = [
+ {a:'apples', b:'quartz'},
+ {a:'bananas', b:'pyrite'},
+ {a:'durian', b:'obsidian'}
+];
+
+var resolution_features = ['weekly', 'monthly'];
+
+var buttons = MG.button_layout('#buttons')
+ .data(bdata)
+ .manual_button('Time Scale', resolution_features, function(){ console.log('switched time scales'); })
+ .button('a', 'Fruit')
+ .button('b', 'Rock')
+ .callback(function(){
+ console.log('made it');
+ return false;
+ })
+ .display();
+
+addScatterplotSizeAndColor(theme);
+
+function addScatterplotSizeAndColor(theme) {
+ var color_range = (theme === 'light') ? null : ['white','yellow'];
+
+ // call data_graphic again since we need to use a different color_range for the dark theme
+ d3.json('data/points1.json', function(data) {
+ MG.data_graphic({
+ title: "Scatterplot with Size and Color",
+ description: "Scatterplots have <i>x_accessor</i>, <i>y_accessor</i>, <i>size_accessor</i>, and <i>color_accessor</i>. For the last two you can also provide domain and range functions, to make it easy to change the color ranges. Colors default to red and blue, but can be overridden by passing an array of colors to <i>color_range</i>, as we've done in this example for the dark theme.",
+ data: data,
+ chart_type: 'point',
+ width: 295,
+ height: 225,
+ right: 10,
+ target: '#scatter-size-and-color',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ color_accessor: 'z',
+ color_range: color_range,
+ size_accessor: 'w',
+ x_rug: true,
+ y_rug: true
+ });
+ });
+}
+
+function fake_data(length, seconds) {
+ var d = new Date();
+ var v = 100000;
+ var data=[];
+
+ for (var i = 0; i < length; i++){
+ v += (Math.random() - 0.5) * 10000;
+ data.push({date: MG.clone(d), value: v});
+ d = new Date(d.getTime() + seconds * 1000);
+ }
+ return data;
+}
+
+function fake_days(length) {
+ var d = new Date();
+ var v = 100000;
+
+ var data = [];
+ for (var i = 0; i<length; i++) {
+ v += (Math.random() - 0.5) * 10000;
+ data.push({date: MG.clone(d), value: v});
+ d.setDate(d.getDate() + 1);
+ }
+ return data;
+}
+
+const tooltipEl = d3.select('.tooltip').node();
+const tooltip = new Popper(document.documentElement, tooltipEl, { placement: 'top' });
+tooltipEl.addEventListener('mouseover', () => {
+ tooltipEl.style.display = 'block';
+})
+tooltipEl.addEventListener('mouseout', () => {
+ tooltipEl.style.display = 'none';
+})
+
+d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Tooltip on line chart",
+ description: "Using popper.js and the mouseover callback, you can easily create a tooltip when the user hovers over a particular datapoint.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#tooltip-line-chart',
+ x_accessor: 'date',
+ y_accessor: 'value',
+ show_rollover_text: false,
+ mouseover: (d, i) => {
+ tooltipEl.style.display = 'block';
+ tooltipEl.innerText = `date: ${d3.timeFormat('%b %e, %Y')(d.date)}\nvalue: ${d.value}`;
+ tooltip.reference = d3.select(`#tooltip-line-chart .mg-line-rollover-circle`).node();
+ tooltip.update();
+ },
+ mouseout: () => {
+ tooltipEl.style.display = 'none';
+ }
+ });
+});
+
+d3.json('data/points1.json', function(data) {
+ MG.data_graphic({
+ title: "Tooltip on point chart",
+ description: "This technique also works for point charts.",
+ data: data,
+ chart_type: 'point',
+ width: 600,
+ height: 350,
+ right: 10,
+ target: '#tooltip-point-chart',
+ x_accessor: 'x',
+ y_accessor: 'y',
+ show_rollover_text: false,
+ mouseover: (d, i) => {
+ tooltipEl.style.display = 'block';
+ tooltipEl.innerText = `X: ${d.data.x}\nY: ${d.data.y}`;
+ tooltip.reference = d3.select(`#tooltip-point-chart .mg-points .path-${i}`).node();
+ tooltip.update();
+ },
+ mouseout: (d, i) => {
+ tooltipEl.style.display = 'none';
+ }
+ });
+});
+</script>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/charts/lines.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/lines.htm
new file mode 100644
index 0000000..b758d34
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/lines.htm
@@ -0,0 +1,335 @@
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='fake_users1'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users1.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Line Chart",
+ description: "This is a simple line chart. You can remove the area portion by adding <i>area: false</i> to the arguments list.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: document.getElementById('fake_users1'),
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='confidence_band'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/confidence_band.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/confidence_band.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Confidence Band",
+ description: "This is an example of a graphic with a confidence band and extended x-axis ticks enabled.",
+ data: data,
+ format: 'percentage',
+ width: 600,
+ height: 200,
+ right: 40,
+ area: false,
+ target: '#confidence_band',
+ show_secondary_x_label: false,
+ show_confidence_band: ['l', 'u'],
+ x_extended_ticks: true
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='small-range'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/small-range.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/small-range.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Small Range of Integers",
+ description: "When we have a data object of integers and a small range of values, the auto-generated set of y-axis ticks are filtered so that we don't include fractional values.",
+ data: data,
+ interpolate: d3.curveLinear,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#small-range'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div id='briefing-1'></div>
+ <div id='briefing-2'></div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'>
+ <a href='data/brief-1.json'>data 1</a>,
+ <a href='data/brief-2.json'>data 2</a>
+ </div>
+
+<pre><code class='javascript'>d3.json('data/brief-1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Linked Graphic",
+ description: "The two graphics in this section are linked together. A rollover in one causes a rollover in the other.",
+ data: data,
+ linked: true,
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#briefing-1'
+ });
+});
+
+d3.json('data/brief-2.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Other Linked Graphic",
+ description: "Roll over and watch as the graphic to the left triggers.",
+ data: data,
+ area: false,
+ linked: true,
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#briefing-2'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='singleton'></div>
+ <div class='col-lg-5'>
+
+<pre><code class='javascript'>MG.data_graphic({
+ title: "Singleton",
+ description: "Handling a solitary data point.",
+ data: [{'date': new Date('2015-03-05T21:00:00Z'), 'value': 12000}],
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#singleton'
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='custom-color'></div>
+ <div class='col-lg-5'>
+
+<pre><code class='javascript'>d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Changing Single Line Color",
+ description: "For single line charts, there are two simple ways to change a line color. The first is to change the css (described on the wiki). The other is to specify a color value using color: <em>string</em> or colors: <em>string</em>.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ color: '#8C001A',
+ target: 'div#custom-color',
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='area_flipped_users_gain_loss'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users1.json'>data</a></div>
+
+ <pre><code class='javascript'>d3.json('data/fake_users1.json', function(data) {
+
+ var max = d3.max(data, function (d) {
+ return d.value;
+ });
+ var min = d3.min(data, function(d) {
+ return d.value;
+ });
+
+ var offsetForNegativeValues = ((max - min) / 1.75);
+
+ for (var i = 0; i < data.length; i++) {
+ data[i].value = (data[i].value - offsetForNegativeValues) / 1000000;
+ }
+
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Flipped area under Y value baseline",
+ description: "This is a line chart having a flipped area under a Y value baseline",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ area: true,
+ flip_area_under_y_value: 0,
+ target: document.getElementById('area_flipped_users_gain_loss'),
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+<script>
+
+
+
+d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Changing Single Line Color",
+ description: "For single line charts, there are two simple ways to change a line color. The first is to change the css (described on the wiki). The other is to specify a color value using color: <em>string</em> or colors: <em>string</em>.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ color: '#8C001A',
+ target: 'div#custom-color',
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});
+
+MG._hooks = {};
+d3.json('data/fake_users1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Line Chart",
+ description: "This is a simple line chart. You can remove the area portion by adding <i>area: false</i> to the arguments list.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: document.getElementById('fake_users1'),
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});
+
+d3.json('data/confidence_band.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Confidence Band",
+ description: "This is an example of a graphic with a confidence band and extended x-axis ticks enabled.",
+ data: data,
+ format: 'percentage',
+ width: 600,
+ height: 200,
+ right: 40,
+ area: false,
+ target: '#confidence_band',
+ show_secondary_x_label: false,
+ show_confidence_band: ['l', 'u'],
+ x_extended_ticks: true
+ });
+});
+
+d3.json('data/small-range.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Small Range of Integers",
+ description: "When we have a data object of integers and a small range of values, the auto-generated set of y-axis ticks are filtered so that we don't include fractional values.",
+ data: data,
+ interpolate: d3.curveLinear,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#small-range'
+ });
+});
+
+d3.json('data/brief-1.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Linked Graphic",
+ description: "The two graphics in this section are linked together. A rollover in one causes a rollover in the other.",
+ data: data,
+ linked: true,
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#briefing-1'
+ });
+});
+
+d3.json('data/brief-2.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Other Linked Graphic",
+ description: "Roll over and watch as the graphic to the left triggers.",
+ data: data,
+ area: false,
+ linked: true,
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#briefing-2'
+ });
+});
+
+MG.data_graphic({
+ title: "Singleton",
+ description: "Handling a solitary data point.",
+ data: [{'date': new Date('2015-03-05T21:00:00Z'), 'value': 12000}],
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#singleton'
+});
+
+d3.json('data/fake_users1.json', function(data) {
+
+ var max = d3.max(data, function (d) {
+ return d.value;
+ });
+ var min = d3.min(data, function(d) {
+ return d.value;
+ });
+
+ var offsetForNegativeValues = ((max - min) / 1.75);
+
+ for (var i = 0; i < data.length; i++) {
+ data[i].value = (data[i].value - offsetForNegativeValues) / 1000000;
+ }
+
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Flipped area under Y value baseline",
+ description: "This is a line chart having a flipped area under a Y value baseline",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ area: true,
+ flip_area_under_y_value: 0,
+ target: document.getElementById('area_flipped_users_gain_loss'),
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});
+</script>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/charts/multilines.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/multilines.htm
new file mode 100644
index 0000000..d807466
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/multilines.htm
@@ -0,0 +1,368 @@
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='fake_users2'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users2.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Multi-Line Chart",
+ description: "This line chart contains multiple lines.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#fake_users2',
+ legend: ['Line 1','Line 2','Line 3'],
+ legend_target: '.legend'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+ <div class='row'>
+ <div class='col-lg-7 text-center legend'></div>
+ <div class='col-lg-5'></div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='missing_is_hidden_multi'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/missing-is-hidden-multi.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/missing-is-hidden-multi.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Broken Multi-Lines",
+ description: 'Setting <i>missing_is_hidden</i> works with multiple lines too.',
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ missing_is_hidden: true,
+ target: '#missing_is_hidden_multi',
+ show_secondary_x_label: false
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div id='linked_multi1'></div>
+ <div id='linked_multi2'></div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'>
+ <a href='data/fake_users2.json'>data 1</a>,
+ <a href='data/fake_users3.json'>data 2</a>
+ </div>
+
+<pre><code class='javascript'>d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Multi-Line Linked",
+ description: "Demoing linked multi-line charts.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#linked_multi1',
+ linked: true
+ });
+})
+
+d3.json('data/fake_users3.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Multi-Line Linked 2",
+ description: "Demoing linked multi-line charts.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#linked_multi2',
+ linked: true
+ });
+});</code></pre>
+
+ </div>
+</div>
+
+<div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='missing-multi'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users3.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users3.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+ // set this to an empty array.
+ // data[0] and data[2] both still arrays of objects.
+ data[1] = [];
+
+ MG.data_graphic({
+ title: "Missing Time Series Don't Get Drawn",
+ description: "We set the second array to [] instead of the loaded data. The line color order is preserved.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#missing-multi'
+ });
+});
+});</code></pre>
+
+ </div>
+</div>
+
+<div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='multi-labelled'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users3.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users3.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ data[1][data[1].length-1].value = 50000000;
+ data[2][data[2].length-1] = MG.clone(data[1][data[1].length-1]);
+ data[2][data[2].length-1].value += 10000000;
+
+ MG.data_graphic({
+ title: "Labeling Lines",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ legend: ['US', 'CA', 'DE'],
+ target: '#multi-labelled'
+ });
+});</code></pre>
+
+ </div>
+</div>
+
+
+<div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='custom-colors'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users3.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users2.json', function(data){
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ };
+ MG.data_graphic({
+ title: "Custom Line Coloring",
+ description: "By passing in an array of hex / rgb / rgba / html strings, you can specify the colors of the lines. NOTE: this feature may have an API change before it is fully in Metrics Graphics. Use at your own risk.",
+ data: [data[0], data[1], data[2]],
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#custom-colors',
+ legend: ['Team A','Team B','Team C'],
+ legend_target: 'div#custom-color-key',
+ colors: ['blue', 'rgb(255,100,43)', '#CCCCFF'],
+ aggregate_rollover: true
+ });
+})
+</code></pre>
+
+ </div>
+</div>
+<div class='row'>
+ <div class='col-lg-7 text-center legend' id='custom-color-key'></div>
+ <div class='col-lg-5'></div>
+</div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='multiline_area_select'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users2.json'>data</a></div>
+
+ <pre><code class='javascript'>d3.json('data/fake_users3.json', function(data) {
+
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ };
+
+ MG.data_graphic({
+ title: "Select lines of your multi-line chart having areas",
+ description: "By passing in an array of booleans in 'area' property, you can choose which lines has an area or not.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#multiline_area_select',
+ area: [false, true, false],
+ y_extended_ticks: true,
+ x_accessor: 'date'
+ });
+});</code></pre>
+
+<script>
+MG._hooks = {};
+d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Multi-Line Chart",
+ description: "This line chart contains multiple lines.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#fake_users2',
+ legend: ['Line 1','Line 2','Line 3'],
+ legend_target: '.legend'
+ });
+});
+
+d3.json('data/missing-is-hidden-multi.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Broken Multi-Lines",
+ description: 'Setting <i>missing_is_hidden</i> works with multiple lines too.',
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ missing_is_hidden: true,
+ target: '#missing_is_hidden_multi',
+ show_secondary_x_label: false
+ });
+});
+
+d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Multi-Line Linked",
+ description: "Demoing linked multi-line charts.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#linked_multi1',
+ linked: true
+ });
+})
+
+d3.json('data/fake_users3.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Multi-Line Linked 2",
+ description: "Demoing linked multi-line charts.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#linked_multi2',
+ linked: true
+ });
+});
+
+d3.json('data/fake_users3.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ // set this to an empty array.
+ // data[0] and data[2] both still arrays of objects.
+ data[1] = [];
+ MG.data_graphic({
+ title: "Missing Time Series Don't Get Drawn",
+ description: "We set the second array to [] instead of the loaded data. The line color order is preserved.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#missing-multi'
+ });
+});
+
+d3.json('data/fake_users3.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+ data[1][data[1].length-1].value = 50000000;
+ data[2][data[2].length-1] = MG.clone(data[1][data[1].length-1]);
+ data[2][data[2].length-1].value += 10000000;
+
+
+ MG.data_graphic({
+ title: "Labeling Lines",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ legend: ['US', 'CA', 'DE'],
+ target: '#multi-labelled'
+ });
+});
+
+d3.json('data/fake_users2.json', function(data){
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ };
+ MG.data_graphic({
+ title: "Custom Line Coloring",
+ description: "By passing in an array of hex / rgb / rgba / html strings, you can specify the colors of the lines. NOTE: this feature may have an API change before it is fully in Metrics Graphics. Use at your own risk.",
+ data: [data[0], data[1], data[2]],
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#custom-colors',
+ legend: ['Team A','Team B','Team C'],
+ legend_target: 'div#custom-color-key',
+ colors: ['blue', 'rgb(255,100,43)', '#CCCCFF'],
+ aggregate_rollover: true
+ });
+});
+
+d3.json('data/fake_users3.json', function(data) {
+
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ };
+
+ MG.data_graphic({
+ title: "Select lines of your multi-line chart having areas",
+ description: "By passing in an array of booleans in 'area' property, you can choose which lines has an area or not.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#multiline_area_select',
+ area: [false, true, false],
+ y_extended_ticks: true,
+ x_accessor: 'date'
+ });
+});
+</script>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/charts/other.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/other.htm
new file mode 100644
index 0000000..e65d641
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/other.htm
@@ -0,0 +1,48 @@
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='aspect1'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users3.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users3.json', function(data) {
+ for(var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Preserving the aspect ratio",
+ description: "You can automatically set the width or height of a data graphic to fit its parent element. When done the graphic will rescale to fit the size of the parent element while preserving its aspect ratio.",
+ data: data,
+ full_width: true,
+ height: 300,
+ right: 40,
+ x_extended_ticks: true,
+ target: '#aspect1',
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+<script>
+MG._hooks = {};
+d3.json('data/fake_users3.json', function(data) {
+ for(var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Preserving the aspect ratio",
+ description: "You can automatically set the width or height of a data graphic to fit its parent element. When done the graphic will rescale to fit the size of the parent element while preserving its aspect ratio.",
+ data: data,
+ full_width: true,
+ height: 300,
+ right: 40,
+ x_extended_ticks: true,
+ target: '#aspect1',
+ x_accessor: 'date',
+ y_accessor: 'value'
+ });
+});
+</script>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/charts/rollovers.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/rollovers.htm
new file mode 100644
index 0000000..53510bb
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/rollovers.htm
@@ -0,0 +1,309 @@
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='col-lg-12 text-center' id='precision1'></div>
+ <div class='col-lg-12 text-center' id='precision2'></div>
+ <div class='col-lg-12 text-center' id='custom-rollover'></div>
+ <div class='col-lg-12 text-center' id='no-rollover-text'></div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'>
+ <a href='data/float.json'>data 1</a>,
+ <a href='data/some_percentage.json'>data 2</a>
+ </div>
+
+<pre><code class='javascript'>d3.json('data/float.json', function(data) {
+ data = MG.convert.date(data, 'date');
+
+ MG.data_graphic({
+ title: "Changing Precision 1",
+ description: "We can change the precision if the axis data type is a float. We can also change both the formatting, or hide the rollover text altogether. Here we set <i>decimals: 3</i> to get three decimals in the rollover for percentages.",
+ data: data,
+ decimals: 3,
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#precision1'
+ });
+
+ MG.data_graphic({
+ title: "Custom Rollover Text",
+ description: "Here is an example of changing the rollover text. You could in theory actually update any DOM element with the data from that rollover - a title, for instance.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ mouseover: function(d, i) {
+ // custom format the rollover text, show days
+ var pf = d3.format('.0s');
+ d3.select('#custom-rollover svg .mg-active-datapoint')
+ .text('Day ' + (i + 1) + ' ' + pf(d.value));
+ },
+ target: '#custom-rollover'
+ });
+});
+
+d3.json('data/some_percentage.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Changing Precision 2",
+ description: "Here we set <i>decimals: 0</i> for percentages.",
+ data: data,
+ decimals: 0,
+ format: 'percentage',
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#precision2'
+ });
+
+ MG.data_graphic({
+ title: "... Or No Rollover Text",
+ description: "By setting <i>show_rollover_text: false</i>, you can hide the default rollover text from even appearing. This, coupled with the custom callback, gives a lot of interesting options for controlling rollovers.",
+ data: data,
+ decimals: 0,
+ show_rollover_text: false,
+ format: 'percentage',
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#no-rollover-text'
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='aggregate'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users2.json'>data</a></div>
+
+<pre><code class='javascript'>d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ var all_the_data = MG.clone(data[0]);
+ for (i = 1; i < data.length; i++){
+ for (var j = 0; j < data[i].length; j++){
+ if (i === 2 && all_the_data[j].date < new Date('2014-02-01')) {
+ } else {
+ all_the_data[j]['value' + (i + 1)] = data[i][j].value;
+ }
+ }
+ }
+
+ MG.data_graphic({
+ title: "Aggregated Rollover Information",
+ description: "Aggregated information can be displayed with the <i>aggregate_rollover</i> option in order to clearly highlight the relationship between lines. Also handles non-contiguous data",
+ data: all_the_data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#aggregate',
+ y_extended_ticks: true,
+ x_accessor: 'date',
+ y_accessor: ['value', 'value2', 'value3'],
+ aggregate_rollover: true
+ });
+});</code></pre>
+
+ </div>
+ </div>
+
+
+<div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='formatting-with-strings'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users2.json'>data</a></div>
+
+<pre><code class='javascript'>
+d3.json('data/float.json', function(data) {
+
+ data = MG.convert.date(data, 'date');
+ // check out https://github.com/mbostock/d3/wiki/Formatting for number formatting
+ //and https://github.com/mbostock/d3/wiki/Time-Formatting for time formatting options.
+
+ MG.data_graphic({
+ title: "Rollover Formatting With Strings",
+ description: "Metrics Graphics comes with two arguments: y_rollover_format and x_rollover_format. These arguments take either strings or functions. Strings are formatted according to D3's number format, or D3's time formatting, if the accessor pulls out Date objects.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ y_mouseover: '%d',
+ x_mouseover: '%e of %b? Well, ',
+ target: '#y-formatting'
+ });
+})
+</code></pre>
+
+ </div>
+</div>
+
+
+<div class='row trunk-section'>
+ <div class='col-lg-7 text-center' id='formatting-with-functions'></div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/fake_users2.json'>data</a></div>
+
+<pre><code class='javascript'>
+d3.json('data/float.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ MG.data_graphic({
+ title: "Rollover Formatting With Functions",
+ description: "You can also pass in a function, whose arguments are the data point and the index.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ y_rollover_format: function(d){
+ return Math.round(d.value) + (Math.random() > .5 ? ' + 1' : ' - 1')
+ },
+ x_rollover_format: function(d){
+ var today = new Date()
+ return Math.round((today - d.date)/ (1000 * 60 * 60 * 24)) + ' days ago, ';
+ },
+ target: '#formatting-with-functions'
+ });
+})
+</code></pre>
+
+ </div>
+</div>
+
+
+<script>
+MG._hooks = {};
+d3.json('data/float.json', function(data) {
+ data = MG.convert.date(data, 'date');
+
+ MG.data_graphic({
+ title: "Updating Rollover Accessor Formatting With Strings",
+ description: "Metrics Graphics comes with two arguments: y_rollover_format and x_rollover_format. These arguments take either strings or functions. Strings are formatted according to D3's number format, or D3's time formatting, if the accessor pulls out Date objects.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ y_mouseover: '%d',
+ x_mouseover: '%e of %b? Well, ',
+ target: '#formatting-with-strings'
+ });
+
+ MG.data_graphic({
+ title: "Updating Rollover Accessor Formatting With Functions",
+ description: "You can also pass in a function, whose arguments are the data point and the index.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ y_mouseover: function(d){
+ return Math.round(d.value) + (Math.random() > .5 ? ' + 1' : ' - 1')
+ },
+ x_mouseover: function(d){
+ var today = new Date()
+ return Math.round((today - d.date)/ (1000 * 60 * 60 * 24)) + ' days ago, ';
+ },
+ target: '#formatting-with-functions'
+ });
+
+ MG.data_graphic({
+ title: "Changing Precision 1",
+ description: "We can change the precision if the axis data type is a float. We can also change both the formatting, or hide the rollover text altogether. Here we set <i>decimals: 3</i> to get three decimals in the rollover for percentages.",
+ data: data,
+ decimals: 3,
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#precision1'
+ });
+
+ MG.data_graphic({
+ title: "Custom Rollover Text",
+ description: "Here is an example of changing the rollover text. You could in theory actually update any DOM element with the data from that rollover - a title, for instance.",
+ data: data,
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ mouseover: function(d, i) {
+ // custom format the rollover text, show days
+ var pf = d3.format('.0s');
+ d3.select('#custom-rollover svg .mg-active-datapoint')
+ .text('Day ' + (i + 1) + ' ' + pf(d.value));
+ },
+ target: '#custom-rollover'
+ });
+});
+
+d3.json('data/some_percentage.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ MG.data_graphic({
+ title: "Changing Precision 2",
+ description: "Here we set <i>decimals: 0</i> for percentages.",
+ data: data,
+ decimals: 0,
+ format: 'percentage',
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#precision2'
+ });
+
+ MG.data_graphic({
+ title: "... Or No Rollover Text",
+ description: "By setting <i>show_rollover_text: false</i>, you can hide the default rollover text from even appearing. This, coupled with the custom callback, gives a lot of interesting options for controlling rollovers.",
+ data: data,
+ decimals: 0,
+ show_rollover_text: false,
+ format: 'percentage',
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#no-rollover-text'
+ });
+});
+
+d3.json('data/fake_users2.json', function(data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = MG.convert.date(data[i], 'date');
+ }
+
+ var all_the_data = MG.clone(data[0]);
+ for (i = 1; i < data.length; i++){
+ for (var j = 0; j < data[i].length; j++){
+ if (i === 2 && all_the_data[j].date < new Date('2014-02-01')) {
+ } else {
+ all_the_data[j]['value' + (i + 1)] = data[i][j].value;
+ }
+ }
+ }
+
+ MG.data_graphic({
+ title: "Aggregated Rollover Information",
+ description: "Aggregated information can be displayed with the <i>aggregate_rollover</i> option in order to clearly highlight the relationship between lines. Also handles non-contiguous data",
+ data: all_the_data,
+ width: 600,
+ height: 200,
+ right: 40,
+ target: '#aggregate',
+ y_extended_ticks: true,
+ x_accessor: 'date',
+ y_accessor: ['value', 'value2', 'value3'],
+ aggregate_rollover: true
+ });
+});
+</script>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/charts/updating.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/updating.htm
new file mode 100644
index 0000000..af3919b
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/charts/updating.htm
@@ -0,0 +1,169 @@
+ <div class='row trunk-section'>
+ <div class='col-lg-7 text-center'>
+ <div class='col-lg-12' id='split_by'></div>
+ <div class='btn-group btn-group-sm text-center split-by-controls'>
+ <button type='button' class='btn btn-default active'
+ data-y_accessor='release'>Release</button>
+ <button type='button' class='btn btn-default'
+ data-y_accessor='beta'>Beta</button>
+ <button type='button' class='btn btn-default'
+ data-y_accessor='alpha'>Alpha</button>
+ </div>
+ <div class='col-lg-12' id='modify_time_period'></div>
+ <div class='btn-group btn-group-sm text-center
+ modify-time-period-controls'>
+ <button type='button' class='btn btn-default active'
+ data-time_period=''>All time</button>
+ <button type='button' class='btn btn-default'
+ data-time_period='61'>Past 2 months</button>
+ <button type='button' class='btn btn-default'
+ data-time_period='31'>Past month</button>
+ </div>
+ </div>
+ <div class='col-lg-5'>
+ <div class='data-column'><a href='data/split_by.json'>data</a></div>
+
+<pre><code class='javascript'>var globals = {};
+
+var split_by_params = {
+ title: "Downloads by Channel",
+ description: "We sometimes have the need to split the data and then gracefully update the graphic with the newly selected subset of data.",
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#split_by',
+ x_accessor: 'date',
+ y_accessor: 'release'
+};
+
+var modify_time_period_params = {
+ title: "Beta Downloads",
+ description: "We sometimes have the need to view data for just the past n days. Here, the <i>transition_on_update</i> option is set to false.",
+ width: 600,
+ height: 200,
+ right: 40,
+ show_secondary_x_label: false,
+ xax_count: 4,
+ target: '#modify_time_period',
+ x_accessor: 'date',
+ y_accessor: 'beta'
+}
+
+d3.json('data/split_by.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ globals.data = data;
+
+ split_by_params.data = data;
+ MG.data_graphic(split_by_params);
+
+ modify_time_period_params.data = data;
+ MG.data_graphic(modify_time_period_params);
+});
+
+$('.split-by-controls button').click(function() {
+ var new_y_accessor = $(this).data('y_accessor');
+ split_by_params.y_accessor = new_y_accessor;
+
+ // change button state
+ $(this).addClass('active').siblings().removeClass('active');
+
+ // update data
+ delete split_by_params.xax_format;
+ MG.data_graphic(split_by_params);
+});
+
+$('.modify-time-period-controls button').click(function() {
+ var past_n_days = $(this).data('time_period');
+ var data = modify_time_period(globals.data, past_n_days);
+
+ // change button state
+ $(this).addClass('active').siblings().removeClass('active');
+
+ delete modify_time_period_params.xax_format;
+ modify_time_period_params.data = data;
+ MG.data_graphic(modify_time_period_params);
+});
+
+function modify_time_period(data, past_n_days) {
+ if (past_n_days !== '') {
+ return MG.clone(data).slice(past_n_days * -1);
+ }
+
+ return data;
+}</code></pre>
+
+ </div>
+ </div>
+
+<script>
+MG._hooks = {};
+var globals = {};
+
+var split_by_params = {
+ title: "Downloads by Channel",
+ description: "We sometimes have the need to split the data and then gracefully update the graphic with the newly selected subset of data.",
+ width: 600,
+ height: 200,
+ right: 40,
+ xax_count: 4,
+ target: '#split_by',
+ x_accessor: 'date',
+ y_accessor: 'release'
+};
+
+var modify_time_period_params = {
+ title: "Beta Downloads",
+ description: "We sometimes have the need to view data for just the past n days. Here, the <i>transition_on_update</i> option is set to false.",
+ width: 600,
+ height: 200,
+ right: 40,
+ show_secondary_x_label: false,
+ xax_count: 4,
+ transition_on_update: false,
+ target: '#modify_time_period',
+ x_accessor: 'date',
+ y_accessor: 'beta'
+}
+
+d3.json('data/split_by.json', function(data) {
+ data = MG.convert.date(data, 'date');
+ globals.data = data;
+
+ split_by_params.data = data;
+ MG.data_graphic(split_by_params);
+
+ modify_time_period_params.data = data;
+ MG.data_graphic(modify_time_period_params);
+});
+
+$('.split-by-controls button').click(function() {
+ var new_y_accessor = $(this).data('y_accessor');
+ split_by_params.y_accessor = new_y_accessor;
+
+ // change button state
+ $(this).addClass('active').siblings().removeClass('active');
+
+ // update data
+ MG.data_graphic(split_by_params);
+});
+
+$('.modify-time-period-controls button').click(function() {
+ var past_n_days = $(this).data('time_period');
+ var data = modify_time_period(globals.data, past_n_days);
+
+ // change button state
+ $(this).addClass('active').siblings().removeClass('active');
+
+ modify_time_period_params.data = data;
+ MG.data_graphic(modify_time_period_params);
+});
+
+function modify_time_period(data, past_n_days) {
+ if (past_n_days !== '') {
+ return MG.clone(data).slice(past_n_days * -1);
+ }
+
+ return data;
+}
+</script> \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/css/highlightjs-default.css b/priv/static/metrics-graphics-3.0-alpha3/examples/css/highlightjs-default.css
new file mode 100644
index 0000000..a7db875
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/css/highlightjs-default.css
@@ -0,0 +1,153 @@
+/*
+
+Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #f0f0f0;
+ -webkit-text-size-adjust: none;
+}
+
+.hljs,
+.hljs-subst,
+.hljs-tag .hljs-title,
+.nginx .hljs-title {
+ color: black;
+}
+
+.hljs-string,
+.hljs-title,
+.hljs-constant,
+.hljs-parent,
+.hljs-tag .hljs-value,
+.hljs-rules .hljs-value,
+.hljs-preprocessor,
+.hljs-pragma,
+.haml .hljs-symbol,
+.ruby .hljs-symbol,
+.ruby .hljs-symbol .hljs-string,
+.hljs-template_tag,
+.django .hljs-variable,
+.smalltalk .hljs-class,
+.hljs-addition,
+.hljs-flow,
+.hljs-stream,
+.bash .hljs-variable,
+.apache .hljs-tag,
+.apache .hljs-cbracket,
+.tex .hljs-command,
+.tex .hljs-special,
+.erlang_repl .hljs-function_or_atom,
+.asciidoc .hljs-header,
+.markdown .hljs-header,
+.coffeescript .hljs-attribute {
+ color: #e6337c;
+}
+
+.smartquote,
+.hljs-comment,
+.hljs-annotation,
+.hljs-template_comment,
+.diff .hljs-header,
+.hljs-chunk,
+.asciidoc .hljs-blockquote,
+.markdown .hljs-blockquote {
+ color: #888;
+}
+
+.hljs-number,
+.hljs-date,
+.hljs-regexp,
+.hljs-literal,
+.hljs-hexcolor,
+.smalltalk .hljs-symbol,
+.smalltalk .hljs-char,
+.go .hljs-constant,
+.hljs-change,
+.lasso .hljs-variable,
+.makefile .hljs-variable,
+.asciidoc .hljs-bullet,
+.markdown .hljs-bullet,
+.asciidoc .hljs-link_url,
+.markdown .hljs-link_url {
+ color: #366797;
+}
+
+.hljs-label,
+.hljs-javadoc,
+.ruby .hljs-string,
+.hljs-decorator,
+.hljs-filter .hljs-argument,
+.hljs-localvars,
+.hljs-array,
+.hljs-attr_selector,
+.hljs-important,
+.hljs-pseudo,
+.hljs-pi,
+.haml .hljs-bullet,
+.hljs-doctype,
+.hljs-deletion,
+.hljs-envvar,
+.hljs-shebang,
+.apache .hljs-sqbracket,
+.nginx .hljs-built_in,
+.tex .hljs-formula,
+.erlang_repl .hljs-reserved,
+.hljs-prompt,
+.asciidoc .hljs-link_label,
+.markdown .hljs-link_label,
+.vhdl .hljs-attribute,
+.clojure .hljs-attribute,
+.asciidoc .hljs-attribute,
+.lasso .hljs-attribute,
+.coffeescript .hljs-property,
+.hljs-phony {
+ color: #88f;
+}
+
+.hljs-keyword,
+.hljs-id,
+.hljs-title,
+.hljs-built_in,
+.css .hljs-tag,
+.hljs-javadoctag,
+.hljs-phpdoc,
+.hljs-dartdoc,
+.hljs-yardoctag,
+.smalltalk .hljs-class,
+.hljs-winutils,
+.bash .hljs-variable,
+.apache .hljs-tag,
+.hljs-type,
+.hljs-typename,
+.tex .hljs-command,
+.asciidoc .hljs-strong,
+.markdown .hljs-strong,
+.hljs-request,
+.hljs-status {
+ font-weight: bold;
+}
+
+.asciidoc .hljs-emphasis,
+.markdown .hljs-emphasis {
+ font-style: italic;
+}
+
+.nginx .hljs-built_in {
+ font-weight: normal;
+}
+
+.coffeescript .javascript,
+.javascript .xml,
+.lasso .markup,
+.tex .hljs-formula,
+.xml .javascript,
+.xml .vbscript,
+.xml .css,
+.xml .hljs-cdata {
+ opacity: 0.5;
+}
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo-accessible.css b/priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo-accessible.css
new file mode 100644
index 0000000..5ebf9b7
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo-accessible.css
@@ -0,0 +1,26 @@
+html {
+ font-size: 16px;
+}
+
+.mg-x-axis text,
+.mg-y-axis text,
+.mg-histogram .axis text {
+ opacity: 0.9;
+}
+
+.mg-x-axis line,
+.mg-y-axis line {
+ opacity: 1;
+}
+
+.mg-markers text,
+.mg-year-marker text,
+.mg-baselines text {
+ opacity: 0.9;
+}
+
+.mg-markers line,
+.mg-year-marker line,
+.mg-baselines line {
+ opacity: 1;
+} \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo-dark.css b/priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo-dark.css
new file mode 100644
index 0000000..a8bfe5f
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo-dark.css
@@ -0,0 +1,686 @@
+a,
+a:active,
+a:visited {
+ color: #71b4eb;
+}
+
+a:hover {
+ color: #71b4eb;
+}
+
+a.active {
+ color: #fff;
+}
+
+.mg-active-datapoint {
+ fill: #fff;
+}
+
+.mg-area1-color {
+ fill: #ffd300;
+}
+
+.mg-area2-color {
+ fill: #18ff00;
+}
+
+.mg-area3-color {
+ fill: #f57070;
+}
+
+.mg-area4-color {
+ fill: #28c5f8;
+}
+
+.mg-area5-color {
+ fill: #f7f7f7;
+}
+
+.mg-barplot .mg-bar-prediction {
+ fill: #5b5b5b;
+}
+
+.mg-barplot .mg-bar-baseline {
+ stroke: #5b5b5b;
+}
+
+.mg-baselines line {
+ stroke: #676767;
+}
+
+.mg-baselines text {
+ fill: #fff;
+}
+
+body {
+ background-color: #272727;
+ color: #cfcfcf;
+}
+
+.divider {
+ color: #f1f1f1;
+ opacity: 0.1;
+}
+
+pre {
+ border-left: 2px solid #3b3b3b;
+}
+
+h1 {
+ color: #f1f1f1;
+}
+
+h2.chart_title span {
+ color: #f1f1f1;
+}
+
+.mg-histogram .axis path,
+.mg-histogram .axis line {
+ opacity: 0.5;
+ stroke: #ccc;
+}
+
+.mg-histogram .mg-bar rect {
+ fill: #d8b307;
+}
+
+tspan.hist-symbol {
+ fill: #d8b307;
+}
+
+.mg-barplot rect.mg-bar.default-bar {
+ fill: #d8b307;
+}
+
+.mg-histogram .mg-bar rect.active,
+.mg-barplot rect.mg-bar.default-active {
+ fill: #b3960f;
+}
+
+.mg-histogram .mg-bar text {
+ fill: #fff;
+}
+
+.mg-histogram .axis .tick line {
+ opacity: 0.3;
+}
+
+li {
+ color: #cfcfcf;
+}
+
+.mg-least-squares-line {
+ stroke: #f57070;
+}
+
+.mg-line1-color {
+ stroke: #ffd300;
+}
+
+.mg-hover-line1-color {
+ fill: #ffd300;
+}
+
+.mg-line2-color {
+ stroke: #18ff00;
+}
+
+.mg-hover-line2-color {
+ fill: #18ff00;
+}
+
+.mg-line3-color {
+ stroke: #f57070;
+}
+
+.mg-hover-line3-color {
+ fill: #f57070;
+}
+
+.mg-line4-color {
+ stroke: #28c5f8;
+}
+
+.mg-hover-line4-color {
+ fill: #28c5f8;
+}
+
+.mg-line5-color {
+ stroke: #f7f7f7;
+}
+
+.mg-hover-line5-color {
+ fill: #f7f7f7;
+}
+
+.mg-line1-legend-color {
+ color: #ffd300;
+ fill: #ffd300;
+}
+
+.mg-line2-legend-color {
+ color: #18ff00;
+ fill: #18ff00;
+}
+
+.mg-line3-legend-color {
+ color: #f57070;
+ fill: #f57070;
+}
+
+.mg-line4-legend-color {
+ color: #28c5f8;
+ fill: #28c5f8;
+}
+
+.mg-line5-legend-color {
+ color: #f7f7f7;
+ fill: #f7f7f7;
+}
+
+#logo g path {
+ fill: #e8e8e8;
+}
+
+.mg-chart-title {
+ fill: #cfcfcf;
+}
+
+.mg-category-guides line {
+ stroke: #676767;
+}
+
+.mg-main-area-solid svg .mg-main-area {
+ fill: #52491f;
+}
+
+.mg-markers line {
+ stroke: #676767;
+}
+
+.mg-markers text {
+ fill: #fff;
+}
+
+circle.mg-points-mono {
+ fill-opacity: 0.6;
+ stroke: #a89641;
+ fill: #a89641;
+ stroke-opacity: 1;
+}
+
+tspan.mg-points-mono {
+ fill: #a89641;
+ stroke: #a89641;
+}
+
+circle.mg-points-mono.selected {
+ fill: #a89641;
+ fill-opacity: 1;
+ stroke-opacity: 1;
+}
+
+.popover {
+ color: #737373;
+}
+
+text {
+ fill: #fff;
+}
+
+.mg-x-rug-mono,
+.mg-y-rug-mono {
+ stroke: #a89641;
+}
+
+.mg-x-axis line,
+.mg-y-axis line {
+ stroke: #676767;
+}
+
+.mg-x-axis text,
+.mg-y-axis text,
+.mg-histogram .axis text {
+ fill: #fff;
+}
+
+.mg-year-marker text {
+ fill: #fff;
+}
+
+.mg-year-marker line {
+ stroke: #676767;
+}
+
+/*
+ CSS from http://bootswatch.com/slate
+ Made by Thomas Park. Contact him at thomas@bootswatch.com
+ Code released under the MIT License.
+*/
+.btn:active, .btn.active {
+ outline: 0;
+ background-image: none;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125);
+ box-shadow: inset 0 3px 5px rgba(0,0,0,0.125);
+}
+
+.btn.disabled,.btn[disabled],fieldset[disabled] .btn {
+ cursor: not-allowed;
+ pointer-events: none;
+ opacity: 0.65;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn-default {
+ color: #ffffff;
+ background-color: #3a3f44;
+ border-color: #3a3f44;
+}
+
+.btn-default:hover,
+.btn-default:focus,
+.btn-default:active,
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
+ color: #ffffff;
+ background-color: #272b2e;
+ border-color: #1e2023;
+}
+
+.btn-default:active,
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
+ background-image: none;
+}
+
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+ background-color: #3a3f44;
+ border-color: #3a3f44;
+}
+
+.btn-default .badge {
+ color: #3a3f44;
+ background-color: #ffffff;
+}
+
+.btn-primary {
+ color: #ffffff;
+ background-color: #7a8288;
+ border-color: #7a8288;
+}
+
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary {
+ color: #ffffff;
+ background-color: #676d73;
+ border-color: #5d6368;
+}
+
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary {
+ background-image: none;
+}
+
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #7a8288;
+ border-color: #7a8288;
+}
+
+.btn-primary .badge {
+ color: #7a8288;
+ background-color: #ffffff;
+}
+
+.btn-success {
+ color: #ffffff;
+ background-color: #62c462;
+ border-color: #62c462;
+}
+
+.btn-success:hover,
+.btn-success:focus,
+.btn-success:active,
+.btn-success.active,
+.open .dropdown-toggle.btn-success {
+ color: #ffffff;
+ background-color: #45b845;
+ border-color: #40a940;
+}
+
+.btn-success:active,
+.btn-success.active,
+.open .dropdown-toggle.btn-success {
+ background-image: none;
+}
+
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+ background-color: #62c462;
+ border-color: #62c462;
+}
+
+.btn-success .badge {
+ color: #62c462;
+ background-color: #ffffff;
+}
+
+.btn-info {
+ color: #ffffff;
+ background-color: #5bc0de;
+ border-color: #5bc0de;
+}
+
+.btn-info:hover,
+.btn-info:focus,
+.btn-info:active,
+.btn-info.active,
+.open .dropdown-toggle.btn-info {
+ color: #ffffff;
+ background-color: #39b3d7;
+ border-color: #2aabd2;
+}
+
+.btn-info:active,
+.btn-info.active,
+.open .dropdown-toggle.btn-info {
+ background-image: none;
+}
+
+.btn-info.disabled,.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #5bc0de;
+}
+
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #ffffff;
+}
+
+.btn-warning {
+ color: #ffffff;
+ background-color: #f89406;
+ border-color: #f89406;
+}
+
+.btn-warning:hover,.btn-warning:focus,
+.btn-warning:active,.btn-warning.active,
+.open .dropdown-toggle.btn-warning {
+ color: #ffffff;
+ background-color: #d07c05;
+ border-color: #bc7005;
+}
+
+.btn-warning:active,
+.btn-warning.active,
+.open .dropdown-toggle.btn-warning {
+ background-image: none;
+}
+
+.btn-warning.disabled,.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f89406;
+ border-color: #f89406;
+}
+
+.btn-warning .badge {
+ color: #f89406;
+ background-color: #ffffff;
+}
+
+.btn-danger {
+ color: #ffffff;
+ background-color: #ee5f5b;
+ border-color: #ee5f5b;
+}
+
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger:active,
+.btn-danger.active,
+.open .dropdown-toggle.btn-danger {
+ color: #ffffff;
+ background-color: #ea3b36;
+ border-color: #e82924;
+}
+
+.btn-danger:active,.btn-danger.active,
+.open .dropdown-toggle.btn-danger {
+ background-image: none;
+}
+
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #ee5f5b;
+ border-color: #ee5f5b;
+}
+
+.btn-danger .badge {
+ color: #ee5f5b;
+ background-color: #ffffff;
+}
+
+.btn-link {
+ color: #ffffff;
+ font-weight: normal;
+ cursor: pointer;
+ border-radius: 0;
+}
+
+.btn-link,.btn-link:active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn-link,.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+
+.btn-link:hover,.btn-link:focus {
+ color: #ffffff;
+ text-decoration: underline;
+ background-color: transparent;
+}
+
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #7a8288;
+ text-decoration: none;
+}
+
+.btn,.btn:hover {
+ border-color: rgba(0,0,0,0.6);
+ text-shadow: 1px 1px 1px rgba(0,0,0,0.3);
+}
+
+.btn-default {
+ background-image: -webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);
+ background-image: linear-gradient(#484e55, #3a3f44 60%, #313539);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);
+ filter: none;
+}
+
+.btn-default:hover {
+ background-image: -webkit-linear-gradient(#020202, #101112 40%, #191b1d);
+ background-image: linear-gradient(#020202, #101112 40%, #191b1d);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff191b1d', GradientType=0);
+ filter: none;
+}
+
+.btn-primary {
+ background-image: -webkit-linear-gradient(#8a9196, #7a8288 60%, #70787d);
+ background-image: linear-gradient(#8a9196, #7a8288 60%, #70787d);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8a9196', endColorstr='#ff70787d', GradientType=0);
+ filter: none;
+}
+
+.btn-primary:hover {
+ background-image: -webkit-linear-gradient(#404448, #4e5458 40%, #585e62);
+ background-image: linear-gradient(#404448, #4e5458 40%, #585e62);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff404448', endColorstr='#ff585e62', GradientType=0);
+ filter: none;
+}
+
+.btn-success {
+ background-image: -webkit-linear-gradient(#78cc78, #62c462 60%, #53be53);
+ background-image: linear-gradient(#78cc78, #62c462 60%, #53be53);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff78cc78', endColorstr='#ff53be53', GradientType=0);
+ filter: none;
+}
+
+.btn-success:hover {
+ background-image: -webkit-linear-gradient(#2f7d2f, #379337 40%, #3da23d);
+ background-image: linear-gradient(#2f7d2f, #379337 40%, #3da23d);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2f7d2f', endColorstr='#ff3da23d', GradientType=0);
+ filter: none;
+}
+
+.btn-info {
+ background-image: -webkit-linear-gradient(#74cae3, #5bc0de 60%, #4ab9db);
+ background-image: linear-gradient(#74cae3, #5bc0de 60%, #4ab9db);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff74cae3', endColorstr='#ff4ab9db', GradientType=0);
+ filter: none;
+}
+
+.btn-info:hover {
+ background-image: -webkit-linear-gradient(#20829f, #2596b8 40%, #28a4c9);
+ background-image: linear-gradient(#20829f, #2596b8 40%, #28a4c9);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff20829f', endColorstr='#ff28a4c9', GradientType=0);
+ filter: none;
+}
+
+.btn-warning {
+ background-image: -webkit-linear-gradient(#faa123, #f89406 60%, #e48806);
+ background-image: linear-gradient(#faa123, #f89406 60%, #e48806);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffaa123', endColorstr='#ffe48806', GradientType=0);
+ filter: none;
+}
+
+.btn-warning:hover {
+ background-image: -webkit-linear-gradient(#804d03, #9e5f04 40%, #b26a04);
+ background-image: linear-gradient(#804d03, #9e5f04 40%, #b26a04);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff804d03', endColorstr='#ffb26a04', GradientType=0);
+ filter: none;
+}
+
+.btn-danger {
+ background-image: -webkit-linear-gradient(#f17a77, #ee5f5b 60%, #ec4d49);
+ background-image: linear-gradient(#f17a77, #ee5f5b 60%, #ec4d49);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff17a77', endColorstr='#ffec4d49', GradientType=0);
+ filter: none;
+}
+
+.btn-danger:hover {
+ background-image: -webkit-linear-gradient(#bb1813, #d71c16 40%, #e7201a);
+ background-image: linear-gradient(#bb1813, #d71c16 40%, #e7201a);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbb1813', endColorstr='#ffe7201a', GradientType=0);
+ filter: none;
+}
+
+.btn-link,.btn-link:hover {
+ border-color: transparent;
+}
+
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo.css b/priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo.css
new file mode 100644
index 0000000..497b816
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/css/metricsgraphics-demo.css
@@ -0,0 +1,220 @@
+a,
+a:active,
+a:visited {
+ color: steelblue;
+ text-decoration: none;
+}
+
+a:hover {
+ color: steelblue;
+}
+
+a.active {
+ background-color: steelblue;
+ border: 0;
+ border-radius: 24px;
+ color: #fff;
+ padding: 2px 8px 2px 8px;
+ text-decoration: none;
+}
+
+a.examples-options.selected {
+ font-weight: bold;
+}
+
+a:hover.examples-options {
+ text-decoration: none;
+}
+
+body {
+ background-color: #fff;
+ color: #000;
+ font-family: 'Open Sans', sans-serif, Arial;
+}
+
+.btn-group {
+ display: inline-block;
+ margin-left: 3px;
+ margin-right: 3px;
+}
+
+.btn-group span.which-button {
+ font-weight: 300;
+ color: darkgray;
+}
+
+.btn-group span.title {
+ margin-left: 8px;
+ margin-right: 8px;
+}
+
+.data-column {
+ font-size: 0.9rem;
+ margin: 0;
+ position: absolute;
+ right: 0;
+}
+
+#description {
+ margin: auto;
+ margin-bottom: 50px;
+ width: 100%;
+}
+
+.divider {
+ color: #000000;
+ opacity: 0.2;
+}
+
+.examples-options {
+ font-size: 0.8rem;
+}
+
+.float-right {
+ float: right;
+}
+
+.footer {
+ font-size: 0.9rem;
+ padding: 40px;
+ text-align: center;
+}
+
+.head {
+ color: black;
+ margin: auto;
+ margin-bottom: 20px;
+ width: 100%;
+}
+
+.head h1 {
+ font-size: 4.1rem;
+ font-weight: 300;
+ margin: 45px 0 0 0;
+}
+
+ul {
+ clear: both;
+ font-size: 1.2rem;
+ padding: 10px 0 0 0;
+}
+
+.head ul li,
+ul.examples li {
+ display: inline;
+ list-style: none;
+ padding-right: 15px;
+}
+
+ul li.no-padding {
+ padding: 0;
+}
+
+ul.examples li {
+ line-height: 30px;
+}
+
+html {
+ font-size: 12px;
+}
+
+.legend {
+ font-size: 0.9rem;
+ padding: 25px 0 15px 0;
+}
+
+#logo {
+ margin: 60px 0 30px 0;
+ height: 79px;
+ width: 400px;
+}
+
+p {
+ font-family: 'PT Serif', serif;
+ font-size: 1.3rem;
+ line-height: 24px;
+}
+
+.pill {
+ font-family: 'Open Sans', serif;
+ font-size: 1rem;
+ text-transform: uppercase;
+}
+
+.pill:hover {
+ text-decoration: none;
+}
+
+pre {
+ background-color: transparent;
+ border: 0;
+ border-left: 2px solid #ccc;
+ border-radius: 0;
+ font-size: 0.9rem;
+ margin: 40px 0 0 10px;
+ overflow-x: auto;
+ padding: 0;
+ width: 100%;
+ word-wrap: normal;
+}
+
+pre code {
+ white-space: inherit;
+}
+
+pre code.hljs {
+ background-color: transparent;
+}
+
+pre, code, text-area {
+ font-family: "Menlo", monospace;
+}
+
+svg {
+ margin-top: 30px;
+}
+
+#table1 .chart_title {
+ margin-left: 0;
+}
+
+#torso {
+ margin: 0 auto;
+ text-align: center;
+ width: 100%;
+}
+
+#torso div {
+ display: inline-block;
+}
+
+#trunk {
+ margin-top: 40px;
+}
+
+#trunk h2 {
+ font-size: 1.2rem;
+}
+
+#trunk h2.trunk-title {
+ font-size: 2.2rem;
+ font-weight: 300;
+ text-transform: uppercase;
+}
+
+
+.trunk-section {
+ border-top: 1px solid #ccc;
+ padding-bottom: 25px;
+ padding-top: 15px;
+}
+
+.wip {
+ background-color: #f1f1f1;
+ font-size: 1.3rem;
+ margin-top: 60px;
+ padding: 10px;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+ opacity: 0.8;
+} \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/css/railscasts.css b/priv/static/metrics-graphics-3.0-alpha3/examples/css/railscasts.css
new file mode 100644
index 0000000..21efe39
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/css/railscasts.css
@@ -0,0 +1,187 @@
+/*
+
+Railscasts-like style (c) Visoft, Inc. (Damien White)
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #232323;
+ color: #e6e1dc;
+ -webkit-text-size-adjust: none;
+}
+
+.hljs-comment,
+.hljs-javadoc,
+.hljs-shebang {
+ color: #bc9458;
+ font-style: italic;
+}
+
+.hljs-keyword,
+.ruby .hljs-function .hljs-keyword,
+.hljs-request,
+.hljs-status,
+.nginx .hljs-title,
+.method,
+.hljs-list .hljs-title {
+ color: #c26230;
+}
+
+.hljs-string,
+.hljs-number,
+.hljs-regexp,
+.hljs-tag .hljs-value,
+.hljs-cdata,
+.hljs-filter .hljs-argument,
+.hljs-attr_selector,
+.apache .hljs-cbracket,
+.hljs-date,
+.tex .hljs-command,
+.asciidoc .hljs-link_label,
+.markdown .hljs-link_label {
+ color: #a5c261;
+}
+
+.hljs-subst {
+ color: #519f50;
+}
+
+.hljs-tag,
+.hljs-tag .hljs-keyword,
+.hljs-tag .hljs-title,
+.hljs-doctype,
+.hljs-sub .hljs-identifier,
+.hljs-pi,
+.input_number {
+ color: #e8bf6a;
+}
+
+.hljs-identifier {
+ color: #d0d0ff;
+}
+
+.hljs-class .hljs-title,
+.hljs-type,
+.smalltalk .hljs-class,
+.hljs-javadoctag,
+.hljs-yardoctag,
+.hljs-phpdoc,
+.hljs-dartdoc {
+ text-decoration: none;
+}
+
+.hljs-constant {
+ color: #da4939;
+}
+
+
+.hljs-symbol,
+.hljs-built_in,
+.ruby .hljs-symbol .hljs-string,
+.ruby .hljs-symbol .hljs-identifier,
+.asciidoc .hljs-link_url,
+.markdown .hljs-link_url,
+.hljs-attribute {
+ color: #6d9cbe;
+}
+
+.asciidoc .hljs-link_url,
+.markdown .hljs-link_url {
+ text-decoration: underline;
+}
+
+
+
+.hljs-params,
+.hljs-variable,
+.clojure .hljs-attribute {
+ color: #d0d0ff;
+}
+
+.css .hljs-tag,
+.hljs-rules .hljs-property,
+.hljs-pseudo,
+.tex .hljs-special {
+ color: #cda869;
+}
+
+.css .hljs-class {
+ color: #9b703f;
+}
+
+.hljs-rules .hljs-keyword {
+ color: #c5af75;
+}
+
+.hljs-rules .hljs-value {
+ color: #cf6a4c;
+}
+
+.css .hljs-id {
+ color: #8b98ab;
+}
+
+.hljs-annotation,
+.apache .hljs-sqbracket,
+.nginx .hljs-built_in {
+ color: #9b859d;
+}
+
+.hljs-preprocessor,
+.hljs-preprocessor *,
+.hljs-pragma {
+ color: #8996a8 !important;
+}
+
+.hljs-hexcolor,
+.css .hljs-value .hljs-number {
+ color: #a5c261;
+}
+
+.hljs-title,
+.hljs-decorator,
+.css .hljs-function {
+ color: #ffc66d;
+}
+
+.diff .hljs-header,
+.hljs-chunk {
+ background-color: #2f33ab;
+ color: #e6e1dc;
+ display: inline-block;
+ width: 100%;
+}
+
+.diff .hljs-change {
+ background-color: #4a410d;
+ color: #f8f8f8;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-addition {
+ background-color: #144212;
+ color: #e6e1dc;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-deletion {
+ background-color: #600;
+ color: #e6e1dc;
+ display: inline-block;
+ width: 100%;
+}
+
+.coffeescript .javascript,
+.javascript .xml,
+.tex .hljs-formula,
+.xml .javascript,
+.xml .vbscript,
+.xml .css,
+.xml .hljs-cdata {
+ opacity: 0.7;
+}
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/brief-1.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/brief-1.json
new file mode 100644
index 0000000..f84a3ff
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/brief-1.json
@@ -0,0 +1,402 @@
+[
+ {
+ "date": "2014-02-01",
+ "value": 15000000
+ },
+ {
+ "date": "2014-02-02",
+ "value": 16487625
+ },
+ {
+ "date": "2014-02-03",
+ "value": 17097434
+ },
+ {
+ "date": "2014-02-04",
+ "value": 17694420
+ },
+ {
+ "date": "2014-02-05",
+ "value": 17014381
+ },
+ {
+ "date": "2014-02-06",
+ "value": 15578984
+ },
+ {
+ "date": "2014-02-07",
+ "value": 14718953
+ },
+ {
+ "date": "2014-02-08",
+ "value": 15020669
+ },
+ {
+ "date": "2014-02-09",
+ "value": 13889722
+ },
+ {
+ "date": "2014-02-10",
+ "value": 13979897
+ },
+ {
+ "date": "2014-02-11",
+ "value": 14595566
+ },
+ {
+ "date": "2014-02-12",
+ "value": 14123256
+ },
+ {
+ "date": "2014-02-13",
+ "value": 14083675
+ },
+ {
+ "date": "2014-02-14",
+ "value": 15068426
+ },
+ {
+ "date": "2014-02-15",
+ "value": 15368056
+ },
+ {
+ "date": "2014-02-16",
+ "value": 15277054
+ },
+ {
+ "date": "2014-02-17",
+ "value": 14376243
+ },
+ {
+ "date": "2014-02-18",
+ "value": 13058892
+ },
+ {
+ "date": "2014-02-19",
+ "value": 12367653
+ },
+ {
+ "date": "2014-02-20",
+ "value": 13184423
+ },
+ {
+ "date": "2014-02-21",
+ "value": 14367203
+ },
+ {
+ "date": "2014-02-22",
+ "value": 14656447
+ },
+ {
+ "date": "2014-02-23",
+ "value": 14724526
+ },
+ {
+ "date": "2014-02-24",
+ "value": 14938129
+ },
+ {
+ "date": "2014-02-25",
+ "value": 14205617
+ },
+ {
+ "date": "2014-02-26",
+ "value": 14596607
+ },
+ {
+ "date": "2014-02-27",
+ "value": 13982597
+ },
+ {
+ "date": "2014-02-28",
+ "value": 15107034
+ },
+ {
+ "date": "2014-03-01",
+ "value": 13646739
+ },
+ {
+ "date": "2014-03-02",
+ "value": 14214763
+ },
+ {
+ "date": "2014-03-03",
+ "value": 14952136
+ },
+ {
+ "date": "2014-03-04",
+ "value": 14643933
+ },
+ {
+ "date": "2014-03-05",
+ "value": 13611435
+ },
+ {
+ "date": "2014-03-06",
+ "value": 12569788
+ },
+ {
+ "date": "2014-03-07",
+ "value": 11344469
+ },
+ {
+ "date": "2014-03-08",
+ "value": 12687132
+ },
+ {
+ "date": "2014-03-09",
+ "value": 11831144
+ },
+ {
+ "date": "2014-03-10",
+ "value": 10480837
+ },
+ {
+ "date": "2014-03-11",
+ "value": 9051161
+ },
+ {
+ "date": "2014-03-12",
+ "value": 9964784
+ },
+ {
+ "date": "2014-03-13",
+ "value": 11035006
+ },
+ {
+ "date": "2014-03-14",
+ "value": 10081289
+ },
+ {
+ "date": "2014-03-15",
+ "value": 9793897
+ },
+ {
+ "date": "2014-03-16",
+ "value": 9177447
+ },
+ {
+ "date": "2014-03-17",
+ "value": 8035348
+ },
+ {
+ "date": "2014-03-18",
+ "value": 6770242
+ },
+ {
+ "date": "2014-03-19",
+ "value": 7272077
+ },
+ {
+ "date": "2014-03-20",
+ "value": 8216348
+ },
+ {
+ "date": "2014-03-21",
+ "value": 8576584
+ },
+ {
+ "date": "2014-03-22",
+ "value": 9421060
+ },
+ {
+ "date": "2014-03-23",
+ "value": 10872288
+ },
+ {
+ "date": "2014-03-24",
+ "value": 9537996
+ },
+ {
+ "date": "2014-03-25",
+ "value": 9560363
+ },
+ {
+ "date": "2014-03-26",
+ "value": 8182813
+ },
+ {
+ "date": "2014-03-27",
+ "value": 9068173
+ },
+ {
+ "date": "2014-03-28",
+ "value": 10390251
+ },
+ {
+ "date": "2014-03-29",
+ "value": 9714081
+ },
+ {
+ "date": "2014-03-30",
+ "value": 9994670
+ },
+ {
+ "date": "2014-03-31",
+ "value": 9317878
+ },
+ {
+ "date": "2014-04-01",
+ "value": 8209077
+ },
+ {
+ "date": "2014-04-02",
+ "value": 9230830
+ },
+ {
+ "date": "2014-04-03",
+ "value": 8978342
+ },
+ {
+ "date": "2014-04-04",
+ "value": 8361854
+ },
+ {
+ "date": "2014-04-05",
+ "value": 9345999
+ },
+ {
+ "date": "2014-04-06",
+ "value": 7965407
+ },
+ {
+ "date": "2014-04-07",
+ "value": 8909276
+ },
+ {
+ "date": "2014-04-08",
+ "value": 8935489
+ },
+ {
+ "date": "2014-04-09",
+ "value": 8634997
+ },
+ {
+ "date": "2014-04-10",
+ "value": 8795592
+ },
+ {
+ "date": "2014-04-11",
+ "value": 7513086
+ },
+ {
+ "date": "2014-04-12",
+ "value": 8408561
+ },
+ {
+ "date": "2014-04-13",
+ "value": 7780649
+ },
+ {
+ "date": "2014-04-14",
+ "value": 7524281
+ },
+ {
+ "date": "2014-04-15",
+ "value": 8498062
+ },
+ {
+ "date": "2014-04-16",
+ "value": 7922453
+ },
+ {
+ "date": "2014-04-17",
+ "value": 9304312
+ },
+ {
+ "date": "2014-04-18",
+ "value": 8199457
+ },
+ {
+ "date": "2014-04-19",
+ "value": 8926136
+ },
+ {
+ "date": "2014-04-20",
+ "value": 7558184
+ },
+ {
+ "date": "2014-04-21",
+ "value": 6417511
+ },
+ {
+ "date": "2014-04-22",
+ "value": 5748831
+ },
+ {
+ "date": "2014-04-23",
+ "value": 6503022
+ },
+ {
+ "date": "2014-04-24",
+ "value": 6429606
+ },
+ {
+ "date": "2014-04-25",
+ "value": 5057410
+ },
+ {
+ "date": "2014-04-26",
+ "value": 5924669
+ },
+ {
+ "date": "2014-04-27",
+ "value": 4728239
+ },
+ {
+ "date": "2014-04-28",
+ "value": 3918540
+ },
+ {
+ "date": "2014-04-29",
+ "value": 2821473
+ },
+ {
+ "date": "2014-04-30",
+ "value": 1995781
+ },
+ {
+ "date": "2014-05-01",
+ "value": 1123626
+ },
+ {
+ "date": "2014-05-02",
+ "value": 516067
+ },
+ {
+ "date": "2014-05-03",
+ "value": 816831
+ },
+ {
+ "date": "2014-05-04",
+ "value": 816831
+ },
+ {
+ "date": "2014-05-05",
+ "value": 816831
+ },
+ {
+ "date": "2014-05-06",
+ "value": 1103818
+ },
+ {
+ "date": "2014-05-07",
+ "value": 958188
+ },
+ {
+ "date": "2014-05-08",
+ "value": 592995
+ },
+ {
+ "date": "2014-05-09",
+ "value": 856066
+ },
+ {
+ "date": "2014-05-10",
+ "value": 1766761
+ },
+ {
+ "date": "2014-05-11",
+ "value": 1330557
+ }
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/brief-2.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/brief-2.json
new file mode 100644
index 0000000..6bea2bc
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/brief-2.json
@@ -0,0 +1,402 @@
+[
+ {
+ "date": "2014-02-01",
+ "value": 15000000
+ },
+ {
+ "date": "2014-02-02",
+ "value": 14603908
+ },
+ {
+ "date": "2014-02-03",
+ "value": 16058813
+ },
+ {
+ "date": "2014-02-04",
+ "value": 16751442
+ },
+ {
+ "date": "2014-02-05",
+ "value": 18236063
+ },
+ {
+ "date": "2014-02-06",
+ "value": 19276343
+ },
+ {
+ "date": "2014-02-07",
+ "value": 17869996
+ },
+ {
+ "date": "2014-02-08",
+ "value": 18283550
+ },
+ {
+ "date": "2014-02-09",
+ "value": 18146798
+ },
+ {
+ "date": "2014-02-10",
+ "value": 19114034
+ },
+ {
+ "date": "2014-02-11",
+ "value": 18243994
+ },
+ {
+ "date": "2014-02-12",
+ "value": 18230379
+ },
+ {
+ "date": "2014-02-13",
+ "value": 17569438
+ },
+ {
+ "date": "2014-02-14",
+ "value": 18237141
+ },
+ {
+ "date": "2014-02-15",
+ "value": 18177790
+ },
+ {
+ "date": "2014-02-16",
+ "value": 19278138
+ },
+ {
+ "date": "2014-02-17",
+ "value": 19520468
+ },
+ {
+ "date": "2014-02-18",
+ "value": 18074007
+ },
+ {
+ "date": "2014-02-19",
+ "value": 17387983
+ },
+ {
+ "date": "2014-02-20",
+ "value": 16303246
+ },
+ {
+ "date": "2014-02-21",
+ "value": 16532377
+ },
+ {
+ "date": "2014-02-22",
+ "value": 15992596
+ },
+ {
+ "date": "2014-02-23",
+ "value": 14510598
+ },
+ {
+ "date": "2014-02-24",
+ "value": 15242619
+ },
+ {
+ "date": "2014-02-25",
+ "value": 15099566
+ },
+ {
+ "date": "2014-02-26",
+ "value": 15786161
+ },
+ {
+ "date": "2014-02-27",
+ "value": 17041993
+ },
+ {
+ "date": "2014-02-28",
+ "value": 17792064
+ },
+ {
+ "date": "2014-03-01",
+ "value": 17135803
+ },
+ {
+ "date": "2014-03-02",
+ "value": 17902796
+ },
+ {
+ "date": "2014-03-03",
+ "value": 18082480
+ },
+ {
+ "date": "2014-03-04",
+ "value": 16599484
+ },
+ {
+ "date": "2014-03-05",
+ "value": 15556006
+ },
+ {
+ "date": "2014-03-06",
+ "value": 16095932
+ },
+ {
+ "date": "2014-03-07",
+ "value": 15877165
+ },
+ {
+ "date": "2014-03-08",
+ "value": 16184507
+ },
+ {
+ "date": "2014-03-09",
+ "value": 17578551
+ },
+ {
+ "date": "2014-03-10",
+ "value": 17397416
+ },
+ {
+ "date": "2014-03-11",
+ "value": 18665547
+ },
+ {
+ "date": "2014-03-12",
+ "value": 17599363
+ },
+ {
+ "date": "2014-03-13",
+ "value": 16625060
+ },
+ {
+ "date": "2014-03-14",
+ "value": 15823403
+ },
+ {
+ "date": "2014-03-15",
+ "value": 17166280
+ },
+ {
+ "date": "2014-03-16",
+ "value": 17214931
+ },
+ {
+ "date": "2014-03-17",
+ "value": 18057950
+ },
+ {
+ "date": "2014-03-18",
+ "value": 18467657
+ },
+ {
+ "date": "2014-03-19",
+ "value": 18174411
+ },
+ {
+ "date": "2014-03-20",
+ "value": 17726332
+ },
+ {
+ "date": "2014-03-21",
+ "value": 18624889
+ },
+ {
+ "date": "2014-03-22",
+ "value": 18442598
+ },
+ {
+ "date": "2014-03-23",
+ "value": 17924421
+ },
+ {
+ "date": "2014-03-24",
+ "value": 17943620
+ },
+ {
+ "date": "2014-03-25",
+ "value": 17787115
+ },
+ {
+ "date": "2014-03-26",
+ "value": 16707201
+ },
+ {
+ "date": "2014-03-27",
+ "value": 17013779
+ },
+ {
+ "date": "2014-03-28",
+ "value": 17468840
+ },
+ {
+ "date": "2014-03-29",
+ "value": 16855965
+ },
+ {
+ "date": "2014-03-30",
+ "value": 16198783
+ },
+ {
+ "date": "2014-03-31",
+ "value": 17237410
+ },
+ {
+ "date": "2014-04-01",
+ "value": 16157939
+ },
+ {
+ "date": "2014-04-02",
+ "value": 15279153
+ },
+ {
+ "date": "2014-04-03",
+ "value": 16007123
+ },
+ {
+ "date": "2014-04-04",
+ "value": 15394272
+ },
+ {
+ "date": "2014-04-05",
+ "value": 15753468
+ },
+ {
+ "date": "2014-04-06",
+ "value": 14785435
+ },
+ {
+ "date": "2014-04-07",
+ "value": 14894846
+ },
+ {
+ "date": "2014-04-08",
+ "value": 16113018
+ },
+ {
+ "date": "2014-04-09",
+ "value": 17083579
+ },
+ {
+ "date": "2014-04-10",
+ "value": 17318911
+ },
+ {
+ "date": "2014-04-11",
+ "value": 17301918
+ },
+ {
+ "date": "2014-04-12",
+ "value": 16294357
+ },
+ {
+ "date": "2014-04-13",
+ "value": 17006382
+ },
+ {
+ "date": "2014-04-14",
+ "value": 16305037
+ },
+ {
+ "date": "2014-04-15",
+ "value": 17173934
+ },
+ {
+ "date": "2014-04-16",
+ "value": 16519521
+ },
+ {
+ "date": "2014-04-17",
+ "value": 15741197
+ },
+ {
+ "date": "2014-04-18",
+ "value": 15685527
+ },
+ {
+ "date": "2014-04-19",
+ "value": 16593307
+ },
+ {
+ "date": "2014-04-20",
+ "value": 15108037
+ },
+ {
+ "date": "2014-04-21",
+ "value": 14280930
+ },
+ {
+ "date": "2014-04-22",
+ "value": 15048575
+ },
+ {
+ "date": "2014-04-23",
+ "value": 13925294
+ },
+ {
+ "date": "2014-04-24",
+ "value": 13655381
+ },
+ {
+ "date": "2014-04-25",
+ "value": 14083620
+ },
+ {
+ "date": "2014-04-26",
+ "value": 14390459
+ },
+ {
+ "date": "2014-04-27",
+ "value": 14253026
+ },
+ {
+ "date": "2014-04-28",
+ "value": 15524371
+ },
+ {
+ "date": "2014-04-29",
+ "value": 14810508
+ },
+ {
+ "date": "2014-04-30",
+ "value": 14942971
+ },
+ {
+ "date": "2014-05-01",
+ "value": 13849556
+ },
+ {
+ "date": "2014-05-02",
+ "value": 14811628
+ },
+ {
+ "date": "2014-05-03",
+ "value": 13489786
+ },
+ {
+ "date": "2014-05-04",
+ "value": 13875740
+ },
+ {
+ "date": "2014-05-05",
+ "value": 14581874
+ },
+ {
+ "date": "2014-05-06",
+ "value": 15856637
+ },
+ {
+ "date": "2014-05-07",
+ "value": 15377926
+ },
+ {
+ "date": "2014-05-08",
+ "value": 14523507
+ },
+ {
+ "date": "2014-05-09",
+ "value": 14629800
+ },
+ {
+ "date": "2014-05-10",
+ "value": 14018497
+ },
+ {
+ "date": "2014-05-11",
+ "value": 12917428
+ }
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/confidence_band.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/confidence_band.json
new file mode 100644
index 0000000..0fb6dea
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/confidence_band.json
@@ -0,0 +1,548 @@
+ [
+ {
+ "value": -1.1618426259,
+ "date": "2012-08-28",
+ "l": -2.6017329022,
+ "u": 0.2949717757
+ },
+ {
+ "value": -0.5828247293,
+ "date": "2012-08-29",
+ "l": -1.3166963635,
+ "u": 0.1324086347
+ },
+ {
+ "value": -0.3790770636,
+ "date": "2012-08-30",
+ "l": -0.8712221305,
+ "u": 0.0956413566
+ },
+ {
+ "value": -0.2792926002,
+ "date": "2012-08-31",
+ "l": -0.6541832008,
+ "u": 0.0717120241
+ },
+ {
+ "value": -0.2461165469,
+ "date": "2012-09-01",
+ "l": -0.5222677907,
+ "u": 0.0594188803
+ },
+ {
+ "value": -0.2017354137,
+ "date": "2012-09-02",
+ "l": -0.4434280535,
+ "u": 0.0419213465
+ },
+ {
+ "value": -0.1457476871,
+ "date": "2012-09-03",
+ "l": -0.3543957712,
+ "u": 0.0623761171
+ },
+ {
+ "value": -0.002610973,
+ "date": "2012-09-04",
+ "l": -0.3339911495,
+ "u": 0.031286929
+ },
+ {
+ "value": -0.0080692734,
+ "date": "2012-09-05",
+ "l": -0.2951839941,
+ "u": 0.0301762553
+ },
+ {
+ "value": -0.0296490933,
+ "date": "2012-09-06",
+ "l": -0.2964395801,
+ "u": -0.0029821004
+ },
+ {
+ "value": 0.001317397,
+ "date": "2012-09-07",
+ "l": -0.2295443759,
+ "u": 0.037903312
+ },
+ {
+ "value": -0.0117649838,
+ "date": "2012-09-08",
+ "l": -0.2226376418,
+ "u": 0.0239720183
+ },
+ {
+ "value": 0.0059394263,
+ "date": "2012-09-09",
+ "l": -0.2020479849,
+ "u": 0.0259489347
+ },
+ {
+ "value": -0.0115565898,
+ "date": "2012-09-10",
+ "l": -0.2042048037,
+ "u": 0.0077863806
+ },
+ {
+ "value": 0.0041183019,
+ "date": "2012-09-11",
+ "l": -0.1837263172,
+ "u": 0.0137898406
+ },
+ {
+ "value": 0.0353559544,
+ "date": "2012-09-12",
+ "l": -0.136610008,
+ "u": 0.051403828
+ },
+ {
+ "value": 0.0070046011,
+ "date": "2012-09-13",
+ "l": -0.1569988647,
+ "u": 0.0202266411
+ },
+ {
+ "value": -0.0004251807,
+ "date": "2012-09-14",
+ "l": -0.1410340292,
+ "u": 0.0273410185
+ },
+ {
+ "value": -0.0035461023,
+ "date": "2012-09-15",
+ "l": -0.1438653689,
+ "u": 0.0165445684
+ },
+ {
+ "value": 0.007797889,
+ "date": "2012-09-16",
+ "l": -0.1291975355,
+ "u": 0.0232461153
+ },
+ {
+ "value": 0.0025402723,
+ "date": "2012-09-17",
+ "l": -0.133972479,
+ "u": 0.0116753921
+ },
+ {
+ "value": -0.005317381,
+ "date": "2012-09-18",
+ "l": -0.1269266586,
+ "u": 0.0129723291
+ },
+ {
+ "value": -0.0075841521,
+ "date": "2012-09-19",
+ "l": -0.1283478383,
+ "u": 0.0056371616
+ },
+ {
+ "value": -0.0391388721,
+ "date": "2012-09-20",
+ "l": -0.1571172198,
+ "u": -0.0311678828
+ },
+ {
+ "value": 0.0075430252,
+ "date": "2012-09-21",
+ "l": -0.1097354417,
+ "u": 0.0141132062
+ },
+ {
+ "value": 0.1850284663,
+ "date": "2012-09-22",
+ "l": 0.0333682152,
+ "u": 0.2140709422
+ },
+ {
+ "value": 0.076629596,
+ "date": "2012-09-23",
+ "l": -0.0068472967,
+ "u": 0.1101280569
+ },
+ {
+ "value": -0.0314292271,
+ "date": "2012-09-24",
+ "l": -0.1074281762,
+ "u": 0.0032669363
+ },
+ {
+ "value": -0.0232608674,
+ "date": "2012-09-25",
+ "l": -0.0905197842,
+ "u": 0.0164250295
+ },
+ {
+ "value": -0.01968615,
+ "date": "2012-09-26",
+ "l": -0.084319856,
+ "u": 0.0193319465
+ },
+ {
+ "value": -0.0310196816,
+ "date": "2012-09-27",
+ "l": -0.0914356781,
+ "u": 0.0094436256
+ },
+ {
+ "value": -0.0758746967,
+ "date": "2012-09-28",
+ "l": -0.1169814745,
+ "u": -0.019659551
+ },
+ {
+ "value": 0.0233974572,
+ "date": "2012-09-29",
+ "l": -0.0356839258,
+ "u": 0.0610712506
+ },
+ {
+ "value": 0.011073579,
+ "date": "2012-09-30",
+ "l": -0.0558712863,
+ "u": 0.0346160081
+ },
+ {
+ "value": -0.002094822,
+ "date": "2012-10-01",
+ "l": -0.0707143388,
+ "u": 0.0152899266
+ },
+ {
+ "value": -0.1083707096,
+ "date": "2012-10-02",
+ "l": -0.1718101335,
+ "u": -0.0886271057
+ },
+ {
+ "value": -0.1098258972,
+ "date": "2012-10-03",
+ "l": -0.1881274065,
+ "u": -0.1072157972
+ },
+ {
+ "value": -0.0872970297,
+ "date": "2012-10-04",
+ "l": -0.1731903321,
+ "u": -0.064381434
+ },
+ {
+ "value": -0.0761992047,
+ "date": "2012-10-05",
+ "l": -0.1770373817,
+ "u": 0.100085727
+ },
+ {
+ "value": -0.0416654249,
+ "date": "2012-10-06",
+ "l": -0.1502479611,
+ "u": 0.0751148102
+ },
+ {
+ "value": -0.0410128962,
+ "date": "2012-10-07",
+ "l": -0.1618694445,
+ "u": 0.0881453482
+ },
+ {
+ "value": -0.0214289042,
+ "date": "2012-10-08",
+ "l": -0.1590852977,
+ "u": 0.0871880288
+ },
+ {
+ "value": 0.2430880604,
+ "date": "2012-10-09",
+ "l": 0.063624221,
+ "u": 0.2455101587
+ },
+ {
+ "value": 0.3472823479,
+ "date": "2012-10-10",
+ "l": 0.1553854927,
+ "u": 0.3583991097
+ },
+ {
+ "value": 0.3360734074,
+ "date": "2012-10-11",
+ "l": 0.2055952772,
+ "u": 0.3812162823
+ },
+ {
+ "value": -0.0463648355,
+ "date": "2012-10-12",
+ "l": -0.0626466998,
+ "u": 0.0037342957
+ },
+ {
+ "value": -0.0867009379,
+ "date": "2012-10-13",
+ "l": -0.0867594055,
+ "u": -0.0223791074
+ },
+ {
+ "value": -0.1288672826,
+ "date": "2012-10-14",
+ "l": -0.1161709129,
+ "u": -0.0534789124
+ },
+ {
+ "value": -0.1474426821,
+ "date": "2012-10-15",
+ "l": -0.1559759048,
+ "u": -0.0646995092
+ },
+ {
+ "value": -0.1502405066,
+ "date": "2012-10-16",
+ "l": -0.1604364638,
+ "u": -0.0602562376
+ },
+ {
+ "value": -0.1203765529,
+ "date": "2012-10-17",
+ "l": -0.1569023195,
+ "u": -0.0578129637
+ },
+ {
+ "value": -0.0649122919,
+ "date": "2012-10-18",
+ "l": -0.0782987564,
+ "u": -0.0501999174
+ },
+ {
+ "value": -0.015525562,
+ "date": "2012-10-19",
+ "l": -0.1103873808,
+ "u": -0.0132131311
+ },
+ {
+ "value": -0.006051357,
+ "date": "2012-10-20",
+ "l": -0.1089644497,
+ "u": 0.0230384197
+ },
+ {
+ "value": 0.0003154213,
+ "date": "2012-10-21",
+ "l": -0.1073849227,
+ "u": 0.0017290437
+ },
+ {
+ "value": -0.0063018298,
+ "date": "2012-10-22",
+ "l": -0.1120298155,
+ "u": 0.0173284555
+ },
+ {
+ "value": -0.004294834,
+ "date": "2012-10-23",
+ "l": -0.1076841119,
+ "u": 0.0547933965
+ },
+ {
+ "value": -0.0053400832,
+ "date": "2012-10-24",
+ "l": -0.1096991408,
+ "u": 0.0560555803
+ },
+ {
+ "value": 0.0070057212,
+ "date": "2012-10-25",
+ "l": -0.0940613813,
+ "u": 0.0425517607
+ },
+ {
+ "value": 0.0082121656,
+ "date": "2012-10-26",
+ "l": -0.0906810455,
+ "u": 0.0396884383
+ },
+ {
+ "value": 0.0141422884,
+ "date": "2012-10-27",
+ "l": -0.0841305678,
+ "u": 0.0340050012
+ },
+ {
+ "value": 0.0041613553,
+ "date": "2012-10-28",
+ "l": -0.0886723749,
+ "u": 0.039426727
+ },
+ {
+ "value": -0.0013614287,
+ "date": "2012-10-29",
+ "l": -0.0923481608,
+ "u": 0.0438725574
+ },
+ {
+ "value": -0.0052144933,
+ "date": "2012-10-30",
+ "l": -0.0937763043,
+ "u": 0.0459998555
+ },
+ {
+ "value": 0.0078904741,
+ "date": "2012-10-31",
+ "l": -0.0807028001,
+ "u": 0.0334824169
+ },
+ {
+ "value": 0.0099598702,
+ "date": "2012-11-01",
+ "l": -0.0740001323,
+ "u": 0.0280264274
+ },
+ {
+ "value": 0.0001146029,
+ "date": "2012-11-02",
+ "l": -0.0820430294,
+ "u": 0.0326771125
+ },
+ {
+ "value": 0.0047572651,
+ "date": "2012-11-03",
+ "l": -0.0754113825,
+ "u": 0.0294912577
+ },
+ {
+ "value": 0.006204557,
+ "date": "2012-11-04",
+ "l": -0.0750627059,
+ "u": 0.029693607
+ },
+ {
+ "value": 0.0115231406,
+ "date": "2012-11-05",
+ "l": -0.0663484142,
+ "u": 0.0214084056
+ },
+ {
+ "value": -0.0032634994,
+ "date": "2012-11-06",
+ "l": -0.0793170451,
+ "u": 0.0355159827
+ },
+ {
+ "value": -0.0108985452,
+ "date": "2012-11-07",
+ "l": -0.0846123893,
+ "u": 0.0409797057
+ },
+ {
+ "value": -0.0092766813,
+ "date": "2012-11-08",
+ "l": -0.0802668328,
+ "u": 0.0373886301
+ },
+ {
+ "value": 0.0095972086,
+ "date": "2012-11-09",
+ "l": -0.0623739694,
+ "u": 0.0194918693
+ },
+ {
+ "value": -0.0111809358,
+ "date": "2012-11-10",
+ "l": -0.0819555908,
+ "u": 0.038335749
+ },
+ {
+ "value": -0.0023572296,
+ "date": "2012-11-11",
+ "l": -0.0745443377,
+ "u": 0.0306093592
+ },
+ {
+ "value": 0.0084213775,
+ "date": "2012-11-12",
+ "l": -0.0657707155,
+ "u": 0.0227270619
+ },
+ {
+ "value": 0.0107446453,
+ "date": "2012-11-13",
+ "l": -0.0617995017,
+ "u": 0.0196547867
+ },
+ {
+ "value": 0.009457792,
+ "date": "2012-11-14",
+ "l": -0.0597697849,
+ "u": 0.0191832343
+ },
+ {
+ "value": 0.0031194779,
+ "date": "2012-11-15",
+ "l": -0.0589126783,
+ "u": 0.0186409442
+ },
+ {
+ "value": -0.0115128213,
+ "date": "2012-11-16",
+ "l": -0.0767105447,
+ "u": 0.0370292452
+ },
+ {
+ "value": 0.0058347339,
+ "date": "2012-11-17",
+ "l": -0.0592236472,
+ "u": 0.0198181452
+ },
+ {
+ "value": -0.0235630436,
+ "date": "2012-11-18",
+ "l": -0.083529944,
+ "u": 0.046280909
+ },
+ {
+ "value": -0.0479795964,
+ "date": "2012-11-19",
+ "l": -0.1086422529,
+ "u": 0.0113044645
+ },
+ {
+ "value": -0.0218184359,
+ "date": "2012-11-21",
+ "l": -0.0881634878,
+ "u": 0.0448568265
+ },
+ {
+ "value": -0.0071361172,
+ "date": "2012-11-28",
+ "l": -0.0807350229,
+ "u": 0.0453599734
+ },
+ {
+ "value": -0.0151966912,
+ "date": "2012-12-05",
+ "l": -0.089995793,
+ "u": 0.0558329569
+ },
+ {
+ "value": -0.0097784855,
+ "date": "2012-12-12",
+ "l": -0.089466481,
+ "u": 0.0550191387
+ },
+ {
+ "value": -0.0095681495,
+ "date": "2012-12-19",
+ "l": -0.090513354,
+ "u": 0.057073314
+ },
+ {
+ "value": -0.0034165915,
+ "date": "2012-12-27",
+ "l": -0.0907151292,
+ "u": 0.0561479112
+ },
+ {
+ "value": 0.3297981389,
+ "date": "2012-12-31",
+ "l": 0.1537781522,
+ "u": 0.3499473316
+ }
+ ] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users1.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users1.json
new file mode 100644
index 0000000..4550c0f
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users1.json
@@ -0,0 +1,483 @@
+
+ [
+ {
+ "date": "2014-01-01",
+ "value": 190000000
+ },
+ {
+ "date": "2014-01-02",
+ "value": 190379978
+ },
+ {
+ "date": "2014-01-03",
+ "value": 90493749
+ },
+ {
+ "date": "2014-01-04",
+ "value": 190785250
+ },
+ {
+ "date": "2014-01-05",
+ "value": 197391904
+ },
+ {
+ "date": "2014-01-06",
+ "value": 191576838
+ },
+ {
+ "date": "2014-01-07",
+ "value": 191413854
+ },
+ {
+ "date": "2014-01-08",
+ "value": 142177211
+ },
+ {
+ "date": "2014-01-09",
+ "value": 103762210
+ },
+ {
+ "date": "2014-01-10",
+ "value": 144381072
+ },
+ {
+ "date": "2014-01-11",
+ "value": 154352310
+ },
+ {
+ "date": "2014-01-12",
+ "value": 165531790
+ },
+ {
+ "date": "2014-01-13",
+ "value": 175748881
+ },
+ {
+ "date": "2014-01-14",
+ "value": 187064037
+ },
+ {
+ "date": "2014-01-15",
+ "value": 197520685
+ },
+ {
+ "date": "2014-01-16",
+ "value": 210176418
+ },
+ {
+ "date": "2014-01-17",
+ "value": 196122924
+ },
+ {
+ "date": "2014-01-18",
+ "value": 157337480
+ },
+ {
+ "date": "2014-01-19",
+ "value": 200258882
+ },
+ {
+ "date": "2014-01-20",
+ "value": 186829538
+ },
+ {
+ "date": "2014-01-21",
+ "value": 112456897
+ },
+ {
+ "date": "2014-01-22",
+ "value": 114299711
+ },
+ {
+ "date": "2014-01-23",
+ "value": 122759017
+ },
+ {
+ "date": "2014-01-24",
+ "value": 203596183
+ },
+ {
+ "date": "2014-01-25",
+ "value": 208107346
+ },
+ {
+ "date": "2014-01-26",
+ "value": 196359852
+ },
+ {
+ "date": "2014-01-27",
+ "value": 192570783
+ },
+ {
+ "date": "2014-01-28",
+ "value": 177967768
+ },
+ {
+ "date": "2014-01-29",
+ "value": 190632803
+ },
+ {
+ "date": "2014-01-30",
+ "value": 203725316
+ },
+ {
+ "date": "2014-01-31",
+ "value": 118226177
+ },
+ {
+ "date": "2014-02-01",
+ "value": 210698669
+ },
+ {
+ "date": "2014-02-02",
+ "value": 217640656
+ },
+ {
+ "date": "2014-02-03",
+ "value": 216142362
+ },
+ {
+ "date": "2014-02-04",
+ "value": 201410971
+ },
+ {
+ "date": "2014-02-05",
+ "value": 196704289
+ },
+ {
+ "date": "2014-02-06",
+ "value": 190436945
+ },
+ {
+ "date": "2014-02-07",
+ "value": 178891686
+ },
+ {
+ "date": "2014-02-08",
+ "value": 171613962
+ },
+ {
+ "date": "2014-02-09",
+ "value": 107579773
+ },
+ {
+ "date": "2014-02-10",
+ "value": 158677098
+ },
+ {
+ "date": "2014-02-11",
+ "value": 147129977
+ },
+ {
+ "date": "2014-02-12",
+ "value": 151561876
+ },
+ {
+ "date": "2014-02-13",
+ "value": 151627421
+ },
+ {
+ "date": "2014-02-14",
+ "value": 143543872
+ },
+ {
+ "date": "2014-02-15",
+ "value": 136581057
+ },
+ {
+ "date": "2014-02-16",
+ "value": 135560715
+ },
+ {
+ "date": "2014-02-17",
+ "value": 122625263
+ },
+ {
+ "date": "2014-02-18",
+ "value": 112091484
+ },
+ {
+ "date": "2014-02-19",
+ "value": 98810329
+ },
+ {
+ "date": "2014-02-20",
+ "value": 99882912
+ },
+ {
+ "date": "2014-02-21",
+ "value": 94943095
+ },
+ {
+ "date": "2014-02-22",
+ "value": 104875743
+ },
+ {
+ "date": "2014-02-23",
+ "value": 116383678
+ },
+ {
+ "date": "2014-02-24",
+ "value": 105028841
+ },
+ {
+ "date": "2014-02-25",
+ "value": 123967310
+ },
+ {
+ "date": "2014-02-26",
+ "value": 133167029
+ },
+ {
+ "date": "2014-02-27",
+ "value": 128577263
+ },
+ {
+ "date": "2014-02-28",
+ "value": 115836969
+ },
+ {
+ "date": "2014-03-01",
+ "value": 119264529
+ },
+ {
+ "date": "2014-03-02",
+ "value": 109363374
+ },
+ {
+ "date": "2014-03-03",
+ "value": 113985628
+ },
+ {
+ "date": "2014-03-04",
+ "value": 114650999
+ },
+ {
+ "date": "2014-03-05",
+ "value": 110866108
+ },
+ {
+ "date": "2014-03-06",
+ "value": 96473454
+ },
+ {
+ "date": "2014-03-07",
+ "value": 84075886
+ },
+ {
+ "date": "2014-03-08",
+ "value": 103568384
+ },
+ {
+ "date": "2014-03-09",
+ "value": 101534883
+ },
+ {
+ "date": "2014-03-10",
+ "value": 115825447
+ },
+ {
+ "date": "2014-03-11",
+ "value": 126133916
+ },
+ {
+ "date": "2014-03-12",
+ "value": 116502109
+ },
+ {
+ "date": "2014-03-13",
+ "value": 80169411
+ },
+ {
+ "date": "2014-03-14",
+ "value": 84296886
+ },
+ {
+ "date": "2014-03-15",
+ "value": 86347399
+ },
+ {
+ "date": "2014-03-16",
+ "value": 31483669
+ },
+ {
+ "date": "2014-03-17",
+ "value": 142811333
+ },
+ {
+ "date": "2014-03-18",
+ "value": 89675396
+ },
+ {
+ "date": "2014-03-19",
+ "value": 115514483
+ },
+ {
+ "date": "2014-03-20",
+ "value": 117630630
+ },
+ {
+ "date": "2014-03-21",
+ "value": 122340239
+ },
+ {
+ "date": "2014-03-22",
+ "value": 132349091
+ },
+ {
+ "date": "2014-03-23",
+ "value": 125613305
+ },
+ {
+ "date": "2014-03-24",
+ "value": 135592466
+ },
+ {
+ "date": "2014-03-25",
+ "value": 123408762
+ },
+ {
+ "date": "2014-03-26",
+ "value": 111991454
+ },
+ {
+ "date": "2014-03-27",
+ "value": 116123955
+ },
+ {
+ "date": "2014-03-28",
+ "value": 112817214
+ },
+ {
+ "date": "2014-03-29",
+ "value": 113029590
+ },
+ {
+ "date": "2014-03-30",
+ "value": 108753398
+ },
+ {
+ "date": "2014-03-31",
+ "value": 99383763
+ },
+ {
+ "date": "2014-04-01",
+ "value": 100151737
+ },
+ {
+ "date": "2014-04-02",
+ "value": 94985209
+ },
+ {
+ "date": "2014-04-03",
+ "value": 82913669
+ },
+ {
+ "date": "2014-04-04",
+ "value": 78748268
+ },
+ {
+ "date": "2014-04-05",
+ "value": 63829135
+ },
+ {
+ "date": "2014-04-06",
+ "value": 78694727
+ },
+ {
+ "date": "2014-04-07",
+ "value": 80868994
+ },
+ {
+ "date": "2014-04-08",
+ "value": 93799013
+ },
+ {
+ "date": "2014-04-09",
+ "value": 9042416
+ },
+ {
+ "date": "2014-04-10",
+ "value": 97298692
+ },
+ {
+ "date": "2014-04-11",
+ "value": 53353499
+ },
+ {
+ "date": "2014-04-12",
+ "value": 71248129
+ },
+ {
+ "date": "2014-04-13",
+ "value": 75253744
+ },
+ {
+ "date": "2014-04-14",
+ "value": 68976648
+ },
+ {
+ "date": "2014-04-15",
+ "value": 71002284
+ },
+ {
+ "date": "2014-04-16",
+ "value": 75052401
+ },
+ {
+ "date": "2014-04-17",
+ "value": 83894030
+ },
+ {
+ "date": "2014-04-18",
+ "value": 50236528
+ },
+ {
+ "date": "2014-04-19",
+ "value": 59739114
+ },
+ {
+ "date": "2014-04-20",
+ "value": 56407136
+ },
+ {
+ "date": "2014-04-21",
+ "value": 108323177
+ },
+ {
+ "date": "2014-04-22",
+ "value": 101578914
+ },
+ {
+ "date": "2014-04-23",
+ "value": 115877608
+ },
+ {
+ "date": "2014-04-24",
+ "value": 132088857
+ },
+ {
+ "date": "2014-04-25",
+ "value": 112071353
+ },
+ {
+ "date": "2014-04-26",
+ "value": 81790062
+ },
+ {
+ "date": "2014-04-27",
+ "value": 105003761
+ },
+ {
+ "date": "2014-04-28",
+ "value": 100457727
+ },
+ {
+ "date": "2014-04-29",
+ "value": 118253926
+ },
+ {
+ "date": "2014-04-30",
+ "value": 67956992
+ }
+ ]
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users2.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users2.json
new file mode 100644
index 0000000..7fc5842
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users2.json
@@ -0,0 +1,1448 @@
+[
+ [
+ {
+ "date": "2014-01-01",
+ "value": 10000000
+ },
+ {
+ "date": "2014-01-02",
+ "value": 10379978
+ },
+ {
+ "date": "2014-01-03",
+ "value": 10493749
+ },
+ {
+ "date": "2014-01-04",
+ "value": 10785250
+ },
+ {
+ "date": "2014-01-05",
+ "value": 13901904
+ },
+ {
+ "date": "2014-01-06",
+ "value": 11576838
+ },
+ {
+ "date": "2014-01-07",
+ "value": 14413854
+ },
+ {
+ "date": "2014-01-08",
+ "value": 15177211
+ },
+ {
+ "date": "2014-01-09",
+ "value": 16622100
+ },
+ {
+ "date": "2014-01-10",
+ "value": 17381072
+ },
+ {
+ "date": "2014-01-11",
+ "value": 18802310
+ },
+ {
+ "date": "2014-01-12",
+ "value": 15531790
+ },
+ {
+ "date": "2014-01-13",
+ "value": 15748881
+ },
+ {
+ "date": "2014-01-14",
+ "value": 18706437
+ },
+ {
+ "date": "2014-01-15",
+ "value": 19752685
+ },
+ {
+ "date": "2014-01-16",
+ "value": 21016418
+ },
+ {
+ "date": "2014-01-17",
+ "value": 25622924
+ },
+ {
+ "date": "2014-01-18",
+ "value": 25337480
+ },
+ {
+ "date": "2014-01-19",
+ "value": 22258882
+ },
+ {
+ "date": "2014-01-20",
+ "value": 23829538
+ },
+ {
+ "date": "2014-01-21",
+ "value": 24245689
+ },
+ {
+ "date": "2014-01-22",
+ "value": 26429711
+ },
+ {
+ "date": "2014-01-23",
+ "value": 26259017
+ },
+ {
+ "date": "2014-01-24",
+ "value": 25396183
+ },
+ {
+ "date": "2014-01-25",
+ "value": 23107346
+ },
+ {
+ "date": "2014-01-26",
+ "value": 28659852
+ },
+ {
+ "date": "2014-01-27",
+ "value": 25270783
+ },
+ {
+ "date": "2014-01-28",
+ "value": 26270783
+ },
+ {
+ "date": "2014-01-29",
+ "value": 27270783
+ },
+ {
+ "date": "2014-01-30",
+ "value": 28270783
+ },
+ {
+ "date": "2014-01-31",
+ "value": 29270783
+ },
+ {
+ "date": "2014-02-01",
+ "value": 30270783
+ },
+ {
+ "date": "2014-02-02",
+ "value": 31270783
+ },
+ {
+ "date": "2014-02-03",
+ "value": 32270783
+ },
+ {
+ "date": "2014-02-04",
+ "value": 33270783
+ },
+ {
+ "date": "2014-02-05",
+ "value": 28270783
+ },
+ {
+ "date": "2014-02-06",
+ "value": 27270783
+ },
+ {
+ "date": "2014-02-07",
+ "value": 35270783
+ },
+ {
+ "date": "2014-02-08",
+ "value": 34270783
+ },
+ {
+ "date": "2014-02-09",
+ "value": 28270783
+ },
+ {
+ "date": "2014-02-10",
+ "value": 35270783
+ },
+ {
+ "date": "2014-02-11",
+ "value": 36270783
+ },
+ {
+ "date": "2014-02-12",
+ "value": 34127078
+ },
+ {
+ "date": "2014-02-13",
+ "value": 33124078
+ },
+ {
+ "date": "2014-02-14",
+ "value": 36227078
+ },
+ {
+ "date": "2014-02-15",
+ "value": 37827078
+ },
+ {
+ "date": "2014-02-16",
+ "value": 36427073
+ },
+ {
+ "date": "2014-02-17",
+ "value": 37570783
+ },
+ {
+ "date": "2014-02-18",
+ "value": 38627073
+ },
+ {
+ "date": "2014-02-19",
+ "value": 37727078
+ },
+ {
+ "date": "2014-02-20",
+ "value": 38827073
+ },
+ {
+ "date": "2014-02-21",
+ "value": 40927078
+ },
+ {
+ "date": "2014-02-22",
+ "value": 41027078
+ },
+ {
+ "date": "2014-02-23",
+ "value": 42127073
+ },
+ {
+ "date": "2014-02-24",
+ "value": 43220783
+ },
+ {
+ "date": "2014-02-25",
+ "value": 44327078
+ },
+ {
+ "date": "2014-02-26",
+ "value": 40427078
+ },
+ {
+ "date": "2014-02-27",
+ "value": 41027078
+ },
+ {
+ "date": "2014-02-28",
+ "value": 45627078
+ },
+ {
+ "date": "2014-03-01",
+ "value": 44727078
+ },
+ {
+ "date": "2014-03-02",
+ "value": 44227078
+ },
+ {
+ "date": "2014-03-03",
+ "value": 45227078
+ },
+ {
+ "date": "2014-03-04",
+ "value": 46027078
+ },
+ {
+ "date": "2014-03-05",
+ "value": 46927078
+ },
+ {
+ "date": "2014-03-06",
+ "value": 47027078
+ },
+ {
+ "date": "2014-03-07",
+ "value": 46227078
+ },
+ {
+ "date": "2014-03-08",
+ "value": 47027078
+ },
+ {
+ "date": "2014-03-09",
+ "value": 48027078
+ },
+ {
+ "date": "2014-03-10",
+ "value": 47027078
+ },
+ {
+ "date": "2014-03-11",
+ "value": 47027078
+ },
+ {
+ "date": "2014-03-12",
+ "value": 48017078
+ },
+ {
+ "date": "2014-03-13",
+ "value": 48077078
+ },
+ {
+ "date": "2014-03-14",
+ "value": 48087078
+ },
+ {
+ "date": "2014-03-15",
+ "value": 48017078
+ },
+ {
+ "date": "2014-03-16",
+ "value": 48047078
+ },
+ {
+ "date": "2014-03-17",
+ "value": 48067078
+ },
+ {
+ "date": "2014-03-18",
+ "value": 48077078
+ },
+ {
+ "date": "2014-03-19",
+ "value": 48027074
+ },
+ {
+ "date": "2014-03-20",
+ "value": 48927079
+ },
+ {
+ "date": "2014-03-21",
+ "value": 48727071
+ },
+ {
+ "date": "2014-03-22",
+ "value": 48127072
+ },
+ {
+ "date": "2014-03-23",
+ "value": 48527072
+ },
+ {
+ "date": "2014-03-24",
+ "value": 48627027
+ },
+ {
+ "date": "2014-03-25",
+ "value": 48027040
+ },
+ {
+ "date": "2014-03-26",
+ "value": 48027043
+ },
+ {
+ "date": "2014-03-27",
+ "value": 48057022
+ },
+ {
+ "date": "2014-03-28",
+ "value": 49057022
+ },
+ {
+ "date": "2014-03-29",
+ "value": 50057022
+ },
+ {
+ "date": "2014-03-30",
+ "value": 51057022
+ },
+ {
+ "date": "2014-03-31",
+ "value": 52057022
+ },
+ {
+ "date": "2014-04-01",
+ "value": 53057022
+ },
+ {
+ "date": "2014-04-02",
+ "value": 54057022
+ },
+ {
+ "date": "2014-04-03",
+ "value": 52057022
+ },
+ {
+ "date": "2014-04-04",
+ "value": 55057022
+ },
+ {
+ "date": "2014-04-05",
+ "value": 58270783
+ },
+ {
+ "date": "2014-04-06",
+ "value": 56270783
+ },
+ {
+ "date": "2014-04-07",
+ "value": 55270783
+ },
+ {
+ "date": "2014-04-08",
+ "value": 58270783
+ },
+ {
+ "date": "2014-04-09",
+ "value": 59270783
+ },
+ {
+ "date": "2014-04-10",
+ "value": 60270783
+ },
+ {
+ "date": "2014-04-11",
+ "value": 61270783
+ },
+ {
+ "date": "2014-04-12",
+ "value": 62270783
+ },
+ {
+ "date": "2014-04-13",
+ "value": 63270783
+ },
+ {
+ "date": "2014-04-14",
+ "value": 64270783
+ },
+ {
+ "date": "2014-04-15",
+ "value": 65270783
+ },
+ {
+ "date": "2014-04-16",
+ "value": 66270783
+ },
+ {
+ "date": "2014-04-17",
+ "value": 67270783
+ },
+ {
+ "date": "2014-04-18",
+ "value": 68270783
+ },
+ {
+ "date": "2014-04-19",
+ "value": 69270783
+ },
+ {
+ "date": "2014-04-20",
+ "value": 70270783
+ },
+ {
+ "date": "2014-04-21",
+ "value": 71270783
+ },
+ {
+ "date": "2014-04-22",
+ "value": 72270783
+ },
+ {
+ "date": "2014-04-23",
+ "value": 73270783
+ },
+ {
+ "date": "2014-04-24",
+ "value": 74270783
+ },
+ {
+ "date": "2014-04-25",
+ "value": 75270783
+ },
+ {
+ "date": "2014-04-26",
+ "value": 76660783
+ },
+ {
+ "date": "2014-04-27",
+ "value": 77270783
+ },
+ {
+ "date": "2014-04-28",
+ "value": 78370783
+ },
+ {
+ "date": "2014-04-29",
+ "value": 79470783
+ },
+ {
+ "date": "2014-04-30",
+ "value": 80170783
+ }
+ ],
+ [
+ {
+ "date": "2014-01-01",
+ "value": 150000000
+ },
+ {
+ "date": "2014-01-02",
+ "value": 160379978
+ },
+ {
+ "date": "2014-01-03",
+ "value": 170493749
+ },
+ {
+ "date": "2014-01-04",
+ "value": 160785250
+ },
+ {
+ "date": "2014-01-05",
+ "value": 167391904
+ },
+ {
+ "date": "2014-01-06",
+ "value": 161576838
+ },
+ {
+ "date": "2014-01-07",
+ "value": 161413854
+ },
+ {
+ "date": "2014-01-08",
+ "value": 152177211
+ },
+ {
+ "date": "2014-01-09",
+ "value": 143762210
+ },
+ {
+ "date": "2014-01-10",
+ "value": 144381072
+ },
+ {
+ "date": "2014-01-11",
+ "value": 154352310
+ },
+ {
+ "date": "2014-01-12",
+ "value": 165531790
+ },
+ {
+ "date": "2014-01-13",
+ "value": 175748881
+ },
+ {
+ "date": "2014-01-14",
+ "value": 187064037
+ },
+ {
+ "date": "2014-01-15",
+ "value": 197520685
+ },
+ {
+ "date": "2014-01-16",
+ "value": 210176418
+ },
+ {
+ "date": "2014-01-17",
+ "value": 196122924
+ },
+ {
+ "date": "2014-01-18",
+ "value": 207337480
+ },
+ {
+ "date": "2014-01-19",
+ "value": 200258882
+ },
+ {
+ "date": "2014-01-20",
+ "value": 186829538
+ },
+ {
+ "date": "2014-01-21",
+ "value": 192456897
+ },
+ {
+ "date": "2014-01-22",
+ "value": 204299711
+ },
+ {
+ "date": "2014-01-23",
+ "value": 192759017
+ },
+ {
+ "date": "2014-01-24",
+ "value": 203596183
+ },
+ {
+ "date": "2014-01-25",
+ "value": 208107346
+ },
+ {
+ "date": "2014-01-26",
+ "value": 196359852
+ },
+ {
+ "date": "2014-01-27",
+ "value": 192570783
+ },
+ {
+ "date": "2014-01-28",
+ "value": 177967768
+ },
+ {
+ "date": "2014-01-29",
+ "value": 190632803
+ },
+ {
+ "date": "2014-01-30",
+ "value": 203725316
+ },
+ {
+ "date": "2014-01-31",
+ "value": 218226177
+ },
+ {
+ "date": "2014-02-01",
+ "value": 210698669
+ },
+ {
+ "date": "2014-02-02",
+ "value": 217640656
+ },
+ {
+ "date": "2014-02-03",
+ "value": 216142362
+ },
+ {
+ "date": "2014-02-04",
+ "value": 201410971
+ },
+ {
+ "date": "2014-02-05",
+ "value": 196704289
+ },
+ {
+ "date": "2014-02-06",
+ "value": 190436945
+ },
+ {
+ "date": "2014-02-07",
+ "value": 178891686
+ },
+ {
+ "date": "2014-02-08",
+ "value": 171613962
+ },
+ {
+ "date": "2014-02-09",
+ "value": 157579773
+ },
+ {
+ "date": "2014-02-10",
+ "value": 158677098
+ },
+ {
+ "date": "2014-02-11",
+ "value": 147129977
+ },
+ {
+ "date": "2014-02-12",
+ "value": 151561876
+ },
+ {
+ "date": "2014-02-13",
+ "value": 151627421
+ },
+ {
+ "date": "2014-02-14",
+ "value": 143543872
+ },
+ {
+ "date": "2014-02-15",
+ "value": 136581057
+ },
+ {
+ "date": "2014-02-16",
+ "value": 135560715
+ },
+ {
+ "date": "2014-02-17",
+ "value": 122625263
+ },
+ {
+ "date": "2014-02-18",
+ "value": 112091484
+ },
+ {
+ "date": "2014-02-19",
+ "value": 98810329
+ },
+ {
+ "date": "2014-02-20",
+ "value": 99882912
+ },
+ {
+ "date": "2014-02-21",
+ "value": 94943095
+ },
+ {
+ "date": "2014-02-22",
+ "value": 104875743
+ },
+ {
+ "date": "2014-02-23",
+ "value": 116383678
+ },
+ {
+ "date": "2014-02-24",
+ "value": 125028841
+ },
+ {
+ "date": "2014-02-25",
+ "value": 123967310
+ },
+ {
+ "date": "2014-02-26",
+ "value": 133167029
+ },
+ {
+ "date": "2014-02-27",
+ "value": 128577263
+ },
+ {
+ "date": "2014-02-28",
+ "value": 115836969
+ },
+ {
+ "date": "2014-03-01",
+ "value": 119264529
+ },
+ {
+ "date": "2014-03-02",
+ "value": 109363374
+ },
+ {
+ "date": "2014-03-03",
+ "value": 113985628
+ },
+ {
+ "date": "2014-03-04",
+ "value": 114650999
+ },
+ {
+ "date": "2014-03-05",
+ "value": 110866108
+ },
+ {
+ "date": "2014-03-06",
+ "value": 96473454
+ },
+ {
+ "date": "2014-03-07",
+ "value": 104075886
+ },
+ {
+ "date": "2014-03-08",
+ "value": 103568384
+ },
+ {
+ "date": "2014-03-09",
+ "value": 101534883
+ },
+ {
+ "date": "2014-03-10",
+ "value": 115825447
+ },
+ {
+ "date": "2014-03-11",
+ "value": 126133916
+ },
+ {
+ "date": "2014-03-12",
+ "value": 116502109
+ },
+ {
+ "date": "2014-03-13",
+ "value": 130169411
+ },
+ {
+ "date": "2014-03-14",
+ "value": 124296886
+ },
+ {
+ "date": "2014-03-15",
+ "value": 126347399
+ },
+ {
+ "date": "2014-03-16",
+ "value": 131483669
+ },
+ {
+ "date": "2014-03-17",
+ "value": 142811333
+ },
+ {
+ "date": "2014-03-18",
+ "value": 129675396
+ },
+ {
+ "date": "2014-03-19",
+ "value": 115514483
+ },
+ {
+ "date": "2014-03-20",
+ "value": 117630630
+ },
+ {
+ "date": "2014-03-21",
+ "value": 122340239
+ },
+ {
+ "date": "2014-03-22",
+ "value": 132349091
+ },
+ {
+ "date": "2014-03-23",
+ "value": 125613305
+ },
+ {
+ "date": "2014-03-24",
+ "value": 135592466
+ },
+ {
+ "date": "2014-03-25",
+ "value": 123408762
+ },
+ {
+ "date": "2014-03-26",
+ "value": 111991454
+ },
+ {
+ "date": "2014-03-27",
+ "value": 116123955
+ },
+ {
+ "date": "2014-03-28",
+ "value": 112817214
+ },
+ {
+ "date": "2014-03-29",
+ "value": 113029590
+ },
+ {
+ "date": "2014-03-30",
+ "value": 108753398
+ },
+ {
+ "date": "2014-03-31",
+ "value": 99383763
+ },
+ {
+ "date": "2014-04-01",
+ "value": 100151737
+ },
+ {
+ "date": "2014-04-02",
+ "value": 94985209
+ },
+ {
+ "date": "2014-04-03",
+ "value": 82913669
+ },
+ {
+ "date": "2014-04-04",
+ "value": 78748268
+ },
+ {
+ "date": "2014-04-05",
+ "value": 63829135
+ },
+ {
+ "date": "2014-04-06",
+ "value": 78694727
+ },
+ {
+ "date": "2014-04-07",
+ "value": 80868994
+ },
+ {
+ "date": "2014-04-08",
+ "value": 93799013
+ },
+ {
+ "date": "2014-04-09",
+ "value": 99042416
+ },
+ {
+ "date": "2014-04-10",
+ "value": 97298692
+ },
+ {
+ "date": "2014-04-11",
+ "value": 83353499
+ },
+ {
+ "date": "2014-04-12",
+ "value": 71248129
+ },
+ {
+ "date": "2014-04-13",
+ "value": 75253744
+ },
+ {
+ "date": "2014-04-14",
+ "value": 68976648
+ },
+ {
+ "date": "2014-04-15",
+ "value": 71002284
+ },
+ {
+ "date": "2014-04-16",
+ "value": 75052401
+ },
+ {
+ "date": "2014-04-17",
+ "value": 83894030
+ },
+ {
+ "date": "2014-04-18",
+ "value": 90236528
+ },
+ {
+ "date": "2014-04-19",
+ "value": 99739114
+ },
+ {
+ "date": "2014-04-20",
+ "value": 96407136
+ },
+ {
+ "date": "2014-04-21",
+ "value": 108323177
+ },
+ {
+ "date": "2014-04-22",
+ "value": 101578914
+ },
+ {
+ "date": "2014-04-23",
+ "value": 115877608
+ },
+ {
+ "date": "2014-04-24",
+ "value": 112088857
+ },
+ {
+ "date": "2014-04-25",
+ "value": 112071353
+ },
+ {
+ "date": "2014-04-26",
+ "value": 101790062
+ },
+ {
+ "date": "2014-04-27",
+ "value": 115003761
+ },
+ {
+ "date": "2014-04-28",
+ "value": 120457727
+ },
+ {
+ "date": "2014-04-29",
+ "value": 118253926
+ },
+ {
+ "date": "2014-04-30",
+ "value": 117956992
+ }
+ ],
+ [
+ {
+ "date": "2014-01-01",
+ "value": 60000000
+ },
+ {
+ "date": "2014-01-02",
+ "value": 60379978
+ },
+ {
+ "date": "2014-01-03",
+ "value": 40493749
+ },
+ {
+ "date": "2014-01-04",
+ "value": 60785250
+ },
+ {
+ "date": "2014-01-05",
+ "value": 67391904
+ },
+ {
+ "date": "2014-01-06",
+ "value": 61576838
+ },
+ {
+ "date": "2014-01-07",
+ "value": 61413854
+ },
+ {
+ "date": "2014-01-08",
+ "value": 82177211
+ },
+ {
+ "date": "2014-01-09",
+ "value": 103762210
+ },
+ {
+ "date": "2014-01-10",
+ "value": 84381072
+ },
+ {
+ "date": "2014-01-11",
+ "value": 54352310
+ },
+ {
+ "date": "2014-01-12",
+ "value": 65531790
+ },
+ {
+ "date": "2014-01-13",
+ "value": 75748881
+ },
+ {
+ "date": "2014-01-14",
+ "value": 47064037
+ },
+ {
+ "date": "2014-01-15",
+ "value": 67520685
+ },
+ {
+ "date": "2014-01-16",
+ "value": 60176418
+ },
+ {
+ "date": "2014-01-17",
+ "value": 66122924
+ },
+ {
+ "date": "2014-01-18",
+ "value": 57337480
+ },
+ {
+ "date": "2014-01-19",
+ "value": 100258882
+ },
+ {
+ "date": "2014-01-20",
+ "value": 46829538
+ },
+ {
+ "date": "2014-01-21",
+ "value": 92456897
+ },
+ {
+ "date": "2014-01-22",
+ "value": 94299711
+ },
+ {
+ "date": "2014-01-23",
+ "value": 62759017
+ },
+ {
+ "date": "2014-01-24",
+ "value": 103596183
+ },
+ {
+ "date": "2014-01-25",
+ "value": 108107346
+ },
+ {
+ "date": "2014-01-26",
+ "value": 66359852
+ },
+ {
+ "date": "2014-01-27",
+ "value": 62570783
+ },
+ {
+ "date": "2014-01-28",
+ "value": 77967768
+ },
+ {
+ "date": "2014-01-29",
+ "value": 60632803
+ },
+ {
+ "date": "2014-01-30",
+ "value": 103725316
+ },
+ {
+ "date": "2014-01-31",
+ "value": 98226177
+ },
+ {
+ "date": "2014-02-01",
+ "value": 60698669
+ },
+ {
+ "date": "2014-02-02",
+ "value": 67640656
+ },
+ {
+ "date": "2014-02-03",
+ "value": 66142362
+ },
+ {
+ "date": "2014-02-04",
+ "value": 101410971
+ },
+ {
+ "date": "2014-02-05",
+ "value": 66704289
+ },
+ {
+ "date": "2014-02-06",
+ "value": 60436945
+ },
+ {
+ "date": "2014-02-07",
+ "value": 78891686
+ },
+ {
+ "date": "2014-02-08",
+ "value": 71613962
+ },
+ {
+ "date": "2014-02-09",
+ "value": 107579773
+ },
+ {
+ "date": "2014-02-10",
+ "value": 58677098
+ },
+ {
+ "date": "2014-02-11",
+ "value": 87129977
+ },
+ {
+ "date": "2014-02-12",
+ "value": 51561876
+ },
+ {
+ "date": "2014-02-13",
+ "value": 51627421
+ },
+ {
+ "date": "2014-02-14",
+ "value": 83543872
+ },
+ {
+ "date": "2014-02-15",
+ "value": 66581057
+ },
+ {
+ "date": "2014-02-16",
+ "value": 65560715
+ },
+ {
+ "date": "2014-02-17",
+ "value": 62625263
+ },
+ {
+ "date": "2014-02-18",
+ "value": 92091484
+ },
+ {
+ "date": "2014-02-19",
+ "value": 48810329
+ },
+ {
+ "date": "2014-02-20",
+ "value": 49882912
+ },
+ {
+ "date": "2014-02-21",
+ "value": 44943095
+ },
+ {
+ "date": "2014-02-22",
+ "value": 104875743
+ },
+ {
+ "date": "2014-02-23",
+ "value": 96383678
+ },
+ {
+ "date": "2014-02-24",
+ "value": 105028841
+ },
+ {
+ "date": "2014-02-25",
+ "value": 63967310
+ },
+ {
+ "date": "2014-02-26",
+ "value": 63167029
+ },
+ {
+ "date": "2014-02-27",
+ "value": 68577263
+ },
+ {
+ "date": "2014-02-28",
+ "value": 95836969
+ },
+ {
+ "date": "2014-03-01",
+ "value": 99264529
+ },
+ {
+ "date": "2014-03-02",
+ "value": 109363374
+ },
+ {
+ "date": "2014-03-03",
+ "value": 93985628
+ },
+ {
+ "date": "2014-03-04",
+ "value": 94650999
+ },
+ {
+ "date": "2014-03-05",
+ "value": 90866108
+ },
+ {
+ "date": "2014-03-06",
+ "value": 46473454
+ },
+ {
+ "date": "2014-03-07",
+ "value": 84075886
+ },
+ {
+ "date": "2014-03-08",
+ "value": 103568384
+ },
+ {
+ "date": "2014-03-09",
+ "value": 101534883
+ },
+ {
+ "date": "2014-03-10",
+ "value": 95825447
+ },
+ {
+ "date": "2014-03-11",
+ "value": 66133916
+ },
+ {
+ "date": "2014-03-12",
+ "value": 96502109
+ },
+ {
+ "date": "2014-03-13",
+ "value": 80169411
+ },
+ {
+ "date": "2014-03-14",
+ "value": 84296886
+ },
+ {
+ "date": "2014-03-15",
+ "value": 86347399
+ },
+ {
+ "date": "2014-03-16",
+ "value": 31483669
+ },
+ {
+ "date": "2014-03-17",
+ "value": 82811333
+ },
+ {
+ "date": "2014-03-18",
+ "value": 89675396
+ },
+ {
+ "date": "2014-03-19",
+ "value": 95514483
+ },
+ {
+ "date": "2014-03-20",
+ "value": 97630630
+ },
+ {
+ "date": "2014-03-21",
+ "value": 62340239
+ },
+ {
+ "date": "2014-03-22",
+ "value": 62349091
+ },
+ {
+ "date": "2014-03-23",
+ "value": 65613305
+ },
+ {
+ "date": "2014-03-24",
+ "value": 65592466
+ },
+ {
+ "date": "2014-03-25",
+ "value": 63408762
+ },
+ {
+ "date": "2014-03-26",
+ "value": 91991454
+ },
+ {
+ "date": "2014-03-27",
+ "value": 96123955
+ },
+ {
+ "date": "2014-03-28",
+ "value": 92817214
+ },
+ {
+ "date": "2014-03-29",
+ "value": 93029590
+ },
+ {
+ "date": "2014-03-30",
+ "value": 108753398
+ },
+ {
+ "date": "2014-03-31",
+ "value": 49383763
+ },
+ {
+ "date": "2014-04-01",
+ "value": 100151737
+ },
+ {
+ "date": "2014-04-02",
+ "value": 44985209
+ },
+ {
+ "date": "2014-04-03",
+ "value": 52913669
+ },
+ {
+ "date": "2014-04-04",
+ "value": 48748268
+ },
+ {
+ "date": "2014-04-05",
+ "value": 23829135
+ },
+ {
+ "date": "2014-04-06",
+ "value": 58694727
+ },
+ {
+ "date": "2014-04-07",
+ "value": 50868994
+ },
+ {
+ "date": "2014-04-08",
+ "value": 43799013
+ },
+ {
+ "date": "2014-04-09",
+ "value": 4042416
+ },
+ {
+ "date": "2014-04-10",
+ "value": 47298692
+ },
+ {
+ "date": "2014-04-11",
+ "value": 53353499
+ },
+ {
+ "date": "2014-04-12",
+ "value": 71248129
+ },
+ {
+ "date": "2014-04-13",
+ "value": 75253744
+ },
+ {
+ "date": "2014-04-14",
+ "value": 68976648
+ },
+ {
+ "date": "2014-04-15",
+ "value": 71002284
+ },
+ {
+ "date": "2014-04-16",
+ "value": 75052401
+ },
+ {
+ "date": "2014-04-17",
+ "value": 83894030
+ },
+ {
+ "date": "2014-04-18",
+ "value": 50236528
+ },
+ {
+ "date": "2014-04-19",
+ "value": 59739114
+ },
+ {
+ "date": "2014-04-20",
+ "value": 56407136
+ },
+ {
+ "date": "2014-04-21",
+ "value": 108323177
+ },
+ {
+ "date": "2014-04-22",
+ "value": 101578914
+ },
+ {
+ "date": "2014-04-23",
+ "value": 95877608
+ },
+ {
+ "date": "2014-04-24",
+ "value": 62088857
+ },
+ {
+ "date": "2014-04-25",
+ "value": 92071353
+ },
+ {
+ "date": "2014-04-26",
+ "value": 81790062
+ },
+ {
+ "date": "2014-04-27",
+ "value": 105003761
+ },
+ {
+ "date": "2014-04-28",
+ "value": 100457727
+ },
+ {
+ "date": "2014-04-29",
+ "value": 98253926
+ },
+ {
+ "date": "2014-04-30",
+ "value": 67956992
+ }
+ ]
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users3.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users3.json
new file mode 100644
index 0000000..d0b8f16
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/fake_users3.json
@@ -0,0 +1,1448 @@
+[
+ [
+ {
+ "date": "2014-01-01",
+ "value": 150000000
+ },
+ {
+ "date": "2014-01-02",
+ "value": 168799730
+ },
+ {
+ "date": "2014-01-03",
+ "value": 179473940
+ },
+ {
+ "date": "2014-01-04",
+ "value": 160525870
+ },
+ {
+ "date": "2014-01-05",
+ "value": 164091937
+ },
+ {
+ "date": "2014-01-06",
+ "value": 168386751
+ },
+ {
+ "date": "2014-01-07",
+ "value": 164583141
+ },
+ {
+ "date": "2014-01-08",
+ "value": 151127712
+ },
+ {
+ "date": "2014-01-09",
+ "value": 140122673
+ },
+ {
+ "date": "2014-01-10",
+ "value": 142701834
+ },
+ {
+ "date": "2014-01-11",
+ "value": 150132534
+ },
+ {
+ "date": "2014-01-12",
+ "value": 160971355
+ },
+ {
+ "date": "2014-01-13",
+ "value": 171888475
+ },
+ {
+ "date": "2014-01-14",
+ "value": 187304607
+ },
+ {
+ "date": "2014-01-15",
+ "value": 195860257
+ },
+ {
+ "date": "2014-01-16",
+ "value": 218146710
+ },
+ {
+ "date": "2014-01-17",
+ "value": 194292216
+ },
+ {
+ "date": "2014-01-18",
+ "value": 200847337
+ },
+ {
+ "date": "2014-01-19",
+ "value": 202888520
+ },
+ {
+ "date": "2014-01-20",
+ "value": 188359286
+ },
+ {
+ "date": "2014-01-21",
+ "value": 197986542
+ },
+ {
+ "date": "2014-01-22",
+ "value": 201179924
+ },
+ {
+ "date": "2014-01-23",
+ "value": 197109572
+ },
+ {
+ "date": "2014-01-24",
+ "value": 203816953
+ },
+ {
+ "date": "2014-01-25",
+ "value": 206437018
+ },
+ {
+ "date": "2014-01-26",
+ "value": 192589536
+ },
+ {
+ "date": "2014-01-27",
+ "value": 193870752
+ },
+ {
+ "date": "2014-01-28",
+ "value": 178677697
+ },
+ {
+ "date": "2014-01-29",
+ "value": 193082360
+ },
+ {
+ "date": "2014-01-30",
+ "value": 206135273
+ },
+ {
+ "date": "2014-01-31",
+ "value": 217716228
+ },
+ {
+ "date": "2014-02-01",
+ "value": 219668960
+ },
+ {
+ "date": "2014-02-02",
+ "value": 216560467
+ },
+ {
+ "date": "2014-02-03",
+ "value": 212632416
+ },
+ {
+ "date": "2014-02-04",
+ "value": 201790141
+ },
+ {
+ "date": "2014-02-05",
+ "value": 199824076
+ },
+ {
+ "date": "2014-02-06",
+ "value": 195496340
+ },
+ {
+ "date": "2014-02-07",
+ "value": 176861988
+ },
+ {
+ "date": "2014-02-08",
+ "value": 172693161
+ },
+ {
+ "date": "2014-02-09",
+ "value": 153779757
+ },
+ {
+ "date": "2014-02-10",
+ "value": 158907768
+ },
+ {
+ "date": "2014-02-11",
+ "value": 147799217
+ },
+ {
+ "date": "2014-02-12",
+ "value": 156781651
+ },
+ {
+ "date": "2014-02-13",
+ "value": 151247261
+ },
+ {
+ "date": "2014-02-14",
+ "value": 142783453
+ },
+ {
+ "date": "2014-02-15",
+ "value": 137501856
+ },
+ {
+ "date": "2014-02-16",
+ "value": 135170655
+ },
+ {
+ "date": "2014-02-17",
+ "value": 123625262
+ },
+ {
+ "date": "2014-02-18",
+ "value": 114841902
+ },
+ {
+ "date": "2014-02-19",
+ "value": 99230188
+ },
+ {
+ "date": "2014-02-20",
+ "value": 92192889
+ },
+ {
+ "date": "2014-02-21",
+ "value": 95903494
+ },
+ {
+ "date": "2014-02-22",
+ "value": 103475784
+ },
+ {
+ "date": "2014-02-23",
+ "value": 118763836
+ },
+ {
+ "date": "2014-02-24",
+ "value": 121488205
+ },
+ {
+ "date": "2014-02-25",
+ "value": 120137693
+ },
+ {
+ "date": "2014-02-26",
+ "value": 139207613
+ },
+ {
+ "date": "2014-02-27",
+ "value": 123627758
+ },
+ {
+ "date": "2014-02-28",
+ "value": 119696385
+ },
+ {
+ "date": "2014-03-01",
+ "value": 119254629
+ },
+ {
+ "date": "2014-03-02",
+ "value": 104733639
+ },
+ {
+ "date": "2014-03-03",
+ "value": 118265893
+ },
+ {
+ "date": "2014-03-04",
+ "value": 119990564
+ },
+ {
+ "date": "2014-03-05",
+ "value": 118016680
+ },
+ {
+ "date": "2014-03-06",
+ "value": 94543746
+ },
+ {
+ "date": "2014-03-07",
+ "value": 106885704
+ },
+ {
+ "date": "2014-03-08",
+ "value": 104838653
+ },
+ {
+ "date": "2014-03-09",
+ "value": 103884351
+ },
+ {
+ "date": "2014-03-10",
+ "value": 117445285
+ },
+ {
+ "date": "2014-03-11",
+ "value": 126193316
+ },
+ {
+ "date": "2014-03-12",
+ "value": 119012056
+ },
+ {
+ "date": "2014-03-13",
+ "value": 131149610
+ },
+ {
+ "date": "2014-03-14",
+ "value": 126886924
+ },
+ {
+ "date": "2014-03-15",
+ "value": 129937436
+ },
+ {
+ "date": "2014-03-16",
+ "value": 139663841
+ },
+ {
+ "date": "2014-03-17",
+ "value": 143331182
+ },
+ {
+ "date": "2014-03-18",
+ "value": 126935769
+ },
+ {
+ "date": "2014-03-19",
+ "value": 113844155
+ },
+ {
+ "date": "2014-03-20",
+ "value": 110360367
+ },
+ {
+ "date": "2014-03-21",
+ "value": 129320432
+ },
+ {
+ "date": "2014-03-22",
+ "value": 131909432
+ },
+ {
+ "date": "2014-03-23",
+ "value": 125033165
+ },
+ {
+ "date": "2014-03-24",
+ "value": 136642955
+ },
+ {
+ "date": "2014-03-25",
+ "value": 122678043
+ },
+ {
+ "date": "2014-03-26",
+ "value": 114541991
+ },
+ {
+ "date": "2014-03-27",
+ "value": 115593216
+ },
+ {
+ "date": "2014-03-28",
+ "value": 114127182
+ },
+ {
+ "date": "2014-03-29",
+ "value": 110959203
+ },
+ {
+ "date": "2014-03-30",
+ "value": 108933578
+ },
+ {
+ "date": "2014-03-31",
+ "value": 93673839
+ },
+ {
+ "date": "2014-04-01",
+ "value": 107371510
+ },
+ {
+ "date": "2014-04-02",
+ "value": 99025894
+ },
+ {
+ "date": "2014-04-03",
+ "value": 89663192
+ },
+ {
+ "date": "2014-04-04",
+ "value": 78628478
+ },
+ {
+ "date": "2014-04-05",
+ "value": 65319283
+ },
+ {
+ "date": "2014-04-06",
+ "value": 77274968
+ },
+ {
+ "date": "2014-04-07",
+ "value": 84998680
+ },
+ {
+ "date": "2014-04-08",
+ "value": 93109973
+ },
+ {
+ "date": "2014-04-09",
+ "value": 96142409
+ },
+ {
+ "date": "2014-04-10",
+ "value": 92968927
+ },
+ {
+ "date": "2014-04-11",
+ "value": 89943533
+ },
+ {
+ "date": "2014-04-12",
+ "value": 79218421
+ },
+ {
+ "date": "2014-04-13",
+ "value": 74473525
+ },
+ {
+ "date": "2014-04-14",
+ "value": 68466798
+ },
+ {
+ "date": "2014-04-15",
+ "value": 74822001
+ },
+ {
+ "date": "2014-04-16",
+ "value": 71042505
+ },
+ {
+ "date": "2014-04-17",
+ "value": 80304983
+ },
+ {
+ "date": "2014-04-18",
+ "value": 98256320
+ },
+ {
+ "date": "2014-04-19",
+ "value": 94119379
+ },
+ {
+ "date": "2014-04-20",
+ "value": 96317046
+ },
+ {
+ "date": "2014-04-21",
+ "value": 107713238
+ },
+ {
+ "date": "2014-04-22",
+ "value": 104198751
+ },
+ {
+ "date": "2014-04-23",
+ "value": 118067785
+ },
+ {
+ "date": "2014-04-24",
+ "value": 117588802
+ },
+ {
+ "date": "2014-04-25",
+ "value": 113531702
+ },
+ {
+ "date": "2014-04-26",
+ "value": 102600971
+ },
+ {
+ "date": "2014-04-27",
+ "value": 111673005
+ },
+ {
+ "date": "2014-04-28",
+ "value": 127277540
+ },
+ {
+ "date": "2014-04-29",
+ "value": 116293528
+ },
+ {
+ "date": "2014-04-30",
+ "value": 112996597
+ }
+ ],
+ [
+ {
+ "date": "2014-01-01",
+ "value": 10000000
+ },
+ {
+ "date": "2014-01-02",
+ "value": 18799730
+ },
+ {
+ "date": "2014-01-03",
+ "value": 19473940
+ },
+ {
+ "date": "2014-01-04",
+ "value": 10525870
+ },
+ {
+ "date": "2014-01-05",
+ "value": 14091093
+ },
+ {
+ "date": "2014-01-06",
+ "value": 18386751
+ },
+ {
+ "date": "2014-01-07",
+ "value": 14583144
+ },
+ {
+ "date": "2014-01-08",
+ "value": 11127715
+ },
+ {
+ "date": "2014-01-09",
+ "value": 10012266
+ },
+ {
+ "date": "2014-01-10",
+ "value": 12701837
+ },
+ {
+ "date": "2014-01-11",
+ "value": 10132088
+ },
+ {
+ "date": "2014-01-12",
+ "value": 10971355
+ },
+ {
+ "date": "2014-01-13",
+ "value": 11888475
+ },
+ {
+ "date": "2014-01-14",
+ "value": 17346078
+ },
+ {
+ "date": "2014-01-15",
+ "value": 15862579
+ },
+ {
+ "date": "2014-01-16",
+ "value": 28146101
+ },
+ {
+ "date": "2014-01-17",
+ "value": 24292265
+ },
+ {
+ "date": "2014-01-18",
+ "value": 20847335
+ },
+ {
+ "date": "2014-01-19",
+ "value": 22888522
+ },
+ {
+ "date": "2014-01-20",
+ "value": 28359283
+ },
+ {
+ "date": "2014-01-21",
+ "value": 29865424
+ },
+ {
+ "date": "2014-01-22",
+ "value": 21179246
+ },
+ {
+ "date": "2014-01-23",
+ "value": 27109526
+ },
+ {
+ "date": "2014-01-24",
+ "value": 23816935
+ },
+ {
+ "date": "2014-01-25",
+ "value": 26437013
+ },
+ {
+ "date": "2014-01-26",
+ "value": 22589568
+ },
+ {
+ "date": "2014-01-27",
+ "value": 23870725
+ },
+ {
+ "date": "2014-01-28",
+ "value": 23870726
+ },
+ {
+ "date": "2014-01-29",
+ "value": 23870727
+ },
+ {
+ "date": "2014-01-30",
+ "value": 23870728
+ },
+ {
+ "date": "2014-01-31",
+ "value": 23870729
+ },
+ {
+ "date": "2014-02-01",
+ "value": 33870720
+ },
+ {
+ "date": "2014-02-02",
+ "value": 33870721
+ },
+ {
+ "date": "2014-02-03",
+ "value": 33870722
+ },
+ {
+ "date": "2014-02-04",
+ "value": 33870723
+ },
+ {
+ "date": "2014-02-05",
+ "value": 23870728
+ },
+ {
+ "date": "2014-02-06",
+ "value": 23870727
+ },
+ {
+ "date": "2014-02-07",
+ "value": 33870725
+ },
+ {
+ "date": "2014-02-08",
+ "value": 33870724
+ },
+ {
+ "date": "2014-02-09",
+ "value": 23870728
+ },
+ {
+ "date": "2014-02-10",
+ "value": 33870725
+ },
+ {
+ "date": "2014-02-11",
+ "value": 33870726
+ },
+ {
+ "date": "2014-02-12",
+ "value": 38707214
+ },
+ {
+ "date": "2014-02-13",
+ "value": 38704213
+ },
+ {
+ "date": "2014-02-14",
+ "value": 38707226
+ },
+ {
+ "date": "2014-02-15",
+ "value": 38707287
+ },
+ {
+ "date": "2014-02-16",
+ "value": 33707246
+ },
+ {
+ "date": "2014-02-17",
+ "value": 33870757
+ },
+ {
+ "date": "2014-02-18",
+ "value": 33707268
+ },
+ {
+ "date": "2014-02-19",
+ "value": 38707277
+ },
+ {
+ "date": "2014-02-20",
+ "value": 33707288
+ },
+ {
+ "date": "2014-02-21",
+ "value": 48707290
+ },
+ {
+ "date": "2014-02-22",
+ "value": 48707201
+ },
+ {
+ "date": "2014-02-23",
+ "value": 43707212
+ },
+ {
+ "date": "2014-02-24",
+ "value": 43870223
+ },
+ {
+ "date": "2014-02-25",
+ "value": 48707234
+ },
+ {
+ "date": "2014-02-26",
+ "value": 48707240
+ },
+ {
+ "date": "2014-02-27",
+ "value": 48707201
+ },
+ {
+ "date": "2014-02-28",
+ "value": 48707265
+ },
+ {
+ "date": "2014-03-01",
+ "value": 48707274
+ },
+ {
+ "date": "2014-03-02",
+ "value": 48707224
+ },
+ {
+ "date": "2014-03-03",
+ "value": 48707225
+ },
+ {
+ "date": "2014-03-04",
+ "value": 48707206
+ },
+ {
+ "date": "2014-03-05",
+ "value": 48707296
+ },
+ {
+ "date": "2014-03-06",
+ "value": 48707207
+ },
+ {
+ "date": "2014-03-07",
+ "value": 48707226
+ },
+ {
+ "date": "2014-03-08",
+ "value": 48707207
+ },
+ {
+ "date": "2014-03-09",
+ "value": 48707208
+ },
+ {
+ "date": "2014-03-10",
+ "value": 48707207
+ },
+ {
+ "date": "2014-03-11",
+ "value": 48707207
+ },
+ {
+ "date": "2014-03-12",
+ "value": 48707108
+ },
+ {
+ "date": "2014-03-13",
+ "value": 48707708
+ },
+ {
+ "date": "2014-03-14",
+ "value": 48707808
+ },
+ {
+ "date": "2014-03-15",
+ "value": 48707108
+ },
+ {
+ "date": "2014-03-16",
+ "value": 48707408
+ },
+ {
+ "date": "2014-03-17",
+ "value": 48707608
+ },
+ {
+ "date": "2014-03-18",
+ "value": 48707708
+ },
+ {
+ "date": "2014-03-19",
+ "value": 44707208
+ },
+ {
+ "date": "2014-03-20",
+ "value": 49707298
+ },
+ {
+ "date": "2014-03-21",
+ "value": 41707278
+ },
+ {
+ "date": "2014-03-22",
+ "value": 42707218
+ },
+ {
+ "date": "2014-03-23",
+ "value": 42707258
+ },
+ {
+ "date": "2014-03-24",
+ "value": 47207268
+ },
+ {
+ "date": "2014-03-25",
+ "value": 40407208
+ },
+ {
+ "date": "2014-03-26",
+ "value": 43407208
+ },
+ {
+ "date": "2014-03-27",
+ "value": 42207508
+ },
+ {
+ "date": "2014-03-28",
+ "value": 42207509
+ },
+ {
+ "date": "2014-03-29",
+ "value": 52207500
+ },
+ {
+ "date": "2014-03-30",
+ "value": 52207501
+ },
+ {
+ "date": "2014-03-31",
+ "value": 52207502
+ },
+ {
+ "date": "2014-04-01",
+ "value": 52207503
+ },
+ {
+ "date": "2014-04-02",
+ "value": 52207504
+ },
+ {
+ "date": "2014-04-03",
+ "value": 52207502
+ },
+ {
+ "date": "2014-04-04",
+ "value": 52207505
+ },
+ {
+ "date": "2014-04-05",
+ "value": 53870728
+ },
+ {
+ "date": "2014-04-06",
+ "value": 53870726
+ },
+ {
+ "date": "2014-04-07",
+ "value": 53870725
+ },
+ {
+ "date": "2014-04-08",
+ "value": 53870728
+ },
+ {
+ "date": "2014-04-09",
+ "value": 53870729
+ },
+ {
+ "date": "2014-04-10",
+ "value": 63870720
+ },
+ {
+ "date": "2014-04-11",
+ "value": 63870721
+ },
+ {
+ "date": "2014-04-12",
+ "value": 63870722
+ },
+ {
+ "date": "2014-04-13",
+ "value": 63870723
+ },
+ {
+ "date": "2014-04-14",
+ "value": 63870724
+ },
+ {
+ "date": "2014-04-15",
+ "value": 63870725
+ },
+ {
+ "date": "2014-04-16",
+ "value": 63870726
+ },
+ {
+ "date": "2014-04-17",
+ "value": 63870727
+ },
+ {
+ "date": "2014-04-18",
+ "value": 63870728
+ },
+ {
+ "date": "2014-04-19",
+ "value": 63870729
+ },
+ {
+ "date": "2014-04-20",
+ "value": 73870720
+ },
+ {
+ "date": "2014-04-21",
+ "value": 73870721
+ },
+ {
+ "date": "2014-04-22",
+ "value": 73870722
+ },
+ {
+ "date": "2014-04-23",
+ "value": 73870723
+ },
+ {
+ "date": "2014-04-24",
+ "value": 73870724
+ },
+ {
+ "date": "2014-04-25",
+ "value": 73870725
+ },
+ {
+ "date": "2014-04-26",
+ "value": 73870666
+ },
+ {
+ "date": "2014-04-27",
+ "value": 73870727
+ },
+ {
+ "date": "2014-04-28",
+ "value": 73870738
+ },
+ {
+ "date": "2014-04-29",
+ "value": 73870749
+ },
+ {
+ "date": "2014-04-30",
+ "value": 83870710
+ }
+ ],
+ [
+ {
+ "date": "2014-01-01",
+ "value": 60000000
+ },
+ {
+ "date": "2014-01-02",
+ "value": 68799730
+ },
+ {
+ "date": "2014-01-03",
+ "value": 49473940
+ },
+ {
+ "date": "2014-01-04",
+ "value": 60525870
+ },
+ {
+ "date": "2014-01-05",
+ "value": 64091937
+ },
+ {
+ "date": "2014-01-06",
+ "value": 68386751
+ },
+ {
+ "date": "2014-01-07",
+ "value": 64583141
+ },
+ {
+ "date": "2014-01-08",
+ "value": 81127712
+ },
+ {
+ "date": "2014-01-09",
+ "value": 100122673
+ },
+ {
+ "date": "2014-01-10",
+ "value": 82701834
+ },
+ {
+ "date": "2014-01-11",
+ "value": 50132534
+ },
+ {
+ "date": "2014-01-12",
+ "value": 60971355
+ },
+ {
+ "date": "2014-01-13",
+ "value": 71888475
+ },
+ {
+ "date": "2014-01-14",
+ "value": 47304607
+ },
+ {
+ "date": "2014-01-15",
+ "value": 65860257
+ },
+ {
+ "date": "2014-01-16",
+ "value": 68146710
+ },
+ {
+ "date": "2014-01-17",
+ "value": 64292216
+ },
+ {
+ "date": "2014-01-18",
+ "value": 50847337
+ },
+ {
+ "date": "2014-01-19",
+ "value": 102888520
+ },
+ {
+ "date": "2014-01-20",
+ "value": 48359286
+ },
+ {
+ "date": "2014-01-21",
+ "value": 97986542
+ },
+ {
+ "date": "2014-01-22",
+ "value": 91179924
+ },
+ {
+ "date": "2014-01-23",
+ "value": 67109572
+ },
+ {
+ "date": "2014-01-24",
+ "value": 103816953
+ },
+ {
+ "date": "2014-01-25",
+ "value": 106437018
+ },
+ {
+ "date": "2014-01-26",
+ "value": 62589536
+ },
+ {
+ "date": "2014-01-27",
+ "value": 63870752
+ },
+ {
+ "date": "2014-01-28",
+ "value": 78677697
+ },
+ {
+ "date": "2014-01-29",
+ "value": 63082360
+ },
+ {
+ "date": "2014-01-30",
+ "value": 106135273
+ },
+ {
+ "date": "2014-01-31",
+ "value": 97716228
+ },
+ {
+ "date": "2014-02-01",
+ "value": 69668960
+ },
+ {
+ "date": "2014-02-02",
+ "value": 66560467
+ },
+ {
+ "date": "2014-02-03",
+ "value": 62632416
+ },
+ {
+ "date": "2014-02-04",
+ "value": 101790141
+ },
+ {
+ "date": "2014-02-05",
+ "value": 69824076
+ },
+ {
+ "date": "2014-02-06",
+ "value": 65496340
+ },
+ {
+ "date": "2014-02-07",
+ "value": 76861988
+ },
+ {
+ "date": "2014-02-08",
+ "value": 72693161
+ },
+ {
+ "date": "2014-02-09",
+ "value": 103779757
+ },
+ {
+ "date": "2014-02-10",
+ "value": 58907768
+ },
+ {
+ "date": "2014-02-11",
+ "value": 87799217
+ },
+ {
+ "date": "2014-02-12",
+ "value": 56781651
+ },
+ {
+ "date": "2014-02-13",
+ "value": 51247261
+ },
+ {
+ "date": "2014-02-14",
+ "value": 82783453
+ },
+ {
+ "date": "2014-02-15",
+ "value": 67501856
+ },
+ {
+ "date": "2014-02-16",
+ "value": 65170655
+ },
+ {
+ "date": "2014-02-17",
+ "value": 63625262
+ },
+ {
+ "date": "2014-02-18",
+ "value": 94841902
+ },
+ {
+ "date": "2014-02-19",
+ "value": 49230188
+ },
+ {
+ "date": "2014-02-20",
+ "value": 42192889
+ },
+ {
+ "date": "2014-02-21",
+ "value": 45903494
+ },
+ {
+ "date": "2014-02-22",
+ "value": 103475784
+ },
+ {
+ "date": "2014-02-23",
+ "value": 98763836
+ },
+ {
+ "date": "2014-02-24",
+ "value": 101488205
+ },
+ {
+ "date": "2014-02-25",
+ "value": 60137693
+ },
+ {
+ "date": "2014-02-26",
+ "value": 69207613
+ },
+ {
+ "date": "2014-02-27",
+ "value": 63627758
+ },
+ {
+ "date": "2014-02-28",
+ "value": 99696385
+ },
+ {
+ "date": "2014-03-01",
+ "value": 99254629
+ },
+ {
+ "date": "2014-03-02",
+ "value": 104733639
+ },
+ {
+ "date": "2014-03-03",
+ "value": 98265893
+ },
+ {
+ "date": "2014-03-04",
+ "value": 99990564
+ },
+ {
+ "date": "2014-03-05",
+ "value": 98016680
+ },
+ {
+ "date": "2014-03-06",
+ "value": 44543746
+ },
+ {
+ "date": "2014-03-07",
+ "value": 86885704
+ },
+ {
+ "date": "2014-03-08",
+ "value": 104838653
+ },
+ {
+ "date": "2014-03-09",
+ "value": 103884351
+ },
+ {
+ "date": "2014-03-10",
+ "value": 97445285
+ },
+ {
+ "date": "2014-03-11",
+ "value": 66193316
+ },
+ {
+ "date": "2014-03-12",
+ "value": 99012056
+ },
+ {
+ "date": "2014-03-13",
+ "value": 81149610
+ },
+ {
+ "date": "2014-03-14",
+ "value": 86886924
+ },
+ {
+ "date": "2014-03-15",
+ "value": 89937436
+ },
+ {
+ "date": "2014-03-16",
+ "value": 39663841
+ },
+ {
+ "date": "2014-03-17",
+ "value": 83331182
+ },
+ {
+ "date": "2014-03-18",
+ "value": 86935769
+ },
+ {
+ "date": "2014-03-19",
+ "value": 93844155
+ },
+ {
+ "date": "2014-03-20",
+ "value": 90360367
+ },
+ {
+ "date": "2014-03-21",
+ "value": 69320432
+ },
+ {
+ "date": "2014-03-22",
+ "value": 61909432
+ },
+ {
+ "date": "2014-03-23",
+ "value": 65033165
+ },
+ {
+ "date": "2014-03-24",
+ "value": 66642955
+ },
+ {
+ "date": "2014-03-25",
+ "value": 62678043
+ },
+ {
+ "date": "2014-03-26",
+ "value": 94541991
+ },
+ {
+ "date": "2014-03-27",
+ "value": 95593216
+ },
+ {
+ "date": "2014-03-28",
+ "value": 94127182
+ },
+ {
+ "date": "2014-03-29",
+ "value": 90959203
+ },
+ {
+ "date": "2014-03-30",
+ "value": 108933578
+ },
+ {
+ "date": "2014-03-31",
+ "value": 43673839
+ },
+ {
+ "date": "2014-04-01",
+ "value": 107371510
+ },
+ {
+ "date": "2014-04-02",
+ "value": 49025894
+ },
+ {
+ "date": "2014-04-03",
+ "value": 59663192
+ },
+ {
+ "date": "2014-04-04",
+ "value": 48628478
+ },
+ {
+ "date": "2014-04-05",
+ "value": 25319283
+ },
+ {
+ "date": "2014-04-06",
+ "value": 57274968
+ },
+ {
+ "date": "2014-04-07",
+ "value": 54998680
+ },
+ {
+ "date": "2014-04-08",
+ "value": 43109973
+ },
+ {
+ "date": "2014-04-09",
+ "value": 6142404
+ },
+ {
+ "date": "2014-04-10",
+ "value": 42968927
+ },
+ {
+ "date": "2014-04-11",
+ "value": 59943533
+ },
+ {
+ "date": "2014-04-12",
+ "value": 79218421
+ },
+ {
+ "date": "2014-04-13",
+ "value": 74473525
+ },
+ {
+ "date": "2014-04-14",
+ "value": 68466798
+ },
+ {
+ "date": "2014-04-15",
+ "value": 74822001
+ },
+ {
+ "date": "2014-04-16",
+ "value": 71042505
+ },
+ {
+ "date": "2014-04-17",
+ "value": 80304983
+ },
+ {
+ "date": "2014-04-18",
+ "value": 58256320
+ },
+ {
+ "date": "2014-04-19",
+ "value": 54119379
+ },
+ {
+ "date": "2014-04-20",
+ "value": 56317046
+ },
+ {
+ "date": "2014-04-21",
+ "value": 107713238
+ },
+ {
+ "date": "2014-04-22",
+ "value": 104198751
+ },
+ {
+ "date": "2014-04-23",
+ "value": 98067785
+ },
+ {
+ "date": "2014-04-24",
+ "value": 67588802
+ },
+ {
+ "date": "2014-04-25",
+ "value": 93531702
+ },
+ {
+ "date": "2014-04-26",
+ "value": 82600971
+ },
+ {
+ "date": "2014-04-27",
+ "value": 101673005
+ },
+ {
+ "date": "2014-04-28",
+ "value": 107277540
+ },
+ {
+ "date": "2014-04-29",
+ "value": 96293528
+ },
+ {
+ "date": "2014-04-30",
+ "value": 62996597
+ }
+ ]
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/firefox_releases.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/firefox_releases.json
new file mode 100644
index 0000000..0c40fbe
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/firefox_releases.json
@@ -0,0 +1,168 @@
+{
+ "releases": [
+ {
+ "version": "30.0",
+ "date": "2014-06-01",
+ "end": "2014-08-01"
+ },
+ {
+ "version": "29.0",
+ "date": "2014-04-29",
+ "end": "2014-06-01"
+
+ },
+ {
+ "version": "28.0",
+ "date": "2014-03-18",
+ "end": "2014-04-29"
+ },
+ {
+ "version": "27.0",
+ "date": "2014-01-21",
+ "end": "2014-03-18"
+ },
+ {
+ "version": "26.0",
+ "date": "2013-12-10",
+ "end": "2014-01-21"
+ },
+ {
+ "version": "25.0",
+ "date": "2013-10-29",
+ "end": "2013-12-10"
+
+ },
+ {
+ "version": "24.0",
+ "date": "2013-09-17",
+ "end": "2013-10-29"
+
+ },
+ {
+ "version": "23.0",
+ "date": "2013-08-06",
+ "end": "2013-09-17"
+
+ },
+ {
+ "version": "22.0",
+ "date": "2013-06-25"
+ },
+ {
+ "version": "21.0",
+ "date": "2013-05-14"
+ },
+ {
+ "version": "20.0",
+ "date": "2013-04-02"
+ },
+ {
+ "version": "19.0",
+ "date": "2013-02-19"
+ },
+ {
+ "version": "18.0",
+ "date": "2013-01-08"
+ },
+ {
+ "version": "17.0.1",
+ "date": "2012-11-30"
+ },
+ {
+ "version": "17.0",
+ "date": "2012-11-20"
+ },
+ {
+ "version": "16.0.2",
+ "date": "2012-10-26"
+ },
+ {
+ "version": "16.0.1",
+ "date": "2012-10-11"
+ },
+ {
+ "version": "16.0",
+ "date": "2012-10-09"
+ },
+ {
+ "version": "15.0.1",
+ "date": "2012-09-06"
+ },
+ {
+ "version": "15.0",
+ "date": "2012-08-28"
+ },
+ {
+ "version": "14.0",
+ "date": "2012-07-17"
+ },
+ {
+ "version": "13.0.1",
+ "date": "2012-06-15"
+ },
+ {
+ "version": "13.0",
+ "date": "2012-06-05"
+ },
+ {
+ "version": "12.0",
+ "date": "2012-04-24"
+ },
+ {
+ "version": "11.0",
+ "date": "2012-03-13"
+ },
+ {
+ "version": "10.0",
+ "date": "2012-01-31"
+ },
+ {
+ "version": "9.0",
+ "date": "2011-12-20"
+ },
+ {
+ "version": "8.0",
+ "date": "2011-11-08"
+ },
+ {
+ "version": "7.0",
+ "date": "2011-09-27"
+ },
+ {
+ "version": "6.0",
+ "date": "2011-08-16"
+ },
+ {
+ "version": "5.0",
+ "date": "2011-06-21"
+ },
+ {
+ "version": "4.0",
+ "date": "2011-03-22"
+ },
+ {
+ "version": "3.6",
+ "date": "2010-01-21"
+ },
+ {
+ "version": "3.5",
+ "date": "2009-06-30"
+ },
+ {
+ "version": "3.0",
+ "date": "2008-06-17"
+ },
+ {
+ "version": "2.0",
+ "date": "2006-10-24"
+ },
+ {
+ "version": "1.5",
+ "date": "2005-11-29"
+ },
+ {
+ "version": "1.0",
+ "date": "2004-11-09"
+ }
+ ]
+}
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/float.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/float.json
new file mode 100644
index 0000000..a799832
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/float.json
@@ -0,0 +1,802 @@
+[
+ {
+ "date": "2013-10-01",
+ "value": 150.0
+ },
+ {
+ "date": "2013-10-02",
+ "value": 152.38052769378947
+ },
+ {
+ "date": "2013-10-03",
+ "value": 154.26923077120756
+ },
+ {
+ "date": "2013-10-04",
+ "value": 155.37842413996768
+ },
+ {
+ "date": "2013-10-05",
+ "value": 154.91598408222126
+ },
+ {
+ "date": "2013-10-06",
+ "value": 155.6051503275322
+ },
+ {
+ "date": "2013-10-07",
+ "value": 156.020995422744
+ },
+ {
+ "date": "2013-10-08",
+ "value": 153.1518021247084
+ },
+ {
+ "date": "2013-10-09",
+ "value": 151.21729814562673
+ },
+ {
+ "date": "2013-10-10",
+ "value": 151.38433609966495
+ },
+ {
+ "date": "2013-10-11",
+ "value": 150.78872781927018
+ },
+ {
+ "date": "2013-10-12",
+ "value": 153.9134389141148
+ },
+ {
+ "date": "2013-10-13",
+ "value": 156.94601290283427
+ },
+ {
+ "date": "2013-10-14",
+ "value": 158.86305615638318
+ },
+ {
+ "date": "2013-10-15",
+ "value": 159.25111032644563
+ },
+ {
+ "date": "2013-10-16",
+ "value": 157.70892050744425
+ },
+ {
+ "date": "2013-10-17",
+ "value": 156.5166885320253
+ },
+ {
+ "date": "2013-10-18",
+ "value": 159.2391477211863
+ },
+ {
+ "date": "2013-10-19",
+ "value": 156.15457859306844
+ },
+ {
+ "date": "2013-10-20",
+ "value": 157.32962414620647
+ },
+ {
+ "date": "2013-10-21",
+ "value": 153.83264840368938
+ },
+ {
+ "date": "2013-10-22",
+ "value": 152.8551947020626
+ },
+ {
+ "date": "2013-10-23",
+ "value": 153.38853405036897
+ },
+ {
+ "date": "2013-10-24",
+ "value": 152.93427670642123
+ },
+ {
+ "date": "2013-10-25",
+ "value": 153.1469976790017
+ },
+ {
+ "date": "2013-10-26",
+ "value": 156.32209665860327
+ },
+ {
+ "date": "2013-10-27",
+ "value": 155.3284262677578
+ },
+ {
+ "date": "2013-10-28",
+ "value": 154.90051183690736
+ },
+ {
+ "date": "2013-10-29",
+ "value": 152.21341963762546
+ },
+ {
+ "date": "2013-10-30",
+ "value": 154.8384882355127
+ },
+ {
+ "date": "2013-10-31",
+ "value": 153.49778206006178
+ },
+ {
+ "date": "2013-11-01",
+ "value": 150.69077772414497
+ },
+ {
+ "date": "2013-11-02",
+ "value": 148.3688534222137
+ },
+ {
+ "date": "2013-11-03",
+ "value": 147.1517262760622
+ },
+ {
+ "date": "2013-11-04",
+ "value": 146.64232264462947
+ },
+ {
+ "date": "2013-11-05",
+ "value": 143.7977476766292
+ },
+ {
+ "date": "2013-11-06",
+ "value": 142.82657667368557
+ },
+ {
+ "date": "2013-11-07",
+ "value": 144.37296514065383
+ },
+ {
+ "date": "2013-11-08",
+ "value": 145.59894477345333
+ },
+ {
+ "date": "2013-11-09",
+ "value": 145.88560250329667
+ },
+ {
+ "date": "2013-11-10",
+ "value": 148.28518729606375
+ },
+ {
+ "date": "2013-11-11",
+ "value": 147.02769155090894
+ },
+ {
+ "date": "2013-11-12",
+ "value": 146.69585270653417
+ },
+ {
+ "date": "2013-11-13",
+ "value": 145.45574401363186
+ },
+ {
+ "date": "2013-11-14",
+ "value": 148.18505057473558
+ },
+ {
+ "date": "2013-11-15",
+ "value": 148.36757870086083
+ },
+ {
+ "date": "2013-11-16",
+ "value": 145.1284637176675
+ },
+ {
+ "date": "2013-11-17",
+ "value": 143.38783013080223
+ },
+ {
+ "date": "2013-11-18",
+ "value": 145.58507244067314
+ },
+ {
+ "date": "2013-11-19",
+ "value": 148.16482741338075
+ },
+ {
+ "date": "2013-11-20",
+ "value": 151.30824629651008
+ },
+ {
+ "date": "2013-11-21",
+ "value": 148.94149732547913
+ },
+ {
+ "date": "2013-11-22",
+ "value": 149.08060427013632
+ },
+ {
+ "date": "2013-11-23",
+ "value": 151.10349313471838
+ },
+ {
+ "date": "2013-11-24",
+ "value": 151.38042365227193
+ },
+ {
+ "date": "2013-11-25",
+ "value": 153.61246750490707
+ },
+ {
+ "date": "2013-11-26",
+ "value": 152.3819387058022
+ },
+ {
+ "date": "2013-11-27",
+ "value": 154.7666777810689
+ },
+ {
+ "date": "2013-11-28",
+ "value": 156.20049982296294
+ },
+ {
+ "date": "2013-11-29",
+ "value": 157.60570664431154
+ },
+ {
+ "date": "2013-11-30",
+ "value": 158.83110208147457
+ },
+ {
+ "date": "2013-12-01",
+ "value": 157.05145284891836
+ },
+ {
+ "date": "2013-12-02",
+ "value": 160.5636817325332
+ },
+ {
+ "date": "2013-12-03",
+ "value": 158.52309803850414
+ },
+ {
+ "date": "2013-12-04",
+ "value": 159.5481262069485
+ },
+ {
+ "date": "2013-12-05",
+ "value": 162.66665660028468
+ },
+ {
+ "date": "2013-12-06",
+ "value": 164.14412262081478
+ },
+ {
+ "date": "2013-12-07",
+ "value": 167.24305427243902
+ },
+ {
+ "date": "2013-12-08",
+ "value": 167.26032062671646
+ },
+ {
+ "date": "2013-12-09",
+ "value": 168.74492234114962
+ },
+ {
+ "date": "2013-12-10",
+ "value": 165.37752588946347
+ },
+ {
+ "date": "2013-12-11",
+ "value": 166.97673724876898
+ },
+ {
+ "date": "2013-12-12",
+ "value": 165.24083072211786
+ },
+ {
+ "date": "2013-12-13",
+ "value": 163.91840295642777
+ },
+ {
+ "date": "2013-12-14",
+ "value": 161.21392266343142
+ },
+ {
+ "date": "2013-12-15",
+ "value": 161.09086330318053
+ },
+ {
+ "date": "2013-12-16",
+ "value": 159.72436012634117
+ },
+ {
+ "date": "2013-12-17",
+ "value": 162.92718203581796
+ },
+ {
+ "date": "2013-12-18",
+ "value": 166.05289239617858
+ },
+ {
+ "date": "2013-12-19",
+ "value": 167.8303488173302
+ },
+ {
+ "date": "2013-12-20",
+ "value": 169.1076706115558
+ },
+ {
+ "date": "2013-12-21",
+ "value": 172.18214540311942
+ },
+ {
+ "date": "2013-12-22",
+ "value": 173.60361186108835
+ },
+ {
+ "date": "2013-12-23",
+ "value": 170.3333738357524
+ },
+ {
+ "date": "2013-12-24",
+ "value": 171.44904351284399
+ },
+ {
+ "date": "2013-12-25",
+ "value": 171.4237348889382
+ },
+ {
+ "date": "2013-12-26",
+ "value": 170.63558145007596
+ },
+ {
+ "date": "2013-12-27",
+ "value": 168.67744459688063
+ },
+ {
+ "date": "2013-12-28",
+ "value": 170.87359507435463
+ },
+ {
+ "date": "2013-12-29",
+ "value": 170.91071470721673
+ },
+ {
+ "date": "2013-12-30",
+ "value": 173.52457327401646
+ },
+ {
+ "date": "2013-12-31",
+ "value": 175.89856657641783
+ },
+ {
+ "date": "2014-01-01",
+ "value": 175.9115683446306
+ },
+ {
+ "date": "2014-01-02",
+ "value": 178.12945782320122
+ },
+ {
+ "date": "2014-01-03",
+ "value": 179.9335431435273
+ },
+ {
+ "date": "2014-01-04",
+ "value": 180.4112576197819
+ },
+ {
+ "date": "2014-01-05",
+ "value": 179.7701613992972
+ },
+ {
+ "date": "2014-01-06",
+ "value": 177.4686229951754
+ },
+ {
+ "date": "2014-01-07",
+ "value": 175.172988264621
+ },
+ {
+ "date": "2014-01-08",
+ "value": 172.89816035941323
+ },
+ {
+ "date": "2014-01-09",
+ "value": 169.32566831004084
+ },
+ {
+ "date": "2014-01-10",
+ "value": 166.200899808268
+ },
+ {
+ "date": "2014-01-11",
+ "value": 163.47733139260433
+ },
+ {
+ "date": "2014-01-12",
+ "value": 166.14564943514935
+ },
+ {
+ "date": "2014-01-13",
+ "value": 162.6972855825834
+ },
+ {
+ "date": "2014-01-14",
+ "value": 163.8285391707244
+ },
+ {
+ "date": "2014-01-15",
+ "value": 162.83765973354699
+ },
+ {
+ "date": "2014-01-16",
+ "value": 159.48461419107502
+ },
+ {
+ "date": "2014-01-17",
+ "value": 158.38069135440546
+ },
+ {
+ "date": "2014-01-18",
+ "value": 159.36210753864273
+ },
+ {
+ "date": "2014-01-19",
+ "value": 155.9389059732206
+ },
+ {
+ "date": "2014-01-20",
+ "value": 159.44340217055645
+ },
+ {
+ "date": "2014-01-21",
+ "value": 157.1252301818101
+ },
+ {
+ "date": "2014-01-22",
+ "value": 155.0515461360151
+ },
+ {
+ "date": "2014-01-23",
+ "value": 154.31662985182166
+ },
+ {
+ "date": "2014-01-24",
+ "value": 156.2405729119896
+ },
+ {
+ "date": "2014-01-25",
+ "value": 154.4303911259191
+ },
+ {
+ "date": "2014-01-26",
+ "value": 156.96007254763632
+ },
+ {
+ "date": "2014-01-27",
+ "value": 156.88984607757212
+ },
+ {
+ "date": "2014-01-28",
+ "value": 158.46953270592533
+ },
+ {
+ "date": "2014-01-29",
+ "value": 159.9760971292252
+ },
+ {
+ "date": "2014-01-30",
+ "value": 158.6064520244421
+ },
+ {
+ "date": "2014-01-31",
+ "value": 159.30396031924434
+ },
+ {
+ "date": "2014-02-01",
+ "value": 158.27130616930083
+ },
+ {
+ "date": "2014-02-02",
+ "value": 156.76310105114038
+ },
+ {
+ "date": "2014-02-03",
+ "value": 158.01962557788505
+ },
+ {
+ "date": "2014-02-04",
+ "value": 155.5601666102677
+ },
+ {
+ "date": "2014-02-05",
+ "value": 152.5655582330515
+ },
+ {
+ "date": "2014-02-06",
+ "value": 153.83308497210635
+ },
+ {
+ "date": "2014-02-07",
+ "value": 155.0906250736871
+ },
+ {
+ "date": "2014-02-08",
+ "value": 156.6661412607239
+ },
+ {
+ "date": "2014-02-09",
+ "value": 154.487982130377
+ },
+ {
+ "date": "2014-02-10",
+ "value": 151.80870052397174
+ },
+ {
+ "date": "2014-02-11",
+ "value": 152.6566948046261
+ },
+ {
+ "date": "2014-02-12",
+ "value": 153.3776096334368
+ },
+ {
+ "date": "2014-02-13",
+ "value": 151.52116899747688
+ },
+ {
+ "date": "2014-02-14",
+ "value": 154.99799005974643
+ },
+ {
+ "date": "2014-02-15",
+ "value": 153.78962974183693
+ },
+ {
+ "date": "2014-02-16",
+ "value": 155.5614787876006
+ },
+ {
+ "date": "2014-02-17",
+ "value": 155.50672366114722
+ },
+ {
+ "date": "2014-02-18",
+ "value": 155.2247468326664
+ },
+ {
+ "date": "2014-02-19",
+ "value": 157.04530694488096
+ },
+ {
+ "date": "2014-02-20",
+ "value": 159.7683676258508
+ },
+ {
+ "date": "2014-02-21",
+ "value": 156.19049862244253
+ },
+ {
+ "date": "2014-02-22",
+ "value": 157.77626968451625
+ },
+ {
+ "date": "2014-02-23",
+ "value": 157.85540343546958
+ },
+ {
+ "date": "2014-02-24",
+ "value": 157.606624912295
+ },
+ {
+ "date": "2014-02-25",
+ "value": 154.29310962212645
+ },
+ {
+ "date": "2014-02-26",
+ "value": 151.47520450013815
+ },
+ {
+ "date": "2014-02-27",
+ "value": 153.29471917494737
+ },
+ {
+ "date": "2014-02-28",
+ "value": 156.704724984211
+ },
+ {
+ "date": "2014-03-01",
+ "value": 155.04358060019956
+ },
+ {
+ "date": "2014-03-02",
+ "value": 153.2334356350558
+ },
+ {
+ "date": "2014-03-03",
+ "value": 152.03821354498334
+ },
+ {
+ "date": "2014-03-04",
+ "value": 154.19199847895723
+ },
+ {
+ "date": "2014-03-05",
+ "value": 152.06664190112994
+ },
+ {
+ "date": "2014-03-06",
+ "value": 153.2986037364113
+ },
+ {
+ "date": "2014-03-07",
+ "value": 156.4046061310383
+ },
+ {
+ "date": "2014-03-08",
+ "value": 154.42925835672014
+ },
+ {
+ "date": "2014-03-09",
+ "value": 155.18025911896245
+ },
+ {
+ "date": "2014-03-10",
+ "value": 153.37647431770608
+ },
+ {
+ "date": "2014-03-11",
+ "value": 150.61799083023823
+ },
+ {
+ "date": "2014-03-12",
+ "value": 153.66746188173215
+ },
+ {
+ "date": "2014-03-13",
+ "value": 156.3151844520418
+ },
+ {
+ "date": "2014-03-14",
+ "value": 153.95015669138036
+ },
+ {
+ "date": "2014-03-15",
+ "value": 155.29282634003127
+ },
+ {
+ "date": "2014-03-16",
+ "value": 158.5090157803603
+ },
+ {
+ "date": "2014-03-17",
+ "value": 155.14902966934457
+ },
+ {
+ "date": "2014-03-18",
+ "value": 156.85877093764927
+ },
+ {
+ "date": "2014-03-19",
+ "value": 159.97825057884495
+ },
+ {
+ "date": "2014-03-20",
+ "value": 160.0756240788441
+ },
+ {
+ "date": "2014-03-21",
+ "value": 163.71251312564075
+ },
+ {
+ "date": "2014-03-22",
+ "value": 160.35896864910785
+ },
+ {
+ "date": "2014-03-23",
+ "value": 159.6979743839615
+ },
+ {
+ "date": "2014-03-24",
+ "value": 160.64504978193472
+ },
+ {
+ "date": "2014-03-25",
+ "value": 161.35500716559707
+ },
+ {
+ "date": "2014-03-26",
+ "value": 160.2606961200085
+ },
+ {
+ "date": "2014-03-27",
+ "value": 158.57932628000506
+ },
+ {
+ "date": "2014-03-28",
+ "value": 161.07173063651766
+ },
+ {
+ "date": "2014-03-29",
+ "value": 164.7598991714389
+ },
+ {
+ "date": "2014-03-30",
+ "value": 165.51463489538983
+ },
+ {
+ "date": "2014-03-31",
+ "value": 168.03477347136803
+ },
+ {
+ "date": "2014-04-01",
+ "value": 164.8919155855522
+ },
+ {
+ "date": "2014-04-02",
+ "value": 162.43871270413882
+ },
+ {
+ "date": "2014-04-03",
+ "value": 160.56491168480784
+ },
+ {
+ "date": "2014-04-04",
+ "value": 160.6231106692656
+ },
+ {
+ "date": "2014-04-05",
+ "value": 158.51347739227052
+ },
+ {
+ "date": "2014-04-06",
+ "value": 157.05813234785617
+ },
+ {
+ "date": "2014-04-07",
+ "value": 159.7471186342081
+ },
+ {
+ "date": "2014-04-08",
+ "value": 161.25579641704525
+ },
+ {
+ "date": "2014-04-09",
+ "value": 161.35157834105863
+ },
+ {
+ "date": "2014-04-10",
+ "value": 164.93059854718956
+ },
+ {
+ "date": "2014-04-11",
+ "value": 162.2509201417386
+ },
+ {
+ "date": "2014-04-12",
+ "value": 162.73580527992038
+ },
+ {
+ "date": "2014-04-13",
+ "value": 166.48398412407607
+ },
+ {
+ "date": "2014-04-14",
+ "value": 163.15310481696565
+ },
+ {
+ "date": "2014-04-15",
+ "value": 164.5079907470571
+ },
+ {
+ "date": "2014-04-16",
+ "value": 164.2005466198294
+ },
+ {
+ "date": "2014-04-17",
+ "value": 165.77632203055697
+ },
+ {
+ "date": "2014-04-18",
+ "value": 168.99155761340631
+ }
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/log.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/log.json
new file mode 100644
index 0000000..1f57231
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/log.json
@@ -0,0 +1,802 @@
+[
+ {
+ "date": "2014-01-01",
+ "value": 2062.025150690567
+ },
+ {
+ "date": "2014-01-02",
+ "value": 9490.615524570567
+ },
+ {
+ "date": "2014-01-03",
+ "value": 49143.35242208582
+ },
+ {
+ "date": "2014-01-04",
+ "value": 83781.24929181556
+ },
+ {
+ "date": "2014-01-05",
+ "value": 109648.70666620035
+ },
+ {
+ "date": "2014-01-06",
+ "value": 46173.741222724544
+ },
+ {
+ "date": "2014-01-07",
+ "value": 165309.1825970328
+ },
+ {
+ "date": "2014-01-08",
+ "value": 134390.76197886752
+ },
+ {
+ "date": "2014-01-09",
+ "value": 382245.0764417244
+ },
+ {
+ "date": "2014-01-10",
+ "value": 261951.04021767154
+ },
+ {
+ "date": "2014-01-11",
+ "value": 365476.76967184874
+ },
+ {
+ "date": "2014-01-12",
+ "value": 307933.33112867293
+ },
+ {
+ "date": "2014-01-13",
+ "value": 122142.84412918231
+ },
+ {
+ "date": "2014-01-14",
+ "value": 439273.6427485952
+ },
+ {
+ "date": "2014-01-15",
+ "value": 283379.5623780852
+ },
+ {
+ "date": "2014-01-16",
+ "value": 238943.45026934962
+ },
+ {
+ "date": "2014-01-17",
+ "value": 363906.78317270277
+ },
+ {
+ "date": "2014-01-18",
+ "value": 1018001.8313018363
+ },
+ {
+ "date": "2014-01-19",
+ "value": 1138159.039774829
+ },
+ {
+ "date": "2014-01-20",
+ "value": 316399.43565288646
+ },
+ {
+ "date": "2014-01-21",
+ "value": 94835.07271610542
+ },
+ {
+ "date": "2014-01-22",
+ "value": 18781.513209857534
+ },
+ {
+ "date": "2014-01-23",
+ "value": 18249.48928239598
+ },
+ {
+ "date": "2014-01-24",
+ "value": 3999.643726105876
+ },
+ {
+ "date": "2014-01-25",
+ "value": 14221.763703455596
+ },
+ {
+ "date": "2014-01-26",
+ "value": 3444.9725583557893
+ },
+ {
+ "date": "2014-01-27",
+ "value": 7147.116251563855
+ },
+ {
+ "date": "2014-01-28",
+ "value": 14502.314013448287
+ },
+ {
+ "date": "2014-01-29",
+ "value": 44911.76232177228
+ },
+ {
+ "date": "2014-01-30",
+ "value": 122174.22764316449
+ },
+ {
+ "date": "2014-01-31",
+ "value": 54225.475099677475
+ },
+ {
+ "date": "2014-02-01",
+ "value": 29195.867918886433
+ },
+ {
+ "date": "2014-02-02",
+ "value": 30485.050577153477
+ },
+ {
+ "date": "2014-02-03",
+ "value": 4960.742108121759
+ },
+ {
+ "date": "2014-02-04",
+ "value": 5814.4040147487185
+ },
+ {
+ "date": "2014-02-05",
+ "value": 2075.4863124795897
+ },
+ {
+ "date": "2014-02-06",
+ "value": 11365.620177539273
+ },
+ {
+ "date": "2014-02-07",
+ "value": 6818.763378635227
+ },
+ {
+ "date": "2014-02-08",
+ "value": 7265.042372143863
+ },
+ {
+ "date": "2014-02-09",
+ "value": 1288.1919040639705
+ },
+ {
+ "date": "2014-02-10",
+ "value": 2903.318504081354
+ },
+ {
+ "date": "2014-02-11",
+ "value": 3476.3564765091846
+ },
+ {
+ "date": "2014-02-12",
+ "value": 428.6416126782084
+ },
+ {
+ "date": "2014-02-13",
+ "value": 4566.4372898258425
+ },
+ {
+ "date": "2014-02-14",
+ "value": 711.2536837438607
+ },
+ {
+ "date": "2014-02-15",
+ "value": 384.520808469771
+ },
+ {
+ "date": "2014-02-16",
+ "value": 126.37136078741982
+ },
+ {
+ "date": "2014-02-17",
+ "value": 1709.721519931354
+ },
+ {
+ "date": "2014-02-18",
+ "value": 10148.81839728999
+ },
+ {
+ "date": "2014-02-19",
+ "value": 3819.8318150089253
+ },
+ {
+ "date": "2014-02-20",
+ "value": 1911.5698109115874
+ },
+ {
+ "date": "2014-02-21",
+ "value": 1237.0465606485475
+ },
+ {
+ "date": "2014-02-22",
+ "value": 82.83456054447824
+ },
+ {
+ "date": "2014-02-23",
+ "value": 247.0567207206995
+ },
+ {
+ "date": "2014-02-24",
+ "value": 2203.4022567407605
+ },
+ {
+ "date": "2014-02-25",
+ "value": 200.68097764702628
+ },
+ {
+ "date": "2014-02-26",
+ "value": 1121.5673568474388
+ },
+ {
+ "date": "2014-02-27",
+ "value": 627.5130197784911
+ },
+ {
+ "date": "2014-02-28",
+ "value": 1962.9915978862207
+ },
+ {
+ "date": "2014-03-01",
+ "value": 4167.075152352931
+ },
+ {
+ "date": "2014-03-02",
+ "value": 3849.2422430353718
+ },
+ {
+ "date": "2014-03-03",
+ "value": 26024.15104428929
+ },
+ {
+ "date": "2014-03-04",
+ "value": 45516.77289686834
+ },
+ {
+ "date": "2014-03-05",
+ "value": 7027.573697798366
+ },
+ {
+ "date": "2014-03-06",
+ "value": 17669.906070121062
+ },
+ {
+ "date": "2014-03-07",
+ "value": 31044.119274296314
+ },
+ {
+ "date": "2014-03-08",
+ "value": 16408.707887136083
+ },
+ {
+ "date": "2014-03-09",
+ "value": 3892.134863935774
+ },
+ {
+ "date": "2014-03-10",
+ "value": 11938.967226184868
+ },
+ {
+ "date": "2014-03-11",
+ "value": 1553.5233934189364
+ },
+ {
+ "date": "2014-03-12",
+ "value": 11862.515702018087
+ },
+ {
+ "date": "2014-03-13",
+ "value": 11158.305407269254
+ },
+ {
+ "date": "2014-03-14",
+ "value": 1334.4016354870455
+ },
+ {
+ "date": "2014-03-15",
+ "value": 2187.7480927633233
+ },
+ {
+ "date": "2014-03-16",
+ "value": 4024.375328815201
+ },
+ {
+ "date": "2014-03-17",
+ "value": 2395.3870463434037
+ },
+ {
+ "date": "2014-03-18",
+ "value": 1087.1435238277254
+ },
+ {
+ "date": "2014-03-19",
+ "value": 677.9406955253385
+ },
+ {
+ "date": "2014-03-20",
+ "value": 1684.7330261245882
+ },
+ {
+ "date": "2014-03-21",
+ "value": 3009.7657573084657
+ },
+ {
+ "date": "2014-03-22",
+ "value": 13969.174225175822
+ },
+ {
+ "date": "2014-03-23",
+ "value": 68108.10656837105
+ },
+ {
+ "date": "2014-03-24",
+ "value": 188573.87239187933
+ },
+ {
+ "date": "2014-03-25",
+ "value": 559783.3612696081
+ },
+ {
+ "date": "2014-03-26",
+ "value": 209480.2451268065
+ },
+ {
+ "date": "2014-03-27",
+ "value": 139144.43213947577
+ },
+ {
+ "date": "2014-03-28",
+ "value": 365608.9134261734
+ },
+ {
+ "date": "2014-03-29",
+ "value": 320844.7892292448
+ },
+ {
+ "date": "2014-03-30",
+ "value": 211943.9255856596
+ },
+ {
+ "date": "2014-03-31",
+ "value": 762121.6146144189
+ },
+ {
+ "date": "2014-04-01",
+ "value": 1553918.287468606
+ },
+ {
+ "date": "2014-04-02",
+ "value": 2776190.8340374744
+ },
+ {
+ "date": "2014-04-03",
+ "value": 2132982.883619252
+ },
+ {
+ "date": "2014-04-04",
+ "value": 3034471.5222186935
+ },
+ {
+ "date": "2014-04-05",
+ "value": 8334267.184667878
+ },
+ {
+ "date": "2014-04-06",
+ "value": 19096849.199135397
+ },
+ {
+ "date": "2014-04-07",
+ "value": 35173655.63395549
+ },
+ {
+ "date": "2014-04-08",
+ "value": 35284088.03655991
+ },
+ {
+ "date": "2014-04-09",
+ "value": 15386352.945048828
+ },
+ {
+ "date": "2014-04-10",
+ "value": 16092176.925682666
+ },
+ {
+ "date": "2014-04-11",
+ "value": 17800747.264360324
+ },
+ {
+ "date": "2014-04-12",
+ "value": 9022272.93207202
+ },
+ {
+ "date": "2014-04-13",
+ "value": 19539255.318293292
+ },
+ {
+ "date": "2014-04-14",
+ "value": 18632765.170638006
+ },
+ {
+ "date": "2014-04-15",
+ "value": 22207773.697823893
+ },
+ {
+ "date": "2014-04-16",
+ "value": 20513350.14760112
+ },
+ {
+ "date": "2014-04-17",
+ "value": 8644588.740459614
+ },
+ {
+ "date": "2014-04-18",
+ "value": 3866972.7646409343
+ },
+ {
+ "date": "2014-04-19",
+ "value": 8627791.327706825
+ },
+ {
+ "date": "2014-04-20",
+ "value": 21876288.3070209
+ },
+ {
+ "date": "2014-04-21",
+ "value": 13065156.692366121
+ },
+ {
+ "date": "2014-04-22",
+ "value": 7006977.18803938
+ },
+ {
+ "date": "2014-04-23",
+ "value": 7322004.070875965
+ },
+ {
+ "date": "2014-04-24",
+ "value": 9144087.906869492
+ },
+ {
+ "date": "2014-04-25",
+ "value": 15712634.308609735
+ },
+ {
+ "date": "2014-04-26",
+ "value": 11675332.990584275
+ },
+ {
+ "date": "2014-04-27",
+ "value": 5276441.428244869
+ },
+ {
+ "date": "2014-04-28",
+ "value": 2098065.0498573617
+ },
+ {
+ "date": "2014-04-29",
+ "value": 4274196.893315845
+ },
+ {
+ "date": "2014-04-30",
+ "value": 6837182.692798125
+ },
+ {
+ "date": "2014-05-01",
+ "value": 5762561.20563913
+ },
+ {
+ "date": "2014-05-02",
+ "value": 8597818.493391953
+ },
+ {
+ "date": "2014-05-03",
+ "value": 15162543.40157677
+ },
+ {
+ "date": "2014-05-04",
+ "value": 10330812.046296848
+ },
+ {
+ "date": "2014-05-05",
+ "value": 8535447.031729257
+ },
+ {
+ "date": "2014-05-06",
+ "value": 3486240.413358828
+ },
+ {
+ "date": "2014-05-07",
+ "value": 2402788.773306244
+ },
+ {
+ "date": "2014-05-08",
+ "value": 2289950.291292259
+ },
+ {
+ "date": "2014-05-09",
+ "value": 3518464.1366947945
+ },
+ {
+ "date": "2014-05-10",
+ "value": 2218638.123249026
+ },
+ {
+ "date": "2014-05-11",
+ "value": 3024707.6308568935
+ },
+ {
+ "date": "2014-05-12",
+ "value": 1481284.8173510565
+ },
+ {
+ "date": "2014-05-13",
+ "value": 3804459.7482742644
+ },
+ {
+ "date": "2014-05-14",
+ "value": 3166547.5499812495
+ },
+ {
+ "date": "2014-05-15",
+ "value": 1244140.8712990445
+ },
+ {
+ "date": "2014-05-16",
+ "value": 1176461.8065991711
+ },
+ {
+ "date": "2014-05-17",
+ "value": 348538.1604919795
+ },
+ {
+ "date": "2014-05-18",
+ "value": 630138.4502415754
+ },
+ {
+ "date": "2014-05-19",
+ "value": 263415.04074479925
+ },
+ {
+ "date": "2014-05-20",
+ "value": 316526.39152859966
+ },
+ {
+ "date": "2014-05-21",
+ "value": 429475.93857651815
+ },
+ {
+ "date": "2014-05-22",
+ "value": 1384523.2440813945
+ },
+ {
+ "date": "2014-05-23",
+ "value": 1422251.2082510514
+ },
+ {
+ "date": "2014-05-24",
+ "value": 2982780.2273946116
+ },
+ {
+ "date": "2014-05-25",
+ "value": 1592004.698676512
+ },
+ {
+ "date": "2014-05-26",
+ "value": 705823.7238808231
+ },
+ {
+ "date": "2014-05-27",
+ "value": 382341.76239653886
+ },
+ {
+ "date": "2014-05-28",
+ "value": 117304.37608341743
+ },
+ {
+ "date": "2014-05-29",
+ "value": 103270.103426627
+ },
+ {
+ "date": "2014-05-30",
+ "value": 189088.38503418514
+ },
+ {
+ "date": "2014-05-31",
+ "value": 67547.73907513174
+ },
+ {
+ "date": "2014-06-01",
+ "value": 152445.22088057562
+ },
+ {
+ "date": "2014-06-02",
+ "value": 616622.4572364822
+ },
+ {
+ "date": "2014-06-03",
+ "value": 1330103.0525501214
+ },
+ {
+ "date": "2014-06-04",
+ "value": 4077706.361059827
+ },
+ {
+ "date": "2014-06-05",
+ "value": 4338332.117707394
+ },
+ {
+ "date": "2014-06-06",
+ "value": 9626054.268217776
+ },
+ {
+ "date": "2014-06-07",
+ "value": 6269805.105786423
+ },
+ {
+ "date": "2014-06-08",
+ "value": 2834343.2338959207
+ },
+ {
+ "date": "2014-06-09",
+ "value": 2175015.158688689
+ },
+ {
+ "date": "2014-06-10",
+ "value": 812456.163680258
+ },
+ {
+ "date": "2014-06-11",
+ "value": 2175163.4473366365
+ },
+ {
+ "date": "2014-06-12",
+ "value": 3808510.5886766836
+ },
+ {
+ "date": "2014-06-13",
+ "value": 5640689.343213645
+ },
+ {
+ "date": "2014-06-14",
+ "value": 4790537.231192042
+ },
+ {
+ "date": "2014-06-15",
+ "value": 4120824.1460910775
+ },
+ {
+ "date": "2014-06-16",
+ "value": 5302994.492796655
+ },
+ {
+ "date": "2014-06-17",
+ "value": 5186664.730492513
+ },
+ {
+ "date": "2014-06-18",
+ "value": 4044030.4941446534
+ },
+ {
+ "date": "2014-06-19",
+ "value": 8581214.856586913
+ },
+ {
+ "date": "2014-06-20",
+ "value": 15013739.74932458
+ },
+ {
+ "date": "2014-06-21",
+ "value": 5719554.417262289
+ },
+ {
+ "date": "2014-06-22",
+ "value": 2453002.234262133
+ },
+ {
+ "date": "2014-06-23",
+ "value": 7264081.292628654
+ },
+ {
+ "date": "2014-06-24",
+ "value": 3809522.1941388543
+ },
+ {
+ "date": "2014-06-25",
+ "value": 2357350.1101749516
+ },
+ {
+ "date": "2014-06-26",
+ "value": 1451776.5422490966
+ },
+ {
+ "date": "2014-06-27",
+ "value": 1951158.0790648684
+ },
+ {
+ "date": "2014-06-28",
+ "value": 942477.7660032308
+ },
+ {
+ "date": "2014-06-29",
+ "value": 284438.3044602669
+ },
+ {
+ "date": "2014-06-30",
+ "value": 395774.63111623266
+ },
+ {
+ "date": "2014-07-01",
+ "value": 181209.66166852613
+ },
+ {
+ "date": "2014-07-02",
+ "value": 99093.59454012293
+ },
+ {
+ "date": "2014-07-03",
+ "value": 112785.84621170859
+ },
+ {
+ "date": "2014-07-04",
+ "value": 268022.501587529
+ },
+ {
+ "date": "2014-07-05",
+ "value": 624290.8018990511
+ },
+ {
+ "date": "2014-07-06",
+ "value": 836181.367972055
+ },
+ {
+ "date": "2014-07-07",
+ "value": 565108.5866839852
+ },
+ {
+ "date": "2014-07-08",
+ "value": 293702.2823721791
+ },
+ {
+ "date": "2014-07-09",
+ "value": 128190.39198775633
+ },
+ {
+ "date": "2014-07-10",
+ "value": 57180.40753508925
+ },
+ {
+ "date": "2014-07-11",
+ "value": 62878.27977730392
+ },
+ {
+ "date": "2014-07-12",
+ "value": 204999.77253837787
+ },
+ {
+ "date": "2014-07-13",
+ "value": 95022.40040256473
+ },
+ {
+ "date": "2014-07-14",
+ "value": 41401.200972437386
+ },
+ {
+ "date": "2014-07-15",
+ "value": 183846.47705915576
+ },
+ {
+ "date": "2014-07-16",
+ "value": 114247.21116015536
+ },
+ {
+ "date": "2014-07-17",
+ "value": 34743.36459470002
+ },
+ {
+ "date": "2014-07-18",
+ "value": 11872.77812834004
+ },
+ {
+ "date": "2014-07-19",
+ "value": 28822.077421492377
+ }
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/make_fake_data.py b/priv/static/metrics-graphics-3.0-alpha3/examples/data/make_fake_data.py
new file mode 100644
index 0000000..f350eab
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/make_fake_data.py
@@ -0,0 +1,56 @@
+import sys
+from datetime import datetime, date, timedelta
+import json
+from random import random
+import argparse
+
+parser = argparse.ArgumentParser(description="Fake data maker.")
+parser.add_argument('-s', '--start', help="start date", nargs=1)
+parser.add_argument('-d', '--small', help="allow decimal values", action="store_true")
+parser.add_argument('-r', '--range', help="how many days from start date", nargs=1)
+parser.add_argument('-m', '--magnitude', help="size of change", nargs=1)
+parser.add_argument('-p', '--percentage', help="whether or not this is a percentage", action="store_true")
+parser.add_argument('-n', '--let_negative', help="let the data values go negative", action="store_true")
+parser.add_argument('-v', '--start_value', help='start value', nargs=1)
+args = parser.parse_args()
+
+doy = {
+ 0: 1,
+ 1:.9,
+ 2:1,
+ 3:1.1,
+ 4:1.05,
+ 5:.7,
+ 6:.75
+}
+if args.percentage: convert = lambda x: float(x)
+elif args.small: convert = lambda x: float(x)
+else: convert = lambda x: int(x)
+
+current_date = datetime.strptime(args.start[0], '%Y-%m-%d').date()
+length = int(args.range[0])
+
+baseline = convert(args.start_value[0])
+
+if args.magnitude: magnitude = convert(args.magnitude[0])
+elif args.percentage: magnitude = baseline/50.
+elif args.small: magnitude = baseline/20.
+else: magnitude = baseline/5
+out = []
+
+# Needed to automatically convert dates to strings in json.
+dthandler = lambda obj: obj.isoformat() if isinstance(obj, date) else None
+
+for i in xrange(length):
+ out.append({'date': current_date, 'value': baseline})
+ nb = convert(magnitude * (random()-.5))
+ if args.percentage:
+ if (baseline+nb < 0 or baseline+nb > 1) and (not args.let_negative): pass
+ else: baseline += nb
+ else:
+ if baseline+nb < 0 and not args.let_negative: pass
+ else: baseline += nb
+
+ current_date += timedelta(days=1)
+
+sys.stdout.write(json.dumps(out,default=dthandler, indent=4)) \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden-accessor.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden-accessor.json
new file mode 100644
index 0000000..088ec47
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden-accessor.json
@@ -0,0 +1,57 @@
+
+ [
+ {
+ "date": "2014-01-08",
+ "value": 500
+ },
+ {
+ "date": "2014-01-09",
+ "value": 500
+ },
+ {
+ "date": "2014-01-10",
+ "value": 400
+ },
+ {
+ "date": "2014-01-11",
+ "value": 500,
+ "dead": true
+ },
+ {
+ "date": "2014-01-12",
+ "value": 400
+ },
+ {
+ "date": "2014-01-13",
+ "value": 430
+ },
+ {
+ "date": "2014-01-14",
+ "value": 410
+ },
+ {
+ "date": "2014-01-15",
+ "value": 200,
+ "dead": true
+ },
+ {
+ "date": "2014-01-16",
+ "value": 500
+ },
+ {
+ "date": "2014-01-17",
+ "value": 100
+ },
+ {
+ "date": "2014-01-18",
+ "value": 30
+ },
+ {
+ "date": "2014-01-19",
+ "value": 300
+ },
+ {
+ "date": "2014-01-20",
+ "value": 200
+ }
+ ]
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden-multi.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden-multi.json
new file mode 100644
index 0000000..e64a30b
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden-multi.json
@@ -0,0 +1,1436 @@
+[
+ [
+ {
+ "date": "2014-01-01",
+ "value": 10000000
+ },
+ {
+ "date": "2014-01-02",
+ "value": 10379978
+ },
+ {
+ "date": "2014-01-03",
+ "value": 10493749
+ },
+ {
+ "date": "2014-01-04",
+ "value": 10785250
+ },
+ {
+ "date": "2014-01-08",
+ "value": 15177211
+ },
+ {
+ "date": "2014-01-09",
+ "value": 16622100
+ },
+ {
+ "date": "2014-01-10",
+ "value": 17381072
+ },
+ {
+ "date": "2014-01-11",
+ "value": 18802310
+ },
+ {
+ "date": "2014-01-12",
+ "value": 15531790
+ },
+ {
+ "date": "2014-01-13",
+ "value": 15748881
+ },
+ {
+ "date": "2014-01-14",
+ "value": 18706437
+ },
+ {
+ "date": "2014-01-15",
+ "value": 19752685
+ },
+ {
+ "date": "2014-01-16",
+ "value": 21016418
+ },
+ {
+ "date": "2014-01-17",
+ "value": 25622924
+ },
+ {
+ "date": "2014-01-18",
+ "value": 25337480
+ },
+ {
+ "date": "2014-01-19",
+ "value": 22258882
+ },
+ {
+ "date": "2014-01-20",
+ "value": 23829538
+ },
+ {
+ "date": "2014-01-21",
+ "value": 24245689
+ },
+ {
+ "date": "2014-01-22",
+ "value": 26429711
+ },
+ {
+ "date": "2014-01-23",
+ "value": 26259017
+ },
+ {
+ "date": "2014-01-24",
+ "value": 25396183
+ },
+ {
+ "date": "2014-01-25",
+ "value": 23107346
+ },
+ {
+ "date": "2014-01-26",
+ "value": 28659852
+ },
+ {
+ "date": "2014-01-27",
+ "value": 25270783
+ },
+ {
+ "date": "2014-01-28",
+ "value": 26270783
+ },
+ {
+ "date": "2014-01-29",
+ "value": 27270783
+ },
+ {
+ "date": "2014-01-30",
+ "value": 28270783
+ },
+ {
+ "date": "2014-01-31",
+ "value": 29270783
+ },
+ {
+ "date": "2014-02-01",
+ "value": 30270783
+ },
+ {
+ "date": "2014-02-02",
+ "value": 31270783
+ },
+ {
+ "date": "2014-02-03",
+ "value": 32270783
+ },
+ {
+ "date": "2014-02-04",
+ "value": 33270783
+ },
+ {
+ "date": "2014-02-05",
+ "value": 28270783
+ },
+ {
+ "date": "2014-02-06",
+ "value": 27270783
+ },
+ {
+ "date": "2014-02-07",
+ "value": 35270783
+ },
+ {
+ "date": "2014-02-08",
+ "value": 34270783
+ },
+ {
+ "date": "2014-02-09",
+ "value": 28270783
+ },
+ {
+ "date": "2014-02-10",
+ "value": 35270783
+ },
+ {
+ "date": "2014-02-11",
+ "value": 36270783
+ },
+ {
+ "date": "2014-02-12",
+ "value": 34127078
+ },
+ {
+ "date": "2014-02-13",
+ "value": 33124078
+ },
+ {
+ "date": "2014-02-14",
+ "value": 36227078
+ },
+ {
+ "date": "2014-02-15",
+ "value": 37827078
+ },
+ {
+ "date": "2014-02-16",
+ "value": 36427073
+ },
+ {
+ "date": "2014-02-17",
+ "value": 37570783
+ },
+ {
+ "date": "2014-02-18",
+ "value": 38627073
+ },
+ {
+ "date": "2014-02-19",
+ "value": 37727078
+ },
+ {
+ "date": "2014-02-20",
+ "value": 38827073
+ },
+ {
+ "date": "2014-02-21",
+ "value": 40927078
+ },
+ {
+ "date": "2014-02-22",
+ "value": 41027078
+ },
+ {
+ "date": "2014-02-23",
+ "value": 42127073
+ },
+ {
+ "date": "2014-02-24",
+ "value": 43220783
+ },
+ {
+ "date": "2014-02-25",
+ "value": 44327078
+ },
+ {
+ "date": "2014-02-26",
+ "value": 40427078
+ },
+ {
+ "date": "2014-02-27",
+ "value": 41027078
+ },
+ {
+ "date": "2014-02-28",
+ "value": 45627078
+ },
+ {
+ "date": "2014-03-01",
+ "value": 44727078
+ },
+ {
+ "date": "2014-03-02",
+ "value": 44227078
+ },
+ {
+ "date": "2014-03-03",
+ "value": 45227078
+ },
+ {
+ "date": "2014-03-04",
+ "value": 46027078
+ },
+ {
+ "date": "2014-03-05",
+ "value": 46927078
+ },
+ {
+ "date": "2014-03-06",
+ "value": 47027078
+ },
+ {
+ "date": "2014-03-07",
+ "value": 46227078
+ },
+ {
+ "date": "2014-03-08",
+ "value": 47027078
+ },
+ {
+ "date": "2014-03-09",
+ "value": 48027078
+ },
+ {
+ "date": "2014-03-10",
+ "value": 47027078
+ },
+ {
+ "date": "2014-03-11",
+ "value": 47027078
+ },
+ {
+ "date": "2014-03-12",
+ "value": 48017078
+ },
+ {
+ "date": "2014-03-13",
+ "value": 48077078
+ },
+ {
+ "date": "2014-03-14",
+ "value": 48087078
+ },
+ {
+ "date": "2014-03-15",
+ "value": 48017078
+ },
+ {
+ "date": "2014-03-16",
+ "value": 48047078
+ },
+ {
+ "date": "2014-03-17",
+ "value": 48067078
+ },
+ {
+ "date": "2014-03-18",
+ "value": 48077078
+ },
+ {
+ "date": "2014-03-19",
+ "value": 48027074
+ },
+ {
+ "date": "2014-03-20",
+ "value": 48927079
+ },
+ {
+ "date": "2014-03-21",
+ "value": 48727071
+ },
+ {
+ "date": "2014-03-22",
+ "value": 48127072
+ },
+ {
+ "date": "2014-03-23",
+ "value": 48527072
+ },
+ {
+ "date": "2014-03-24",
+ "value": 48627027
+ },
+ {
+ "date": "2014-03-25",
+ "value": 48027040
+ },
+ {
+ "date": "2014-03-26",
+ "value": 48027043
+ },
+ {
+ "date": "2014-03-27",
+ "value": 48057022
+ },
+ {
+ "date": "2014-03-28",
+ "value": 49057022
+ },
+ {
+ "date": "2014-03-29",
+ "value": 50057022
+ },
+ {
+ "date": "2014-03-30",
+ "value": 51057022
+ },
+ {
+ "date": "2014-03-31",
+ "value": 52057022
+ },
+ {
+ "date": "2014-04-01",
+ "value": 53057022
+ },
+ {
+ "date": "2014-04-02",
+ "value": 54057022
+ },
+ {
+ "date": "2014-04-03",
+ "value": 52057022
+ },
+ {
+ "date": "2014-04-04",
+ "value": 55057022
+ },
+ {
+ "date": "2014-04-05",
+ "value": 58270783
+ },
+ {
+ "date": "2014-04-06",
+ "value": 56270783
+ },
+ {
+ "date": "2014-04-07",
+ "value": 55270783
+ },
+ {
+ "date": "2014-04-08",
+ "value": 58270783
+ },
+ {
+ "date": "2014-04-09",
+ "value": 59270783
+ },
+ {
+ "date": "2014-04-10",
+ "value": 60270783
+ },
+ {
+ "date": "2014-04-11",
+ "value": 61270783
+ },
+ {
+ "date": "2014-04-12",
+ "value": 62270783
+ },
+ {
+ "date": "2014-04-13",
+ "value": 63270783
+ },
+ {
+ "date": "2014-04-14",
+ "value": 64270783
+ },
+ {
+ "date": "2014-04-15",
+ "value": 65270783
+ },
+ {
+ "date": "2014-04-16",
+ "value": 66270783
+ },
+ {
+ "date": "2014-04-17",
+ "value": 67270783
+ },
+ {
+ "date": "2014-04-18",
+ "value": 68270783
+ },
+ {
+ "date": "2014-04-19",
+ "value": 69270783
+ },
+ {
+ "date": "2014-04-20",
+ "value": 70270783
+ },
+ {
+ "date": "2014-04-21",
+ "value": 71270783
+ },
+ {
+ "date": "2014-04-22",
+ "value": 72270783
+ },
+ {
+ "date": "2014-04-23",
+ "value": 73270783
+ },
+ {
+ "date": "2014-04-24",
+ "value": 74270783
+ },
+ {
+ "date": "2014-04-25",
+ "value": 75270783
+ },
+ {
+ "date": "2014-04-26",
+ "value": 76660783
+ },
+ {
+ "date": "2014-04-27",
+ "value": 77270783
+ },
+ {
+ "date": "2014-04-28",
+ "value": 78370783
+ },
+ {
+ "date": "2014-04-29",
+ "value": 79470783
+ },
+ {
+ "date": "2014-04-30",
+ "value": 80170783
+ }
+ ],
+ [
+ {
+ "date": "2014-01-01",
+ "value": 150000000
+ },
+ {
+ "date": "2014-01-02",
+ "value": 160379978
+ },
+ {
+ "date": "2014-01-03",
+ "value": 170493749
+ },
+ {
+ "date": "2014-01-04",
+ "value": 160785250
+ },
+ {
+ "date": "2014-01-05",
+ "value": 167391904
+ },
+ {
+ "date": "2014-01-06",
+ "value": 161576838
+ },
+ {
+ "date": "2014-01-07",
+ "value": 161413854
+ },
+ {
+ "date": "2014-01-08",
+ "value": 152177211
+ },
+ {
+ "date": "2014-01-09",
+ "value": 143762210
+ },
+ {
+ "date": "2014-01-10",
+ "value": 144381072
+ },
+ {
+ "date": "2014-01-11",
+ "value": 154352310
+ },
+ {
+ "date": "2014-01-12",
+ "value": 165531790
+ },
+ {
+ "date": "2014-01-13",
+ "value": 175748881
+ },
+ {
+ "date": "2014-01-14",
+ "value": 187064037
+ },
+ {
+ "date": "2014-01-15",
+ "value": 197520685
+ },
+ {
+ "date": "2014-01-16",
+ "value": 210176418
+ },
+ {
+ "date": "2014-01-17",
+ "value": 196122924
+ },
+ {
+ "date": "2014-01-18",
+ "value": 207337480
+ },
+ {
+ "date": "2014-01-19",
+ "value": 200258882
+ },
+ {
+ "date": "2014-01-20",
+ "value": 186829538
+ },
+ {
+ "date": "2014-01-21",
+ "value": 192456897
+ },
+ {
+ "date": "2014-01-22",
+ "value": 204299711
+ },
+ {
+ "date": "2014-01-23",
+ "value": 192759017
+ },
+ {
+ "date": "2014-01-24",
+ "value": 203596183
+ },
+ {
+ "date": "2014-01-25",
+ "value": 208107346
+ },
+ {
+ "date": "2014-01-26",
+ "value": 196359852
+ },
+ {
+ "date": "2014-01-27",
+ "value": 192570783
+ },
+ {
+ "date": "2014-01-28",
+ "value": 177967768
+ },
+ {
+ "date": "2014-01-29",
+ "value": 190632803
+ },
+ {
+ "date": "2014-01-30",
+ "value": 203725316
+ },
+ {
+ "date": "2014-01-31",
+ "value": 218226177
+ },
+ {
+ "date": "2014-02-01",
+ "value": 210698669
+ },
+ {
+ "date": "2014-02-02",
+ "value": 217640656
+ },
+ {
+ "date": "2014-02-03",
+ "value": 216142362
+ },
+ {
+ "date": "2014-02-04",
+ "value": 201410971
+ },
+ {
+ "date": "2014-02-05",
+ "value": 196704289
+ },
+ {
+ "date": "2014-02-06",
+ "value": 190436945
+ },
+ {
+ "date": "2014-02-07",
+ "value": 178891686
+ },
+ {
+ "date": "2014-02-08",
+ "value": 171613962
+ },
+ {
+ "date": "2014-02-09",
+ "value": 157579773
+ },
+ {
+ "date": "2014-02-10",
+ "value": 158677098
+ },
+ {
+ "date": "2014-02-11",
+ "value": 147129977
+ },
+ {
+ "date": "2014-02-12",
+ "value": 151561876
+ },
+ {
+ "date": "2014-02-13",
+ "value": 151627421
+ },
+ {
+ "date": "2014-02-14",
+ "value": 143543872
+ },
+ {
+ "date": "2014-02-15",
+ "value": 136581057
+ },
+ {
+ "date": "2014-02-16",
+ "value": 135560715
+ },
+ {
+ "date": "2014-02-17",
+ "value": 122625263
+ },
+ {
+ "date": "2014-02-18",
+ "value": 112091484
+ },
+ {
+ "date": "2014-02-19",
+ "value": 98810329
+ },
+ {
+ "date": "2014-02-20",
+ "value": 99882912
+ },
+ {
+ "date": "2014-02-21",
+ "value": 94943095
+ },
+ {
+ "date": "2014-02-22",
+ "value": 104875743
+ },
+ {
+ "date": "2014-02-23",
+ "value": 116383678
+ },
+ {
+ "date": "2014-02-24",
+ "value": 125028841
+ },
+ {
+ "date": "2014-02-25",
+ "value": 123967310
+ },
+ {
+ "date": "2014-02-26",
+ "value": 133167029
+ },
+ {
+ "date": "2014-02-27",
+ "value": 128577263
+ },
+ {
+ "date": "2014-02-28",
+ "value": 115836969
+ },
+ {
+ "date": "2014-03-01",
+ "value": 119264529
+ },
+ {
+ "date": "2014-03-02",
+ "value": 109363374
+ },
+ {
+ "date": "2014-03-03",
+ "value": 113985628
+ },
+ {
+ "date": "2014-03-04",
+ "value": 114650999
+ },
+ {
+ "date": "2014-03-05",
+ "value": 110866108
+ },
+ {
+ "date": "2014-03-06",
+ "value": 96473454
+ },
+ {
+ "date": "2014-03-07",
+ "value": 104075886
+ },
+ {
+ "date": "2014-03-08",
+ "value": 103568384
+ },
+ {
+ "date": "2014-03-09",
+ "value": 101534883
+ },
+ {
+ "date": "2014-03-10",
+ "value": 115825447
+ },
+ {
+ "date": "2014-03-11",
+ "value": 126133916
+ },
+ {
+ "date": "2014-03-12",
+ "value": 116502109
+ },
+ {
+ "date": "2014-03-13",
+ "value": 130169411
+ },
+ {
+ "date": "2014-03-14",
+ "value": 124296886
+ },
+ {
+ "date": "2014-03-15",
+ "value": 126347399
+ },
+ {
+ "date": "2014-03-16",
+ "value": 131483669
+ },
+ {
+ "date": "2014-03-17",
+ "value": 142811333
+ },
+ {
+ "date": "2014-03-18",
+ "value": 129675396
+ },
+ {
+ "date": "2014-03-19",
+ "value": 115514483
+ },
+ {
+ "date": "2014-03-20",
+ "value": 117630630
+ },
+ {
+ "date": "2014-03-21",
+ "value": 122340239
+ },
+ {
+ "date": "2014-03-22",
+ "value": 132349091
+ },
+ {
+ "date": "2014-03-23",
+ "value": 125613305
+ },
+ {
+ "date": "2014-03-24",
+ "value": 135592466
+ },
+ {
+ "date": "2014-03-25",
+ "value": 123408762
+ },
+ {
+ "date": "2014-03-26",
+ "value": 111991454
+ },
+ {
+ "date": "2014-03-27",
+ "value": 116123955
+ },
+ {
+ "date": "2014-03-28",
+ "value": 112817214
+ },
+ {
+ "date": "2014-03-29",
+ "value": 113029590
+ },
+ {
+ "date": "2014-03-30",
+ "value": 108753398
+ },
+ {
+ "date": "2014-03-31",
+ "value": 99383763
+ },
+ {
+ "date": "2014-04-01",
+ "value": 100151737
+ },
+ {
+ "date": "2014-04-02",
+ "value": 94985209
+ },
+ {
+ "date": "2014-04-03",
+ "value": 82913669
+ },
+ {
+ "date": "2014-04-04",
+ "value": 78748268
+ },
+ {
+ "date": "2014-04-05",
+ "value": 63829135
+ },
+ {
+ "date": "2014-04-06",
+ "value": 78694727
+ },
+ {
+ "date": "2014-04-07",
+ "value": 80868994
+ },
+ {
+ "date": "2014-04-08",
+ "value": 93799013
+ },
+ {
+ "date": "2014-04-09",
+ "value": 99042416
+ },
+ {
+ "date": "2014-04-10",
+ "value": 97298692
+ },
+ {
+ "date": "2014-04-11",
+ "value": 83353499
+ },
+ {
+ "date": "2014-04-12",
+ "value": 71248129
+ },
+ {
+ "date": "2014-04-13",
+ "value": 75253744
+ },
+ {
+ "date": "2014-04-14",
+ "value": 68976648
+ },
+ {
+ "date": "2014-04-15",
+ "value": 71002284
+ },
+ {
+ "date": "2014-04-16",
+ "value": 75052401
+ },
+ {
+ "date": "2014-04-17",
+ "value": 83894030
+ },
+ {
+ "date": "2014-04-18",
+ "value": 90236528
+ },
+ {
+ "date": "2014-04-19",
+ "value": 99739114
+ },
+ {
+ "date": "2014-04-20",
+ "value": 96407136
+ },
+ {
+ "date": "2014-04-21",
+ "value": 108323177
+ },
+ {
+ "date": "2014-04-22",
+ "value": 101578914
+ },
+ {
+ "date": "2014-04-23",
+ "value": 115877608
+ },
+ {
+ "date": "2014-04-24",
+ "value": 112088857
+ },
+ {
+ "date": "2014-04-25",
+ "value": 112071353
+ },
+ {
+ "date": "2014-04-26",
+ "value": 101790062
+ },
+ {
+ "date": "2014-04-27",
+ "value": 115003761
+ },
+ {
+ "date": "2014-04-28",
+ "value": 120457727
+ },
+ {
+ "date": "2014-04-29",
+ "value": 118253926
+ },
+ {
+ "date": "2014-04-30",
+ "value": 117956992
+ }
+ ],
+ [
+ {
+ "date": "2014-01-01",
+ "value": 60000000
+ },
+ {
+ "date": "2014-01-02",
+ "value": 60379978
+ },
+ {
+ "date": "2014-01-03",
+ "value": 40493749
+ },
+ {
+ "date": "2014-01-04",
+ "value": 60785250
+ },
+ {
+ "date": "2014-01-05",
+ "value": 67391904
+ },
+ {
+ "date": "2014-01-06",
+ "value": 61576838
+ },
+ {
+ "date": "2014-01-07",
+ "value": 61413854
+ },
+ {
+ "date": "2014-01-08",
+ "value": 82177211
+ },
+ {
+ "date": "2014-01-09",
+ "value": 103762210
+ },
+ {
+ "date": "2014-01-10",
+ "value": 84381072
+ },
+ {
+ "date": "2014-01-11",
+ "value": 54352310
+ },
+ {
+ "date": "2014-01-12",
+ "value": 65531790
+ },
+ {
+ "date": "2014-01-13",
+ "value": 75748881
+ },
+ {
+ "date": "2014-01-14",
+ "value": 47064037
+ },
+ {
+ "date": "2014-01-15",
+ "value": 67520685
+ },
+ {
+ "date": "2014-01-16",
+ "value": 60176418
+ },
+ {
+ "date": "2014-01-17",
+ "value": 66122924
+ },
+ {
+ "date": "2014-01-18",
+ "value": 57337480
+ },
+ {
+ "date": "2014-01-19",
+ "value": 100258882
+ },
+ {
+ "date": "2014-01-20",
+ "value": 46829538
+ },
+ {
+ "date": "2014-01-21",
+ "value": 92456897
+ },
+ {
+ "date": "2014-01-22",
+ "value": 94299711
+ },
+ {
+ "date": "2014-01-23",
+ "value": 62759017
+ },
+ {
+ "date": "2014-01-24",
+ "value": 103596183
+ },
+ {
+ "date": "2014-01-25",
+ "value": 108107346
+ },
+ {
+ "date": "2014-01-26",
+ "value": 66359852
+ },
+ {
+ "date": "2014-01-27",
+ "value": 62570783
+ },
+ {
+ "date": "2014-01-28",
+ "value": 77967768
+ },
+ {
+ "date": "2014-01-29",
+ "value": 60632803
+ },
+ {
+ "date": "2014-01-30",
+ "value": 103725316
+ },
+ {
+ "date": "2014-01-31",
+ "value": 98226177
+ },
+ {
+ "date": "2014-02-01",
+ "value": 60698669
+ },
+ {
+ "date": "2014-02-02",
+ "value": 67640656
+ },
+ {
+ "date": "2014-02-03",
+ "value": 66142362
+ },
+ {
+ "date": "2014-02-04",
+ "value": 101410971
+ },
+ {
+ "date": "2014-02-05",
+ "value": 66704289
+ },
+ {
+ "date": "2014-02-06",
+ "value": 60436945
+ },
+ {
+ "date": "2014-02-07",
+ "value": 78891686
+ },
+ {
+ "date": "2014-02-08",
+ "value": 71613962
+ },
+ {
+ "date": "2014-02-09",
+ "value": 107579773
+ },
+ {
+ "date": "2014-02-10",
+ "value": 58677098
+ },
+ {
+ "date": "2014-02-11",
+ "value": 87129977
+ },
+ {
+ "date": "2014-02-12",
+ "value": 51561876
+ },
+ {
+ "date": "2014-02-13",
+ "value": 51627421
+ },
+ {
+ "date": "2014-02-14",
+ "value": 83543872
+ },
+ {
+ "date": "2014-02-15",
+ "value": 66581057
+ },
+ {
+ "date": "2014-02-16",
+ "value": 65560715
+ },
+ {
+ "date": "2014-02-17",
+ "value": 62625263
+ },
+ {
+ "date": "2014-02-18",
+ "value": 92091484
+ },
+ {
+ "date": "2014-02-19",
+ "value": 48810329
+ },
+ {
+ "date": "2014-02-20",
+ "value": 49882912
+ },
+ {
+ "date": "2014-02-21",
+ "value": 44943095
+ },
+ {
+ "date": "2014-02-22",
+ "value": 104875743
+ },
+ {
+ "date": "2014-02-23",
+ "value": 96383678
+ },
+ {
+ "date": "2014-02-24",
+ "value": 105028841
+ },
+ {
+ "date": "2014-02-25",
+ "value": 63967310
+ },
+ {
+ "date": "2014-02-26",
+ "value": 63167029
+ },
+ {
+ "date": "2014-02-27",
+ "value": 68577263
+ },
+ {
+ "date": "2014-02-28",
+ "value": 95836969
+ },
+ {
+ "date": "2014-03-01",
+ "value": 99264529
+ },
+ {
+ "date": "2014-03-02",
+ "value": 109363374
+ },
+ {
+ "date": "2014-03-03",
+ "value": 93985628
+ },
+ {
+ "date": "2014-03-04",
+ "value": 94650999
+ },
+ {
+ "date": "2014-03-05",
+ "value": 90866108
+ },
+ {
+ "date": "2014-03-06",
+ "value": 46473454
+ },
+ {
+ "date": "2014-03-07",
+ "value": 84075886
+ },
+ {
+ "date": "2014-03-08",
+ "value": 103568384
+ },
+ {
+ "date": "2014-03-09",
+ "value": 101534883
+ },
+ {
+ "date": "2014-03-10",
+ "value": 95825447
+ },
+ {
+ "date": "2014-03-11",
+ "value": 66133916
+ },
+ {
+ "date": "2014-03-12",
+ "value": 96502109
+ },
+ {
+ "date": "2014-03-13",
+ "value": 80169411
+ },
+ {
+ "date": "2014-03-14",
+ "value": 84296886
+ },
+ {
+ "date": "2014-03-15",
+ "value": 86347399
+ },
+ {
+ "date": "2014-03-16",
+ "value": 31483669
+ },
+ {
+ "date": "2014-03-17",
+ "value": 82811333
+ },
+ {
+ "date": "2014-03-18",
+ "value": 89675396
+ },
+ {
+ "date": "2014-03-19",
+ "value": 95514483
+ },
+ {
+ "date": "2014-03-20",
+ "value": 97630630
+ },
+ {
+ "date": "2014-03-21",
+ "value": 62340239
+ },
+ {
+ "date": "2014-03-22",
+ "value": 62349091
+ },
+ {
+ "date": "2014-03-23",
+ "value": 65613305
+ },
+ {
+ "date": "2014-03-24",
+ "value": 65592466
+ },
+ {
+ "date": "2014-03-25",
+ "value": 63408762
+ },
+ {
+ "date": "2014-03-26",
+ "value": 91991454
+ },
+ {
+ "date": "2014-03-27",
+ "value": 96123955
+ },
+ {
+ "date": "2014-03-28",
+ "value": 92817214
+ },
+ {
+ "date": "2014-03-29",
+ "value": 93029590
+ },
+ {
+ "date": "2014-03-30",
+ "value": 108753398
+ },
+ {
+ "date": "2014-03-31",
+ "value": 49383763
+ },
+ {
+ "date": "2014-04-01",
+ "value": 100151737
+ },
+ {
+ "date": "2014-04-02",
+ "value": 44985209
+ },
+ {
+ "date": "2014-04-03",
+ "value": 52913669
+ },
+ {
+ "date": "2014-04-04",
+ "value": 48748268
+ },
+ {
+ "date": "2014-04-05",
+ "value": 23829135
+ },
+ {
+ "date": "2014-04-06",
+ "value": 58694727
+ },
+ {
+ "date": "2014-04-07",
+ "value": 50868994
+ },
+ {
+ "date": "2014-04-08",
+ "value": 43799013
+ },
+ {
+ "date": "2014-04-09",
+ "value": 4042416
+ },
+ {
+ "date": "2014-04-10",
+ "value": 47298692
+ },
+ {
+ "date": "2014-04-11",
+ "value": 53353499
+ },
+ {
+ "date": "2014-04-12",
+ "value": 71248129
+ },
+ {
+ "date": "2014-04-13",
+ "value": 75253744
+ },
+ {
+ "date": "2014-04-14",
+ "value": 68976648
+ },
+ {
+ "date": "2014-04-15",
+ "value": 71002284
+ },
+ {
+ "date": "2014-04-16",
+ "value": 75052401
+ },
+ {
+ "date": "2014-04-17",
+ "value": 83894030
+ },
+ {
+ "date": "2014-04-18",
+ "value": 50236528
+ },
+ {
+ "date": "2014-04-19",
+ "value": 59739114
+ },
+ {
+ "date": "2014-04-20",
+ "value": 56407136
+ },
+ {
+ "date": "2014-04-21",
+ "value": 108323177
+ },
+ {
+ "date": "2014-04-22",
+ "value": 101578914
+ },
+ {
+ "date": "2014-04-23",
+ "value": 95877608
+ },
+ {
+ "date": "2014-04-24",
+ "value": 62088857
+ },
+ {
+ "date": "2014-04-25",
+ "value": 92071353
+ },
+ {
+ "date": "2014-04-26",
+ "value": 81790062
+ },
+ {
+ "date": "2014-04-27",
+ "value": 105003761
+ },
+ {
+ "date": "2014-04-28",
+ "value": 100457727
+ },
+ {
+ "date": "2014-04-29",
+ "value": 98253926
+ },
+ {
+ "date": "2014-04-30",
+ "value": 67956992
+ }
+ ]
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden.json
new file mode 100644
index 0000000..582d08a
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-is-hidden.json
@@ -0,0 +1,39 @@
+
+ [
+ {
+ "date": "2014-01-08",
+ "value": 500
+ },
+ {
+ "date": "2014-01-09",
+ "value": 500
+ },
+ {
+ "date": "2014-01-10",
+ "value": 400
+ },
+ {
+ "date": "2014-02-12",
+ "value": 500
+ },
+ {
+ "date": "2014-02-13",
+ "value": 100
+ },
+ {
+ "date": "2014-02-14",
+ "value": null
+ },
+ {
+ "date": "2014-02-15",
+ "value": 30
+ },
+ {
+ "date": "2014-02-16",
+ "value": 300
+ },
+ {
+ "date": "2014-02-17",
+ "value": 200
+ }
+ ]
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-y.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-y.json
new file mode 100644
index 0000000..9ec8f18
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/missing-y.json
@@ -0,0 +1,35 @@
+
+ [
+ {
+ "date": "2014-01-08",
+ "value": 500
+ },
+ {
+ "date": "2014-01-12",
+ "value": 500
+ },
+ {
+ "date": "2014-01-19",
+ "value": 2000
+ },
+ {
+ "date": "2014-01-20",
+ "value": 2200
+ },
+ {
+ "date": "2014-01-21",
+ "value": 2300
+ },
+ {
+ "date": "2014-04-23",
+ "value": 500
+ },
+ {
+ "date": "2014-04-24",
+ "value": 1500
+ },
+ {
+ "date": "2014-04-25",
+ "value": 3000
+ }
+ ]
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/multiline.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/multiline.json
new file mode 100644
index 0000000..90102ba
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/multiline.json
@@ -0,0 +1,902 @@
+[
+ {
+ "date": "2013-11-30",
+ "value3": 40770,
+ "value2": 38327,
+ "value1": 43564
+ },
+ {
+ "date": "2013-12-01",
+ "value3": 39705,
+ "value2": 39998,
+ "value1": 43104
+ },
+ {
+ "date": "2013-12-02",
+ "value3": 39209,
+ "value2": 40158,
+ "value1": 40300
+ },
+ {
+ "date": "2013-12-03",
+ "value3": 35539,
+ "value2": 37155,
+ "value1": 37078
+ },
+ {
+ "date": "2013-12-04",
+ "value3": 33231,
+ "value2": 37554,
+ "value1": 38526
+ },
+ {
+ "date": "2013-12-05",
+ "value3": 29792,
+ "value2": 40383,
+ "value1": 36456
+ },
+ {
+ "date": "2013-12-06",
+ "value3": 33533,
+ "value2": 42351,
+ "value1": 39354
+ },
+ {
+ "date": "2013-12-07",
+ "value3": 31903,
+ "value2": 45058,
+ "value1": 42378
+ },
+ {
+ "date": "2013-12-08",
+ "value3": 30748,
+ "value2": 47100,
+ "value1": 38812
+ },
+ {
+ "date": "2013-12-09",
+ "value3": 30380,
+ "value2": 44866,
+ "value1": 37220
+ },
+ {
+ "date": "2013-12-10",
+ "value3": 29189,
+ "value2": 41967,
+ "value1": 39755
+ },
+ {
+ "date": "2013-12-11",
+ "value3": 31210,
+ "value2": 39328,
+ "value1": 40757
+ },
+ {
+ "date": "2013-12-12",
+ "value3": 35036,
+ "value2": 35949,
+ "value1": 39377
+ },
+ {
+ "date": "2013-12-13",
+ "value3": 35619,
+ "value2": 33159,
+ "value1": 38073
+ },
+ {
+ "date": "2013-12-14",
+ "value3": 36377,
+ "value2": 33589,
+ "value1": 35086
+ },
+ {
+ "date": "2013-12-15",
+ "value3": 38730,
+ "value2": 33746,
+ "value1": 34582
+ },
+ {
+ "date": "2013-12-16",
+ "value3": 34850,
+ "value2": 36825,
+ "value1": 36423
+ },
+ {
+ "date": "2013-12-17",
+ "value3": 33172,
+ "value2": 38092,
+ "value1": 37563
+ },
+ {
+ "date": "2013-12-18",
+ "value3": 29390,
+ "value2": 36368,
+ "value1": 38391
+ },
+ {
+ "date": "2013-12-19",
+ "value3": 27097,
+ "value2": 32403,
+ "value1": 38486
+ },
+ {
+ "date": "2013-12-20",
+ "value3": 25922,
+ "value2": 35803,
+ "value1": 35076
+ },
+ {
+ "date": "2013-12-21",
+ "value3": 29734,
+ "value2": 37922,
+ "value1": 32287
+ },
+ {
+ "date": "2013-12-22",
+ "value3": 31860,
+ "value2": 35274,
+ "value1": 28294
+ },
+ {
+ "date": "2013-12-23",
+ "value3": 29052,
+ "value2": 35216,
+ "value1": 31195
+ },
+ {
+ "date": "2013-12-24",
+ "value3": 27400,
+ "value2": 35466,
+ "value1": 28475
+ },
+ {
+ "date": "2013-12-25",
+ "value3": 29042,
+ "value2": 33327,
+ "value1": 26174
+ },
+ {
+ "date": "2013-12-26",
+ "value3": 28410,
+ "value2": 35632,
+ "value1": 28177
+ },
+ {
+ "date": "2013-12-27",
+ "value3": 27045,
+ "value2": 35348,
+ "value1": 28660
+ },
+ {
+ "date": "2013-12-28",
+ "value3": 26506,
+ "value2": 37153,
+ "value1": 27007
+ },
+ {
+ "date": "2013-12-29",
+ "value3": 26331,
+ "value2": 35442,
+ "value1": 29527
+ },
+ {
+ "date": "2013-12-30",
+ "value3": 23209,
+ "value2": 37541,
+ "value1": 30305
+ },
+ {
+ "date": "2013-12-31",
+ "value3": 24124,
+ "value2": 34335,
+ "value1": 32349
+ },
+ {
+ "date": "2014-01-01",
+ "value3": 21329,
+ "value2": 32894,
+ "value1": 32782
+ },
+ {
+ "date": "2014-01-02",
+ "value3": 21989,
+ "value2": 30909,
+ "value1": 29583
+ },
+ {
+ "date": "2014-01-03",
+ "value3": 23481,
+ "value2": 33794,
+ "value1": 25680
+ },
+ {
+ "date": "2014-01-04",
+ "value3": 20253,
+ "value2": 37516,
+ "value1": 24292
+ },
+ {
+ "date": "2014-01-05",
+ "value3": 21150,
+ "value2": 36692,
+ "value1": 24372
+ },
+ {
+ "date": "2014-01-06",
+ "value3": 23170,
+ "value2": 35783,
+ "value1": 20990
+ },
+ {
+ "date": "2014-01-07",
+ "value3": 19767,
+ "value2": 38478,
+ "value1": 24691
+ },
+ {
+ "date": "2014-01-08",
+ "value3": 17130,
+ "value2": 40333,
+ "value1": 22481
+ },
+ {
+ "date": "2014-01-09",
+ "value3": 16280,
+ "value2": 39265,
+ "value1": 25239
+ },
+ {
+ "date": "2014-01-10",
+ "value3": 12306,
+ "value2": 40702,
+ "value1": 24248
+ },
+ {
+ "date": "2014-01-11",
+ "value3": 14425,
+ "value2": 39793,
+ "value1": 24395
+ },
+ {
+ "date": "2014-01-12",
+ "value3": 14555,
+ "value2": 36282,
+ "value1": 25580
+ },
+ {
+ "date": "2014-01-13",
+ "value3": 14582,
+ "value2": 32495,
+ "value1": 24165
+ },
+ {
+ "date": "2014-01-14",
+ "value3": 15216,
+ "value2": 36217,
+ "value1": 26088
+ },
+ {
+ "date": "2014-01-15",
+ "value3": 18650,
+ "value2": 39448,
+ "value1": 29528
+ },
+ {
+ "date": "2014-01-16",
+ "value3": 16567,
+ "value2": 36157,
+ "value1": 27990
+ },
+ {
+ "date": "2014-01-17",
+ "value3": 16512,
+ "value2": 33246,
+ "value1": 24218
+ },
+ {
+ "date": "2014-01-18",
+ "value3": 19777,
+ "value2": 35543,
+ "value1": 20837
+ },
+ {
+ "date": "2014-01-19",
+ "value3": 20399,
+ "value2": 34715,
+ "value1": 22407
+ },
+ {
+ "date": "2014-01-20",
+ "value3": 18816,
+ "value2": 32680,
+ "value1": 19989
+ },
+ {
+ "date": "2014-01-21",
+ "value3": 19986,
+ "value2": 29250,
+ "value1": 23828
+ },
+ {
+ "date": "2014-01-22",
+ "value3": 22251,
+ "value2": 30438,
+ "value1": 26714
+ },
+ {
+ "date": "2014-01-23",
+ "value3": 25922,
+ "value2": 28387,
+ "value1": 30514
+ },
+ {
+ "date": "2014-01-24",
+ "value3": 26428,
+ "value2": 29612,
+ "value1": 33155
+ },
+ {
+ "date": "2014-01-25",
+ "value3": 25424,
+ "value2": 25831,
+ "value1": 34462
+ },
+ {
+ "date": "2014-01-26",
+ "value3": 27621,
+ "value2": 22203,
+ "value1": 32276
+ },
+ {
+ "date": "2014-01-27",
+ "value3": 23961,
+ "value2": 22855,
+ "value1": 31899
+ },
+ {
+ "date": "2014-01-28",
+ "value3": 25591,
+ "value2": 22024,
+ "value1": 29327
+ },
+ {
+ "date": "2014-01-29",
+ "value3": 26847,
+ "value2": 22686,
+ "value1": 32158
+ },
+ {
+ "date": "2014-01-30",
+ "value3": 27853,
+ "value2": 24676,
+ "value1": 29473
+ },
+ {
+ "date": "2014-01-31",
+ "value3": 24178,
+ "value2": 27591,
+ "value1": 32247
+ },
+ {
+ "date": "2014-02-01",
+ "value3": 20626,
+ "value2": 24225,
+ "value1": 30117
+ },
+ {
+ "date": "2014-02-02",
+ "value3": 17938,
+ "value2": 27842,
+ "value1": 29435
+ },
+ {
+ "date": "2014-02-03",
+ "value3": 21312,
+ "value2": 24541,
+ "value1": 27320
+ },
+ {
+ "date": "2014-02-04",
+ "value3": 17385,
+ "value2": 27164,
+ "value1": 30515
+ },
+ {
+ "date": "2014-02-05",
+ "value3": 17638,
+ "value2": 23288,
+ "value1": 28635
+ },
+ {
+ "date": "2014-02-06",
+ "value3": 18946,
+ "value2": 21521,
+ "value1": 27292
+ },
+ {
+ "date": "2014-02-07",
+ "value3": 21089,
+ "value2": 22467,
+ "value1": 24966
+ },
+ {
+ "date": "2014-02-08",
+ "value3": 22956,
+ "value2": 20604,
+ "value1": 24670
+ },
+ {
+ "date": "2014-02-09",
+ "value3": 23081,
+ "value2": 20732,
+ "value1": 27518
+ },
+ {
+ "date": "2014-02-10",
+ "value3": 25334,
+ "value2": 21436,
+ "value1": 24862
+ },
+ {
+ "date": "2014-02-11",
+ "value3": 21989,
+ "value2": 23315,
+ "value1": 27263
+ },
+ {
+ "date": "2014-02-12",
+ "value3": 20933,
+ "value2": 23816,
+ "value1": 25352
+ },
+ {
+ "date": "2014-02-13",
+ "value3": 21185,
+ "value2": 22416,
+ "value1": 22396
+ },
+ {
+ "date": "2014-02-14",
+ "value3": 22801,
+ "value2": 19348,
+ "value1": 18497
+ },
+ {
+ "date": "2014-02-15",
+ "value3": 20072,
+ "value2": 20167,
+ "value1": 21890
+ },
+ {
+ "date": "2014-02-16",
+ "value3": 23120,
+ "value2": 23505,
+ "value1": 22635
+ },
+ {
+ "date": "2014-02-17",
+ "value3": 26351,
+ "value2": 27294,
+ "value1": 23970
+ },
+ {
+ "date": "2014-02-18",
+ "value3": 27078,
+ "value2": 30219,
+ "value1": 20245
+ },
+ {
+ "date": "2014-02-19",
+ "value3": 26042,
+ "value2": 28226,
+ "value1": 17369
+ },
+ {
+ "date": "2014-02-20",
+ "value3": 28763,
+ "value2": 26489,
+ "value1": 19326
+ },
+ {
+ "date": "2014-02-21",
+ "value3": 31668,
+ "value2": 23210,
+ "value1": 17781
+ },
+ {
+ "date": "2014-02-22",
+ "value3": 31141,
+ "value2": 22636,
+ "value1": 15731
+ },
+ {
+ "date": "2014-02-23",
+ "value3": 34681,
+ "value2": 24430,
+ "value1": 11917
+ },
+ {
+ "date": "2014-02-24",
+ "value3": 32836,
+ "value2": 22607,
+ "value1": 8723
+ },
+ {
+ "date": "2014-02-25",
+ "value3": 29452,
+ "value2": 22561,
+ "value1": 7930
+ },
+ {
+ "date": "2014-02-26",
+ "value3": 31958,
+ "value2": 21692,
+ "value1": 7898
+ },
+ {
+ "date": "2014-02-27",
+ "value3": 30526,
+ "value2": 24281,
+ "value1": 4909
+ },
+ {
+ "date": "2014-02-28",
+ "value3": 30271,
+ "value2": 23369,
+ "value1": 1564
+ },
+ {
+ "date": "2014-03-01",
+ "value3": 30977,
+ "value2": 21954,
+ "value1": 1564
+ },
+ {
+ "date": "2014-03-02",
+ "value3": 27892,
+ "value2": 24495,
+ "value1": 3179
+ },
+ {
+ "date": "2014-03-03",
+ "value3": 26752,
+ "value2": 20644,
+ "value1": 4147
+ },
+ {
+ "date": "2014-03-04",
+ "value3": 28318,
+ "value2": 20201,
+ "value1": 7271
+ },
+ {
+ "date": "2014-03-05",
+ "value3": 30646,
+ "value2": 19919,
+ "value1": 8747
+ },
+ {
+ "date": "2014-03-06",
+ "value3": 32219,
+ "value2": 20166,
+ "value1": 10704
+ },
+ {
+ "date": "2014-03-07",
+ "value3": 36175,
+ "value2": 24020,
+ "value1": 13698
+ },
+ {
+ "date": "2014-03-08",
+ "value3": 33312,
+ "value2": 23848,
+ "value1": 10890
+ },
+ {
+ "date": "2014-03-09",
+ "value3": 30792,
+ "value2": 23966,
+ "value1": 7044
+ },
+ {
+ "date": "2014-03-10",
+ "value3": 31162,
+ "value2": 24539,
+ "value1": 6461
+ },
+ {
+ "date": "2014-03-11",
+ "value3": 33510,
+ "value2": 26713,
+ "value1": 5604
+ },
+ {
+ "date": "2014-03-12",
+ "value3": 37339,
+ "value2": 23373,
+ "value1": 4937
+ },
+ {
+ "date": "2014-03-13",
+ "value3": 36413,
+ "value2": 20127,
+ "value1": 4007
+ },
+ {
+ "date": "2014-03-14",
+ "value3": 34026,
+ "value2": 18112,
+ "value1": 7673
+ },
+ {
+ "date": "2014-03-15",
+ "value3": 33383,
+ "value2": 20099,
+ "value1": 7768
+ },
+ {
+ "date": "2014-03-16",
+ "value3": 33358,
+ "value2": 17391,
+ "value1": 11123
+ },
+ {
+ "date": "2014-03-17",
+ "value3": 33433,
+ "value2": 16720,
+ "value1": 13294
+ },
+ {
+ "date": "2014-03-18",
+ "value3": 33898,
+ "value2": 17686,
+ "value1": 15860
+ },
+ {
+ "date": "2014-03-19",
+ "value3": 32549,
+ "value2": 19989,
+ "value1": 12153
+ },
+ {
+ "date": "2014-03-20",
+ "value3": 32990,
+ "value2": 17285,
+ "value1": 15822
+ },
+ {
+ "date": "2014-03-21",
+ "value3": 31703,
+ "value2": 15461,
+ "value1": 13681
+ },
+ {
+ "date": "2014-03-22",
+ "value3": 28348,
+ "value2": 18088,
+ "value1": 11944
+ },
+ {
+ "date": "2014-03-23",
+ "value3": 32284,
+ "value2": 19755,
+ "value1": 12479
+ },
+ {
+ "date": "2014-03-24",
+ "value3": 34991,
+ "value2": 19796,
+ "value1": 12171
+ },
+ {
+ "date": "2014-03-25",
+ "value3": 34395,
+ "value2": 20606,
+ "value1": 12889
+ },
+ {
+ "date": "2014-03-26",
+ "value3": 35467,
+ "value2": 23220,
+ "value1": 13169
+ },
+ {
+ "date": "2014-03-27",
+ "value3": 36434,
+ "value2": 26524,
+ "value1": 12952
+ },
+ {
+ "date": "2014-03-28",
+ "value3": 34007,
+ "value2": 27261,
+ "value1": 12141
+ },
+ {
+ "date": "2014-03-29",
+ "value3": 36605,
+ "value2": 28143,
+ "value1": 8420
+ },
+ {
+ "date": "2014-03-30",
+ "value3": 35324,
+ "value2": 29999,
+ "value1": 9551
+ },
+ {
+ "date": "2014-03-31",
+ "value3": 35077,
+ "value2": 33650,
+ "value1": 5917
+ },
+ {
+ "date": "2014-04-01",
+ "value3": 32331,
+ "value2": 37641,
+ "value1": 4555
+ },
+ {
+ "date": "2014-04-02",
+ "value3": 32161,
+ "value2": 40591,
+ "value1": 8205
+ },
+ {
+ "date": "2014-04-03",
+ "value3": 28921,
+ "value2": 39738,
+ "value1": 7119
+ },
+ {
+ "date": "2014-04-04",
+ "value3": 32534,
+ "value2": 39608,
+ "value1": 8866
+ },
+ {
+ "date": "2014-04-05",
+ "value3": 31463,
+ "value2": 40618,
+ "value1": 10712
+ },
+ {
+ "date": "2014-04-06",
+ "value3": 27973,
+ "value2": 36821,
+ "value1": 12396
+ },
+ {
+ "date": "2014-04-07",
+ "value3": 29953,
+ "value2": 34470,
+ "value1": 9679
+ },
+ {
+ "date": "2014-04-08",
+ "value3": 26788,
+ "value2": 31653,
+ "value1": 12035
+ },
+ {
+ "date": "2014-04-09",
+ "value3": 28319,
+ "value2": 30246,
+ "value1": 15903
+ },
+ {
+ "date": "2014-04-10",
+ "value3": 25536,
+ "value2": 32591,
+ "value1": 12835
+ },
+ {
+ "date": "2014-04-11",
+ "value3": 26710,
+ "value2": 34847,
+ "value1": 10734
+ },
+ {
+ "date": "2014-04-12",
+ "value3": 28521,
+ "value2": 36313,
+ "value1": 8157
+ },
+ {
+ "date": "2014-04-13",
+ "value3": 29304,
+ "value2": 37283,
+ "value1": 7307
+ },
+ {
+ "date": "2014-04-14",
+ "value3": 26847,
+ "value2": 35552,
+ "value1": 3414
+ },
+ {
+ "date": "2014-04-15",
+ "value3": 23252,
+ "value2": 33905,
+ "value1": 622
+ },
+ {
+ "date": "2014-04-16",
+ "value3": 21251,
+ "value2": 37098,
+ "value1": 3710
+ },
+ {
+ "date": "2014-04-17",
+ "value3": 21938,
+ "value2": 35414,
+ "value1": 2900
+ },
+ {
+ "date": "2014-04-18",
+ "value3": 19210,
+ "value2": 35479,
+ "value1": 4723
+ },
+ {
+ "date": "2014-04-19",
+ "value3": 17765,
+ "value2": 35822,
+ "value1": 7656
+ },
+ {
+ "date": "2014-04-20",
+ "value3": 15064,
+ "value2": 32006,
+ "value1": 5948
+ },
+ {
+ "date": "2014-04-21",
+ "value3": 16166,
+ "value2": 35829,
+ "value1": 4471
+ },
+ {
+ "date": "2014-04-22",
+ "value3": 14336,
+ "value2": 38851,
+ "value1": 6870
+ },
+ {
+ "date": "2014-04-23",
+ "value3": 18145,
+ "value2": 42598,
+ "value1": 4625
+ },
+ {
+ "date": "2014-04-24",
+ "value3": 20986,
+ "value2": 41071,
+ "value1": 4396
+ },
+ {
+ "date": "2014-04-25",
+ "value3": 21492,
+ "value2": 43611,
+ "value1": 5542
+ },
+ {
+ "date": "2014-04-26",
+ "value3": 20712,
+ "value2": 41320,
+ "value1": 7280
+ },
+ {
+ "date": "2014-04-27",
+ "value3": 18048,
+ "value2": 39232,
+ "value1": 3426
+ },
+ {
+ "date": "2014-04-28",
+ "value3": 17747,
+ "value2": 42156,
+ "value1": 4539
+ }
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/neg1.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/neg1.json
new file mode 100644
index 0000000..f12a4ca
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/neg1.json
@@ -0,0 +1,602 @@
+[
+ {
+ "date": "2013-10-01",
+ "value": 0.0
+ },
+ {
+ "date": "2013-10-02",
+ "value": -20.27860065952477
+ },
+ {
+ "date": "2013-10-03",
+ "value": -12.426109787612926
+ },
+ {
+ "date": "2013-10-04",
+ "value": -17.699256257379318
+ },
+ {
+ "date": "2013-10-05",
+ "value": -22.019134369994354
+ },
+ {
+ "date": "2013-10-06",
+ "value": -41.59885296861614
+ },
+ {
+ "date": "2013-10-07",
+ "value": -31.867314787877127
+ },
+ {
+ "date": "2013-10-08",
+ "value": -16.68549399939984
+ },
+ {
+ "date": "2013-10-09",
+ "value": -14.214554612147637
+ },
+ {
+ "date": "2013-10-10",
+ "value": -37.100703439565635
+ },
+ {
+ "date": "2013-10-11",
+ "value": -41.716391973782905
+ },
+ {
+ "date": "2013-10-12",
+ "value": -60.65986986496344
+ },
+ {
+ "date": "2013-10-13",
+ "value": -65.88269292682585
+ },
+ {
+ "date": "2013-10-14",
+ "value": -85.89811733657307
+ },
+ {
+ "date": "2013-10-15",
+ "value": -87.57011580082312
+ },
+ {
+ "date": "2013-10-16",
+ "value": -69.1076591319889
+ },
+ {
+ "date": "2013-10-17",
+ "value": -69.71829820893743
+ },
+ {
+ "date": "2013-10-18",
+ "value": -48.07710064468784
+ },
+ {
+ "date": "2013-10-19",
+ "value": -42.02312145221815
+ },
+ {
+ "date": "2013-10-20",
+ "value": -36.94872786920486
+ },
+ {
+ "date": "2013-10-21",
+ "value": -26.283993993694217
+ },
+ {
+ "date": "2013-10-22",
+ "value": -41.683357633072106
+ },
+ {
+ "date": "2013-10-23",
+ "value": -48.410135784779435
+ },
+ {
+ "date": "2013-10-24",
+ "value": -24.647894376874603
+ },
+ {
+ "date": "2013-10-25",
+ "value": -24.48313857183973
+ },
+ {
+ "date": "2013-10-26",
+ "value": -30.775646331124953
+ },
+ {
+ "date": "2013-10-27",
+ "value": -42.353653361246884
+ },
+ {
+ "date": "2013-10-28",
+ "value": -56.408927207093086
+ },
+ {
+ "date": "2013-10-29",
+ "value": -40.78984664417509
+ },
+ {
+ "date": "2013-10-30",
+ "value": -41.42605076469138
+ },
+ {
+ "date": "2013-10-31",
+ "value": -18.09604151517472
+ },
+ {
+ "date": "2013-11-01",
+ "value": 2.0546535501343186
+ },
+ {
+ "date": "2013-11-02",
+ "value": 16.427200269275257
+ },
+ {
+ "date": "2013-11-03",
+ "value": 36.26021813729312
+ },
+ {
+ "date": "2013-11-04",
+ "value": 17.943623384419123
+ },
+ {
+ "date": "2013-11-05",
+ "value": 17.640349147379087
+ },
+ {
+ "date": "2013-11-06",
+ "value": 28.733924995418647
+ },
+ {
+ "date": "2013-11-07",
+ "value": 43.17866048300303
+ },
+ {
+ "date": "2013-11-08",
+ "value": 42.352421757240364
+ },
+ {
+ "date": "2013-11-09",
+ "value": 20.96374796987576
+ },
+ {
+ "date": "2013-11-10",
+ "value": 0.4817825186157414
+ },
+ {
+ "date": "2013-11-11",
+ "value": 4.454052949905262
+ },
+ {
+ "date": "2013-11-12",
+ "value": 9.903521845328488
+ },
+ {
+ "date": "2013-11-13",
+ "value": -9.659938196685449
+ },
+ {
+ "date": "2013-11-14",
+ "value": -1.6572458262441714
+ },
+ {
+ "date": "2013-11-15",
+ "value": -19.421347615158197
+ },
+ {
+ "date": "2013-11-16",
+ "value": -5.133047713617817
+ },
+ {
+ "date": "2013-11-17",
+ "value": 7.142073986101426
+ },
+ {
+ "date": "2013-11-18",
+ "value": 19.965752044244944
+ },
+ {
+ "date": "2013-11-19",
+ "value": 34.06855156342502
+ },
+ {
+ "date": "2013-11-20",
+ "value": 32.035712731383306
+ },
+ {
+ "date": "2013-11-21",
+ "value": 26.800280474507574
+ },
+ {
+ "date": "2013-11-22",
+ "value": 36.74472173965269
+ },
+ {
+ "date": "2013-11-23",
+ "value": 17.635258758794258
+ },
+ {
+ "date": "2013-11-24",
+ "value": 21.70157569545806
+ },
+ {
+ "date": "2013-11-25",
+ "value": 12.880215322765117
+ },
+ {
+ "date": "2013-11-26",
+ "value": -1.6952234072651535
+ },
+ {
+ "date": "2013-11-27",
+ "value": -25.709873487640706
+ },
+ {
+ "date": "2013-11-28",
+ "value": -24.333141952222054
+ },
+ {
+ "date": "2013-11-29",
+ "value": -23.101049395363514
+ },
+ {
+ "date": "2013-11-30",
+ "value": -30.77467592550588
+ },
+ {
+ "date": "2013-12-01",
+ "value": -52.484803998469324
+ },
+ {
+ "date": "2013-12-02",
+ "value": -59.967129097767554
+ },
+ {
+ "date": "2013-12-03",
+ "value": -58.54448864190029
+ },
+ {
+ "date": "2013-12-04",
+ "value": -35.733861688599625
+ },
+ {
+ "date": "2013-12-05",
+ "value": -49.95861223226006
+ },
+ {
+ "date": "2013-12-06",
+ "value": -68.88793877584408
+ },
+ {
+ "date": "2013-12-07",
+ "value": -50.428275259634844
+ },
+ {
+ "date": "2013-12-08",
+ "value": -40.26117556623101
+ },
+ {
+ "date": "2013-12-09",
+ "value": -38.891176869589806
+ },
+ {
+ "date": "2013-12-10",
+ "value": -59.758690871453695
+ },
+ {
+ "date": "2013-12-11",
+ "value": -71.1695554284355
+ },
+ {
+ "date": "2013-12-12",
+ "value": -90.63524940599096
+ },
+ {
+ "date": "2013-12-13",
+ "value": -79.23423804726241
+ },
+ {
+ "date": "2013-12-14",
+ "value": -71.25861388735568
+ },
+ {
+ "date": "2013-12-15",
+ "value": -60.61596323199725
+ },
+ {
+ "date": "2013-12-16",
+ "value": -62.93902244769705
+ },
+ {
+ "date": "2013-12-17",
+ "value": -41.22170848850722
+ },
+ {
+ "date": "2013-12-18",
+ "value": -27.226208027424434
+ },
+ {
+ "date": "2013-12-19",
+ "value": -7.309085309368637
+ },
+ {
+ "date": "2013-12-20",
+ "value": 3.670426015191861
+ },
+ {
+ "date": "2013-12-21",
+ "value": 19.473948613489632
+ },
+ {
+ "date": "2013-12-22",
+ "value": 40.415945876438144
+ },
+ {
+ "date": "2013-12-23",
+ "value": 31.289641086998923
+ },
+ {
+ "date": "2013-12-24",
+ "value": 17.434969637396232
+ },
+ {
+ "date": "2013-12-25",
+ "value": 30.21158378387427
+ },
+ {
+ "date": "2013-12-26",
+ "value": 30.727072719951824
+ },
+ {
+ "date": "2013-12-27",
+ "value": 20.184828808977333
+ },
+ {
+ "date": "2013-12-28",
+ "value": 27.76791048820225
+ },
+ {
+ "date": "2013-12-29",
+ "value": 34.40666779673991
+ },
+ {
+ "date": "2013-12-30",
+ "value": 28.662553475743806
+ },
+ {
+ "date": "2013-12-31",
+ "value": 20.816765875588956
+ },
+ {
+ "date": "2014-01-01",
+ "value": 30.498234516361673
+ },
+ {
+ "date": "2014-01-02",
+ "value": 6.549837407292948
+ },
+ {
+ "date": "2014-01-03",
+ "value": -17.03978957481648
+ },
+ {
+ "date": "2014-01-04",
+ "value": -6.201247455250156
+ },
+ {
+ "date": "2014-01-05",
+ "value": -9.481910347672848
+ },
+ {
+ "date": "2014-01-06",
+ "value": -1.4927745588584092
+ },
+ {
+ "date": "2014-01-07",
+ "value": 7.015746206056052
+ },
+ {
+ "date": "2014-01-08",
+ "value": 16.24056736124951
+ },
+ {
+ "date": "2014-01-09",
+ "value": 40.86145060910893
+ },
+ {
+ "date": "2014-01-10",
+ "value": 30.561347738520645
+ },
+ {
+ "date": "2014-01-11",
+ "value": 7.104703671937518
+ },
+ {
+ "date": "2014-01-12",
+ "value": 30.52693531793409
+ },
+ {
+ "date": "2014-01-13",
+ "value": 43.612806638528454
+ },
+ {
+ "date": "2014-01-14",
+ "value": 20.25247412642843
+ },
+ {
+ "date": "2014-01-15",
+ "value": 7.141936114658641
+ },
+ {
+ "date": "2014-01-16",
+ "value": -10.81374417310036
+ },
+ {
+ "date": "2014-01-17",
+ "value": 13.268210809685325
+ },
+ {
+ "date": "2014-01-18",
+ "value": 9.593303343135403
+ },
+ {
+ "date": "2014-01-19",
+ "value": 9.190238080819555
+ },
+ {
+ "date": "2014-01-20",
+ "value": -7.087595978474408
+ },
+ {
+ "date": "2014-01-21",
+ "value": 16.112869601906773
+ },
+ {
+ "date": "2014-01-22",
+ "value": 19.92397510159386
+ },
+ {
+ "date": "2014-01-23",
+ "value": 33.4964486295363
+ },
+ {
+ "date": "2014-01-24",
+ "value": 46.4831931105589
+ },
+ {
+ "date": "2014-01-25",
+ "value": 22.484343494394732
+ },
+ {
+ "date": "2014-01-26",
+ "value": 9.574360390216658
+ },
+ {
+ "date": "2014-01-27",
+ "value": 12.56929545850477
+ },
+ {
+ "date": "2014-01-28",
+ "value": -0.14595957202229037
+ },
+ {
+ "date": "2014-01-29",
+ "value": -14.696983674286617
+ },
+ {
+ "date": "2014-01-30",
+ "value": -15.237944850705059
+ },
+ {
+ "date": "2014-01-31",
+ "value": -1.7882058112963062
+ },
+ {
+ "date": "2014-02-01",
+ "value": -7.860538889362351
+ },
+ {
+ "date": "2014-02-02",
+ "value": 8.444727352087527
+ },
+ {
+ "date": "2014-02-03",
+ "value": 32.30058738777103
+ },
+ {
+ "date": "2014-02-04",
+ "value": 16.055786840333848
+ },
+ {
+ "date": "2014-02-05",
+ "value": -0.36610893414817625
+ },
+ {
+ "date": "2014-02-06",
+ "value": -1.1025132187248678
+ },
+ {
+ "date": "2014-02-07",
+ "value": 16.48048170957292
+ },
+ {
+ "date": "2014-02-08",
+ "value": 30.920083106250665
+ },
+ {
+ "date": "2014-02-09",
+ "value": 9.793945311635703
+ },
+ {
+ "date": "2014-02-10",
+ "value": -14.741798239121763
+ },
+ {
+ "date": "2014-02-11",
+ "value": 9.788165531444847
+ },
+ {
+ "date": "2014-02-12",
+ "value": -8.119237390130131
+ },
+ {
+ "date": "2014-02-13",
+ "value": -1.1782643021314554
+ },
+ {
+ "date": "2014-02-14",
+ "value": 7.310002841362066
+ },
+ {
+ "date": "2014-02-15",
+ "value": -6.0549226820141255
+ },
+ {
+ "date": "2014-02-16",
+ "value": 8.311998864819806
+ },
+ {
+ "date": "2014-02-17",
+ "value": 2.2233224632177393
+ },
+ {
+ "date": "2014-02-18",
+ "value": -18.946268533746085
+ },
+ {
+ "date": "2014-02-19",
+ "value": -5.889102580833665
+ },
+ {
+ "date": "2014-02-20",
+ "value": -0.19481412319894353
+ },
+ {
+ "date": "2014-02-21",
+ "value": -1.9196952442973252
+ },
+ {
+ "date": "2014-02-22",
+ "value": -25.056284352606756
+ },
+ {
+ "date": "2014-02-23",
+ "value": -32.09293779807747
+ },
+ {
+ "date": "2014-02-24",
+ "value": -55.77733578681833
+ },
+ {
+ "date": "2014-02-25",
+ "value": -73.55650805303047
+ },
+ {
+ "date": "2014-02-26",
+ "value": -78.44939933625979
+ },
+ {
+ "date": "2014-02-27",
+ "value": -61.75086522568682
+ }
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/neg2.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/neg2.json
new file mode 100644
index 0000000..00bdbcc
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/neg2.json
@@ -0,0 +1,30 @@
+[
+ {
+ "measure": 43.34,
+ "subject": 32.0
+ },
+ {
+ "measure": 53.3423,
+ "subject": 20.27
+ },
+ {
+ "measure": -10.343,
+ "subject": 12.42
+ },
+ {
+ "measure": -1,
+ "subject": -1.69
+ },
+ {
+ "measure": 10,
+ "subject": -10.01
+ },
+ {
+ "measure": 25,
+ "subject": -21.59
+ },
+ {
+ "measure": -20.343,
+ "subject": -31.86
+ }
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/nh-gop.tsv b/priv/static/metrics-graphics-3.0-alpha3/examples/data/nh-gop.tsv
new file mode 100644
index 0000000..e0dc414
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/nh-gop.tsv
@@ -0,0 +1,6 @@
+Poll Date Trump Rubio Cruz Christie Kasich Bush Carson Fiorina Paul Huckabee Santorum Pataki Graham Spread
+RCP Average 12/13 - 1/6 27.0 13.8 11.5 11.3 10.0 8.3 5.0 4.8 3.8 0.3 0.3 0.0 0.0 Trump +13.2
+PPP (D) 1/4 - 1/6 29 15 10 11 11 10 4 4 3 1 1 -- -- Trump +14
+ARG 12/20 - 12/20 21 15 10 12 13 7 6 5 4 0 0 0 -- Trump +6
+CBS News/YouGov 12/14 - 12/17 32 13 14 11 8 6 5 4 5 0 0 0 0 Trump +18
+Boston Herald 12/13 - 12/17 26 12 12 11 8 10 5 6 3 0 0 0 0 Trump +14 \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/points1.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/points1.json
new file mode 100644
index 0000000..c3b17f7
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/points1.json
@@ -0,0 +1,802 @@
+[
+ {
+ "u": "cat_10",
+ "w": 1.243871075541485,
+ "v": "other",
+ "y": 211.80029085913867,
+ "x": 156.56698521169255,
+ "z": 1.2592730408041488
+ },
+ {
+ "u": "cat_9",
+ "w": 0.18317089873596637,
+ "v": "other",
+ "y": 196.93116746887526,
+ "x": 182.9226627644747,
+ "z": 1.5420852412869692
+ },
+ {
+ "u": "cat_11",
+ "w": 1.6440310398846552,
+ "v": "other",
+ "y": 198.15275935129918,
+ "x": 180.46587284398524,
+ "z": 1.0607952297441374
+ },
+ {
+ "u": "cat_7",
+ "w": -0.7500939816017782,
+ "v": "other",
+ "y": 146.31202991730444,
+ "x": 102.35636312891461,
+ "z": 0.30940991631448456
+ },
+ {
+ "u": "cat_10",
+ "w": 0.46988959503208527,
+ "v": "other",
+ "y": 118.66304545624911,
+ "x": 175.8035980586206,
+ "z": 1.589820005614669
+ },
+ {
+ "u": "cat_3",
+ "w": 2.4359184943127667,
+ "v": "other",
+ "y": 214.0123663650676,
+ "x": 146.24883586964125,
+ "z": -0.8716888194991463
+ },
+ {
+ "u": "cat_8",
+ "w": -1.2794477449179462,
+ "v": "other",
+ "y": 165.45000531931404,
+ "x": 138.83167553877533,
+ "z": 0.365531221729956
+ },
+ {
+ "u": "other",
+ "w": 0.6533051004485967,
+ "v": "cat_0",
+ "y": 133.99465910929834,
+ "x": 119.39730303633817,
+ "z": 1.270978774871001
+ },
+ {
+ "u": "cat_13",
+ "w": -0.4527608603464446,
+ "v": "other",
+ "y": 262.89541671133776,
+ "x": 209.42459012646566,
+ "z": 0.15317285949553272
+ },
+ {
+ "u": "cat_12",
+ "w": 0.06915365942882012,
+ "v": "cat_0",
+ "y": 139.0123425273913,
+ "x": 140.27809963809628,
+ "z": 1.0850789531923752
+ },
+ {
+ "u": "cat_5",
+ "w": 0.18422289588498686,
+ "v": "other",
+ "y": 123.5696526089444,
+ "x": 178.47540577185424,
+ "z": 0.40291991519951875
+ },
+ {
+ "u": "cat_4",
+ "w": -0.4338210953783319,
+ "v": "cat_1",
+ "y": 161.93728020049016,
+ "x": 166.16502625602917,
+ "z": 0.5093424182003234
+ },
+ {
+ "u": "cat_7",
+ "w": 1.40583885575462,
+ "v": "other",
+ "y": 155.63962440916566,
+ "x": 99.85204107456539,
+ "z": 1.2530442449107233
+ },
+ {
+ "u": "cat_10",
+ "w": -0.4275099099676807,
+ "v": "other",
+ "y": 176.85285727542032,
+ "x": 161.42701652535786,
+ "z": 0.8230669881454445
+ },
+ {
+ "u": "cat_4",
+ "w": 1.463656501437303,
+ "v": "cat_1",
+ "y": 246.6642430026098,
+ "x": 73.48368170456627,
+ "z": 1.0052929735375302
+ },
+ {
+ "u": "cat_11",
+ "w": 0.013089161287933138,
+ "v": "other",
+ "y": 156.36354536529558,
+ "x": 243.2026715373837,
+ "z": 0.39667694750274274
+ },
+ {
+ "u": "cat_12",
+ "w": 0.36730326802039404,
+ "v": "other",
+ "y": 156.71697413402487,
+ "x": 148.27450037397765,
+ "z": -1.4105618351561287
+ },
+ {
+ "u": "cat_14",
+ "w": -0.06953747774947772,
+ "v": "other",
+ "y": 141.22433267951084,
+ "x": 69.06616491304716,
+ "z": 0.475924622911404
+ },
+ {
+ "u": "other",
+ "w": 0.517415189557197,
+ "v": "other",
+ "y": 115.95680666029197,
+ "x": 153.0898637311175,
+ "z": 0.9443947812526814
+ },
+ {
+ "u": "cat_3",
+ "w": 0.5670223685982718,
+ "v": "other",
+ "y": 227.27960266143467,
+ "x": 153.22490080491232,
+ "z": 1.32067405076989
+ },
+ {
+ "u": "cat_7",
+ "w": 0.5376290623874869,
+ "v": "other",
+ "y": 260.9119300068415,
+ "x": 158.76997596111525,
+ "z": 0.26196386810779426
+ },
+ {
+ "u": "cat_8",
+ "w": 2.168516664994767,
+ "v": "other",
+ "y": 170.77570545745968,
+ "x": 135.65940169018805,
+ "z": 0.9162849263421061
+ },
+ {
+ "u": "cat_5",
+ "w": 2.311955371948698,
+ "v": "other",
+ "y": 243.37468134084048,
+ "x": 20.66820288532847,
+ "z": -0.322645627898664
+ },
+ {
+ "u": "cat_4",
+ "w": 1.8314759939943595,
+ "v": "other",
+ "y": 214.1727802647768,
+ "x": 216.61746891013505,
+ "z": 2.4147498286441165
+ },
+ {
+ "u": "other",
+ "w": 0.8365279958031904,
+ "v": "other",
+ "y": 100.90575192733515,
+ "x": 151.6306779403549,
+ "z": 0.8606212265228668
+ },
+ {
+ "u": "cat_13",
+ "w": -0.26452281419648993,
+ "v": "cat_0",
+ "y": 194.59598730955793,
+ "x": 129.361227705571,
+ "z": 1.0322894496099724
+ },
+ {
+ "u": "cat_13",
+ "w": 2.6043512596594365,
+ "v": "other",
+ "y": 213.8128177957785,
+ "x": 194.6414121394208,
+ "z": 3.280204884184917
+ },
+ {
+ "u": "cat_6",
+ "w": 1.6310983407120137,
+ "v": "other",
+ "y": 163.2658097189387,
+ "x": 187.70506769054072,
+ "z": 1.3488889788600984
+ },
+ {
+ "u": "cat_8",
+ "w": 0.6487974580274094,
+ "v": "other",
+ "y": 194.3209257079902,
+ "x": 192.10028088047798,
+ "z": -0.07036372606337338
+ },
+ {
+ "u": "cat_10",
+ "w": 1.3927144738318111,
+ "v": "other",
+ "y": 161.3486689563104,
+ "x": 86.73894049392862,
+ "z": 0.1537876062955914
+ },
+ {
+ "u": "cat_9",
+ "w": -0.3771368838057665,
+ "v": "other",
+ "y": 182.55687300867896,
+ "x": 201.1112292465731,
+ "z": -0.058098755927163515
+ },
+ {
+ "u": "cat_0",
+ "w": -0.6345913552330389,
+ "v": "other",
+ "y": 165.80314397714827,
+ "x": 206.7182591446124,
+ "z": 1.4845564495064427
+ },
+ {
+ "u": "cat_0",
+ "w": 0.6855019579009463,
+ "v": "cat_1",
+ "y": 159.66118937446728,
+ "x": 192.39649008863876,
+ "z": 0.055873071009385766
+ },
+ {
+ "u": "cat_6",
+ "w": 2.964882131756106,
+ "v": "other",
+ "y": 241.84769149238159,
+ "x": 111.35023940160411,
+ "z": 0.167414971004892
+ },
+ {
+ "u": "other",
+ "w": -0.4506378010737888,
+ "v": "other",
+ "y": 90.4639669582562,
+ "x": 158.90001697899683,
+ "z": 1.1696787253371819
+ },
+ {
+ "u": "cat_0",
+ "w": 1.2656151949587624,
+ "v": "other",
+ "y": 183.02945581640645,
+ "x": 180.4213167593254,
+ "z": 2.0539930046863035
+ },
+ {
+ "u": "cat_13",
+ "w": 1.228801369090003,
+ "v": "other",
+ "y": 277.13369884311936,
+ "x": 80.15664163346004,
+ "z": 2.2937904251948638
+ },
+ {
+ "u": "cat_5",
+ "w": 2.0896213510871937,
+ "v": "other",
+ "y": 163.72382240169802,
+ "x": 215.41216187620037,
+ "z": 2.553028570447125
+ },
+ {
+ "u": "cat_15",
+ "w": 1.0981586322470924,
+ "v": "other",
+ "y": 109.2838491053391,
+ "x": 184.09570421897956,
+ "z": 0.44759620112619647
+ },
+ {
+ "u": "other",
+ "w": 1.3457067544720736,
+ "v": "other",
+ "y": 171.16629782677862,
+ "x": 213.12963803437316,
+ "z": 0.7270493828061404
+ },
+ {
+ "u": "cat_13",
+ "w": -0.7076617244518462,
+ "v": "other",
+ "y": 144.05587078713071,
+ "x": 184.28906651578978,
+ "z": 1.382134562867984
+ },
+ {
+ "u": "cat_0",
+ "w": -0.2800595737017382,
+ "v": "other",
+ "y": 193.27473606725474,
+ "x": 154.94633537134789,
+ "z": -0.33791235399367947
+ },
+ {
+ "u": "cat_14",
+ "w": 0.4456793621586681,
+ "v": "other",
+ "y": 125.1308061934427,
+ "x": 123.90267987241343,
+ "z": 2.3230978938654645
+ },
+ {
+ "u": "cat_5",
+ "w": 3.075103103171694,
+ "v": "cat_0",
+ "y": 154.8755877624397,
+ "x": 61.020238047163375,
+ "z": 1.6674654330131888
+ },
+ {
+ "u": "other",
+ "w": 0.16319305741807733,
+ "v": "cat_0",
+ "y": 114.08645682777497,
+ "x": 225.28654361195518,
+ "z": 0.4242182000961613
+ },
+ {
+ "u": "cat_6",
+ "w": 1.9417162589422323,
+ "v": "other",
+ "y": 185.28537858495014,
+ "x": 155.5736376536581,
+ "z": 1.1747492195973144
+ },
+ {
+ "u": "cat_4",
+ "w": 1.155787735870216,
+ "v": "cat_1",
+ "y": 183.24930292147863,
+ "x": 115.40643586463635,
+ "z": 0.19242660628339903
+ },
+ {
+ "u": "other",
+ "w": 0.6070329867687532,
+ "v": "other",
+ "y": 57.398818613660296,
+ "x": 219.87611544574744,
+ "z": 1.1095208041769122
+ },
+ {
+ "u": "cat_6",
+ "w": 0.4083905726447342,
+ "v": "other",
+ "y": 175.40387812166918,
+ "x": 224.68335734038368,
+ "z": -0.42207104629857617
+ },
+ {
+ "u": "cat_5",
+ "w": 0.6585907631358738,
+ "v": "cat_1",
+ "y": 124.05051069396585,
+ "x": 127.07766432478591,
+ "z": 0.1354114111502046
+ },
+ {
+ "u": "cat_10",
+ "w": 1.734882212854999,
+ "v": "cat_1",
+ "y": 143.78518104207086,
+ "x": 198.75776145611215,
+ "z": -0.12283925137929064
+ },
+ {
+ "u": "other",
+ "w": 0.20503963437937356,
+ "v": "other",
+ "y": 151.75327292745928,
+ "x": 148.9695770940796,
+ "z": 0.564428194218838
+ },
+ {
+ "u": "cat_15",
+ "w": 1.8574692523422356,
+ "v": "other",
+ "y": 306.0898140884456,
+ "x": 147.43144660079602,
+ "z": -0.22413411708624853
+ },
+ {
+ "u": "cat_4",
+ "w": 1.1062688896220425,
+ "v": "other",
+ "y": 212.44397654702615,
+ "x": 195.86829581464062,
+ "z": 0.7453160939357952
+ },
+ {
+ "u": "cat_15",
+ "w": -0.27774340110996487,
+ "v": "cat_0",
+ "y": 122.63707978879633,
+ "x": 95.64182307323996,
+ "z": 0.6430476399500114
+ },
+ {
+ "u": "cat_11",
+ "w": 1.693891428609414,
+ "v": "other",
+ "y": 161.59041244043587,
+ "x": 64.83892325218056,
+ "z": 0.6409468598992659
+ },
+ {
+ "u": "cat_0",
+ "w": 1.8192638452039414,
+ "v": "cat_0",
+ "y": 203.44169192711857,
+ "x": 175.9035258508178,
+ "z": 1.0101903553514529
+ },
+ {
+ "u": "cat_10",
+ "w": 1.6693901234237167,
+ "v": "other",
+ "y": 266.02281722067806,
+ "x": 193.7229721388815,
+ "z": 1.3287927803604402
+ },
+ {
+ "u": "cat_2",
+ "w": 1.6276382654036277,
+ "v": "cat_0",
+ "y": 174.54476940927518,
+ "x": 85.70090208863968,
+ "z": 1.3166929052154481
+ },
+ {
+ "u": "cat_4",
+ "w": 0.893609545984623,
+ "v": "other",
+ "y": 135.20127141724655,
+ "x": 161.0852992807473,
+ "z": 0.7423369081120028
+ },
+ {
+ "u": "cat_8",
+ "w": -0.25726080091728387,
+ "v": "other",
+ "y": 87.98074634203813,
+ "x": 194.6466767641028,
+ "z": 1.171709779521613
+ },
+ {
+ "u": "cat_6",
+ "w": 1.4386749809763226,
+ "v": "other",
+ "y": 154.56889252680085,
+ "x": 137.16494490842896,
+ "z": 1.8319953052292166
+ },
+ {
+ "u": "cat_1",
+ "w": 1.9751827147081238,
+ "v": "other",
+ "y": 150.52324196509258,
+ "x": 51.69078624012406,
+ "z": -0.23529144151246717
+ },
+ {
+ "u": "cat_14",
+ "w": 1.3843184328271165,
+ "v": "other",
+ "y": 160.51323171649904,
+ "x": 169.7361988952806,
+ "z": 1.3970600816965812
+ },
+ {
+ "u": "cat_15",
+ "w": -0.475868599212677,
+ "v": "other",
+ "y": 132.27225542990598,
+ "x": 103.56729490389614,
+ "z": 0.4512210085364755
+ },
+ {
+ "u": "cat_4",
+ "w": 1.2081442447975173,
+ "v": "cat_0",
+ "y": 56.102440394233255,
+ "x": 124.56829572524175,
+ "z": 1.2994110022657026
+ },
+ {
+ "u": "cat_13",
+ "w": 1.736143244910195,
+ "v": "cat_0",
+ "y": 212.5650565277553,
+ "x": 140.4278102663895,
+ "z": 2.3771380059458744
+ },
+ {
+ "u": "cat_14",
+ "w": -0.461785512082463,
+ "v": "cat_1",
+ "y": 101.5707842719089,
+ "x": 196.16957370342342,
+ "z": 2.0950787429883846
+ },
+ {
+ "u": "cat_5",
+ "w": 1.3260330340794257,
+ "v": "cat_1",
+ "y": 195.74556071781365,
+ "x": 36.939138857293585,
+ "z": -0.05847270264086335
+ },
+ {
+ "u": "cat_9",
+ "w": 0.3220908087517964,
+ "v": "other",
+ "y": 221.78294482102933,
+ "x": 74.76586558666337,
+ "z": -0.05817419869022866
+ },
+ {
+ "u": "cat_5",
+ "w": 0.8170251870816604,
+ "v": "other",
+ "y": 179.17790605043118,
+ "x": 232.48747575985655,
+ "z": 1.7029885149441673
+ },
+ {
+ "u": "cat_3",
+ "w": 0.2659811986182221,
+ "v": "cat_1",
+ "y": 192.81824199631728,
+ "x": 140.710358385573,
+ "z": 1.5793646916427102
+ },
+ {
+ "u": "cat_8",
+ "w": 1.2271687489820546,
+ "v": "other",
+ "y": 111.59013545108343,
+ "x": 101.3489243773156,
+ "z": 3.21128318091031
+ },
+ {
+ "u": "cat_13",
+ "w": 1.3499209090064648,
+ "v": "other",
+ "y": 91.89209852687142,
+ "x": 154.6035518322702,
+ "z": 0.6817267324899431
+ },
+ {
+ "u": "cat_0",
+ "w": 2.159235435849202,
+ "v": "other",
+ "y": 158.63631854616588,
+ "x": 120.35802170671863,
+ "z": 0.6067162231097979
+ },
+ {
+ "u": "cat_14",
+ "w": 0.8523794752014957,
+ "v": "other",
+ "y": 76.05793322732642,
+ "x": 138.4115475783541,
+ "z": 0.2967991752860232
+ },
+ {
+ "u": "cat_12",
+ "w": 1.0558373735944235,
+ "v": "other",
+ "y": 124.74002651703651,
+ "x": 157.02907657551447,
+ "z": -0.025374565392791038
+ },
+ {
+ "u": "cat_0",
+ "w": 1.3648422432834806,
+ "v": "cat_1",
+ "y": 203.82847317695288,
+ "x": 152.02003088030492,
+ "z": -0.4421819240850271
+ },
+ {
+ "u": "cat_4",
+ "w": 0.8156055831409262,
+ "v": "other",
+ "y": 95.97296459484079,
+ "x": 78.51455593195435,
+ "z": 1.1994133990162583
+ },
+ {
+ "u": "cat_3",
+ "w": 0.727605537039985,
+ "v": "other",
+ "y": 168.70196209212494,
+ "x": 212.41730028904536,
+ "z": 0.6997491454171789
+ },
+ {
+ "u": "cat_6",
+ "w": 1.262490286926595,
+ "v": "other",
+ "y": 134.65200754480446,
+ "x": 42.54634367887225,
+ "z": 0.5177600909542267
+ },
+ {
+ "u": "cat_8",
+ "w": 1.4837053114286998,
+ "v": "cat_0",
+ "y": 112.28208956177541,
+ "x": 193.95863032046006,
+ "z": 1.0019859410064678
+ },
+ {
+ "u": "cat_8",
+ "w": -0.16895357221403362,
+ "v": "cat_0",
+ "y": 192.98985884826888,
+ "x": 144.96182365337268,
+ "z": 1.4190462447457899
+ },
+ {
+ "u": "cat_16",
+ "w": 1.0468806482899717,
+ "v": "cat_0",
+ "y": 152.86277692393685,
+ "x": 137.2022037296142,
+ "z": 0.4593974450208086
+ },
+ {
+ "u": "cat_6",
+ "w": 2.462089222004976,
+ "v": "cat_1",
+ "y": 178.5621123552027,
+ "x": 142.01082685227874,
+ "z": 0.580699096900331
+ },
+ {
+ "u": "other",
+ "w": -0.9097490420343397,
+ "v": "other",
+ "y": 137.21823856264854,
+ "x": 94.98376759227347,
+ "z": 2.118286289288478
+ },
+ {
+ "u": "cat_5",
+ "w": 0.6155123359814616,
+ "v": "other",
+ "y": 52.94291552982141,
+ "x": 85.57431217669814,
+ "z": -0.09704681018895633
+ },
+ {
+ "u": "cat_11",
+ "w": 1.9468348457441005,
+ "v": "other",
+ "y": 243.07706417763518,
+ "x": 163.35061475046334,
+ "z": 1.178015608927323
+ },
+ {
+ "u": "cat_13",
+ "w": -0.11396040656336393,
+ "v": "other",
+ "y": 102.69550510842956,
+ "x": 105.80547059051209,
+ "z": 1.7309952065474825
+ },
+ {
+ "u": "cat_0",
+ "w": 1.0201819734167836,
+ "v": "other",
+ "y": 226.24093931458543,
+ "x": 128.26413056781655,
+ "z": 0.602354545792653
+ },
+ {
+ "u": "cat_9",
+ "w": 0.41269060095932775,
+ "v": "other",
+ "y": 22.06560060765568,
+ "x": 169.41836118747312,
+ "z": 0.6422396319927962
+ },
+ {
+ "u": "cat_13",
+ "w": 1.1423761297271733,
+ "v": "other",
+ "y": 122.16006750791158,
+ "x": 64.32267243426844,
+ "z": 0.5677725122287971
+ },
+ {
+ "u": "cat_0",
+ "w": -0.4940883354815302,
+ "v": "other",
+ "y": 146.45339448820994,
+ "x": 172.009924725858,
+ "z": 0.5733149663059203
+ },
+ {
+ "u": "cat_12",
+ "w": 2.0427267231236836,
+ "v": "other",
+ "y": 105.09233739863171,
+ "x": 151.8604441328228,
+ "z": -1.0417341971519445
+ },
+ {
+ "u": "cat_0",
+ "w": -0.06844772614894712,
+ "v": "cat_0",
+ "y": 208.74646965359665,
+ "x": 211.0589178490544,
+ "z": 3.033892234816319
+ },
+ {
+ "u": "cat_10",
+ "w": 0.1407531030532979,
+ "v": "other",
+ "y": 212.1295737404453,
+ "x": 157.62156278215423,
+ "z": -0.17802781876760476
+ },
+ {
+ "u": "cat_7",
+ "w": 0.654514275645782,
+ "v": "cat_1",
+ "y": 127.45107550739947,
+ "x": 94.87901525572023,
+ "z": 1.169027403658316
+ },
+ {
+ "u": "cat_15",
+ "w": 2.7361843748627708,
+ "v": "other",
+ "y": 184.8888620082486,
+ "x": 116.81017887336674,
+ "z": -0.5196787907040106
+ },
+ {
+ "u": "other",
+ "w": 0.7134526835944346,
+ "v": "other",
+ "y": 169.9779808978828,
+ "x": 108.48468655071922,
+ "z": 2.4985146493801524
+ },
+ {
+ "u": "cat_1",
+ "w": 2.0017599837707474,
+ "v": "other",
+ "y": 193.69331303548242,
+ "x": 161.953677145996,
+ "z": 0.9928254618909004
+ }
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/small-range.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/small-range.json
new file mode 100644
index 0000000..c50d5df
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/small-range.json
@@ -0,0 +1,26 @@
+ [
+ {
+ "date": "2014-01-01",
+ "value": 1
+ },
+ {
+ "date": "2014-01-02",
+ "value": 3
+ },
+ {
+ "date": "2014-01-03",
+ "value": 2
+ },
+ {
+ "date": "2014-01-04",
+ "value": 2
+ },
+ {
+ "date": "2014-01-05",
+ "value": 2
+ },
+ {
+ "date": "2014-01-06",
+ "value": 1
+ }
+ ]
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/some_currency.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/some_currency.json
new file mode 100644
index 0000000..f84a3ff
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/some_currency.json
@@ -0,0 +1,402 @@
+[
+ {
+ "date": "2014-02-01",
+ "value": 15000000
+ },
+ {
+ "date": "2014-02-02",
+ "value": 16487625
+ },
+ {
+ "date": "2014-02-03",
+ "value": 17097434
+ },
+ {
+ "date": "2014-02-04",
+ "value": 17694420
+ },
+ {
+ "date": "2014-02-05",
+ "value": 17014381
+ },
+ {
+ "date": "2014-02-06",
+ "value": 15578984
+ },
+ {
+ "date": "2014-02-07",
+ "value": 14718953
+ },
+ {
+ "date": "2014-02-08",
+ "value": 15020669
+ },
+ {
+ "date": "2014-02-09",
+ "value": 13889722
+ },
+ {
+ "date": "2014-02-10",
+ "value": 13979897
+ },
+ {
+ "date": "2014-02-11",
+ "value": 14595566
+ },
+ {
+ "date": "2014-02-12",
+ "value": 14123256
+ },
+ {
+ "date": "2014-02-13",
+ "value": 14083675
+ },
+ {
+ "date": "2014-02-14",
+ "value": 15068426
+ },
+ {
+ "date": "2014-02-15",
+ "value": 15368056
+ },
+ {
+ "date": "2014-02-16",
+ "value": 15277054
+ },
+ {
+ "date": "2014-02-17",
+ "value": 14376243
+ },
+ {
+ "date": "2014-02-18",
+ "value": 13058892
+ },
+ {
+ "date": "2014-02-19",
+ "value": 12367653
+ },
+ {
+ "date": "2014-02-20",
+ "value": 13184423
+ },
+ {
+ "date": "2014-02-21",
+ "value": 14367203
+ },
+ {
+ "date": "2014-02-22",
+ "value": 14656447
+ },
+ {
+ "date": "2014-02-23",
+ "value": 14724526
+ },
+ {
+ "date": "2014-02-24",
+ "value": 14938129
+ },
+ {
+ "date": "2014-02-25",
+ "value": 14205617
+ },
+ {
+ "date": "2014-02-26",
+ "value": 14596607
+ },
+ {
+ "date": "2014-02-27",
+ "value": 13982597
+ },
+ {
+ "date": "2014-02-28",
+ "value": 15107034
+ },
+ {
+ "date": "2014-03-01",
+ "value": 13646739
+ },
+ {
+ "date": "2014-03-02",
+ "value": 14214763
+ },
+ {
+ "date": "2014-03-03",
+ "value": 14952136
+ },
+ {
+ "date": "2014-03-04",
+ "value": 14643933
+ },
+ {
+ "date": "2014-03-05",
+ "value": 13611435
+ },
+ {
+ "date": "2014-03-06",
+ "value": 12569788
+ },
+ {
+ "date": "2014-03-07",
+ "value": 11344469
+ },
+ {
+ "date": "2014-03-08",
+ "value": 12687132
+ },
+ {
+ "date": "2014-03-09",
+ "value": 11831144
+ },
+ {
+ "date": "2014-03-10",
+ "value": 10480837
+ },
+ {
+ "date": "2014-03-11",
+ "value": 9051161
+ },
+ {
+ "date": "2014-03-12",
+ "value": 9964784
+ },
+ {
+ "date": "2014-03-13",
+ "value": 11035006
+ },
+ {
+ "date": "2014-03-14",
+ "value": 10081289
+ },
+ {
+ "date": "2014-03-15",
+ "value": 9793897
+ },
+ {
+ "date": "2014-03-16",
+ "value": 9177447
+ },
+ {
+ "date": "2014-03-17",
+ "value": 8035348
+ },
+ {
+ "date": "2014-03-18",
+ "value": 6770242
+ },
+ {
+ "date": "2014-03-19",
+ "value": 7272077
+ },
+ {
+ "date": "2014-03-20",
+ "value": 8216348
+ },
+ {
+ "date": "2014-03-21",
+ "value": 8576584
+ },
+ {
+ "date": "2014-03-22",
+ "value": 9421060
+ },
+ {
+ "date": "2014-03-23",
+ "value": 10872288
+ },
+ {
+ "date": "2014-03-24",
+ "value": 9537996
+ },
+ {
+ "date": "2014-03-25",
+ "value": 9560363
+ },
+ {
+ "date": "2014-03-26",
+ "value": 8182813
+ },
+ {
+ "date": "2014-03-27",
+ "value": 9068173
+ },
+ {
+ "date": "2014-03-28",
+ "value": 10390251
+ },
+ {
+ "date": "2014-03-29",
+ "value": 9714081
+ },
+ {
+ "date": "2014-03-30",
+ "value": 9994670
+ },
+ {
+ "date": "2014-03-31",
+ "value": 9317878
+ },
+ {
+ "date": "2014-04-01",
+ "value": 8209077
+ },
+ {
+ "date": "2014-04-02",
+ "value": 9230830
+ },
+ {
+ "date": "2014-04-03",
+ "value": 8978342
+ },
+ {
+ "date": "2014-04-04",
+ "value": 8361854
+ },
+ {
+ "date": "2014-04-05",
+ "value": 9345999
+ },
+ {
+ "date": "2014-04-06",
+ "value": 7965407
+ },
+ {
+ "date": "2014-04-07",
+ "value": 8909276
+ },
+ {
+ "date": "2014-04-08",
+ "value": 8935489
+ },
+ {
+ "date": "2014-04-09",
+ "value": 8634997
+ },
+ {
+ "date": "2014-04-10",
+ "value": 8795592
+ },
+ {
+ "date": "2014-04-11",
+ "value": 7513086
+ },
+ {
+ "date": "2014-04-12",
+ "value": 8408561
+ },
+ {
+ "date": "2014-04-13",
+ "value": 7780649
+ },
+ {
+ "date": "2014-04-14",
+ "value": 7524281
+ },
+ {
+ "date": "2014-04-15",
+ "value": 8498062
+ },
+ {
+ "date": "2014-04-16",
+ "value": 7922453
+ },
+ {
+ "date": "2014-04-17",
+ "value": 9304312
+ },
+ {
+ "date": "2014-04-18",
+ "value": 8199457
+ },
+ {
+ "date": "2014-04-19",
+ "value": 8926136
+ },
+ {
+ "date": "2014-04-20",
+ "value": 7558184
+ },
+ {
+ "date": "2014-04-21",
+ "value": 6417511
+ },
+ {
+ "date": "2014-04-22",
+ "value": 5748831
+ },
+ {
+ "date": "2014-04-23",
+ "value": 6503022
+ },
+ {
+ "date": "2014-04-24",
+ "value": 6429606
+ },
+ {
+ "date": "2014-04-25",
+ "value": 5057410
+ },
+ {
+ "date": "2014-04-26",
+ "value": 5924669
+ },
+ {
+ "date": "2014-04-27",
+ "value": 4728239
+ },
+ {
+ "date": "2014-04-28",
+ "value": 3918540
+ },
+ {
+ "date": "2014-04-29",
+ "value": 2821473
+ },
+ {
+ "date": "2014-04-30",
+ "value": 1995781
+ },
+ {
+ "date": "2014-05-01",
+ "value": 1123626
+ },
+ {
+ "date": "2014-05-02",
+ "value": 516067
+ },
+ {
+ "date": "2014-05-03",
+ "value": 816831
+ },
+ {
+ "date": "2014-05-04",
+ "value": 816831
+ },
+ {
+ "date": "2014-05-05",
+ "value": 816831
+ },
+ {
+ "date": "2014-05-06",
+ "value": 1103818
+ },
+ {
+ "date": "2014-05-07",
+ "value": 958188
+ },
+ {
+ "date": "2014-05-08",
+ "value": 592995
+ },
+ {
+ "date": "2014-05-09",
+ "value": 856066
+ },
+ {
+ "date": "2014-05-10",
+ "value": 1766761
+ },
+ {
+ "date": "2014-05-11",
+ "value": 1330557
+ }
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/some_percentage.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/some_percentage.json
new file mode 100644
index 0000000..38e73a8
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/some_percentage.json
@@ -0,0 +1,482 @@
+[[
+ {
+ "date": "2014-01-01",
+ "value": 0.5
+ },
+ {
+ "date": "2014-01-02",
+ "value": 0.5038520341226763
+ },
+ {
+ "date": "2014-01-03",
+ "value": 0.501041575106488
+ },
+ {
+ "date": "2014-01-04",
+ "value": 0.4984465228974178
+ },
+ {
+ "date": "2014-01-05",
+ "value": 0.5003884470629179
+ },
+ {
+ "date": "2014-01-06",
+ "value": 0.5031564481343913
+ },
+ {
+ "date": "2014-01-07",
+ "value": 0.5078607730320586
+ },
+ {
+ "date": "2014-01-08",
+ "value": 0.5041111109212457
+ },
+ {
+ "date": "2014-01-09",
+ "value": 0.5069321806604172
+ },
+ {
+ "date": "2014-01-10",
+ "value": 0.5026154784253497
+ },
+ {
+ "date": "2014-01-11",
+ "value": 0.5065241796178874
+ },
+ {
+ "date": "2014-01-12",
+ "value": 0.5018867686214743
+ },
+ {
+ "date": "2014-01-13",
+ "value": 0.5043001746033196
+ },
+ {
+ "date": "2014-01-14",
+ "value": 0.504404210966798
+ },
+ {
+ "date": "2014-01-15",
+ "value": 0.5075142056997484
+ },
+ {
+ "date": "2014-01-16",
+ "value": 0.5040481679854495
+ },
+ {
+ "date": "2014-01-17",
+ "value": 0.5079346812032152
+ },
+ {
+ "date": "2014-01-18",
+ "value": 0.5049685486383059
+ },
+ {
+ "date": "2014-01-19",
+ "value": 0.501658667449764
+ },
+ {
+ "date": "2014-01-20",
+ "value": 0.5062171996366631
+ },
+ {
+ "date": "2014-01-21",
+ "value": 0.5099836766672865
+ },
+ {
+ "date": "2014-01-22",
+ "value": 0.5142091385990467
+ },
+ {
+ "date": "2014-01-23",
+ "value": 0.51791294997185
+ },
+ {
+ "date": "2014-01-24",
+ "value": 0.515437378755626
+ },
+ {
+ "date": "2014-01-25",
+ "value": 0.5108648416664958
+ },
+ {
+ "date": "2014-01-26",
+ "value": 0.5066707579977331
+ },
+ {
+ "date": "2014-01-27",
+ "value": 0.5082993886500073
+ },
+ {
+ "date": "2014-01-28",
+ "value": 0.508072158918364
+ },
+ {
+ "date": "2014-01-29",
+ "value": 0.5118157526668022
+ },
+ {
+ "date": "2014-01-30",
+ "value": 0.5086344978955772
+ },
+ {
+ "date": "2014-01-31",
+ "value": 0.5044280885188968
+ },
+ {
+ "date": "2014-02-01",
+ "value": 0.5030791435263089
+ },
+ {
+ "date": "2014-02-02",
+ "value": 0.502718430201384
+ },
+ {
+ "date": "2014-02-03",
+ "value": 0.5049505139164281
+ },
+ {
+ "date": "2014-02-04",
+ "value": 0.5004045433833447
+ },
+ {
+ "date": "2014-02-05",
+ "value": 0.49766880474999803
+ },
+ {
+ "date": "2014-02-06",
+ "value": 0.4974778854176423
+ },
+ {
+ "date": "2014-02-07",
+ "value": 0.4985548716459768
+ },
+ {
+ "date": "2014-02-08",
+ "value": 0.5023737776839208
+ },
+ {
+ "date": "2014-02-09",
+ "value": 0.504603230338525
+ },
+ {
+ "date": "2014-02-10",
+ "value": 0.504432332684573
+ },
+ {
+ "date": "2014-02-11",
+ "value": 0.5037437093637779
+ },
+ {
+ "date": "2014-02-12",
+ "value": 0.5086112226114583
+ },
+ {
+ "date": "2014-02-13",
+ "value": 0.5053845731032296
+ },
+ {
+ "date": "2014-02-14",
+ "value": 0.5015637131811963
+ },
+ {
+ "date": "2014-02-15",
+ "value": 0.5021784674076278
+ },
+ {
+ "date": "2014-02-16",
+ "value": 0.5063559353265494
+ },
+ {
+ "date": "2014-02-17",
+ "value": 0.5061080613055542
+ },
+ {
+ "date": "2014-02-18",
+ "value": 0.5088703428084825
+ },
+ {
+ "date": "2014-02-19",
+ "value": 0.5096209075909987
+ },
+ {
+ "date": "2014-02-20",
+ "value": 0.5128114425067571
+ },
+ {
+ "date": "2014-02-21",
+ "value": 0.5166249796532173
+ },
+ {
+ "date": "2014-02-22",
+ "value": 0.5139670211970626
+ },
+ {
+ "date": "2014-02-23",
+ "value": 0.5142364616064596
+ },
+ {
+ "date": "2014-02-24",
+ "value": 0.509528966467216
+ },
+ {
+ "date": "2014-02-25",
+ "value": 0.5061758737477107
+ },
+ {
+ "date": "2014-02-26",
+ "value": 0.5107159178338729
+ },
+ {
+ "date": "2014-02-27",
+ "value": 0.508788445629648
+ },
+ {
+ "date": "2014-02-28",
+ "value": 0.5104817721021337
+ },
+ {
+ "date": "2014-03-01",
+ "value": 0.5078546349712474
+ },
+ {
+ "date": "2014-03-02",
+ "value": 0.5034753798731827
+ },
+ {
+ "date": "2014-03-03",
+ "value": 0.5007772580143368
+ },
+ {
+ "date": "2014-03-04",
+ "value": 0.5038655942824244
+ },
+ {
+ "date": "2014-03-05",
+ "value": 0.5005272030781814
+ },
+ {
+ "date": "2014-03-06",
+ "value": 0.5051827393254152
+ },
+ {
+ "date": "2014-03-07",
+ "value": 0.5005534190016493
+ },
+ {
+ "date": "2014-03-08",
+ "value": 0.5018578155863522
+ },
+ {
+ "date": "2014-03-09",
+ "value": 0.5040739797833739
+ },
+ {
+ "date": "2014-03-10",
+ "value": 0.501067869219016
+ },
+ {
+ "date": "2014-03-11",
+ "value": 0.49814427475390644
+ },
+ {
+ "date": "2014-03-12",
+ "value": 0.4963610004168396
+ },
+ {
+ "date": "2014-03-13",
+ "value": 0.4930795253820748
+ },
+ {
+ "date": "2014-03-14",
+ "value": 0.49079904429566784
+ },
+ {
+ "date": "2014-03-15",
+ "value": 0.48809922877941647
+ },
+ {
+ "date": "2014-03-16",
+ "value": 0.4877332115117854
+ },
+ {
+ "date": "2014-03-17",
+ "value": 0.48411898100901407
+ },
+ {
+ "date": "2014-03-18",
+ "value": 0.4845248458179287
+ },
+ {
+ "date": "2014-03-19",
+ "value": 0.4831193157053157
+ },
+ {
+ "date": "2014-03-20",
+ "value": 0.4819550362933503
+ },
+ {
+ "date": "2014-03-21",
+ "value": 0.4786897823467451
+ },
+ {
+ "date": "2014-03-22",
+ "value": 0.4761045288827436
+ },
+ {
+ "date": "2014-03-23",
+ "value": 0.478630898886419
+ },
+ {
+ "date": "2014-03-24",
+ "value": 0.4790840508114705
+ },
+ {
+ "date": "2014-03-25",
+ "value": 0.4794318346558028
+ },
+ {
+ "date": "2014-03-26",
+ "value": 0.4748848817015309
+ },
+ {
+ "date": "2014-03-27",
+ "value": 0.47815004291090735
+ },
+ {
+ "date": "2014-03-28",
+ "value": 0.47980437734217457
+ },
+ {
+ "date": "2014-03-29",
+ "value": 0.4817800142504527
+ },
+ {
+ "date": "2014-03-30",
+ "value": 0.4768033811913309
+ },
+ {
+ "date": "2014-03-31",
+ "value": 0.47223012774930034
+ },
+ {
+ "date": "2014-04-01",
+ "value": 0.467614878310697
+ },
+ {
+ "date": "2014-04-02",
+ "value": 0.4690382217852809
+ },
+ {
+ "date": "2014-04-03",
+ "value": 0.4707312671717389
+ },
+ {
+ "date": "2014-04-04",
+ "value": 0.46874599002888123
+ },
+ {
+ "date": "2014-04-05",
+ "value": 0.4695232950365088
+ },
+ {
+ "date": "2014-04-06",
+ "value": 0.46812382634056693
+ },
+ {
+ "date": "2014-04-07",
+ "value": 0.4638152377393435
+ },
+ {
+ "date": "2014-04-08",
+ "value": 0.46846294509572217
+ },
+ {
+ "date": "2014-04-09",
+ "value": 0.46537117781745313
+ },
+ {
+ "date": "2014-04-10",
+ "value": 0.46667486617647175
+ },
+ {
+ "date": "2014-04-11",
+ "value": 0.4700567595482735
+ },
+ {
+ "date": "2014-04-12",
+ "value": 0.4722401087279864
+ },
+ {
+ "date": "2014-04-13",
+ "value": 0.4754113422480582
+ },
+ {
+ "date": "2014-04-14",
+ "value": 0.47237758499686866
+ },
+ {
+ "date": "2014-04-15",
+ "value": 0.476321568527422
+ },
+ {
+ "date": "2014-04-16",
+ "value": 0.4782068702675784
+ },
+ {
+ "date": "2014-04-17",
+ "value": 0.4745382598882709
+ },
+ {
+ "date": "2014-04-18",
+ "value": 0.4778251241650657
+ },
+ {
+ "date": "2014-04-19",
+ "value": 0.48001845981032665
+ },
+ {
+ "date": "2014-04-20",
+ "value": 0.47797297492254276
+ },
+ {
+ "date": "2014-04-21",
+ "value": 0.473354228995828
+ },
+ {
+ "date": "2014-04-22",
+ "value": 0.470896702947272
+ },
+ {
+ "date": "2014-04-23",
+ "value": 0.4745305949746629
+ },
+ {
+ "date": "2014-04-24",
+ "value": 0.47596513680604596
+ },
+ {
+ "date": "2014-04-25",
+ "value": 0.4731953889995623
+ },
+ {
+ "date": "2014-04-26",
+ "value": 0.4737532034837451
+ },
+ {
+ "date": "2014-04-27",
+ "value": 0.4710481041669472
+ },
+ {
+ "date": "2014-04-28",
+ "value": 0.46605544080317923
+ },
+ {
+ "date": "2014-04-29",
+ "value": 0.4631336037812991
+ },
+ {
+ "date": "2014-04-30",
+ "value": 0.46305963624370283
+ }
+]] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/split_by.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/split_by.json
new file mode 100644
index 0000000..3f06d9d
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/split_by.json
@@ -0,0 +1,548 @@
+ [
+ {
+ "date": "2014-01-01",
+ "release": 110000000,
+ "beta": 4200000,
+ "alpha": 2600000
+ },
+ {
+ "date": "2014-01-02",
+ "release": 110379978,
+ "beta": 5379978,
+ "alpha": 2779978
+ },
+ {
+ "date": "2014-01-03",
+ "release": 110493749,
+ "beta": 5493749,
+ "alpha": 2893749
+ },
+ {
+ "date": "2014-01-04",
+ "release": 110785250,
+ "beta": 5785250,
+ "alpha": 2485250
+ },
+ {
+ "date": "2014-01-05",
+ "release": 113901904,
+ "beta": 13901904,
+ "alpha": 23901904
+ },
+ {
+ "date": "2014-01-06",
+ "release": 111576838,
+ "beta": 6576838,
+ "alpha": 5576838
+ },
+ {
+ "date": "2014-01-07",
+ "release": 114413854,
+ "beta": 7413854,
+ "alpha": 6413854
+ },
+ {
+ "date": "2014-01-08",
+ "release": 115177211,
+ "beta": 8177211,
+ "alpha": 5977211
+ },
+ {
+ "date": "2014-01-09",
+ "release": 116622100,
+ "beta": 9622100,
+ "alpha": 9122100
+ },
+ {
+ "date": "2014-01-10",
+ "release": 117381072,
+ "beta": 11381072,
+ "alpha": 11381072
+ },
+ {
+ "date": "2014-01-11",
+ "release": 118802310,
+ "beta": 10802310,
+ "alpha": 8802310
+ },
+ {
+ "date": "2014-01-12",
+ "release": 115531790,
+ "beta": 8531790,
+ "alpha": 8131790
+ },
+ {
+ "date": "2014-01-13",
+ "release": 115748881,
+ "beta": 8748881,
+ "alpha": 8848881
+ },
+ {
+ "date": "2014-01-14",
+ "release": 118706437,
+ "beta": 10706437,
+ "alpha": 10006437
+ },
+ {
+ "date": "2014-01-15",
+ "release": 119752685,
+ "beta": 12752685,
+ "alpha": 12752685
+ },
+ {
+ "date": "2014-01-16",
+ "release": 121016418,
+ "beta": 13016418,
+ "alpha": 13016418
+ },
+ {
+ "date": "2014-01-17",
+ "release": 125622924,
+ "beta": 17622924,
+ "alpha": 17622924
+ },
+ {
+ "date": "2014-01-18",
+ "release": 125337480,
+ "beta": 17337480,
+ "alpha": 12337480
+ },
+ {
+ "date": "2014-01-19",
+ "release": 122258882,
+ "beta": 14258882,
+ "alpha": 11218882
+ },
+ {
+ "date": "2014-01-20",
+ "release": 123829538,
+ "beta": 15829538,
+ "alpha": 15129538
+ },
+ {
+ "date": "2014-01-21",
+ "release": 124245689,
+ "beta": 16245689,
+ "alpha": 15215689
+ },
+ {
+ "date": "2014-01-22",
+ "release": 126429711,
+ "beta": 18429711,
+ "alpha": 18429711
+ },
+ {
+ "date": "2014-01-23",
+ "release": 126259017,
+ "beta": 18259017,
+ "alpha": 18259017
+ },
+ {
+ "date": "2014-01-24",
+ "release": 125396183,
+ "beta": 17396183,
+ "alpha": 12396183
+ },
+ {
+ "date": "2014-01-25",
+ "release": 123107346,
+ "beta": 15107346,
+ "alpha": 15107346
+ },
+ {
+ "date": "2014-01-26",
+ "release": 128659852,
+ "beta": 20659852,
+ "alpha": 10659852
+ },
+ {
+ "date": "2014-01-27",
+ "release": 125270783,
+ "beta": 17270783,
+ "alpha": 17270783
+ },
+ {
+ "date": "2014-01-28",
+ "release": 126270783,
+ "beta": 18270783,
+ "alpha": 18270783
+ },
+ {
+ "date": "2014-01-29",
+ "release": 127270783,
+ "beta": 19270783,
+ "alpha": 11270783
+ },
+ {
+ "date": "2014-01-30",
+ "release": 128270783,
+ "beta": 20270783,
+ "alpha": 20270783
+ },
+ {
+ "date": "2014-01-31",
+ "release": 129270783,
+ "beta": 21270783,
+ "alpha": 21270783
+ },
+ {
+ "date": "2014-02-01",
+ "release": 130270783,
+ "beta": 22270783,
+ "alpha": 22270783
+ },
+ {
+ "date": "2014-02-02",
+ "release": 131270783,
+ "beta": 23270783,
+ "alpha": 23270783
+ },
+ {
+ "date": "2014-02-03",
+ "release": 132270783,
+ "beta": 24270783,
+ "alpha": 24270783
+ },
+ {
+ "date": "2014-02-04",
+ "release": 133270783,
+ "beta": 25270783,
+ "alpha": 23270783
+ },
+ {
+ "date": "2014-02-05",
+ "release": 128270783,
+ "beta": 20270783,
+ "alpha": 20270783
+ },
+ {
+ "date": "2014-02-06",
+ "release": 127270783,
+ "beta": 19270783,
+ "alpha": 19270783
+ },
+ {
+ "date": "2014-02-07",
+ "release": 135270783,
+ "beta": 27270783,
+ "alpha": 27270783
+ },
+ {
+ "date": "2014-02-08",
+ "release": 134270783,
+ "beta": 26270783,
+ "alpha": 26270783
+ },
+ {
+ "date": "2014-02-09",
+ "release": 128270783,
+ "beta": 20270783,
+ "alpha": 20270783
+ },
+ {
+ "date": "2014-02-10",
+ "release": 135270783,
+ "beta": 27270783,
+ "alpha": 24270783
+ },
+ {
+ "date": "2014-02-11",
+ "release": 136270783,
+ "beta": 28270783,
+ "alpha": 28270783
+ },
+ {
+ "date": "2014-02-12",
+ "release": 134127078,
+ "beta": 26127078,
+ "alpha": 26127078
+ },
+ {
+ "date": "2014-02-13",
+ "release": 133124078,
+ "beta": 25124078,
+ "alpha": 25124078
+ },
+ {
+ "date": "2014-02-14",
+ "release": 136227078,
+ "beta": 28227078,
+ "alpha": 26127078
+ },
+ {
+ "date": "2014-02-15",
+ "release": 137827078,
+ "beta": 29827078,
+ "alpha": 29827078
+ },
+ {
+ "date": "2014-02-16",
+ "release": 136427073,
+ "beta": 28427073,
+ "alpha": 28427073
+ },
+ {
+ "date": "2014-02-17",
+ "release": 137570783,
+ "beta": 29570783,
+ "alpha": 29570783
+ },
+ {
+ "date": "2014-02-18",
+ "release": 138627073,
+ "beta": 30627073,
+ "alpha": 30627073
+ },
+ {
+ "date": "2014-02-19",
+ "release": 137727078,
+ "beta": 29727078,
+ "alpha": 29727078
+ },
+ {
+ "date": "2014-02-20",
+ "release": 138827073,
+ "beta": 30827073,
+ "alpha": 30827073
+ },
+ {
+ "date": "2014-02-21",
+ "release": 140927078,
+ "beta": 32927078,
+ "alpha": 32927078
+ },
+ {
+ "date": "2014-02-22",
+ "release": 141027078,
+ "beta": 33027078,
+ "alpha": 40027078
+ },
+ {
+ "date": "2014-02-23",
+ "release": 142127073,
+ "beta": 34127073,
+ "alpha": 34127073
+ },
+ {
+ "date": "2014-02-24",
+ "release": 143220783,
+ "beta": 35220783,
+ "alpha": 35220783
+ },
+ {
+ "date": "2014-02-25",
+ "release": 144327078,
+ "beta": 36327078,
+ "alpha": 36327078
+ },
+ {
+ "date": "2014-02-26",
+ "release": 140427078,
+ "beta": 32427078,
+ "alpha": 32427078
+ },
+ {
+ "date": "2014-02-27",
+ "release": 141027078,
+ "beta": 33027078,
+ "alpha": 33027078
+ },
+ {
+ "date": "2014-02-28",
+ "release": 145627078,
+ "beta": 37627078,
+ "alpha": 37627078
+ },
+ {
+ "date": "2014-03-01",
+ "release": 144727078,
+ "beta": 36727078,
+ "alpha": 36727078
+ },
+ {
+ "date": "2014-03-02",
+ "release": 144227078,
+ "beta": 36227078,
+ "alpha": 36227078
+ },
+ {
+ "date": "2014-03-03",
+ "release": 145227078,
+ "beta": 37227078,
+ "alpha": 37227078
+ },
+ {
+ "date": "2014-03-04",
+ "release": 146027078,
+ "beta": 38027078,
+ "alpha": 38027078
+ },
+ {
+ "date": "2014-03-05",
+ "release": 146927078,
+ "beta": 38927078,
+ "alpha": 38927078
+ },
+ {
+ "date": "2014-03-06",
+ "release": 147027078,
+ "beta": 39027078,
+ "alpha": 39027078
+ },
+ {
+ "date": "2014-03-07",
+ "release": 146227078,
+ "beta": 38227078,
+ "alpha": 32427078
+ },
+ {
+ "date": "2014-03-08",
+ "release": 147027078,
+ "beta": 39027078,
+ "alpha": 39027078
+ },
+ {
+ "date": "2014-03-09",
+ "release": 148027078,
+ "beta": 40027078,
+ "alpha": 40027078
+ },
+ {
+ "date": "2014-03-10",
+ "release": 147027078,
+ "beta": 39027078,
+ "alpha": 39027078
+ },
+ {
+ "date": "2014-03-11",
+ "release": 147027078,
+ "beta": 39027078,
+ "alpha": 37027078
+ },
+ {
+ "date": "2014-03-12",
+ "release": 148017078,
+ "beta": 40017078,
+ "alpha": 38817078
+ },
+ {
+ "date": "2014-03-13",
+ "release": 148077078,
+ "beta": 40077078,
+ "alpha": 40077078
+ },
+ {
+ "date": "2014-03-14",
+ "release": 148087078,
+ "beta": 40087078,
+ "alpha": 40087078
+ },
+ {
+ "date": "2014-03-15",
+ "release": 148017078,
+ "beta": 40017078,
+ "alpha": 40017078
+ },
+ {
+ "date": "2014-03-16",
+ "release": 148047078,
+ "beta": 40047078,
+ "alpha": 40047078
+ },
+ {
+ "date": "2014-03-17",
+ "release": 148067078,
+ "beta": 40067078,
+ "alpha": 40067078
+ },
+ {
+ "date": "2014-03-18",
+ "release": 148077078,
+ "beta": 40077078,
+ "alpha": 39977078
+ },
+ {
+ "date": "2014-03-19",
+ "release": 148027074,
+ "beta": 40027074,
+ "alpha": 40027074
+ },
+ {
+ "date": "2014-03-20",
+ "release": 148927079,
+ "beta": 40927079,
+ "alpha": 40927079
+ },
+ {
+ "date": "2014-03-21",
+ "release": 148727071,
+ "beta": 40727071,
+ "alpha": 40727071
+ },
+ {
+ "date": "2014-03-22",
+ "release": 148127072,
+ "beta": 40127072,
+ "alpha": 37127072
+ },
+ {
+ "date": "2014-03-23",
+ "release": 148527072,
+ "beta": 40527072,
+ "alpha": 40527072
+ },
+ {
+ "date": "2014-03-24",
+ "release": 148627027,
+ "beta": 40627027,
+ "alpha": 40627027
+ },
+ {
+ "date": "2014-03-25",
+ "release": 148027040,
+ "beta": 40027040,
+ "alpha": 40027040
+ },
+ {
+ "date": "2014-03-26",
+ "release": 148027043,
+ "beta": 40027043,
+ "alpha": 40027043
+ },
+ {
+ "date": "2014-03-27",
+ "release": 148057022,
+ "beta": 40057022,
+ "alpha": 40057022
+ },
+ {
+ "date": "2014-03-28",
+ "release": 149057022,
+ "beta": 41057022,
+ "alpha": 40057022
+ },
+ {
+ "date": "2014-03-29",
+ "release": 150057022,
+ "beta": 42057022,
+ "alpha": 42057022
+ },
+ {
+ "date": "2014-03-30",
+ "release": 151057022,
+ "beta": 43057022,
+ "alpha": 43057022
+ },
+ {
+ "date": "2014-03-31",
+ "release": 152057022,
+ "beta": 44057022,
+ "alpha": 44057022
+ },
+ {
+ "date": "2014-04-01",
+ "release": 152056143,
+ "beta": 45056143,
+ "alpha": 42056143
+ }
+ ] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/ufo-sightings.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/ufo-sightings.json
new file mode 100644
index 0000000..26caedd
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/ufo-sightings.json
@@ -0,0 +1,266 @@
+[
+ {
+ "year": "1945",
+ "sightings": 6
+ },
+ {
+ "year": "1946",
+ "sightings": 8
+ },
+ {
+ "year": "1947",
+ "sightings": 34
+ },
+ {
+ "year": "1948",
+ "sightings": 8
+ },
+ {
+ "year": "1949",
+ "sightings": 15
+ },
+ {
+ "year": "1950",
+ "sightings": 25
+ },
+ {
+ "year": "1951",
+ "sightings": 20
+ },
+ {
+ "year": "1952",
+ "sightings": 48
+ },
+ {
+ "year": "1953",
+ "sightings": 34
+ },
+ {
+ "year": "1954",
+ "sightings": 50
+ },
+ {
+ "year": "1955",
+ "sightings": 31
+ },
+ {
+ "year": "1956",
+ "sightings": 38
+ },
+ {
+ "year": "1957",
+ "sightings": 67
+ },
+ {
+ "year": "1958",
+ "sightings": 40
+ },
+ {
+ "year": "1959",
+ "sightings": 47
+ },
+ {
+ "year": "1960",
+ "sightings": 64
+ },
+ {
+ "year": "1961",
+ "sightings": 39
+ },
+ {
+ "year": "1962",
+ "sightings": 55
+ },
+ {
+ "year": "1963",
+ "sightings": 75
+ },
+ {
+ "year": "1964",
+ "sightings": 77
+ },
+ {
+ "year": "1965",
+ "sightings": 167
+ },
+ {
+ "year": "1966",
+ "sightings": 169
+ },
+ {
+ "year": "1967",
+ "sightings": 178
+ },
+ {
+ "year": "1968",
+ "sightings": 183
+ },
+ {
+ "year": "1969",
+ "sightings": 138
+ },
+ {
+ "year": "1970",
+ "sightings": 126
+ },
+ {
+ "year": "1971",
+ "sightings": 110
+ },
+ {
+ "year": "1972",
+ "sightings": 146
+ },
+ {
+ "year": "1973",
+ "sightings": 209
+ },
+ {
+ "year": "1974",
+ "sightings": 241
+ },
+ {
+ "year": "1975",
+ "sightings": 279
+ },
+ {
+ "year": "1976",
+ "sightings": 246
+ },
+ {
+ "year": "1977",
+ "sightings": 239
+ },
+ {
+ "year": "1978",
+ "sightings": 301
+ },
+ {
+ "year": "1979",
+ "sightings": 221
+ },
+ {
+ "year": "1980",
+ "sightings": 211
+ },
+ {
+ "year": "1981",
+ "sightings": 146
+ },
+ {
+ "year": "1982",
+ "sightings": 182
+ },
+ {
+ "year": "1983",
+ "sightings": 132
+ },
+ {
+ "year": "1984",
+ "sightings": 172
+ },
+ {
+ "year": "1985",
+ "sightings": 192
+ },
+ {
+ "year": "1986",
+ "sightings": 173
+ },
+ {
+ "year": "1987",
+ "sightings": 193
+ },
+ {
+ "year": "1988",
+ "sightings": 203
+ },
+ {
+ "year": "1989",
+ "sightings": 220
+ },
+ {
+ "year": "1990",
+ "sightings": 217
+ },
+ {
+ "year": "1991",
+ "sightings": 210
+ },
+ {
+ "year": "1992",
+ "sightings": 228
+ },
+ {
+ "year": "1993",
+ "sightings": 285
+ },
+ {
+ "year": "1994",
+ "sightings": 381
+ },
+ {
+ "year": "1995",
+ "sightings": 1336
+ },
+ {
+ "year": "1996",
+ "sightings": 862
+ },
+ {
+ "year": "1997",
+ "sightings": 1248
+ },
+ {
+ "year": "1998",
+ "sightings": 1812
+ },
+ {
+ "year": "1999",
+ "sightings": 2906
+ },
+ {
+ "year": "2000",
+ "sightings": 2780
+ },
+ {
+ "year": "2001",
+ "sightings": 3105
+ },
+ {
+ "year": "2002",
+ "sightings": 3176
+ },
+ {
+ "year": "2003",
+ "sightings": 3896
+ },
+ {
+ "year": "2004",
+ "sightings": 4208
+ },
+ {
+ "year": "2005",
+ "sightings": 3996
+ },
+ {
+ "year": "2006",
+ "sightings": 3590
+ },
+ {
+ "year": "2007",
+ "sightings": 4195
+ },
+ {
+ "year": "2008",
+ "sightings": 4705
+ },
+ {
+ "year": "2009",
+ "sightings": 4297
+ },
+ {
+ "year": "2010",
+ "sightings": 2531
+ }
+] \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/ufo_dates.csv b/priv/static/metrics-graphics-3.0-alpha3/examples/data/ufo_dates.csv
new file mode 100644
index 0000000..b7fe149
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/ufo_dates.csv
@@ -0,0 +1,22841 @@
+value
+30
+0
+203
+0
+30
+0
+0
+116
+180
+57
+0
+0
+2
+75
+0
+0
+21
+25
+2
+0
+29
+0
+101
+27
+43
+0
+770
+0
+24
+0
+0
+39
+0
+2
+24
+21
+25
+1
+27
+1866
+113
+0
+1
+1
+876
+1
+0
+0
+68
+287
+1
+257
+31
+299
+176
+21
+51
+51
+51
+25
+20
+91
+24
+0
+0
+48
+279
+70
+52
+22
+100
+50
+80
+1
+10
+0
+3059
+3059
+3059
+4
+74
+26
+383
+0
+3227
+32
+315
+0
+0
+28
+34
+1
+35
+84
+20
+0
+94
+21
+730
+203
+3
+30
+5
+0
+1
+1013
+84
+8
+2056
+7
+75
+291
+291
+291
+570
+4582
+4582
+4582
+148
+415
+139
+30
+0
+6
+40
+237
+3318
+3318
+3318
+253
+106
+162
+356
+121
+1172
+41
+525
+320
+320
+320
+1632
+1632
+1632
+1437
+1267
+64
+149
+67
+0
+29
+33
+115
+482
+1
+434
+65
+219
+0
+142
+157
+13
+0
+27
+24
+1464
+1464
+1464
+56
+422
+1
+775
+367
+90
+189
+0
+1636
+631
+3261
+3261
+3261
+137
+20
+30
+1268
+1268
+1268
+115
+153
+193
+3
+20
+0
+1
+0
+162
+726
+16
+2069
+53
+786
+552
+46
+148
+28
+205
+3
+0
+0
+98
+4006
+4006
+4006
+37
+2
+49
+25
+211
+135
+541
+549
+56
+184
+1398
+1398
+1398
+2602
+2602
+2602
+178
+331
+49
+598
+2219
+28
+8
+65
+3653
+3653
+3653
+2552
+2552
+2552
+31
+1233
+28
+69
+126
+585
+22
+89
+35
+97
+36
+32
+430
+4241
+4241
+4241
+4513
+4513
+4513
+132
+701
+21
+493
+119
+784
+346
+149
+0
+43
+101
+20
+28
+398
+23
+980
+343
+51
+1183
+58
+61
+358
+977
+938
+1
+22
+567
+622
+2341
+1166
+194
+1044
+292
+942
+754
+39
+2
+642
+99
+35
+23
+140
+2534
+280
+3228
+3228
+3228
+36
+40
+37
+1424
+40
+309
+36
+48
+87
+1
+627
+155
+155
+155
+326
+178
+481
+1321
+1321
+1321
+2310
+2310
+2310
+32
+3773
+3773
+3773
+63
+729
+406
+369
+119
+119
+119
+4193
+4193
+4193
+799
+677
+912
+2197
+2197
+2197
+23
+56
+1203
+1203
+1203
+1030
+224
+363
+1746
+1746
+1746
+23
+417
+2340
+4634
+4634
+4634
+610
+350
+320
+3
+115
+3
+23
+202
+47
+4001
+4001
+4001
+0
+0
+211
+211
+211
+0
+2
+133
+1588
+1588
+1588
+53
+34
+4
+12
+21
+238
+144
+144
+144
+11
+74
+280
+107
+24
+343
+68
+46
+38
+339
+1922
+0
+1947
+1947
+1947
+3187
+29
+61
+55
+47
+104
+179
+1446
+1
+238
+669
+3
+79
+61
+5
+581
+1112
+24
+52
+316
+203
+39
+226
+106
+106
+106
+0
+203
+137
+4411
+4411
+4411
+120
+36
+722
+27
+681
+105
+135
+21
+215
+0
+69
+81
+65
+4
+104
+792
+2327
+74
+20
+30
+42
+0
+4300
+4300
+4300
+92
+113
+28
+392
+20
+37
+115
+31
+607
+241
+169
+104
+27
+84
+403
+2205
+3447
+3447
+3447
+213
+21
+36
+989
+888
+888
+888
+0
+206
+14
+98
+98
+98
+325
+87
+172
+299
+1193
+208
+2862
+203
+727
+727
+727
+409
+3770
+3770
+3770
+56
+87
+582
+582
+582
+614
+3067
+3067
+3067
+252
+2272
+2272
+2272
+3911
+21
+451
+894
+49
+268
+268
+268
+0
+151
+212
+575
+23
+1063
+2
+21
+159
+440
+979
+3183
+3183
+3183
+1805
+217
+280
+90
+1110
+2480
+444
+1382
+2523
+2523
+2523
+22
+131
+35
+125
+388
+3502
+3502
+3502
+30
+26
+64
+1830
+1830
+1830
+1268
+3604
+3604
+3604
+967
+41
+483
+46
+972
+84
+21
+906
+0
+0
+3
+576
+365
+2885
+2885
+2885
+365
+1
+236
+634
+99
+477
+49
+114
+34
+1381
+702
+395
+775
+255
+4660
+4660
+4660
+116
+803
+289
+2432
+2432
+2432
+148
+28
+1206
+98
+67
+2639
+185
+1205
+1511
+1463
+24
+1290
+450
+1
+1370
+3315
+2558
+181
+0
+1380
+1380
+1380
+174
+2507
+2507
+2507
+29
+286
+525
+1732
+70
+99
+8
+21
+95
+2163
+664
+664
+664
+21
+33
+56
+3138
+28
+1
+1361
+37
+0
+36
+33
+38
+260
+90
+0
+582
+972
+302
+4854
+4854
+4854
+7
+485
+53
+4636
+4636
+4636
+55
+89
+255
+186
+93
+22
+2032
+23
+63
+3524
+3524
+3524
+2596
+2596
+2596
+2843
+4589
+4589
+4589
+1172
+367
+26
+22
+350
+15
+278
+122
+1202
+185
+0
+1593
+1593
+1593
+32
+39
+916
+23
+577
+526
+1231
+36
+34
+502
+52
+0
+2084
+2084
+2084
+853
+853
+853
+21
+82
+195
+1592
+1592
+1592
+22
+4372
+4372
+4372
+1
+9
+904
+904
+904
+474
+1135
+100
+1490
+1284
+25
+2415
+2415
+2415
+44
+140
+352
+220
+345
+48
+25
+147
+82
+360
+1487
+1487
+1487
+1601
+1601
+1601
+20
+1536
+29
+410
+1077
+0
+161
+161
+161
+3949
+3949
+3949
+1139
+257
+29
+44
+62
+62
+62
+582
+582
+582
+130
+1076
+320
+1
+61
+214
+2782
+64
+41
+283
+30
+520
+454
+2454
+2454
+2454
+388
+7
+950
+45
+80
+190
+5
+189
+1933
+1933
+1933
+26
+2
+470
+73
+1513
+434
+1410
+1410
+1410
+559
+3363
+3363
+3363
+0
+441
+525
+1070
+0
+1834
+1506
+41
+32
+404
+0
+808
+166
+53
+2
+834
+0
+136
+24
+404
+1056
+1
+3284
+3284
+3284
+4662
+4662
+4662
+1009
+1009
+1009
+40
+1326
+25
+1542
+195
+49
+31
+45
+21
+1436
+25
+1476
+1476
+1476
+1194
+49
+2002
+51
+2
+3734
+3734
+3734
+455
+1209
+243
+48
+34
+393
+1160
+1160
+1160
+1020
+368
+34
+1
+31
+47
+103
+109
+540
+3212
+3212
+3212
+460
+1958
+1958
+1958
+30
+1121
+1959
+1959
+1959
+411
+93
+203
+1425
+190
+245
+2088
+280
+280
+280
+2290
+94
+4755
+4755
+4755
+1
+25
+3512
+3512
+3512
+53
+59
+1887
+1887
+1887
+33
+45
+55
+24
+1872
+741
+1405
+1405
+1405
+1098
+85
+31
+92
+94
+148
+397
+393
+445
+2476
+56
+1182
+711
+789
+0
+48
+264
+104
+839
+780
+780
+780
+360
+533
+0
+27
+2625
+1851
+697
+53
+1342
+4443
+4443
+4443
+23
+1
+112
+3118
+1535
+4705
+4705
+4705
+1
+3
+397
+679
+1489
+202
+202
+202
+72
+1199
+1275
+1259
+2028
+2028
+2028
+32
+360
+1076
+1076
+1076
+1042
+1776
+155
+63
+39
+3698
+563
+146
+40
+125
+1218
+3873
+4683
+4683
+4683
+68
+811
+79
+22
+514
+31
+362
+153
+714
+1188
+1188
+1188
+501
+4037
+4037
+4037
+900
+2653
+2653
+2653
+1557
+1557
+1557
+2174
+29
+0
+32
+3332
+3332
+3332
+32
+31
+349
+2
+307
+349
+828
+4
+764
+27
+4044
+1
+14
+3327
+3327
+3327
+480
+480
+480
+171
+99
+22
+4321
+4321
+4321
+35
+101
+20
+68
+101
+59
+0
+489
+27
+55
+43
+1648
+1648
+1648
+1
+4
+1769
+68
+1273
+646
+639
+1557
+452
+216
+1070
+1229
+1229
+1229
+701
+142
+3494
+2
+149
+365
+608
+370
+30
+0
+2388
+2388
+2388
+27
+314
+603
+24
+333
+333
+333
+2736
+2736
+2736
+365
+417
+2808
+2808
+2808
+2201
+3341
+3341
+3341
+1327
+42
+366
+366
+366
+249
+23
+56
+1258
+486
+93
+210
+2581
+2581
+2581
+810
+49
+251
+251
+251
+205
+1100
+135
+75
+155
+160
+82
+960
+2037
+2110
+75
+3421
+3421
+3421
+158
+37
+873
+70
+674
+4606
+4606
+4606
+192
+4435
+4435
+4435
+2251
+1
+848
+220
+0
+155
+768
+768
+768
+54
+31
+1460
+1460
+1460
+168
+102
+342
+3147
+3147
+3147
+128
+37
+1856
+161
+614
+520
+27
+480
+54
+4166
+838
+92
+512
+219
+219
+219
+661
+75
+220
+812
+27
+1976
+1899
+41
+172
+4975
+4975
+4975
+4709
+4709
+4709
+2734
+2734
+2734
+3147
+3147
+3147
+505
+231
+231
+231
+44
+31
+271
+62
+862
+276
+36
+18
+228
+497
+4279
+4279
+4279
+606
+1
+29
+496
+152
+223
+63
+1196
+156
+78
+221
+368
+1954
+1954
+1954
+271
+4
+101
+2336
+398
+262
+2297
+2060
+4252
+2905
+2905
+2905
+35
+598
+1417
+175
+1280
+1280
+1280
+55
+1176
+2453
+1921
+1921
+1921
+48
+1729
+1397
+71
+0
+1748
+2
+223
+336
+1603
+1332
+28
+90
+1545
+2630
+1347
+120
+3668
+3668
+3668
+0
+477
+2780
+2399
+2399
+2399
+2497
+46
+1250
+282
+26
+28
+2064
+7
+58
+4926
+4926
+4926
+160
+392
+281
+1006
+1025
+133
+4877
+4877
+4877
+185
+139
+399
+276
+4065
+4065
+4065
+4840
+4840
+4840
+1948
+25
+184
+184
+184
+154
+1636
+30
+71
+497
+698
+698
+698
+1813
+21
+3
+135
+47
+729
+207
+804
+31
+5
+252
+32
+657
+2
+1342
+497
+166
+522
+102
+1657
+1657
+1657
+157
+1282
+1282
+1282
+365
+365
+365
+3726
+3726
+3726
+263
+84
+170
+562
+27
+43
+2045
+2045
+2045
+3
+325
+144
+4646
+4646
+4646
+1611
+82
+1601
+1601
+1601
+1656
+1656
+1656
+259
+963
+900
+1107
+1225
+543
+56
+0
+876
+2235
+2235
+2235
+218
+378
+378
+378
+4806
+4806
+4806
+276
+53
+176
+2050
+3659
+1167
+804
+117
+3113
+3113
+3113
+130
+1118
+133
+48
+2
+1
+206
+55
+55
+55
+2049
+366
+558
+64
+1729
+85
+95
+608
+91
+28
+105
+153
+342
+15
+0
+438
+20
+644
+1750
+276
+3458
+3458
+3458
+89
+1274
+551
+971
+294
+302
+1000
+172
+107
+21
+23
+1
+371
+104
+2222
+2
+27
+4976
+4976
+4976
+1663
+1663
+1663
+3121
+3121
+3121
+296
+672
+754
+83
+38
+710
+4678
+4678
+4678
+2
+2128
+2128
+2128
+48
+198
+489
+8
+798
+580
+0
+34
+4840
+4840
+4840
+44
+1419
+2838
+2838
+2838
+22
+463
+4657
+4657
+4657
+1651
+310
+0
+35
+31
+3618
+3618
+3618
+3795
+3795
+3795
+1498
+2
+1377
+347
+147
+32
+114
+303
+52
+510
+510
+510
+30
+35
+683
+0
+4983
+4983
+4983
+579
+42
+1162
+3189
+3189
+3189
+165
+1
+2872
+2872
+2872
+47
+1355
+1092
+2108
+2108
+2108
+4373
+15
+322
+1053
+213
+331
+344
+23
+1477
+1477
+1477
+2190
+2190
+2190
+114
+62
+650
+41
+1439
+1439
+1439
+30
+595
+1882
+1186
+25
+334
+4677
+4677
+4677
+91
+4091
+528
+1756
+1756
+1756
+45
+40
+316
+0
+279
+1634
+673
+61
+1517
+66
+407
+106
+251
+22
+3731
+3731
+3731
+218
+533
+85
+1050
+1050
+1050
+458
+1435
+363
+94
+1431
+126
+930
+3655
+1461
+1
+755
+231
+36
+271
+2843
+92
+48
+0
+603
+30
+320
+131
+24
+1369
+30
+1390
+308
+1
+2823
+2823
+2823
+3691
+3691
+3691
+1934
+373
+548
+726
+50
+1406
+783
+304
+353
+35
+670
+365
+344
+628
+1885
+1885
+1885
+30
+60
+34
+34
+2550
+691
+3172
+3172
+3172
+35
+978
+4810
+4810
+4810
+127
+7
+4430
+4430
+4430
+2173
+378
+340
+719
+26
+642
+646
+4585
+4585
+4585
+549
+3227
+3227
+3227
+50
+378
+67
+2
+66
+89
+308
+964
+467
+4986
+4986
+4986
+4343
+4343
+4343
+789
+139
+32
+18
+172
+954
+44
+3285
+3285
+3285
+2
+1485
+24
+885
+81
+12
+2364
+292
+415
+1376
+4366
+4366
+4366
+29
+902
+140
+85
+1208
+0
+522
+26
+1847
+622
+701
+701
+701
+1072
+1072
+1072
+59
+25
+190
+921
+55
+77
+53
+4387
+4387
+4387
+2173
+2173
+2173
+749
+63
+0
+703
+703
+703
+143
+125
+181
+15
+190
+715
+4029
+4029
+4029
+27
+2042
+2042
+2042
+2221
+195
+253
+605
+96
+62
+48
+47
+36
+2387
+2387
+2387
+22
+192
+38
+91
+1721
+396
+396
+396
+42
+374
+64
+85
+584
+25
+1944
+46
+1052
+1052
+1052
+340
+22
+33
+104
+0
+852
+21
+419
+2292
+2292
+2292
+57
+64
+1815
+312
+1843
+1843
+1843
+320
+79
+269
+369
+369
+369
+78
+3141
+3141
+3141
+44
+64
+4418
+30
+92
+175
+97
+4724
+4724
+4724
+828
+3451
+415
+4148
+4148
+4148
+46
+224
+0
+2198
+2198
+2198
+1212
+1212
+1212
+31
+1129
+161
+1908
+1908
+1908
+714
+322
+42
+3816
+3816
+3816
+33
+249
+249
+249
+3
+22
+48
+1641
+3635
+3788
+3788
+3788
+215
+592
+1660
+1471
+447
+2
+0
+1
+665
+1202
+615
+1575
+277
+277
+277
+38
+397
+30
+1166
+1118
+116
+76
+52
+946
+21
+57
+153
+55
+41
+1900
+31
+2964
+2964
+2964
+473
+4095
+4095
+4095
+0
+1771
+733
+21
+162
+625
+1118
+20
+376
+395
+395
+395
+4
+4023
+4023
+4023
+628
+3671
+3671
+3671
+1
+781
+675
+334
+83
+619
+580
+56
+95
+85
+44
+23
+1096
+150
+31
+1811
+1811
+1811
+3033
+3033
+3033
+747
+747
+747
+146
+243
+2149
+497
+25
+206
+764
+764
+764
+4357
+4357
+4357
+4720
+4720
+4720
+339
+25
+0
+310
+188
+4041
+4041
+4041
+50
+706
+733
+64
+722
+4077
+4077
+4077
+4515
+4515
+4515
+1213
+1448
+1165
+0
+26
+67
+2379
+2379
+2379
+59
+84
+38
+1474
+351
+494
+808
+26
+311
+311
+311
+180
+1638
+1638
+1638
+1834
+1834
+1834
+22
+3732
+3732
+3732
+70
+237
+96
+2878
+133
+610
+4369
+4369
+4369
+53
+1017
+1017
+1017
+765
+765
+765
+1050
+1050
+1050
+23
+1253
+282
+318
+375
+7
+2054
+409
+31
+18
+0
+37
+3
+42
+370
+91
+31
+914
+270
+733
+31
+183
+31
+1
+11
+633
+1
+101
+101
+101
+27
+70
+186
+248
+24
+1836
+243
+28
+880
+30
+133
+27
+20
+792
+363
+1063
+27
+24
+5
+633
+633
+633
+37
+722
+1562
+1562
+1562
+0
+0
+16
+54
+39
+277
+857
+15
+1097
+38
+802
+1065
+34
+3223
+3223
+3223
+38
+1957
+1957
+1957
+513
+604
+23
+3337
+3337
+3337
+881
+590
+30
+9
+7
+274
+22
+23
+3253
+3253
+3253
+105
+58
+130
+843
+843
+843
+160
+191
+223
+223
+223
+196
+1844
+1844
+1844
+1
+9
+1
+53
+25
+908
+769
+398
+2116
+22
+263
+2974
+3442
+3442
+3442
+49
+801
+24
+24
+911
+68
+69
+255
+321
+26
+41
+0
+337
+20
+817
+1865
+2922
+2922
+2922
+350
+55
+71
+1974
+1974
+1974
+131
+911
+911
+911
+4947
+4947
+4947
+1
+25
+21
+372
+41
+141
+44
+3
+1
+761
+23
+1960
+1960
+1960
+25
+76
+269
+799
+799
+799
+903
+903
+903
+11
+7
+48
+3
+28
+4737
+4737
+4737
+176
+1
+3344
+800
+0
+132
+1869
+1869
+1869
+21
+24
+199
+27
+43
+1
+71
+1
+4176
+4176
+4176
+1843
+1843
+1843
+4106
+4106
+4106
+80
+1015
+1015
+1015
+110
+1460
+122
+2947
+28
+12
+0
+30
+36
+112
+141
+756
+61
+71
+282
+27
+1816
+1816
+1816
+2302
+1726
+125
+89
+41
+234
+0
+124
+22
+4127
+4127
+4127
+4546
+4546
+4546
+805
+70
+0
+1592
+568
+851
+28
+4449
+4449
+4449
+0
+0
+327
+884
+1
+1261
+338
+322
+64
+90
+85
+0
+43
+239
+8
+118
+1512
+841
+452
+251
+859
+45
+789
+1550
+22
+1
+26
+120
+1370
+24
+50
+0
+231
+1056
+21
+218
+885
+129
+20
+2590
+2590
+2590
+377
+0
+2639
+2639
+2639
+1556
+1556
+1556
+33
+872
+24
+0
+1080
+0
+4145
+4145
+4145
+32
+0
+33
+1122
+3058
+51
+1561
+2263
+2263
+2263
+34
+39
+0
+4443
+4443
+4443
+889
+346
+1295
+1
+1894
+1894
+1894
+21
+32
+3303
+3303
+3303
+23
+102
+1
+59
+46
+836
+3319
+3319
+3319
+1408
+20
+924
+563
+563
+563
+2846
+2846
+2846
+1
+370
+1646
+4339
+46
+915
+952
+3609
+548
+1220
+2
+369
+539
+539
+539
+4528
+4528
+4528
+513
+148
+3166
+1910
+1910
+1910
+930
+79
+127
+21
+545
+864
+591
+3723
+539
+120
+367
+20
+24
+222
+162
+56
+23
+484
+4
+59
+1
+162
+240
+9
+458
+952
+1022
+32
+20
+155
+131
+51
+26
+1
+4414
+4414
+4414
+1134
+0
+360
+0
+147
+70
+890
+126
+29
+114
+771
+860
+609
+22
+68
+977
+173
+1181
+20
+2668
+2668
+2668
+45
+40
+367
+113
+958
+863
+863
+863
+180
+26
+1
+43
+1611
+1611
+1611
+1376
+24
+4714
+4714
+4714
+2983
+2983
+2983
+3
+0
+0
+1096
+31
+64
+4195
+4195
+4195
+185
+3939
+3939
+3939
+784
+334
+22
+26
+3531
+3531
+3531
+1599
+1599
+1599
+4127
+4127
+4127
+54
+126
+1055
+79
+371
+1187
+28
+0
+116
+1645
+170
+22
+1960
+458
+550
+25
+39
+43
+269
+892
+1
+0
+592
+592
+592
+1
+555
+555
+555
+1822
+1822
+1822
+14
+1463
+1463
+1463
+52
+365
+92
+41
+36
+3079
+3079
+3079
+1156
+525
+604
+2606
+1671
+201
+2249
+2249
+2249
+29
+345
+2938
+24
+3875
+3875
+3875
+925
+925
+925
+366
+31
+298
+177
+185
+36
+189
+546
+486
+1
+52
+1267
+71
+1718
+2325
+2325
+2325
+4059
+47
+1646
+1687
+38
+739
+499
+37
+608
+23
+22
+6
+103
+38
+0
+101
+3431
+3431
+3431
+4044
+4044
+4044
+225
+527
+905
+905
+905
+3387
+3387
+3387
+46
+519
+376
+376
+376
+2344
+216
+743
+743
+743
+3671
+3671
+3671
+328
+508
+41
+4001
+4001
+4001
+88
+1
+25
+365
+40
+1543
+374
+461
+324
+2402
+2
+1983
+1983
+1983
+2073
+441
+24
+145
+137
+4993
+4993
+4993
+36
+1
+155
+317
+54
+276
+260
+2396
+3463
+3463
+3463
+1137
+4
+96
+3201
+3201
+3201
+2
+60
+2369
+1567
+1
+235
+113
+52
+392
+2360
+175
+175
+175
+415
+1269
+1269
+1269
+0
+30
+632
+207
+365
+3434
+3434
+3434
+222
+167
+1428
+3867
+3867
+3867
+1723
+172
+99
+1030
+192
+316
+911
+124
+1066
+43
+236
+3589
+575
+449
+65
+366
+76
+1382
+547
+104
+2
+1947
+1947
+1947
+187
+198
+3554
+3554
+3554
+1378
+51
+4624
+185
+217
+3
+258
+4650
+4650
+4650
+47
+1071
+61
+976
+37
+978
+978
+978
+1717
+1717
+1717
+12
+493
+0
+784
+22
+1193
+1193
+1193
+50
+2310
+1299
+7
+1271
+1271
+1271
+3098
+62
+29
+667
+341
+358
+4075
+4075
+4075
+2738
+2738
+2738
+3564
+3564
+3564
+2472
+186
+2
+132
+409
+545
+1283
+1283
+1283
+1479
+593
+592
+231
+231
+231
+1
+2524
+2524
+2524
+157
+3725
+151
+334
+2503
+1063
+1063
+1063
+11
+761
+29
+53
+579
+74
+129
+32
+233
+3821
+3821
+3821
+1287
+102
+923
+339
+79
+146
+2470
+2470
+2470
+101
+64
+2965
+2965
+2965
+209
+1
+1731
+367
+156
+223
+194
+20
+1081
+1081
+1081
+62
+40
+518
+220
+317
+1081
+4213
+4213
+4213
+1743
+3607
+3607
+3607
+1487
+664
+519
+1
+2511
+321
+3370
+3370
+3370
+32
+36
+1738
+111
+1228
+1228
+1228
+30
+35
+421
+942
+942
+942
+18
+29
+611
+205
+4981
+4981
+4981
+998
+974
+2763
+2856
+2856
+2856
+3996
+3996
+3996
+99
+1036
+1036
+1036
+367
+1664
+367
+367
+367
+1167
+111
+372
+796
+796
+796
+113
+113
+113
+210
+56
+127
+791
+47
+855
+65
+1140
+22
+448
+1224
+21
+33
+1147
+113
+119
+557
+26
+48
+226
+315
+0
+302
+60
+1189
+1189
+1189
+3124
+3124
+3124
+5
+25
+47
+37
+923
+1733
+1733
+1733
+22
+0
+21
+179
+0
+679
+692
+1
+1059
+1059
+1059
+24
+43
+0
+3843
+3843
+3843
+4
+1
+2728
+1727
+2536
+1123
+0
+2947
+10
+3874
+3874
+3874
+4260
+962
+225
+1821
+84
+0
+3576
+3576
+3576
+138
+3474
+3474
+3474
+4045
+4045
+4045
+1093
+36
+3406
+133
+113
+236
+249
+2737
+53
+1757
+157
+968
+0
+848
+59
+2094
+2094
+2094
+304
+1978
+29
+921
+1
+3757
+3757
+3757
+306
+20
+145
+26
+189
+4678
+4678
+4678
+202
+76
+28
+94
+74
+18
+1429
+634
+0
+1420
+35
+147
+339
+2240
+2240
+2240
+22
+1752
+101
+4878
+4878
+4878
+230
+112
+38
+71
+359
+39
+74
+1795
+30
+3990
+3990
+3990
+40
+2572
+2572
+2572
+383
+30
+836
+55
+29
+356
+1738
+35
+1839
+1839
+1839
+2125
+2125
+2125
+761
+96
+23
+204
+6
+53
+1
+1829
+125
+284
+743
+26
+20
+301
+1867
+3889
+3889
+3889
+327
+281
+2999
+2999
+2999
+1151
+22
+66
+725
+1367
+4
+4601
+4601
+4601
+6
+706
+89
+25
+545
+44
+30
+91
+26
+21
+1218
+52
+1520
+456
+1741
+2496
+2496
+2496
+278
+1050
+362
+54
+1
+37
+249
+21
+1269
+38
+1
+2021
+2021
+2021
+89
+179
+1126
+1126
+1126
+2
+752
+752
+752
+29
+2356
+2356
+2356
+373
+1120
+190
+31
+1376
+4318
+4683
+20
+45
+55
+0
+111
+930
+464
+25
+1812
+265
+696
+906
+326
+326
+326
+51
+294
+685
+2309
+2309
+2309
+298
+333
+2545
+2545
+2545
+70
+1540
+559
+501
+710
+1159
+41
+617
+1200
+1125
+849
+1437
+1437
+1437
+916
+390
+138
+175
+0
+227
+332
+1472
+2550
+2550
+2550
+1130
+16
+1796
+0
+393
+366
+26
+2817
+1
+711
+907
+26
+41
+4320
+4320
+4320
+1510
+1510
+1510
+2
+132
+1379
+1501
+605
+64
+186
+1101
+89
+1574
+80
+187
+329
+118
+59
+56
+2
+212
+1025
+174
+1
+25
+253
+1431
+2193
+2193
+2193
+1956
+916
+916
+916
+2446
+2620
+21
+43
+6
+139
+0
+2607
+2607
+2607
+0
+1365
+274
+33
+241
+2285
+52
+1
+61
+235
+235
+235
+183
+30
+0
+1
+1
+765
+1
+3533
+3533
+3533
+1042
+29
+4190
+4190
+4190
+26
+1615
+27
+229
+368
+368
+368
+250
+8
+1
+0
+32
+355
+31
+432
+32
+20
+22
+22
+44
+146
+1763
+491
+491
+491
+0
+180
+39
+30
+50
+941
+1180
+328
+1
+100
+1778
+707
+293
+32
+1790
+31
+825
+31
+11
+24
+429
+0
+20
+1852
+79
+109
+0
+0
+2579
+2579
+2579
+74
+30
+29
+112
+3392
+3087
+3087
+3087
+19
+1554
+1554
+1554
+23
+2393
+131
+347
+444
+1842
+1681
+3
+6
+999
+34
+1193
+183
+880
+880
+880
+919
+919
+919
+966
+966
+966
+1242
+3275
+3275
+3275
+1
+0
+137
+665
+25
+31
+65
+70
+1389
+3097
+845
+2669
+91
+370
+213
+1850
+38
+138
+218
+624
+624
+624
+93
+1955
+1955
+1955
+265
+1297
+21
+1577
+1994
+1994
+1994
+113
+552
+57
+834
+75
+0
+1187
+3400
+3400
+3400
+2250
+34
+61
+2885
+2885
+2885
+0
+35
+35
+35
+1892
+1862
+1897
+1897
+1897
+235
+45
+43
+3906
+3906
+3906
+121
+2751
+21
+2072
+2072
+2072
+36
+83
+1881
+483
+2506
+2987
+2987
+2987
+419
+6
+32
+4860
+4860
+4860
+82
+385
+4
+1578
+1578
+1578
+3072
+3072
+3072
+7
+574
+104
+265
+853
+0
+60
+1626
+91
+242
+58
+1
+4465
+3005
+3005
+3005
+250
+1864
+2215
+1858
+20
+105
+458
+20
+46
+26
+29
+220
+3818
+3818
+3818
+88
+22
+462
+339
+0
+2
+0
+1239
+1239
+1239
+33
+40
+87
+2687
+2687
+2687
+0
+856
+28
+35
+2496
+2496
+2496
+20
+44
+498
+205
+61
+557
+60
+1984
+646
+1511
+182
+6
+625
+29
+246
+2044
+475
+4162
+4162
+4162
+21
+1971
+0
+1998
+3016
+20
+44
+29
+32
+35
+110
+125
+1470
+737
+33
+803
+1036
+1861
+31
+0
+4866
+4866
+4866
+12
+44
+889
+889
+889
+367
+1810
+1172
+1172
+1172
+24
+892
+307
+1585
+900
+191
+2985
+0
+1946
+1946
+1946
+344
+344
+344
+4551
+4551
+4551
+1670
+1670
+1670
+852
+123
+1598
+22
+366
+23
+69
+132
+3373
+3373
+3373
+366
+27
+148
+1654
+599
+72
+4561
+4561
+4561
+502
+1731
+1731
+1731
+2186
+2184
+197
+22
+189
+933
+457
+2372
+2504
+488
+889
+3976
+3976
+3976
+1122
+988
+38
+1393
+1393
+1393
+1877
+393
+470
+1513
+343
+362
+175
+42
+390
+818
+0
+68
+3096
+3096
+3096
+1002
+1277
+332
+1189
+2058
+171
+650
+650
+650
+792
+105
+2215
+21
+112
+23
+118
+2470
+46
+4422
+4422
+4422
+294
+105
+716
+28
+57
+222
+4616
+4616
+4616
+372
+1146
+1202
+1202
+1202
+4119
+4119
+4119
+444
+1326
+1326
+1326
+1
+4898
+4898
+4898
+941
+603
+4385
+4385
+4385
+46
+573
+181
+219
+3481
+3481
+3481
+518
+0
+4143
+4143
+4143
+366
+20
+1618
+104
+157
+74
+46
+173
+1
+3373
+3373
+3373
+950
+950
+950
+1
+492
+2372
+2372
+2372
+1
+28
+1873
+1873
+1873
+1108
+1108
+1108
+566
+302
+2848
+2848
+2848
+39
+2366
+2366
+2366
+40
+2379
+2379
+2379
+542
+134
+4232
+4232
+4232
+866
+920
+3135
+3135
+3135
+533
+97
+22
+258
+2166
+3157
+1101
+1101
+1101
+43
+64
+340
+25
+4973
+4973
+4973
+3421
+3421
+3421
+377
+1163
+1220
+22
+1299
+1664
+1664
+1664
+42
+185
+171
+58
+705
+26
+43
+33
+671
+49
+0
+53
+1107
+165
+1743
+556
+3062
+3062
+3062
+4932
+4932
+4932
+366
+38
+44
+4845
+4845
+4845
+746
+3155
+36
+119
+2979
+218
+4093
+129
+1485
+73
+30
+43
+25
+4201
+4201
+4201
+38
+21
+896
+2
+70
+49
+34
+1905
+467
+2748
+132
+478
+500
+1
+38
+365
+2442
+521
+0
+101
+1383
+62
+4633
+4633
+4633
+601
+2061
+64
+2353
+2353
+2353
+718
+717
+2245
+786
+1562
+41
+27
+1254
+1254
+1254
+588
+190
+102
+24
+43
+2217
+24
+2452
+2452
+2452
+26
+1452
+1187
+1187
+1187
+211
+446
+81
+21
+48
+1
+85
+255
+1874
+1874
+1874
+3813
+97
+2221
+154
+429
+1463
+1463
+1463
+1032
+28
+479
+48
+2047
+4980
+4980
+4980
+1927
+1927
+1927
+4605
+4605
+4605
+1
+0
+1486
+4299
+4299
+4299
+369
+506
+367
+37
+1313
+1313
+1313
+1621
+9
+4727
+4727
+4727
+3164
+3164
+3164
+1252
+1252
+1252
+1144
+1144
+1144
+1514
+1514
+1514
+0
+1435
+213
+575
+58
+1548
+187
+339
+64
+60
+205
+1176
+1176
+1176
+378
+1119
+3780
+3780
+3780
+1
+246
+25
+1083
+1083
+1083
+66
+101
+2463
+3925
+3925
+3925
+471
+2171
+366
+244
+478
+3174
+3174
+3174
+247
+201
+0
+2431
+4348
+4348
+4348
+29
+808
+263
+1444
+1444
+1444
+80
+122
+378
+174
+2659
+2659
+2659
+415
+21
+42
+3059
+3059
+3059
+1
+1222
+2060
+40
+49
+288
+572
+3942
+3942
+3942
+1449
+2106
+2106
+2106
+1186
+40
+1201
+1952
+203
+48
+898
+421
+31
+2226
+2226
+2226
+45
+400
+184
+195
+2790
+2790
+2790
+99
+4239
+4239
+4239
+78
+177
+793
+545
+3252
+3252
+3252
+78
+86
+2310
+2310
+2310
+1345
+1721
+1
+115
+174
+3626
+57
+1696
+1696
+1696
+492
+492
+492
+2330
+2285
+2285
+2285
+40
+2867
+2867
+2867
+2513
+2513
+2513
+85
+2099
+1759
+4508
+4508
+4508
+4951
+4951
+4951
+21
+564
+1068
+29
+1696
+433
+55
+1943
+4264
+4264
+4264
+994
+21
+2707
+0
+10
+258
+258
+258
+948
+51
+504
+268
+251
+1
+856
+2629
+2629
+2629
+19
+407
+4431
+4431
+4431
+1
+505
+3883
+607
+48
+115
+3477
+3477
+3477
+54
+80
+2827
+2827
+2827
+1101
+526
+1034
+102
+47
+921
+228
+32
+1
+58
+20
+2398
+893
+1730
+414
+47
+224
+334
+246
+928
+338
+1948
+1948
+1948
+4161
+4161
+4161
+1517
+1241
+2094
+2094
+2094
+2380
+98
+3690
+3690
+3690
+578
+439
+0
+145
+190
+1217
+1
+3538
+3538
+3538
+512
+1125
+2
+138
+713
+367
+476
+73
+62
+544
+1387
+76
+550
+0
+126
+248
+967
+967
+967
+826
+975
+181
+446
+1266
+34
+460
+31
+1568
+1
+2
+2201
+2201
+2201
+13
+36
+24
+234
+234
+234
+368
+1468
+1478
+4221
+4221
+4221
+248
+2673
+2673
+2673
+4552
+4552
+4552
+4664
+4664
+4664
+227
+29
+222
+4439
+3184
+3184
+3184
+886
+98
+2492
+103
+193
+1775
+332
+332
+332
+365
+59
+108
+302
+39
+3406
+3406
+3406
+212
+599
+599
+599
+264
+2
+250
+979
+663
+325
+0
+1105
+2124
+2470
+55
+151
+1533
+1533
+1533
+507
+294
+294
+294
+38
+2150
+1562
+202
+202
+202
+323
+235
+756
+48
+4345
+4345
+4345
+371
+2863
+2863
+2863
+274
+712
+325
+529
+1019
+1019
+1019
+4481
+4481
+4481
+232
+4254
+4254
+4254
+312
+3827
+3827
+3827
+150
+1030
+2779
+2779
+2779
+4979
+4979
+4979
+373
+28
+277
+806
+658
+35
+154
+36
+1571
+148
+295
+3614
+4
+262
+1
+2019
+30
+600
+2991
+2991
+2991
+1021
+1404
+33
+38
+75
+531
+667
+376
+2050
+19
+3807
+3807
+3807
+199
+89
+2187
+3599
+3599
+3599
+389
+2123
+3409
+716
+716
+716
+1861
+1753
+1753
+1753
+107
+53
+2105
+2105
+2105
+645
+1707
+301
+36
+1812
+1785
+1785
+1785
+190
+112
+901
+2622
+2622
+2622
+0
+580
+4022
+1259
+282
+1269
+1269
+1269
+2990
+2990
+2990
+99
+2800
+64
+4621
+4621
+4621
+154
+0
+1385
+85
+240
+691
+0
+24
+1965
+191
+105
+49
+2
+273
+381
+3669
+3669
+3669
+1771
+282
+478
+708
+51
+290
+671
+122
+122
+122
+3453
+3453
+3453
+1045
+62
+4394
+4394
+4394
+2201
+310
+948
+2271
+658
+1516
+2852
+1714
+2130
+2160
+56
+60
+2447
+2447
+2447
+232
+373
+2240
+2240
+2240
+64
+3
+1119
+34
+2224
+0
+5
+1390
+1390
+1390
+3708
+3708
+3708
+345
+609
+23
+255
+352
+188
+1280
+1203
+168
+58
+703
+189
+31
+532
+1087
+627
+21
+24
+903
+1314
+33
+991
+991
+991
+561
+271
+2245
+1228
+4
+4905
+4905
+4905
+155
+203
+2821
+32
+183
+32
+1042
+1780
+7
+1597
+279
+86
+43
+4
+2084
+2084
+2084
+20
+3630
+3630
+3630
+1065
+1414
+1414
+1414
+4667
+4667
+4667
+21
+3598
+3598
+3598
+164
+1102
+546
+27
+25
+233
+910
+0
+808
+808
+808
+1800
+59
+97
+41
+10
+23
+0
+1493
+2525
+2525
+2525
+121
+6
+29
+706
+41
+143
+98
+1564
+674
+674
+674
+1119
+82
+3417
+3417
+3417
+24
+429
+2042
+1651
+3287
+3287
+3287
+27
+30
+25
+5
+0
+373
+381
+103
+24
+231
+3419
+3419
+3419
+475
+31
+60
+60
+60
+502
+1374
+477
+21
+4
+4
+3
+881
+674
+1017
+1017
+1017
+2185
+2185
+2185
+0
+30
+1053
+1053
+1053
+0
+0
+2273
+2273
+2273
+1007
+32
+400
+26
+441
+22
+61
+171
+39
+1086
+58
+2580
+2580
+2580
+4193
+4193
+4193
+43
+111
+1755
+155
+380
+1
+3978
+27
+2851
+31
+458
+1
+23
+1120
+35
+40
+3
+3491
+4734
+4734
+4734
+4750
+4750
+4750
+93
+1
+29
+72
+4012
+4012
+4012
+4448
+4448
+4448
+324
+855
+1683
+1683
+1683
+3013
+3013
+3013
+0
+1381
+10
+1393
+1513
+1513
+1513
+0
+519
+36
+692
+36
+26
+243
+174
+307
+2336
+2336
+2336
+132
+1540
+91
+229
+20
+1
+635
+4927
+4927
+4927
+4029
+4029
+4029
+803
+67
+1367
+55
+44
+206
+47
+4444
+4444
+4444
+9
+74
+134
+1071
+1071
+1071
+1443
+1443
+1443
+714
+757
+124
+282
+1258
+64
+46
+96
+365
+92
+4083
+79
+398
+2258
+2258
+2258
+30
+2858
+86
+40
+3196
+1054
+46
+1
+187
+2111
+173
+763
+59
+1026
+774
+89
+28
+3075
+3075
+3075
+753
+23
+0
+1358
+0
+3655
+3655
+3655
+89
+21
+56
+1993
+5
+14
+700
+700
+700
+2920
+2981
+1929
+1538
+5
+458
+278
+79
+33
+1017
+0
+737
+2
+43
+20
+0
+860
+39
+28
+330
+25
+1158
+173
+318
+0
+260
+71
+45
+16
+1358
+420
+1086
+122
+482
+0
+1561
+110
+3687
+3687
+3687
+2988
+1060
+32
+12
+4
+381
+59
+4287
+4287
+4287
+65
+2355
+1171
+1171
+1171
+67
+68
+87
+1012
+524
+33
+0
+1998
+1998
+1998
+823
+823
+823
+28
+21
+1086
+1086
+1086
+1
+3459
+3459
+3459
+3
+883
+4
+198
+2282
+2282
+2282
+478
+651
+2638
+28
+4010
+54
+53
+41
+336
+2251
+2907
+2907
+2907
+731
+2171
+30
+21
+3393
+1
+734
+1509
+3042
+3042
+3042
+27
+2362
+2362
+2362
+39
+26
+91
+26
+117
+656
+2284
+1
+0
+1
+2341
+0
+239
+4008
+4008
+4008
+4539
+4539
+4539
+196
+69
+24
+34
+90
+1808
+2530
+2530
+2530
+389
+377
+22
+39
+0
+1564
+1564
+1564
+22
+3745
+3745
+3745
+2061
+375
+28
+28
+796
+796
+796
+67
+2612
+87
+38
+63
+816
+10
+77
+63
+346
+68
+4032
+4032
+4032
+0
+653
+0
+41
+2243
+2243
+2243
+4365
+4365
+4365
+1
+177
+21
+408
+32
+4707
+134
+1
+5
+2564
+0
+89
+2313
+4065
+4065
+4065
+508
+508
+508
+1542
+208
+249
+1901
+103
+544
+26
+1926
+197
+1558
+1558
+1558
+26
+3740
+3740
+3740
+49
+274
+1831
+54
+388
+100
+1558
+3037
+3037
+3037
+102
+27
+1612
+3382
+1
+436
+1913
+4690
+4690
+4690
+1242
+0
+170
+4292
+4292
+4292
+37
+1793
+1793
+1793
+967
+967
+967
+1
+1
+4719
+4719
+4719
+2340
+2340
+2340
+553
+1851
+1851
+1851
+1143
+113
+71
+65
+143
+50
+0
+2392
+1298
+2
+88
+2524
+2524
+2524
+1558
+1558
+1558
+32
+120
+0
+74
+479
+705
+4094
+21
+2217
+1820
+3
+143
+3410
+3410
+3410
+2165
+1271
+1271
+1271
+44
+1
+77
+0
+45
+21
+1411
+20
+595
+97
+3
+919
+3895
+3895
+3895
+32
+587
+30
+140
+521
+521
+521
+199
+68
+26
+247
+4441
+4441
+4441
+21
+45
+2363
+2363
+2363
+1
+33
+25
+2625
+1581
+1581
+1581
+4761
+4761
+4761
+434
+4
+3101
+44
+3
+20
+3216
+3216
+3216
+118
+173
+751
+4537
+4537
+4537
+0
+31
+2362
+2362
+2362
+1423
+469
+49
+33
+222
+1176
+1
+300
+4933
+4933
+4933
+1139
+2409
+2409
+2409
+554
+45
+1144
+25
+35
+73
+120
+1988
+105
+1929
+0
+4
+208
+39
+23
+473
+2901
+2901
+2901
+1644
+1644
+1644
+2329
+2329
+2329
+46
+1642
+74
+34
+2
+537
+69
+2770
+17
+45
+601
+601
+601
+1
+641
+0
+813
+2004
+35
+105
+26
+77
+1534
+9
+922
+27
+3
+330
+0
+609
+63
+810
+17
+0
+1146
+344
+1
+365
+365
+365
+25
+685
+49
+108
+1128
+1128
+1128
+21
+3154
+3154
+3154
+792
+354
+749
+1165
+1165
+1165
+1195
+1613
+1613
+1613
+1718
+1718
+1718
+118
+22
+804
+1375
+111
+1145
+615
+6
+334
+1490
+76
+71
+521
+199
+1297
+222
+323
+507
+2
+217
+431
+38
+22
+1
+337
+4184
+4184
+4184
+371
+891
+4339
+4339
+4339
+888
+1206
+4408
+4408
+4408
+1374
+75
+2301
+1
+1726
+0
+1
+62
+1622
+392
+21
+31
+2776
+2279
+2279
+2279
+454
+90
+1
+38
+35
+3537
+3537
+3537
+454
+377
+375
+22
+1671
+1671
+1671
+2204
+2204
+2204
+37
+129
+47
+43
+2012
+44
+225
+889
+920
+38
+148
+3830
+3830
+3830
+829
+2538
+2538
+2538
+585
+611
+117
+150
+396
+1827
+1
+1336
+189
+708
+359
+1980
+70
+5
+1676
+725
+150
+150
+150
+95
+60
+213
+118
+103
+133
+965
+32
+2
+2308
+2308
+2308
+1204
+146
+4767
+21
+2156
+2156
+2156
+22
+391
+391
+391
+264
+153
+24
+50
+34
+365
+2666
+63
+4440
+1131
+1155
+1155
+1155
+29
+3500
+3500
+3500
+156
+1702
+930
+365
+124
+0
+508
+4585
+4585
+4585
+87
+84
+38
+609
+609
+609
+102
+3495
+3495
+3495
+1654
+146
+3570
+3570
+3570
+288
+1
+159
+2386
+598
+93
+23
+4913
+4913
+4913
+36
+72
+651
+1286
+2158
+2158
+2158
+71
+456
+1238
+728
+4265
+0
+2107
+1760
+1760
+1760
+22
+1284
+25
+204
+4435
+4435
+4435
+941
+424
+1395
+3126
+3126
+3126
+2688
+547
+83
+8
+146
+4390
+4390
+4390
+499
+510
+1
+2130
+51
+148
+0
+25
+171
+701
+3773
+3773
+3773
+206
+3611
+3611
+3611
+28
+1083
+5
+560
+529
+114
+3156
+115
+20
+4597
+4597
+4597
+1515
+145
+2
+712
+32
+181
+165
+695
+127
+2113
+108
+52
+775
+775
+775
+0
+28
+30
+117
+117
+117
+174
+32
+1658
+1658
+1658
+2721
+211
+255
+255
+255
+173
+63
+112
+108
+67
+2646
+69
+1022
+1422
+1422
+1422
+20
+2893
+2893
+2893
+8
+15
+3255
+3255
+3255
+778
+231
+25
+974
+1368
+217
+637
+30
+141
+2169
+117
+1
+48
+63
+708
+688
+2015
+2015
+2015
+158
+158
+158
+3284
+3284
+3284
+0
+882
+37
+2
+1444
+4343
+4343
+4343
+3084
+3084
+3084
+325
+27
+1416
+1416
+1416
+569
+1826
+1826
+1826
+927
+1285
+38
+44
+28
+190
+3197
+3197
+3197
+1471
+83
+1748
+1748
+1748
+1615
+1615
+1615
+60
+2799
+2799
+2799
+4971
+4971
+4971
+282
+134
+444
+32
+616
+427
+209
+1063
+3891
+816
+139
+1115
+932
+2152
+815
+407
+407
+407
+313
+103
+1536
+3278
+47
+1345
+512
+3204
+3204
+3204
+20
+2218
+4480
+4480
+4480
+1753
+1486
+316
+16
+1826
+67
+4002
+4002
+4002
+1764
+1764
+1764
+46
+2088
+0
+3999
+3999
+3999
+2880
+2880
+2880
+4980
+4980
+4980
+1657
+1657
+1657
+169
+2039
+2039
+2039
+237
+5
+42
+1002
+1636
+1636
+1636
+1291
+26
+10
+4502
+4502
+4502
+198
+237
+1
+1000
+187
+36
+144
+955
+79
+2051
+233
+2269
+2269
+2269
+1713
+1713
+1713
+2908
+911
+911
+911
+130
+89
+666
+22
+1969
+1969
+1969
+3234
+3234
+3234
+905
+676
+23
+11
+985
+1448
+180
+180
+180
+165
+330
+126
+6
+671
+2855
+2855
+2855
+1826
+26
+1
+322
+3252
+3252
+3252
+589
+78
+721
+1732
+1732
+1732
+749
+21
+1102
+118
+530
+2096
+2724
+2724
+2724
+1077
+110
+45
+48
+74
+30
+101
+343
+2515
+2515
+2515
+1585
+1461
+551
+1047
+354
+1959
+223
+337
+4371
+4371
+4371
+0
+1488
+254
+950
+950
+950
+576
+100
+578
+578
+578
+3650
+3917
+3917
+3917
+2466
+926
+303
+2191
+925
+1206
+1206
+1206
+0
+315
+1826
+1826
+1826
+3
+223
+31
+147
+661
+661
+661
+1081
+704
+87
+717
+9
+108
+993
+166
+27
+83
+174
+263
+28
+708
+708
+708
+1239
+2396
+2396
+2396
+998
+307
+1814
+2662
+2662
+2662
+4294
+4294
+4294
+4702
+4702
+4702
+31
+133
+54
+2
+80
+22
+1967
+4562
+4562
+4562
+158
+2467
+97
+480
+705
+1290
+1511
+3403
+1117
+1117
+1117
+1872
+283
+178
+738
+738
+738
+1431
+1753
+66
+210
+3423
+3423
+3423
+33
+473
+62
+1078
+1085
+56
+4312
+4312
+4312
+41
+20
+622
+2160
+920
+56
+118
+1
+34
+45
+20
+398
+22
+730
+481
+481
+481
+1142
+1551
+1551
+1551
+35
+3590
+3590
+3590
+357
+2973
+2973
+2973
+24
+531
+365
+365
+365
+31
+1119
+744
+2593
+2593
+2593
+90
+0
+2121
+2121
+2121
+367
+263
+4998
+4998
+4998
+52
+1127
+1127
+1127
+77
+54
+2965
+2965
+2965
+1359
+1365
+553
+91
+114
+62
+45
+1211
+1
+2599
+2599
+2599
+2218
+2218
+2218
+198
+33
+194
+1014
+1
+840
+1498
+1498
+1498
+1494
+1494
+1494
+1
+2454
+2454
+2454
+619
+393
+206
+189
+4658
+1036
+238
+439
+34
+96
+1080
+2020
+2128
+665
+1448
+1
+369
+1844
+177
+2787
+2787
+2787
+36
+827
+1302
+1435
+0
+4
+1785
+725
+607
+8
+32
+2605
+2605
+2605
+365
+1
+37
+263
+0
+24
+4658
+4658
+4658
+2187
+130
+136
+160
+0
+2
+1062
+750
+158
+2515
+1
+30
+1243
+104
+427
+207
+3280
+3280
+3280
+465
+28
+141
+161
+4705
+4705
+4705
+268
+41
+65
+65
+65
+326
+3729
+3729
+3729
+32
+1897
+1897
+1897
+1930
+94
+927
+90
+339
+254
+270
+270
+270
+11
+1333
+1333
+1333
+301
+1085
+730
+84
+1855
+20
+71
+1062
+21
+21
+3271
+3271
+3271
+1859
+245
+61
+1507
+1507
+1507
+368
+2203
+1389
+1389
+1389
+437
+51
+147
+1
+2565
+2524
+1239
+22
+290
+0
+4363
+4363
+4363
+1947
+1947
+1947
+36
+11
+3
+516
+459
+4785
+4785
+4785
+1
+303
+2470
+2470
+2470
+728
+34
+20
+41
+161
+72
+1517
+1438
+1690
+1443
+3132
+3132
+3132
+123
+51
+522
+1
+29
+23
+375
+365
+1257
+1257
+1257
+72
+1760
+1760
+1760
+1366
+968
+1
+1
+4404
+4404
+4404
+2958
+2958
+2958
+2301
+29
+261
+169
+31
+1889
+0
+328
+123
+1898
+1898
+1898
+1475
+42
+31
+737
+101
+0
+596
+596
+596
+39
+24
+231
+26
+2251
+2251
+2251
+924
+599
+24
+2981
+2981
+2981
+1379
+1379
+1379
+1060
+1525
+755
+42
+2154
+1620
+128
+2105
+1075
+193
+738
+1240
+27
+776
+3134
+3134
+3134
+4830
+4830
+4830
+241
+35
+987
+0
+1439
+1439
+1439
+53
+1728
+3718
+3718
+3718
+6
+182
+220
+3910
+3910
+3910
+1
+25
+1209
+79
+408
+110
+28
+413
+4851
+4851
+4851
+0
+411
+36
+316
+65
+2503
+2503
+2503
+193
+32
+176
+4816
+4816
+4816
+264
+223
+29
+1108
+408
+53
+162
+100
+788
+788
+788
+32
+75
+25
+29
+41
+4155
+4155
+4155
+2777
+2777
+2777
+425
+401
+1565
+445
+35
+1424
+753
+3501
+31
+2589
+1
+3271
+1112
+1112
+1112
+2129
+0
+4411
+4411
+4411
+1168
+1168
+1168
+1198
+1752
+1752
+1752
+0
+66
+33
+1501
+430
+2719
+2719
+2719
+0
+1111
+711
+4
+678
+0
+141
+1198
+1198
+1198
+0
+282
+301
+10
+3664
+3664
+3664
+23
+4
+20
+410
+3358
+3358
+3358
+37
+4637
+4637
+4637
+3386
+3386
+3386
+33
+2271
+2271
+2271
+778
+48
+1536
+580
+339
+2
+0
+3599
+2566
+2566
+2566
+1780
+1780
+1780
+645
+45
+1456
+1456
+1456
+10
+41
+33
+4
+741
+288
+25
+113
+2131
+0
+4
+21
+2172
+372
+21
+1720
+1720
+1720
+63
+63
+63
+81
+896
+896
+896
+22
+3
+470
+148
+46
+536
+3024
+1
+2954
+2954
+2954
+356
+1968
+67
+2022
+2022
+2022
+2196
+2203
+2203
+2203
+2798
+3
+20
+37
+31
+32
+230
+21
+73
+1999
+1999
+1999
+50
+0
+488
+1759
+1756
+4598
+4598
+4598
+763
+763
+763
+4260
+4260
+4260
+393
+176
+2940
+1208
+1208
+1208
+0
+302
+2559
+2351
+2351
+2351
+0
+395
+886
+381
+2924
+0
+27
+602
+260
+151
+1
+767
+767
+767
+2996
+2996
+2996
+37
+383
+383
+383
+351
+696
+190
+0
+1
+1091
+2986
+2122
+82
+2054
+335
+750
+0
+182
+776
+2633
+2582
+2582
+2582
+71
+755
+2
+1
+50
+378
+122
+2571
+1292
+1292
+1292
+1469
+39
+4873
+4873
+4873
+0
+31
+122
+120
+336
+61
+74
+31
+1487
+1159
+1159
+1159
+776
+1848
+16
+4571
+4571
+4571
+54
+225
+225
+225
+1626
+0
+4482
+4482
+4482
+41
+3
+0
+45
+45
+45
+24
+0
+391
+4871
+4871
+4871
+1286
+55
+123
+5
+46
+200
+55
+130
+1185
+51
+193
+234
+43
+43
+43
+40
+133
+2571
+32
+48
+328
+29
+3979
+3979
+3979
+487
+2680
+2680
+2680
+0
+4263
+4263
+4263
+1620
+1620
+1620
+28
+1
+31
+2111
+216
+816
+4
+229
+28
+3103
+3103
+3103
+79
+51
+120
+782
+107
+24
+435
+435
+435
+52
+9
+876
+876
+876
+503
+3043
+3043
+3043
+30
+326
+4488
+4488
+4488
+84
+35
+1
+846
+846
+846
+469
+469
+469
+0
+538
+25
+3171
+3171
+3171
+124
+51
+1
+197
+36
+53
+4747
+4747
+4747
+3010
+4526
+4526
+4526
+1794
+29
+497
+22
+914
+139
+404
+2937
+1078
+4473
+4473
+4473
+0
+2928
+2967
+2967
+2967
+50
+0
+208
+572
+572
+572
+2932
+2932
+2932
+171
+0
+1
+844
+844
+844
+2
+1
+1880
+26
+2770
+2770
+2770
+33
+42
+28
+2923
+4146
+4146
+4146
+1153
+958
+1973
+141
+29
+1570
+14
+154
+132
+3779
+3779
+3779
+176
+3823
+3823
+3823
+1470
+474
+20
+0
+1
+63
+1082
+59
+1
+32
+215
+161
+1687
+1687
+1687
+32
+0
+63
+100
+81
+20
+32
+1653
+1653
+1653
+4935
+4935
+4935
+22
+1963
+1284
+20
+43
+1954
+731
+80
+178
+1027
+783
+783
+783
+4937
+4937
+4937
+2746
+2746
+2746
+415
+153
+158
+0
+1362
+1127
+24
+21
+27
+300
+2529
+2529
+2529
+3095
+3095
+3095
+66
+2725
+2725
+2725
+30
+132
+178
+2337
+2337
+2337
+1663
+2655
+2655
+2655
+47
+816
+1017
+1043
+1576
+1576
+1576
+4719
+4719
+4719
+3041
+3041
+3041
+2281
+665
+665
+665
+722
+151
+151
+151
+795
+1648
+1648
+1648
+2762
+36
+28
+1
+114
+1202
+1202
+1202
+168
+1218
+186
+306
+2016
+2459
+1131
+68
+129
+75
+29
+0
+138
+1085
+1259
+1259
+1259
+4162
+4162
+4162
+720
+0
+26
+2522
+2522
+2522
+1139
+23
+4
+142
+150
+23
+608
+608
+608
+32
+1987
+8
+3498
+3498
+3498
+1836
+22
+29
+365
+365
+365
+34
+775
+1862
+487
+61
+3833
+3833
+3833
+708
+708
+708
+1251
+1251
+1251
+102
+52
+1670
+4379
+4379
+4379
+0
+2020
+2020
+2020
+3002
+1213
+2
+6
+546
+2170
+2170
+2170
+325
+27
+4915
+4915
+4915
+1577
+61
+3294
+2012
+87
+58
+20
+4459
+4459
+4459
+4145
+20
+0
+3834
+3834
+3834
+96
+55
+2175
+2175
+2175
+24
+365
+107
+3388
+3388
+3388
+608
+60
+4080
+4080
+4080
+2053
+31
+1640
+1568
+1568
+1568
+171
+4106
+4106
+4106
+2579
+1831
+1831
+1831
+2181
+35
+2152
+1518
+1518
+1518
+147
+209
+0
+1296
+1296
+1296
+117
+0
+214
+15
+3149
+3149
+3149
+106
+1549
+1549
+1549
+61
+495
+112
+471
+3429
+3429
+3429
+0
+181
+36
+89
+3456
+365
+26
+830
+151
+4170
+4170
+4170
+140
+860
+1517
+1517
+1517
+106
+471
+0
+223
+550
+3989
+3989
+3989
+5
+0
+2449
+2449
+2449
+2214
+307
+0
+2788
+2788
+2788
+0
+91
+1
+308
+3839
+3839
+3839
+4522
+4522
+4522
+3818
+3818
+3818
+3411
+91
+0
+3951
+3951
+3951
+60
+1550
+1550
+1550
+2015
+3006
+3006
+3006
+12
+1
+71
+212
+155
+21
+72
+24
+201
+2137
+2137
+2137
+34
+4484
+4484
+4484
+462
+64
+28
+0
+56
+2437
+2437
+2437
+1522
+1522
+1522
+116
+2083
+2083
+2083
+390
+1879
+1879
+1879
+2649
+2649
+2649
+1633
+1292
+32
+4610
+4610
+4610
+375
+164
+2076
+2076
+2076
+1866
+2978
+4
+4844
+4844
+4844
+4229
+4229
+4229
+45
+28
+156
+546
+1336
+1201
+3879
+3879
+3879
+857
+2090
+3147
+46
+190
+3154
+3154
+3154
+3511
+3511
+3511
+34
+1314
+161
+2149
+2149
+2149
+162
+4985
+4985
+4985
+4462
+4462
+4462
+4769
+4769
+4769
+627
+233
+175
+2647
+4225
+4225
+4225
+3653
+1834
+471
+1241
+1241
+1241
+899
+35
+150
+705
+1652
+1306
+0
+1297
+1297
+1297
+2071
+499
+1
+67
+1246
+586
+6
+1
+50
+3857
+3857
+3857
+29
+0
+374
+1639
+156
+3549
+3549
+3549
+9
+175
+42
+563
+0
+1
+226
+2296
+111
+23
+36
+479
+3403
+3403
+3403
+3167
+206
+1874
+87
+20
+64
+2685
+1654
+1654
+1654
+1334
+90
+2225
+242
+242
+242
+31
+230
+59
+1
+883
+1377
+818
+448
+4184
+4184
+4184
+362
+913
+106
+950
+950
+950
+562
+38
+144
+2807
+37
+102
+4110
+4110
+4110
+2422
+2422
+2422
+4277
+4277
+4277
+99
+377
+0
+169
+102
+501
+165
+0
+611
+1115
+39
+4785
+4785
+4785
+1140
+3539
+3539
+3539
+645
+841
+841
+841
+378
+3897
+3897
+3897
+2699
+1
+62
+234
+1950
+1428
+1428
+1428
+211
+211
+1825
+0
+1
+26
+31
+1349
+1349
+1349
+925
+75
+185
+32
+56
+368
+171
+2
+389
+485
+31
+1557
+1079
+4813
+4813
+4813
+155
+498
+113
+3898
+3898
+3898
+1293
+42
+4972
+4972
+4972
+236
+42
+1782
+1782
+1782
+1667
+3010
+3010
+3010
+26
+2446
+2446
+2446
+538
+3913
+3913
+3913
+367
+248
+433
+2257
+519
+461
+2263
+2263
+2263
+130
+40
+54
+166
+46
+231
+0
+3937
+3937
+3937
+1575
+4460
+4460
+4460
+0
+692
+27
+842
+842
+842
+163
+618
+0
+186
+230
+2714
+838
+1134
+113
+504
+20
+598
+284
+7
+176
+66
+3873
+3873
+3873
+0
+368
+368
+368
+187
+203
+75
+3183
+3183
+3183
+93
+326
+1331
+186
+2577
+2577
+2577
+29
+1050
+3593
+3593
+3593
+1076
+573
+2239
+31
+1536
+1536
+1536
+41
+0
+4378
+4378
+4378
+3238
+3238
+3238
+77
+0
+584
+847
+4890
+4890
+4890
+205
+545
+978
+2504
+36
+296
+190
+1566
+33
+701
+701
+701
+961
+2218
+4266
+4266
+4266
+0
+23
+36
+2056
+2056
+2056
+5
+331
+571
+30
+166
+32
+4628
+4628
+4628
+641
+681
+40
+65
+2463
+276
+2191
+2191
+2191
+71
+90
+2124
+2124
+2124
+266
+32
+28
+4067
+4067
+4067
+39
+649
+4228
+85
+3345
+3345
+3345
+73
+3999
+3999
+3999
+25
+844
+2502
+2502
+2502
+3
+219
+323
+25
+917
+2508
+2508
+2508
+1514
+1514
+1514
+922
+62
+2764
+2764
+2764
+48
+29
+2072
+184
+1921
+741
+741
+741
+25
+31
+40
+306
+65
+1513
+1400
+1400
+1400
+355
+3623
+3623
+3623
+4703
+4703
+4703
+1429
+1440
+42
+3721
+3721
+3721
+69
+705
+2718
+265
+29
+21
+21
+1727
+192
+2820
+98
+19
+269
+2
+5
+2195
+2195
+2195
+37
+25
+2050
+1718
+1718
+1718
+23
+21
+3155
+3155
+3155
+190
+1
+99
+1213
+1213
+1213
+0
+114
+1693
+1693
+1693
+168
+43
+0
+368
+1457
+21
+1489
+1489
+1489
+900
+1142
+0
+616
+27
+2113
+2113
+2113
+29
+47
+875
+305
+27
+252
+3722
+3722
+3722
+1636
+3558
+3558
+3558
+57
+2082
+789
+344
+1246
+4286
+247
+20
+66
+10
+197
+666
+111
+59
+2179
+2179
+2179
+326
+3732
+3732
+3732
+59
+20
+818
+1941
+30
+317
+142
+52
+42
+895
+35
+561
+42
+137
+640
+1276
+105
+4943
+4943
+4943
+297
+65
+1
+628
+161
+3712
+3712
+3712
+1
+653
+966
+80
+251
+21
+2490
+43
+276
+80
+262
+1262
+1383
+23
+692
+1271
+80
+115
+136
+1
+1044
+151
+79
+1735
+1361
+1361
+1361
+90
+3191
+152
+48
+29
+61
+1389
+240
+2468
+2433
+88
+696
+696
+696
+1755
+1755
+1755
+906
+906
+906
+293
+532
+526
+240
+1
+845
+845
+845
+2500
+1766
+85
+87
+671
+245
+914
+689
+37
+86
+332
+481
+735
+112
+2
+0
+1
+4646
+4646
+4646
+4298
+4298
+4298
+179
+181
+1367
+365
+164
+2529
+9
+946
+216
+30
+23
+4564
+4564
+4564
+4657
+4657
+4657
+293
+284
+233
+94
+1418
+1418
+1418
+258
+1002
+139
+398
+608
+56
+2504
+2504
+2504
+204
+87
+274
+49
+542
+62
+27
+1
+3664
+2716
+2716
+2716
+25
+706
+1370
+2590
+1
+396
+31
+1070
+1070
+1070
+2312
+2312
+2312
+92
+0
+673
+30
+38
+2499
+2499
+2499
+1412
+427
+2129
+3284
+3284
+3284
+162
+305
+3258
+3258
+3258
+703
+645
+3615
+3615
+3615
+341
+276
+1366
+93
+697
+697
+697
+54
+355
+37
+57
+4015
+4015
+4015
+1100
+1100
+1100
+149
+1762
+1762
+1762
+1262
+65
+20
+4897
+4897
+4897
+753
+0
+679
+63
+3279
+32
+4856
+4856
+4856
+1
+28
+4716
+4716
+4716
+65
+750
+2
+29
+23
+4790
+4790
+4790
+127
+894
+260
+2164
+3
+1175
+236
+583
+1098
+1
+42
+335
+4629
+4629
+4629
+2
+1799
+399
+121
+2266
+441
+2122
+72
+172
+1472
+0
+3059
+3059
+3059
+1403
+1403
+1403
+44
+4425
+4425
+4425
+339
+339
+339
+0
+3364
+3364
+3364
+1114
+1753
+1753
+1753
+755
+30
+1136
+399
+82
+1102
+617
+61
+3422
+173
+105
+3778
+3778
+3778
+712
+318
+3635
+30
+1419
+49
+65
+65
+0
+324
+787
+18
+1
+2718
+2718
+2718
+4
+1391
+34
+33
+3826
+3826
+3826
+73
+0
+6
+59
+1005
+165
+4732
+4732
+4732
+56
+1823
+334
+4759
+4759
+4759
+732
+55
+182
+37
+361
+26
+3965
+3965
+3965
+365
+382
+1531
+115
+4758
+4758
+4758
+1417
+110
+1110
+121
+219
+4784
+4784
+4784
+0
+4034
+3942
+3942
+3942
+46
+2595
+2197
+3665
+3665
+3665
+30
+76
+2859
+2859
+2859
+4380
+4380
+4380
+1850
+731
+2507
+800
+0
+34
+1327
+24
+325
+57
+3
+24
+70
+30
+1339
+4
+64
+324
+324
+324
+4830
+4830
+4830
+681
+133
+2202
+2202
+2202
+203
+2
+2239
+381
+1108
+1108
+1108
+3156
+3156
+3156
+3
+307
+40
+3315
+30
+2918
+22
+3716
+3716
+3716
+2528
+3284
+3284
+3284
+254
+56
+1
+365
+3164
+3164
+3164
+53
+0
+0
+2531
+634
+300
+4610
+4610
+4610
+3121
+4397
+4397
+4397
+1388
+1388
+1388
+31
+371
+70
+0
+3656
+3656
+3656
+5
+2137
+2389
+2389
+2389
+26
+6
+4737
+4737
+4737
+1513
+1195
+22
+233
+328
+182
+180
+100
+1897
+1897
+1897
+26
+171
+2602
+1815
+1815
+1815
+11
+88
+178
+0
+27
+4741
+4741
+4741
+21
+121
+4734
+4734
+4734
+505
+505
+505
+31
+703
+4083
+4083
+4083
+2428
+1867
+1992
+3168
+3168
+3168
+188
+509
+509
+509
+2823
+1320
+3144
+152
+3082
+3710
+3710
+3710
+2998
+50
+50
+50
+1559
+689
+1372
+1372
+1372
+2091
+1010
+1010
+1010
+2267
+1835
+3246
+3246
+3246
+2900
+2900
+2900
+21
+1
+4476
+4476
+4476
+337
+201
+29
+4057
+4057
+4057
+42
+33
+3318
+3318
+3318
+1047
+84
+64
+24
+4042
+4042
+4042
+20
+2367
+33
+3555
+3555
+3555
+0
+105
+1684
+1
+1379
+25
+29
+92
+455
+455
+455
+1541
+1541
+1541
+1995
+2290
+447
+33
+101
+1455
+1455
+1455
+31
+2507
+2045
+2045
+2045
+7
+20
+31
+21
+0
+387
+374
+100
+32
+3349
+3349
+3349
+37
+1267
+373
+1
+200
+68
+339
+40
+532
+532
+532
+1492
+1886
+5
+1400
+7
+468
+951
+472
+1193
+1930
+1930
+1930
+29
+4211
+4211
+4211
+119
+1
+0
+94
+371
+28
+183
+21
+1502
+1502
+1502
+46
+491
+491
+491
+1416
+1416
+1416
+3359
+3359
+3359
+2511
+4
+773
+0
+3
+100
+0
+21
+0
+45
+1496
+1496
+1496
+116
+4727
+4727
+4727
+394
+1993
+138
+2229
+2229
+2229
+1476
+3652
+3652
+3652
+21
+351
+3781
+3781
+3781
+28
+2113
+1510
+2930
+2930
+2930
+22
+22
+3254
+3254
+3254
+203
+4056
+3024
+1159
+37
+58
+46
+1779
+355
+1091
+40
+21
+0
+880
+2882
+2882
+2882
+1144
+3614
+3614
+3614
+0
+399
+20
+30
+92
+1673
+256
+2735
+2735
+2735
+4
+40
+2964
+2964
+2964
+45
+436
+3090
+3090
+3090
+403
+983
+1549
+1058
+1712
+22
+1539
+376
+357
+24
+9
+3066
+3066
+3066
+2897
+2910
+34
+8
+4
+549
+3589
+3589
+3589
+717
+191
+60
+24
+0
+33
+25
+4825
+4825
+4825
+1860
+52
+35
+4401
+4401
+4401
+3221
+83
+1893
+39
+603
+53
+991
+2615
+197
+197
+197
+7
+75
+2825
+31
+775
+775
+775
+2854
+2854
+2854
+714
+3093
+3093
+3093
+80
+745
+5
+1815
+69
+618
+1840
+2279
+2279
+2279
+847
+426
+390
+753
+178
+284
+284
+284
+248
+1
+8
+1537
+594
+1537
+1537
+1537
+74
+0
+2352
+2352
+2352
+3487
+3487
+3487
+2989
+2989
+2989
+1
+26
+4110
+4110
+4110
+1824
+2318
+2318
+2318
+3669
+139
+391
+704
+1
+49
+1
+37
+21
+2930
+2863
+2863
+2863
+785
+785
+785
+924
+3519
+40
+27
+1822
+0
+25
+0
+1108
+4700
+4700
+4700
+507
+1831
+1
+4432
+4432
+4432
+2566
+0
+1810
+212
+82
+22
+28
+685
+33
+143
+638
+638
+638
+203
+1166
+1166
+1166
+37
+22
+35
+36
+798
+798
+798
+330
+283
+42
+284
+1994
+73
+2941
+2638
+2638
+2638
+35
+1311
+3
+274
+1059
+1059
+1059
+757
+2304
+4628
+4628
+4628
+5
+3258
+3258
+3258
+799
+2373
+11
+635
+2634
+2634
+2634
+2537
+2654
+28
+4450
+2304
+0
+378
+2478
+2478
+2478
+35
+1380
+1090
+396
+396
+396
+428
+428
+428
+28
+34
+692
+692
+692
+3534
+3534
+3534
+1
+99
+58
+3
+1
+4608
+4608
+4608
+1
+506
+293
+3326
+882
+2188
+3033
+3033
+3033
+29
+5
+27
+514
+2690
+2690
+2690
+207
+130
+23
+67
+30
+1356
+1356
+1356
+3933
+3933
+3933
+3610
+3610
+3610
+430
+26
+1786
+2652
+2652
+2652
+62
+460
+760
+3787
+3787
+3787
+43
+2
+91
+3628
+3628
+3628
+3825
+3825
+3825
+1952
+45
+1740
+21
+2642
+21
+109
+1118
+1509
+1509
+1509
+30
+4
+20
+522
+295
+60
+131
+2263
+2263
+2263
+1801
+1801
+1801
+0
+111
+731
+731
+731
+0
+2133
+96
+20
+3970
+3970
+3970
+203
+4146
+4146
+4146
+518
+518
+518
+24
+3040
+3040
+3040
+2091
+1908
+795
+795
+795
+21
+1849
+51
+150
+230
+4
+36
+61
+1128
+472
+473
+473
+473
+35
+387
+34
+3426
+2111
+22
+697
+1241
+26
+1470
+1269
+849
+3350
+3350
+3350
+3058
+3058
+3058
+52
+9
+3363
+3363
+3363
+21
+3720
+3720
+3720
+65
+36
+2900
+2900
+2900
+986
+30
+0
+38
+748
+1747
+1126
+4
+4406
+4406
+4406
+4202
+86
+2688
+1529
+0
+33
+1591
+1591
+1591
+15
+1957
+3119
+30
+5
+4629
+4629
+4629
+34
+1490
+1490
+1490
+55
+1862
+1862
+1862
+96
+190
+1433
+416
+850
+3494
+3494
+3494
+830
+28
+169
+4658
+4658
+4658
+2577
+140
+652
+1586
+0
+370
+1365
+201
+1
+82
+3030
+61
+74
+380
+1080
+4217
+4217
+4217
+5
+1
+3748
+3748
+3748
+2255
+411
+508
+201
+3
+21
+198
+29
+2196
+2237
+24
+1376
+1421
+5
+1295
+3604
+3604
+3604
+149
+149
+149
+376
+1473
+1473
+1473
+2371
+215
+489
+184
+184
+184
+62
+1418
+1418
+1418
+23
+23
+820
+96
+574
+32
+3492
+3492
+3492
+1454
+2985
+2985
+2985
+119
+38
+1591
+2271
+2271
+2271
+10
+2232
+3009
+3009
+3009
+3785
+3785
+3785
+1399
+2856
+2856
+2856
+4201
+4201
+4201
+22
+545
+38
+69
+1904
+1904
+1904
+2818
+97
+25
+510
+1524
+122
+1931
+1931
+1931
+3444
+3444
+3444
+878
+803
+41
+146
+31
+3359
+3359
+3359
+3724
+3724
+3724
+2938
+2938
+2938
+50
+478
+13
+2
+286
+112
+2626
+2626
+2626
+766
+156
+42
+2895
+1052
+60
+3655
+3655
+3655
+181
+634
+2625
+3149
+1821
+24
+402
+219
+20
+44
+48
+57
+73
+468
+1194
+32
+5
+49
+4729
+46
+205
+3782
+1
+2
+302
+111
+3749
+28
+412
+1520
+36
+2892
+2892
+2892
+68
+1626
+2226
+1198
+0
+173
+216
+216
+216
+1965
+20
+1776
+757
+23
+4366
+4366
+4366
+95
+139
+1566
+188
+1375
+0
+2248
+2248
+2248
+4836
+4836
+4836
+1002
+32
+4533
+4533
+4533
+2207
+104
+0
+592
+458
+21
+1986
+1986
+1986
+256
+1954
+1954
+1954
+829
+115
+1532
+1532
+1532
+1
+214
+2976
+669
+4860
+4860
+4860
+1601
+1601
+1601
+29
+31
+216
+2227
+113
+4351
+4351
+4351
+1230
+3110
+397
+41
+3
+1
+110
+77
+1994
+1994
+1994
+4041
+1219
+588
+338
+22
+27
+2667
+2667
+2667
+2009
+2009
+2009
+31
+222
+91
+2
+3012
+4582
+4582
+4582
+0
+1736
+2442
+88
+505
+2718
+4497
+4497
+4497
+155
+3352
+3352
+3352
+10
+24
+4889
+4889
+4889
+520
+1856
+53
+2
+33
+2187
+2187
+2187
+1
+2965
+2965
+2965
+117
+30
+3991
+3991
+3991
+633
+40
+385
+1964
+57
+34
+3962
+2163
+2281
+3828
+3828
+3828
+157
+4493
+4493
+4493
+2782
+577
+70
+4448
+4448
+4448
+56
+3344
+3344
+3344
+3
+39
+149
+149
+149
+352
+759
+61
+89
+22
+1128
+1128
+1128
+35
+142
+2367
+2367
+2367
+159
+966
+2992
+2992
+2992
+3398
+3398
+3398
+372
+376
+21
+107
+3824
+3824
+3824
+4854
+4854
+4854
+1867
+339
+383
+755
+819
+81
+864
+75
+32
+258
+396
+3080
+3080
+3080
+45
+1243
+107
+3100
+3061
+3061
+3061
+1
+62
+61
+3236
+3236
+3236
+1955
+1955
+1955
+1336
+0
+0
+1292
+1292
+1292
+95
+1953
+30
+488
+4836
+4836
+4836
+153
+135
+839
+839
+839
+1284
+2916
+3056
+1555
+206
+1924
+1924
+1924
+2928
+3138
+3138
+3138
+2589
+2589
+2589
+59
+2659
+25
+0
+20
+106
+31
+31
+233
+4495
+4495
+4495
+835
+847
+1149
+381
+51
+27
+2619
+120
+836
+836
+836
+4878
+4878
+4878
+1585
+1585
+1585
+32
+1243
+90
+329
+44
+2166
+2166
+2166
+4033
+4033
+4033
+3051
+1
+34
+845
+285
+1
+2101
+0
+4137
+4137
+4137
+141
+52
+3824
+3824
+3824
+2450
+2
+69
+2619
+0
+36
+1530
+1201
+69
+1153
+4076
+4076
+4076
+1829
+1829
+1829
+132
+4701
+4701
+4701
+32
+99
+2327
+3074
+3074
+3074
+55
+2403
+2403
+2403
+27
+2156
+381
+3
+124
+1092
+3818
+3818
+3818
+4827
+4827
+4827
+625
+68
+29
+0
+2
+109
+1242
+1242
+1242
+187
+33
+225
+93
+35
+117
+2171
+18
+71
+49
+0
+3755
+1158
+137
+137
+137
+2402
+2402
+2402
+100
+1893
+2618
+2618
+2618
+309
+953
+1426
+1426
+1426
+3651
+3651
+3651
+458
+1
+161
+415
+3844
+3844
+3844
+2337
+3039
+3039
+3039
+1892
+2
+1417
+1417
+1417
+1770
+140
+53
+801
+2367
+2816
+2816
+2816
+2553
+4194
+4194
+4194
+723
+6
+25
+219
+1852
+103
+1822
+43
+365
+34
+1847
+34
+58
+4929
+4929
+4929
+731
+2540
+2540
+2540
+1611
+99
+2502
+2328
+1549
+1273
+1273
+1273
+6
+736
+4045
+4045
+4045
+1084
+24
+438
+0
+572
+4206
+4206
+4206
+1
+237
+2605
+2605
+2605
+3100
+1566
+1566
+1566
+1372
+1372
+1372
+31
+120
+176
+2680
+2680
+2680
+362
+214
+2787
+210
+1976
+1976
+1976
+77
+1803
+49
+25
+2012
+2012
+2012
+438
+438
+438
+1973
+361
+28
+366
+4032
+4032
+4032
+91
+4110
+4110
+4110
+63
+2410
+28
+9
+49
+194
+26
+95
+99
+982
+3277
+3277
+3277
+116
+923
+697
+1170
+54
+2537
+2537
+2537
+1267
+1204
+3565
+3565
+3565
+2498
+107
+42
+1708
+66
+28
+573
+997
+0
+1512
+1512
+1512
+4477
+4477
+4477
+46
+30
+81
+67
+186
+4
+31
+78
+4382
+2174
+366
+1933
+1034
+179
+6
+231
+1737
+1737
+1737
+1161
+156
+97
+4917
+4917
+4917
+4236
+4236
+4236
+0
+446
+27
+71
+55
+36
+825
+1
+823
+823
+823
+327
+327
+327
+81
+173
+0
+2740
+46
+46
+2719
+2719
+2719
+845
+26
+21
+1
+4276
+4276
+4276
+1282
+0
+2110
+3971
+63
+4614
+4614
+4614
+495
+3572
+2314
+1412
+79
+3128
+3128
+3128
+578
+2536
+2536
+2536
+4490
+86
+1872
+3543
+3543
+3543
+977
+977
+977
+303
+0
+2087
+2574
+2574
+2574
+907
+28
+589
+71
+32
+31
+3593
+3593
+3593
+84
+338
+153
+2408
+2408
+2408
+62
+814
+3170
+3170
+3170
+83
+22
+1288
+212
+1788
+47
+1
+2346
+2346
+2346
+4922
+4922
+4922
+2
+561
+50
+4086
+4086
+4086
+135
+22
+1085
+1085
+1085
+177
+80
+0
+23
+20
+2506
+2122
+2122
+2122
+367
+2837
+2837
+2837
+23
+985
+10
+1323
+1323
+1323
+2795
+1527
+4083
+4083
+4083
+72
+2
+31
+432
+1723
+534
+3075
+127
+2708
+2708
+2708
+365
+538
+2771
+2771
+2771
+119
+920
+4669
+4669
+4669
+861
+366
+173
+67
+159
+49
+2738
+124
+22
+123
+72
+27
+3428
+39
+57
+2769
+64
+956
+11
+63
+13
+588
+2415
+2415
+2415
+383
+1120
+3658
+3658
+3658
+661
+661
+661
+1984
+153
+29
+2163
+988
+37
+43
+0
+0
+980
+6
+27
+1985
+875
+2017
+2927
+2927
+2927
+2757
+613
+4718
+4718
+4718
+367
+17
+242
+200
+28
+1331
+216
+257
+257
+257
+29
+251
+2021
+2527
+2527
+2527
+1153
+29
+177
+75
+1185
+485
+2212
+389
+43
+36
+590
+1812
+1812
+1812
+1620
+59
+80
+3192
+3192
+3192
+21
+925
+245
+630
+32
+2961
+29
+2636
+1
+390
+935
+336
+25
+4567
+4567
+4567
+128
+95
+1
+2117
+4
+30
+574
+554
+2328
+2328
+2328
+97
+43
+106
+25
+1364
+573
+0
+622
+0
+2066
+4978
+4978
+4978
+2185
+2185
+2185
+151
+338
+0
+2375
+31
+1
+0
+250
+94
+4163
+4163
+4163
+282
+165
+3546
+3546
+3546
+3199
+229
+3774
+3774
+3774
+2001
+192
+40
+2534
+2534
+2534
+0
+109
+4812
+4812
+4812
+91
+1181
+1181
+1181
+125
+269
+4737
+4737
+4737
+2797
+2797
+2797
+315
+34
+0
+20
+66
+1
+334
+4991
+4991
+4991
+84
+202
+488
+28
+1009
+1009
+1009
+1626
+2283
+2283
+2283
+2450
+1168
+143
+38
+582
+160
+1936
+1936
+1936
+147
+31
+4560
+4560
+4560
+139
+26
+1
+75
+72
+2884
+2884
+2884
+732
+66
+163
+16
+5
+366
+249
+4203
+4203
+4203
+23
+3128
+3128
+3128
+0
+1008
+1008
+1008
+55
+560
+560
+560
+1346
+0
+1919
+26
+0
+26
+635
+658
+4
+44
+112
+112
+112
+0
+5
+221
+4683
+4683
+4683
+264
+264
+264
+0
+32
+148
+29
+835
+881
+1
+2434
+2434
+2434
+98
+176
+1382
+80
+48
+62
+42
+57
+47
+1511
+147
+235
+2891
+2891
+2891
+410
+3400
+81
+4984
+4984
+4984
+2534
+2534
+2534
+3598
+3598
+3598
+732
+732
+732
+54
+422
+21
+1855
+3197
+3197
+3197
+117
+2122
+2122
+2122
+1024
+41
+138
+2859
+2859
+2859
+0
+66
+0
+768
+768
+768
+1
+4794
+4794
+4794
+38
+2635
+226
+3958
+3958
+3958
+662
+71
+71
+71
+0
+2827
+2827
+2827
+96
+367
+2768
+2768
+2768
+277
+2196
+0
+1969
+60
+688
+2288
+23
+46
+4986
+4986
+4986
+1741
+2397
+2397
+2397
+604
+117
+47
+1
+3665
+2241
+72
+208
+1570
+1570
+1570
+145
+67
+23
+170
+2
+247
+35
+2574
+2852
+1639
+1639
+1639
+22
+1385
+2641
+20
+77
+72
+3506
+365
+0
+68
+77
+2743
+2743
+2743
+26
+4514
+4514
+4514
+2
+30
+3
+230
+3667
+1371
+1371
+1371
+3923
+3923
+3923
+128
+59
+59
+59
+4327
+4327
+4327
+86
+1678
+3
+2504
+1579
+1579
+1579
+0
+1033
+2398
+2398
+2398
+4238
+4238
+4238
+3307
+3480
+37
+1460
+116
+4
+2015
+2015
+2015
+2220
+2220
+2220
+232
+583
+667
+3689
+3689
+3689
+3
+4083
+4083
+4083
+394
+83
+310
+0
+168
+4419
+4419
+4419
+969
+969
+969
+528
+402
+1587
+4859
+4859
+4859
+572
+572
+572
+674
+3903
+3903
+3903
+0
+26
+2255
+68
+3
+34
+51
+3293
+3293
+3293
+1061
+2456
+2456
+2456
+176
+188
+1
+2130
+31
+30
+339
+368
+368
+368
+1
+166
+275
+255
+341
+751
+31
+657
+657
+657
+330
+841
+53
+1760
+1760
+1760
+210
+258
+1000
+3881
+3881
+3881
+41
+3974
+3974
+3974
+1827
+1547
+1547
+1547
+1499
+1499
+1499
+30
+318
+52
+41
+37
+37
+37
+21
+99
+677
+2534
+2156
+2156
+2156
+1742
+637
+1690
+1690
+1690
+2511
+1291
+3297
+3297
+3297
+131
+505
+452
+0
+3670
+3670
+3670
+1
+28
+3173
+3173
+3173
+25
+1366
+28
+103
+56
+63
+2495
+2495
+2495
+2255
+2255
+2255
+2872
+33
+1166
+68
+1
+1086
+69
+69
+69
+2609
+2609
+2609
+269
+20
+2770
+2770
+2770
+2
+1130
+1130
+1130
+1285
+1225
+527
+33
+2308
+45
+2164
+2164
+2164
+2369
+2369
+2369
+20
+642
+642
+642
+1127
+1590
+626
+3462
+3462
+3462
+1788
+78
+129
+0
+2089
+2089
+2089
+30
+26
+1030
+59
+3961
+568
+1
+1376
+171
+23
+9
+0
+96
+75
+264
+1348
+1348
+1348
+3235
+3235
+3235
+0
+2
+2840
+2840
+2840
+405
+3933
+1719
+3192
+22
+32
+664
+689
+159
+292
+55
+2855
+2855
+2855
+109
+2457
+2457
+2457
+2158
+812
+1
+600
+302
+852
+0
+395
+223
+2572
+2572
+2572
+105
+40
+1730
+4361
+20
+0
+2101
+22
+57
+4667
+4667
+4667
+526
+177
+177
+177
+284
+783
+25
+68
+562
+4053
+4053
+4053
+169
+26
+524
+89
+2
+0
+326
+256
+26
+0
+1283
+756
+1236
+104
+35
+302
+4304
+4304
+4304
+2351
+2351
+2351
+1868
+3622
+1298
+12
+21
+2931
+2931
+2931
+2802
+2802
+2802
+138
+63
+2816
+2816
+2816
+254
+6
+99
+11
+32
+1007
+2512
+88
+88
+88
+375
+61
+44
+4568
+4568
+4568
+3389
+3389
+3389
+39
+24
+4673
+4673
+4673
+4685
+4685
+4685
+2911
+2911
+2911
+0
+153
+344
+344
+344
+3270
+2192
+264
+2803
+2803
+2803
+0
+114
+650
+2859
+2859
+2859
+204
+279
+6
+525
+26
+20
+1070
+63
+132
+132
+132
+756
+61
+258
+269
+436
+0
+2656
+37
+41
+805
+1551
+1551
+1551
+110
+33
+10
+1753
+1753
+1753
+0
+103
+103
+103
+876
+876
+876
+3290
+3290
+3290
+3430
+58
+0
+336
+92
+1460
+1507
+1818
+1818
+1818
+25
+2542
+1006
+1006
+1006
+3306
+3306
+3306
+97
+33
+23
+26
+30
+0
+2862
+2
+20
+141
+1276
+825
+365
+360
+42
+103
+698
+413
+1321
+2517
+2517
+2517
+62
+1100
+687
+1116
+1331
+62
+36
+3430
+2915
+1366
+277
+2970
+2970
+2970
+10
+2274
+24
+4169
+4169
+4169
+36
+1
+366
+21
+1752
+1752
+1752
+26
+3355
+3355
+3355
+325
+351
+522
+22
+722
+950
+950
+950
+0
+23
+50
+34
+1621
+1621
+1621
+2028
+2028
+2028
+36
+4793
+4793
+4793
+957
+1387
+91
+756
+1
+139
+328
+450
+3003
+71
+1
+224
+4866
+4866
+4866
+2347
+2347
+2347
+2330
+2330
+2330
+24
+35
+130
+301
+1784
+146
+731
+3914
+3914
+3914
+1
+3192
+27
+1598
+172
+990
+24
+1141
+286
+310
+1673
+1673
+1673
+40
+3653
+3653
+3653
+2039
+2039
+2039
+25
+20
+27
+3264
+3264
+3264
+303
+751
+4467
+4467
+4467
+1
+101
+1443
+120
+98
+4
+4281
+4281
+4281
+5
+121
+20
+3245
+3245
+3245
+75
+1555
+1555
+1555
+428
+82
+27
+1060
+4364
+4364
+4364
+2981
+2981
+2981
+186
+4437
+4437
+4437
+125
+0
+2298
+2298
+2298
+1337
+109
+2560
+2560
+2560
+30
+2241
+1877
+30
+2299
+22
+241
+580
+91
+2759
+2759
+2759
+704
+463
+51
+435
+0
+204
+31
+2676
+0
+4295
+4295
+4295
+40
+1539
+37
+1531
+1
+1525
+290
+2184
+26
+28
+171
+2313
+84
+184
+368
+4
+2303
+3719
+3719
+3719
+7
+3288
+3288
+3288
+4
+110
+443
+127
+314
+20
+7
+1537
+1537
+1537
+67
+21
+2
+2585
+214
+589
+0
+456
+3653
+3653
+3653
+128
+1
+519
+151
+0
+67
+360
+0
+41
+2565
+2565
+2565
+31
+3
+730
+1167
+2220
+84
+28
+24
+43
+0
+1
+1828
+2413
+2413
+2413
+1081
+1081
+1081
+1864
+2123
+410
+2257
+2257
+2257
+2559
+25
+1598
+1598
+1598
+910
+0
+784
+2589
+2589
+2589
+38
+951
+316
+316
+316
+14
+200
+526
+23
+54
+3213
+3213
+3213
+75
+40
+675
+741
+23
+164
+5
+2447
+2447
+2447
+23
+0
+4344
+4344
+4344
+2
+2684
+2684
+2684
+719
+719
+719
+2273
+1068
+1856
+1856
+1856
+159
+1045
+0
+62
+172
+26
+874
+2785
+2973
+2973
+2973
+1259
+3211
+24
+45
+0
+2534
+1
+7
+32
+23
+21
+4134
+4134
+4134
+1873
+50
+22
+2912
+99
+5
+2094
+41
+29
+32
+24
+2594
+29
+28
+2927
+1740
+1740
+1740
+195
+72
+103
+4729
+4729
+4729
+36
+3783
+3783
+3783
+4091
+4091
+4091
+348
+4989
+2763
+3049
+4
+22
+349
+57
+2711
+1012
+299
+0
+245
+2317
+123
+41
+23
+1096
+31
+1009
+1108
+1108
+1108
+73
+61
+2
+56
+33
+0
+71
+311
+311
+918
+32
+274
+97
+767
+767
+767
+2641
+4746
+4746
+4746
+62
+0
+34
+777
+53
+129
+54
+21
+398
+3293
+3293
+3293
+1348
+35
+806
+259
+150
+1090
+792
+1189
+27
+2315
+48
+0
+0
+759
+40
+363
+93
+104
+37
+3687
+3687
+3687
+68
+26
+71
+37
+63
+57
+20
+2662
+2662
+2662
+21
+35
+470
+2998
+2998
+2998
+40
+848
+54
+72
+93
+322
+5
+26
+29
+2965
+2965
+2965
+276
+23
+32
+127
+239
+239
+239
+1160
+53
+1548
+27
+57
+34
+0
+60
+58
+8
+1928
+1928
+1928
+300
+434
+45
+410
+4278
+4278
+4278
+1154
+3683
+3683
+3683
+31
+1
+198
+32
+796
+4024
+4024
+4024
+1110
+53
+32
+58
+4540
+4540
+4540
+4116
+4116
+4116
+761
+67
+328
+603
+21
+3953
+3953
+3953
+4387
+4387
+4387
+476
+29
+1
+0
+1259
+73
+0
+203
+1509
+2505
+3305
+2439
+2340
+214
+2283
+0
+34
+381
+0
+7
+3049
+3049
+3049
+364
+3090
+3090
+3090
+844
+844
+844
+0
+178
+5
+2995
+2995
+2995
+21
+387
+4709
+4709
+4709
+2740
+2740
+2740
+26
+213
+3581
+3581
+3581
+221
+59
+2664
+2664
+2664
+380
+380
+380
+498
+25
+56
+3195
+3195
+3195
+225
+670
+3122
+3122
+3122
+0
+65
+1098
+49
+132
+945
+945
+945
+50
+731
+620
+620
+620
+58
+1464
+100
+59
+131
+65
+58
+58
+21
+0
+357
+536
+4844
+4844
+4844
+2947
+2947
+2947
+93
+769
+28
+20
+21
+48
+58
+1144
+83
+58
+1095
+1531
+0
+44
+3959
+3959
+3959
+95
+4045
+69
+3073
+3073
+3073
+182
+27
+66
+26
+120
+30
+4060
+4060
+4060
+27
+0
+29
+194
+86
+44
+4
+28
+431
+789
+1489
+743
+155
+22
+733
+132
+0
+115
+67
+1
+1087
+30
+117
+0
+1
+2318
+4068
+104
+2358
+2358
+2358
+88
+1913
+1913
+1913
+4826
+4826
+4826
+2612
+41
+20
+624
+4
+98
+796
+1777
+589
+589
+589
+3514
+3514
+3514
+1026
+434
+2644
+0
+5
+0
+59
+21
+4852
+4852
+4852
+2201
+35
+1198
+4382
+4382
+4382
+35
+71
+800
+33
+32
+20
+42
+52
+34
+29
+772
+2267
+2267
+2267
+1097
+107
+0
+2208
+4
+1103
+134
+3168
+3168
+3168
+7
+48
+1753
+29
+107
+0
+310
+82
+124
+1171
+3788
+3788
+3788
+1
+62
+66
+93
+0
+4748
+4748
+4748
+94
+418
+53
+4966
+4966
+4966
+29
+27
+1097
+3442
+176
+1672
+837
+0
+185
+0
+1023
+128
+64
+1464
+31
+31
+1
+2076
+2076
+2076
+214
+616
+1549
+32
+3090
+3090
+3090
+4502
+4502
+4502
+37
+98
+89
+3328
+3328
+3328
+3774
+3774
+3774
+2775
+517
+78
+30
+869
+0
+32
+186
+2256
+66
+3451
+3451
+3451
+836
+2208
+98
+85
+32
+260
+3005
+3005
+3005
+441
+441
+441
+139
+91
+102
+47
+517
+76
+41
+1792
+1792
+1792
+1705
+4153
+4153
+4153
+933
+90
+2221
+2221
+2221
+2040
+1769
+1769
+1769
+7
+2753
+37
+812
+139
+94
+3636
+67
+24
+4786
+4786
+4786
+2846
+4
+29
+1296
+46
+33
+62
+39
+1
+2772
+0
+183
+319
+188
+914
+1278
+2992
+3595
+136
+3388
+3388
+3388
+62
+681
+1
+50
+26
+122
+26
+147
+94
+150
+63
+366
+915
+1
+133
+3051
+1403
+99
+486
+0
+1290
+515
+1670
+30
+58
+1741
+1741
+1741
+641
+23
+52
+0
+3409
+3409
+3409
+133
+1942
+1942
+1942
+559
+407
+2054
+367
+93
+109
+367
+80
+201
+0
+2922
+106
+106
+106
+56
+4284
+4284
+4284
+1464
+72
+2307
+71
+31
+1299
+1299
+1299
+4382
+4382
+4382
+28
+310
+1
+2042
+3141
+371
+2827
+2827
+2827
+2051
+71
+0
+24
+123
+191
+2373
+2373
+2373
+1
+24
+0
+25
+634
+4
+3
+140
+148
+369
+0
+55
+372
+216
+4516
+4516
+4516
+41
+129
+1
+4081
+2645
+124
+3766
+246
+116
+62
+243
+659
+659
+659
+0
+126
+23
+150
+3544
+276
+276
+276
+830
+173
+210
+854
+514
+34
+195
+105
+2625
+2625
+2625
+1489
+1
+20
+1548
+21
+1
+5
+857
+78
+26
+2270
+2648
+2648
+2648
+2889
+2889
+2889
+861
+4942
+4942
+4942
+37
+1
+0
+3309
+3309
+3309
+3613
+3613
+3613
+25
+338
+898
+113
+32
+2336
+2336
+2336
+2024
+1623
+3302
+3302
+3302
+3167
+3167
+3167
+1268
+2762
+2762
+2762
+151
+73
+48
+114
+2945
+2945
+2945
+4136
+4136
+4136
+102
+2057
+2057
+2057
+79
+928
+928
+928
+320
+4537
+4537
+4537
+0
+626
+3653
+72
+58
+814
+2408
+2408
+2408
+54
+168
+3622
+3622
+3622
+2288
+71
+1255
+1735
+1735
+1735
+221
+103
+297
+435
+435
+435
+858
+5
+0
+248
+1436
+1436
+1436
+1766
+1766
+1766
+2525
+2525
+2525
+34
+60
+299
+24
+3843
+3843
+3843
+508
+3116
+3116
+3116
+35
+0
+839
+2700
+79
+3013
+3628
+3628
+3628
+2732
+2732
+2732
+1
+275
+73
+945
+98
+2365
+2365
+2365
+1266
+568
+568
+568
+3
+367
+111
+2106
+1741
+896
+3961
+510
+510
+510
+4134
+4134
+4134
+60
+3499
+3499
+3499
+4189
+4189
+4189
+101
+101
+101
+20
+20
+11
+3560
+3560
+3560
+104
+23
+506
+31
+217
+1411
+1
+2291
+2291
+2291
+21
+101
+1254
+1254
+1254
+93
+3
+377
+105
+1761
+39
+0
+3
+2
+62
+53
+60
+152
+450
+44
+502
+4847
+4847
+4847
+1264
+1509
+1509
+1509
+25
+1778
+2380
+2380
+2380
+74
+2803
+2803
+2803
+299
+1027
+1466
+4635
+4635
+4635
+119
+127
+1334
+23
+1731
+231
+381
+2781
+2781
+2781
+304
+29
+28
+4364
+1459
+2268
+4590
+4590
+4590
+2225
+2225
+2225
+216
+2441
+4082
+101
+266
+3542
+368
+1218
+27
+615
+4206
+785
+3851
+3851
+3851
+1262
+1
+101
+1263
+1263
+1263
+2919
+29
+1275
+1641
+624
+1056
+4759
+4759
+4759
+4604
+4604
+4604
+2
+261
+4704
+4704
+4704
+632
+1586
+2460
+2460
+2460
+137
+61
+1114
+785
+625
+2003
+1891
+81
+133
+2854
+2854
+2854
+2888
+2382
+2382
+2382
+1660
+4252
+4252
+4252
+2811
+2811
+2811
+1947
+1947
+1947
+593
+4553
+4553
+4553
+4839
+4839
+4839
+1386
+1386
+1386
+2360
+2360
+2360
+4930
+4930
+4930
+463
+55
+294
+294
+294
+815
+565
+3
+549
+4973
+4973
+4973
+4423
+4423
+4423
+545
+3983
+3983
+3983
+1165
+2013
+327
+327
+327
+1422
+1422
+1422
+620
+1853
+3173
+3173
+3173
+2772
+2772
+2772
+69
+682
+523
+3946
+3946
+3946
+1275
+1275
+1275
+4182
+4182
+4182
+1876
+1876
+1876
+2383
+2383
+2383
+2442
+581
+684
+564
+1009
+1267
+418
+367
+4580
+4580
+4580
+188
+1002
+7
+495
+4933
+4933
+4933
+1752
+62
+559
+989
+989
+989
+2
+124
+4471
+4471
+4471
+788
+691
+2081
+0
+1729
+3171
+2905
+2905
+2905
+2386
+2386
+2386
+33
+52
+2013
+0
+65
+2989
+4495
+4495
+4495
+0
+409
+2081
+1314
+190
+2262
+2262
+2262
+76
+127
+2314
+0
+4089
+4089
+4089
+237
+375
+1965
+252
+137
+137
+137
+602
+2031
+2031
+2031
+2081
+2081
+2081
+299
+23
+3165
+3165
+3165
+72
+1771
+309
+71
+1903
+1836
+3434
+3434
+3434
+2173
+4024
+1036
+485
+695
+695
+695
+4666
+4666
+4666
+4877
+4877
+4877
+203
+3221
+3221
+3221
+1114
+1940
+223
+2905
+2905
+2905
+69
+0
+2781
+254
+3974
+63
+1027
+1027
+1027
+70
+2008
+2008
+2008
+4729
+4729
+4729
+1514
+60
+4511
+3558
+3558
+3558
+623
+18
+50
+1365
+1365
+1365
+134
+3455
+3455
+3455
+82
+1041
+254
+502
+1350
+879
+967
+967
+967
+248
+3115
+3115
+3115
+509
+2906
+4009
+4009
+4009
+374
+208
+1819
+1819
+1819
+1928
+4987
+4987
+4987
+3609
+3609
+3609
+2102
+1
+360
+918
+0
+3748
+3748
+3748
+327
+2283
+1263
+627
+2084
+1
+325
+1776
+1776
+1776
+4042
+4042
+4042
+2823
+269
+687
+3157
+3157
+3157
+159
+88
+509
+20
+570
+4759
+4759
+4759
+163
+22
+4623
+4623
+4623
+1979
+3252
+3252
+3252
+70
+2905
+2905
+2905
+1936
+4269
+4269
+4269
+1
+1200
+2769
+4863
+4863
+4863
+4222
+1898
+1898
+1898
+890
+4624
+4624
+4624
+1830
+1830
+1830
+23
+2823
+2823
+2823
+467
+82
+2038
+2038
+2038
+61
+3671
+4430
+4430
+4430
+40
+1114
+1114
+1114
+3436
+27
+1668
+3119
+4916
+4916
+4916
+349
+30
+60
+1313
+1
+1930
+643
+985
+29
+1624
+1624
+1624
+2016
+1295
+226
+1309
+1309
+1309
+3888
+3888
+3888
+2415
+1754
+2372
+285
+4244
+4244
+4244
+2459
+3968
+3968
+3968
+1071
+36
+1458
+1458
+1458
+78
+1824
+385
+1236
+7
+942
+20
+1446
+1446
+1446
+2859
+2859
+2859
+51
+20
+284
+2715
+2715
+2715
+2406
+22
+1616
+0
+1530
+42
+49
+995
+33
+20
+1216
+1
+24
+582
+499
+852
+852
+852
+726
+1532
+49
+88
+100
+2903
+2903
+2903
+1188
+32
+556
+3923
+3923
+3923
+662
+775
+595
+2075
+175
+2487
+2487
+2487
+2963
+4205
+4205
+4205
+236
+3924
+3924
+3924
+53
+55
+604
+604
+604
+293
+125
+54
+2246
+22
+8
+25
+224
+1
+1678
+365
+4123
+4123
+4123
+1024
+1307
+1307
+1307
+247
+4610
+4610
+4610
+3215
+727
+1502
+1
+53
+2829
+3968
+3968
+3968
+1420
+1420
+1420
+29
+29
+29
+179
+39
+611
+1084
+1821
+1821
+1821
+261
+2794
+2794
+2794
+1633
+2176
+2176
+2176
+582
+3234
+359
+359
+359
+0
+365
+576
+4305
+4305
+4305
+61
+4567
+4567
+4567
+2573
+2573
+2573
+366
+1247
+1247
+1247
+1283
+446
+3591
+3591
+3591
+2142
+343
+3152
+3152
+3152
+42
+93
+3163
+236
+630
+2920
+2920
+2920
+64
+1602
+1602
+1602
+1745
+1745
+1745
+235
+365
+31
+901
+1176
+1
+335
+13
+24
+29
+888
+888
+888
+1051
+2773
+2773
+2773
+2918
+2918
+2918
+60
+99
+30
+1603
+54
+33
+835
+1082
+3878
+3878
+3878
+67
+906
+2
+9
+1244
+1244
+1244
+369
+30
+53
+0
+3973
+3973
+3973
+2491
+455
+887
+73
+37
+269
+29
+1
+38
+28
+410
+1076
+3948
+3948
+3948
+973
+26
+280
+203
+2566
+2566
+2566
+632
+260
+151
+3616
+3616
+3616
+2473
+2285
+2372
+0
+0
+34
+706
+2765
+2765
+2765
+2619
+2619
+2619
+34
+0
+60
+936
+51
+2
+109
+167
+33
+391
+23
+2434
+253
+106
+227
+404
+254
+3503
+3503
+3503
+1175
+37
+140
+1
+23
+28
+2319
+104
+2423
+2423
+2423
+0
+2115
+700
+462
+0
+1511
+2448
+2448
+2448
+61
+40
+2451
+1651
+1053
+1053
+1053
+635
+1677
+177
+985
+985
+985
+3351
+3351
+3351
+32
+2954
+96
+279
+257
+24
+24
+24
+108
+2369
+272
+2031
+23
+2954
+2954
+2954
+306
+318
+365
+2583
+2583
+2583
+271
+254
+48
+0
+3643
+3643
+3643
+5
+51
+1081
+50
+36
+3028
+3028
+3028
+710
+2
+447
+466
+4844
+4844
+4844
+1887
+1887
+1887
+1802
+8
+41
+73
+96
+1082
+1082
+1082
+1882
+281
+229
+2510
+2510
+2510
+780
+780
+780
+33
+31
+163
+92
+136
+3029
+3029
+3029
+150
+67
+3660
+727
+2150
+729
+28
+291
+0
+61
+35
+105
+1086
+34
+159
+0
+38
+75
+2907
+2907
+2907
+1256
+2143
+27
+368
+249
+1
+342
+342
+342
+2405
+327
+61
+3032
+86
+3738
+3738
+3738
+21
+4003
+4003
+4003
+4
+1313
+9
+633
+2
+3666
+49
+59
+1821
+4732
+4732
+4732
+184
+1734
+3636
+2918
+2918
+2918
+1355
+36
+255
+0
+91
+33
+47
+159
+29
+1916
+1916
+1916
+117
+584
+584
+584
+303
+303
+303
+352
+452
+33
+115
+1197
+4064
+4064
+4064
+369
+2826
+2826
+2826
+425
+1
+3696
+3696
+3696
+3300
+3300
+3300
+1
+3408
+3408
+3408
+74
+407
+271
+319
+24
+43
+96
+90
+2924
+49
+32
+746
+277
+3176
+3976
+3976
+3976
+356
+356
+356
+375
+34
+1778
+2
+29
+1486
+4027
+4027
+4027
+1848
+1848
+1848
+262
+9
+1195
+31
+2909
+2909
+2909
+1172
+1172
+1172
+49
+2
+3302
+3302
+3302
+4076
+4076
+4076
+1
+27
+3271
+25
+676
+90
+1662
+20
+3214
+11
+57
+4781
+4781
+4781
+47
+1977
+281
+0
+325
+112
+60
+1
+2158
+2379
+2379
+2379
+434
+65
+53
+87
+2501
+2501
+2501
+64
+20
+33
+3149
+3149
+3149
+25
+90
+30
+1366
+73
+594
+3244
+3244
+3244
+696
+696
+696
+11
+687
+208
+1444
+1444
+1444
+162
+47
+3956
+3956
+3956
+51
+2916
+709
+2984
+2984
+2984
+0
+1
+79
+256
+393
+393
+393
+275
+3
+191
+2912
+2912
+2912
+57
+348
+670
+4093
+4093
+4093
+526
+3040
+3040
+3040
+367
+33
+1039
+1039
+1039
+1732
+1279
+0
+535
+317
+1027
+35
+1
+4551
+4551
+4551
+4662
+4662
+4662
+183
+25
+1147
+1147
+1147
+3673
+3673
+3673
+60
+2121
+83
+3667
+3667
+3667
+75
+365
+1797
+305
+10
+1403
+4
+3205
+3205
+3205
+3623
+3623
+3623
+370
+1407
+54
+1311
+0
+441
+31
+4772
+4772
+4772
+27
+1412
+2750
+2750
+2750
+540
+388
+936
+1528
+2
+32
+1736
+1736
+1736
+57
+26
+1392
+3293
+3293
+3293
+3326
+282
+1057
+143
+7
+12
+23
+2595
+2595
+2595
+0
+32
+310
+54
+130
+86
+6
+2644
+2644
+2644
+28
+3048
+3048
+3048
+681
+2182
+2182
+2182
+136
+41
+92
+64
+2133
+2133
+2133
+1393
+1393
+1393
+4360
+4360
+4360
+314
+114
+1512
+1349
+1349
+1349
+1555
+423
+3
+29
+72
+23
+728
+329
+3695
+3695
+3695
+1745
+20
+1138
+133
+7
+39
+103
+2201
+2201
+2201
+2202
+2202
+2202
+37
+378
+4694
+4694
+4694
+25
+401
+63
+2681
+4354
+4354
+4354
+290
+557
+463
+272
+382
+44
+22
+124
+2274
+2274
+2274
+35
+1
+188
+2581
+4668
+62
+1507
+33
+3123
+3123
+3123
+1369
+0
+59
+34
+46
+20
+795
+247
+7
+789
+4220
+736
+31
+2679
+138
+120
+30
+2114
+4174
+4174
+4174
+47
+331
+49
+147
+2798
+3170
+3170
+3170
+44
+160
+0
+649
+1191
+4844
+4844
+4844
+15
+58
+45
+969
+32
+4264
+4264
+4264
+173
+2566
+2566
+2566
+0
+361
+2690
+25
+47
+4637
+4637
+4637
+400
+2682
+2682
+2682
+174
+0
+1
+1467
+2985
+0
+65
+2615
+2615
+2615
+86
+2816
+2816
+2816
+2827
+2827
+2827
+1150
+1150
+1150
+99
+185
+2934
+2133
+3964
+3964
+3964
+2938
+2938
+2938
+4854
+4854
+4854
+34
+1694
+1694
+1694
+2610
+32
+88
+373
+2988
+3659
+3659
+3659
+2900
+779
+248
+2411
+26
+16
+1067
+154
+197
+36
+63
+137
+3256
+25
+49
+73
+45
+279
+2708
+2708
+2708
+47
+41
+2223
+3931
+3931
+3931
+52
+141
+95
+251
+28
+29
+4445
+4445
+4445
+4054
+4054
+4054
+262
+1427
+2621
+2621
+2621
+4917
+4917
+4917
+458
+2193
+2193
+2193
+3934
+3934
+3934
+35
+81
+25
+309
+2257
+2257
+2257
+30
+26
+76
+2021
+2021
+2021
+93
+2596
+2596
+2596
+73
+294
+49
+435
+494
+2497
+497
+1315
+1878
+2
+243
+529
+39
+787
+787
+787
+67
+21
+0
+1
+4410
+4410
+4410
+36
+158
+2633
+4054
+4054
+4054
+1
+59
+1463
+57
+2231
+188
+701
+276
+1629
+902
+902
+902
+502
+0
+2829
+0
+501
+2813
+2813
+2813
+354
+310
+1569
+3391
+3391
+3391
+2806
+2806
+2806
+2519
+2519
+2519
+27
+33
+3673
+3673
+3673
+860
+1888
+126
+70
+451
+366
+61
+1
+873
+2954
+155
+722
+722
+722
+145
+365
+13
+1219
+1219
+1219
+1
+0
+2707
+259
+130
+41
+751
+2
+882
+145
+36
+0
+4
+3284
+3284
+3284
+4847
+4847
+4847
+104
+368
+2583
+1620
+1620
+1620
+94
+2940
+2940
+2940
+10
+110
+23
+365
+252
+20
+1
+2218
+4368
+4368
+4368
+1046
+4798
+4798
+4798
+49
+485
+0
+1184
+4830
+4830
+4830
+2195
+2195
+2195
+243
+0
+2544
+1834
+1834
+1834
+1473
+790
+321
+23
+1053
+41
+1109
+3690
+3690
+3690
+50
+55
+2521
+2521
+2521
+2631
+406
+202
+202
+202
+119
+55
+61
+1363
+711
+686
+3428
+3428
+3428
+785
+452
+45
+11
+1706
+460
+460
+460
+1478
+2483
+225
+2120
+388
+296
+1454
+113
+102
+382
+181
+117
+70
+99
+38
+1213
+1213
+1213
+2639
+2639
+2639
+2944
+1509
+70
+109
+23
+340
+38
+39
+156
+105
+0
+3006
+332
+234
+0
+3
+3656
+3749
+3749
+3749
+4410
+4410
+4410
+2006
+133
+819
+1526
+37
+344
+0
+4383
+4383
+4383
+512
+753
+235
+0
+385
+95
+2
+53
+120
+21
+380
+50
+4005
+4005
+4005
+0
+4088
+4088
+4088
+298
+3713
+3713
+3713
+21
+37
+91
+1
+431
+24
+561
+62
+62
+36
+130
+751
+3096
+3096
+3096
+56
+89
+113
+0
+2
+415
+583
+782
+54
+782
+73
+0
+3694
+2
+25
+2323
+2323
+2323
+4066
+3019
+428
+428
+428
+0
+70
+70
+117
+117
+117
+74
+3561
+3561
+3561
+1
+1
+1
+3258
+3258
+3258
+0
+0
+2345
+2345
+2345
+3744
+3744
+3744
+413
+443
+144
+42
+1428
+1428
+1428
+345
+231
+27
+4527
+4527
+4527
+682
+410
+3710
+3710
+3710
+48
+380
+97
+3301
+3301
+3301
+549
+0
+71
+1558
+1558
+1558
+1273
+688
+107
+2967
+423
+0
+1625
+163
+3071
+33
+364
+2410
+3211
+3211
+3211
+2259
+31
+1084
+1084
+1084
+58
+0
+2181
+2181
+2181
+44
+287
+38
+1
+39
+26
+26
+3440
+3440
+3440
+3313
+29
+148
+148
+148
+2955
+2955
+2955
+2213
+61
+68
+27
+155
+21
+2
+92
+47
+1
+3823
+305
+683
+683
+683
+4
+21
+2029
+1
+20
+4772
+4772
+4772
+52
+65
+2253
+38
+181
+209
+1843
+1843
+1843
+45
+859
+32
+125
+2983
+2983
+2983
+28
+4108
+4108
+4108
+1963
+170
+32
+1
+1354
+86
+1459
+1459
+1459
+23
+0
+56
+84
+26
+34
+66
+319
+32
+1018
+73
+3526
+3526
+3526
+28
+271
+2042
+2042
+2042
+489
+341
+1
+26
+81
+48
+4077
+4077
+4077
+32
+0
+32
+689
+0
+1005
+31
+4245
+1
+0
+2
+3368
+3368
+3368
+4407
+170
+3135
+849
+222
+128
+41
+222
+222
+222
+32
+1868
+1868
+1868
+140
+547
+1004
+111
+24
+424
+3508
+3508
+3508
+1046
+1046
+1046
+2326
+2326
+2326
+2395
+42
+95
+142
+229
+304
+0
+368
+262
+262
+262
+80
+20
+28
+148
+57
+48
+46
+3488
+3488
+3488
+36
+30
+43
+816
+2928
+1523
+40
+907
+22
+3764
+3575
+3575
+3575
+222
+3
+275
+371
+773
+4866
+4866
+4866
+1243
+1128
+4190
+4190
+4190
+6
+35
+135
+138
+206
+1754
+22
+21
+241
+278
+1273
+6
+171
+22
+274
+1575
+1575
+1575
+403
+2650
+2650
+2650
+314
+1969
+310
+190
+163
+1346
+405
+167
+2370
+2370
+2370
+135
+65
+31
+895
+1740
+0
+0
+339
+0
+79
+4672
+4672
+4672
+1421
+921
+452
+1182
+372
+0
+763
+4158
+4158
+4158
+38
+946
+177
+1919
+1100
+4265
+4265
+4265
+1869
+48
+511
+511
+511
+2300
+589
+372
+372
+372
+2261
+64
+24
+0
+2373
+2373
+2373
+533
+2995
+2995
+2995
+110
+141
+123
+648
+123
+910
+31
+0
+518
+1156
+3056
+44
+142
+99
+99
+99
+131
+4185
+4185
+4185
+1593
+746
+94
+268
+2684
+2684
+2684
+415
+38
+140
+149
+424
+1388
+24
+2742
+160
+1
+1
+577
+136
+925
+925
+925
+25
+661
+79
+1086
+383
+1
+4570
+4570
+4570
+55
+3347
+3
+26
+376
+14
+2734
+2734
+2734
+193
+193
+193
+1398
+1398
+1398
+805
+3918
+3918
+3918
+1680
+178
+196
+2765
+2765
+2765
+1146
+500
+853
+4969
+4969
+4969
+3209
+3993
+3993
+3993
+264
+60
+4544
+372
+2627
+2627
+2627
+2
+1
+2305
+2305
+2305
+365
+4552
+4552
+4552
+217
+3825
+3825
+3825
+2573
+2573
+2573
+3088
+3088
+3088
+106
+205
+3280
+3280
+3280
+4942
+4942
+4942
+83
+2798
+2798
+2798
+16
+868
+868
+868
+938
+30
+22
+23
+809
+95
+84
+70
+261
+894
+3556
+3556
+3556
+390
+4179
+4179
+4179
+3861
+3861
+3861
+2
+1010
+1010
+1010
+175
+21
+3778
+3778
+3778
+405
+156
+8
+4905
+4905
+4905
+2027
+2027
+2027
+947
+38
+30
+1677
+1677
+1677
+2
+135
+1992
+1992
+1992
+1633
+170
+859
+85
+742
+634
+634
+634
+107
+22
+132
+9
+189
+47
+33
+2881
+763
+2971
+2971
+2971
+1826
+147
+314
+314
+314
+55
+62
+681
+96
+1475
+0
+3
+109
+847
+4626
+4626
+4626
+4941
+4941
+4941
+28
+47
+4682
+4682
+4682
+1273
+0
+81
+172
+24
+337
+2
+1937
+115
+157
+96
+914
+3147
+3147
+3147
+106
+142
+859
+7
+511
+1519
+1519
+1519
+4666
+4666
+4666
+309
+365
+63
+24
+429
+3441
+3441
+3441
+2034
+2034
+2034
+2358
+51
+80
+20
+3077
+1032
+3398
+3398
+3398
+1259
+888
+269
+600
+64
+643
+232
+4860
+4860
+4860
+615
+45
+3180
+3180
+3180
+159
+159
+159
+3465
+3465
+3465
+915
+2001
+2018
+1519
+38
+2050
+2050
+2050
+764
+4974
+4974
+4974
+4302
+4302
+4302
+1551
+1551
+1551
+30
+21
+67
+67
+67
+3451
+3451
+3451
+3834
+3834
+3834
+2
+0
+0
+365
+1540
+1540
+1540
+24
+336
+2642
+2642
+2642
+175
+163
+470
+0
+31
+908
+103
+27
+108
+80
+3291
+3291
+3291
+273
+293
+111
+1350
+447
+96
+247
+40
+0
+3285
+3285
+3285
+119
+96
+0
+31
+29
+127
+2786
+2786
+2786
+438
+241
+42
+1236
+1236
+1236
+1962
+636
+704
+21
+305
+126
+119
+256
+2081
+590
+1351
+4962
+4962
+4962
+214
+580
+1668
+1668
+1668
+4258
+4258
+4258
+1
+228
+228
+228
+1
+129
+2842
+23
+58
+110
+4204
+180
+134
+3235
+3235
+3235
+2087
+77
+161
+142
+65
+72
+68
+1089
+3286
+3286
+3286
+135
+1627
+1818
+2047
+36
+1
+112
+112
+112
+124
+0
+72
+855
+855
+855
+3170
+3170
+3170
+1668
+1668
+1668
+698
+517
+108
+39
+36
+0
+60
+54
+2811
+300
+4
+1586
+599
+243
+1762
+0
+969
+969
+969
+26
+555
+555
+555
+1
+492
+206
+308
+105
+3291
+3291
+3291
+883
+2753
+0
+342
+138
+190
+21
+4298
+4298
+4298
+48
+105
+122
+622
+171
+3149
+1
+2731
+115
+2928
+2928
+2928
+4258
+4258
+4258
+3270
+3270
+3270
+1298
+2227
+34
+2295
+65
+36
+36
+142
+256
+1937
+650
+1497
+25
+259
+55
+219
+212
+212
+212
+0
+365
+2816
+2816
+2816
+319
+56
+4191
+4191
+4191
+301
+134
+272
+620
+1355
+1347
+151
+2859
+1
+559
+215
+1097
+9
+251
+1972
+1972
+1972
+110
+3108
+3108
+3108
+533
+2424
+3511
+138
+56
+105
+1
+3642
+3642
+3642
+180
+1
+39
+139
+656
+346
+2484
+1
+1691
+1691
+1691
+38
+37
+3299
+3299
+3299
+374
+1
+2211
+2211
+2211
+2245
+4258
+4258
+4258
+365
+43
+25
+2072
+1751
+12
+81
+367
+129
+3883
+3883
+3883
+2803
+2
+1
+32
+42
+241
+1075
+112
+179
+4654
+4654
+4654
+56
+588
+225
+351
+44
+1029
+453
+3402
+3402
+3402
+369
+4654
+4654
+4654
+3281
+3281
+3281
+106
+3850
+4302
+4302
+4302
+471
+0
+976
+976
+976
+2725
+2372
+2372
+2372
+201
+585
+547
+99
+134
+252
+437
+85
+3167
+651
+2913
+38
+95
+857
+857
+857
+27
+34
+2152
+1462
+591
+3446
+3446
+3446
+1789
+112
+2193
+2193
+2193
+887
+605
+4889
+4889
+4889
+3286
+3286
+3286
+1331
+1569
+1569
+1569
+1
+1725
+366
+734
+4018
+4018
+4018
+11
+2411
+2411
+2411
+1990
+3811
+1096
+51
+126
+0
+36
+999
+3596
+3596
+3596
+154
+376
+1043
+226
+330
+3965
+3965
+3965
+365
+4877
+4877
+4877
+3880
+3880
+3880
+292
+1898
+1898
+1898
+2870
+169
+4997
+4997
+4997
+21
+3535
+3535
+3535
+30
+3809
+364
+338
+3521
+3521
+3521
+285
+49
+1913
+640
+1408
+259
+144
+1026
+164
+3591
+3591
+3591
+369
+4524
+4524
+4524
+1438
+1438
+1438
+704
+704
+704
+609
+67
+358
+2973
+2973
+2973
+63
+299
+3277
+3277
+3277
+306
+3582
+16
+3970
+3970
+3970
+1013
+1013
+1013
+1410
+1410
+1410
+376
+2963
+88
+579
+2174
+2174
+2174
+87
+59
+2875
+549
+966
+155
+362
+38
+37
+1
+1
+169
+45
+883
+1050
+29
+116
+1778
+1013
+1013
+1013
+71
+66
+1687
+47
+482
+1098
+22
+2849
+1256
+1256
+1256
+276
+73
+175
+225
+20
+84
+382
+770
+1601
+1601
+1601
+2085
+4028
+4028
+4028
+3255
+3255
+3255
+62
+664
+664
+664
+369
+0
+1325
+4158
+4158
+4158
+35
+6
+1
+0
+2891
+2891
+2891
+32
+422
+928
+18
+3963
+3963
+3963
+94
+2848
+2848
+2848
+758
+1
+2901
+2901
+2901
+335
+0
+799
+21
+1820
+1820
+1820
+4
+3980
+3980
+3980
+3253
+3253
+3253
+186
+1745
+44
+4355
+4355
+4355
+0
+1992
+1992
+1992
+1013
+456
+0
+42
+152
+758
+758
+758
+1548
+83
+67
+44
+54
+680
+3039
+3039
+3039
+45
+1276
+33
+1733
+1772
+90
+1010
+25
+2343
+2343
+2343
+1688
+105
+2972
+2972
+2972
+0
+648
+694
+694
+694
+1011
+1
+326
+15
+312
+2877
+1799
+3543
+3543
+3543
+97
+868
+163
+3713
+3713
+3713
+27
+328
+4490
+186
+1404
+4709
+514
+2146
+654
+337
+243
+559
+582
+1124
+3203
+3203
+3203
+814
+28
+1733
+1733
+1733
+0
+3885
+3885
+3885
+557
+1796
+1832
+2484
+2484
+2484
+186
+3998
+3998
+3998
+69
+3223
+139
+137
+1762
+1
+298
+158
+0
+2022
+3123
+3123
+3123
+31
+242
+25
+3039
+3039
+3039
+2822
+2822
+2822
+747
+156
+3269
+2289
+3670
+3670
+3670
+4412
+4412
+4412
+3870
+293
+460
+53
+660
+4
+2561
+3257
+3257
+3257
+2119
+2119
+2119
+90
+216
+62
+29
+2272
+0
+151
+49
+106
+43
+2
+774
+27
+217
+540
+34
+118
+0
+67
+27
+140
+0
+3576
+3576
+3576
+3659
+3659
+3659
+640
+1587
+32
+4459
+4459
+4459
+175
+4768
+4768
+4768
+242
+1323
+1
+128
+34
+1834
+1834
+1834
+0
+2438
+2095
+1806
+30
+62
+4784
+4784
+4784
+3045
+3045
+3045
+3316
+3316
+3316
+4495
+4495
+4495
+4116
+4116
+4116
+63
+1611
+1611
+1611
+49
+74
+0
+20
+621
+94
+289
+20
+64
+84
+31
+74
+23
+500
+3435
+3435
+3435
+516
+1485
+0
+123
+955
+1485
+232
+138
+59
+23
+58
+545
+30
+2376
+119
+424
+0
+264
+1065
+3412
+2
+93
+48
+1781
+381
+1
+40
+2623
+2623
+2623
+4968
+4968
+4968
+141
+21
+727
+727
+727
+1097
+1097
+1097
+61
+0
+21
+274
+1092
+1092
+1092
+4007
+21
+358
+358
+358
+606
+260
+20
+2295
+8
+2337
+2337
+2337
+120
+60
+4172
+3
+0
+31
+3223
+0
+0
+0
+848
+332
+3015
+275
+1105
+0
+3335
+3335
+3335
+57
+1500
+21
+53
+61
+814
+2483
+2483
+2483
+2155
+32
+1
+77
+1
+4314
+4314
+4314
+108
+828
+21
+4
+252
+1802
+72
+264
+169
+4609
+4609
+4609
+1054
+31
+30
+2474
+32
+13
+186
+3373
+3373
+3373
+0
+672
+976
+976
+976
+31
+50
+4863
+4863
+4863
+4029
+665
+665
+665
+353
+723
+1
+2956
+86
+26
+365
+1
+2232
+0
+2319
+2319
+2319
+298
+34
+42
+72
+56
+2935
+91
+147
+0
+151
+438
+468
+404
+202
+766
+26
+34
+68
+35
+43
+83
+0
+3297
+3297
+3297
+0
+177
+3229
+4142
+4142
+4142
+184
+31
+1
+2192
+2192
+2192
+31
+4803
+4803
+4803
+2780
+1608
+60
+4509
+4509
+4509
+23
+23
+23
+1
+135
+781
+35
+181
+380
+152
+416
+1513
+1513
+1513
+24
+1
+827
+376
+762
+119
+32
+2199
+206
+206
+206
+4854
+4854
+4854
+137
+2582
+2582
+2582
+60
+310
+93
+0
+1876
+54
+329
+329
+329
+310
+40
+3690
+3690
+3690
+35
+0
+2230
+2230
+2230
+4422
+4422
+4422
+35
+744
+5
+4388
+4388
+4388
+48
+724
+43
+3432
+67
+281
+4754
+4754
+4754
+3
+9
+764
+336
+351
+651
+178
+147
+699
+55
+395
+38
+2000
+23
+1253
+1253
+1253
+155
+3161
+33
+0
+34
+0
+122
+2013
+3297
+3297
+3297
+1880
+3442
+3442
+3442
+1552
+1552
+1552
+26
+322
+31
+525
+313
+2528
+2528
+2528
+1464
+2485
+2485
+2485
+2177
+25
+0
+4803
+4803
+4803
+28
+1
+35
+2289
+2289
+2289
+574
+36
+1831
+55
+26
+2240
+3
+408
+22
+31
+1172
+24
+33
+31
+136
+1057
+0
+2228
+33
+28
+2
+4391
+4391
+4391
+32
+50
+31
+64
+1048
+4149
+4149
+4149
+0
+36
+40
+31
+61
+1524
+1524
+1524
+332
+1904
+36
+28
+3
+3621
+3621
+3621
+805
+86
+28
+498
+2900
+2900
+2900
+4963
+4963
+4963
+273
+2557
+27
+89
+51
+37
+62
+682
+1934
+160
+1
+33
+264
+3985
+3985
+3985
+47
+303
+970
+970
+970
+2249
+0
+59
+31
+22
+121
+4357
+4357
+4357
+419
+2803
+1
+26
+2
+89
+47
+124
+160
+38
+720
+720
+720
+47
+2644
+2927
+2927
+2927
+457
+365
+365
+365
+1385
+369
+1871
+288
+624
+315
+1090
+29
+2
+83
+1336
+488
+85
+75
+15
+0
+24
+461
+897
+21
+29
+62
+377
+194
+700
+4974
+4974
+4974
+102
+104
+789
+1186
+1186
+1186
+2681
+20
+443
+443
+443
+30
+100
+148
+1569
+1569
+1569
+672
+3748
+3748
+3748
+62
+62
+62
+24
+367
+313
+3783
+3783
+3783
+32
+0
+1
+108
+31
+140
+4
+6
+366
+80
+24
+33
+62
+569
+1
+281
+6
+454
+4045
+4045
+4045
+2300
+4433
+4433
+4433
+964
+180
+150
+37
+63
+3827
+3827
+3827
+2074
+2
+34
+26
+446
+852
+155
+243
+90
+1309
+2283
+170
+71
+94
+2342
+2342
+2342
+3116
+3116
+3116
+347
+780
+780
+780
+130
+836
+836
+836
+455
+3283
+3283
+3283
+111
+2
+3424
+0
+0
+22
+0
+526
+20
+734
+68
+302
+94
+107
+1031
+1031
+1031
+2071
+590
+4133
+4133
+4133
+890
+67
+22
+21
+2954
+2885
+2308
+37
+40
+135
+34
+1
+160
+29
+1292
+1292
+1292
+150
+4550
+4550
+4550
+20
+1145
+1
+1
+2728
+138
+42
+30
+1544
+2451
+2451
+2451
+1352
+1352
+1352
+121
+32
+2266
+3377
+3377
+3377
+65
+310
+33
+156
+61
+34
+41
+26
+31
+3679
+2
+1307
+120
+37
+41
+1803
+1803
+1803
+30
+196
+26
+2
+2630
+2630
+2630
+958
+811
+113
+20
+36
+97
+394
+907
+1122
+59
+227
+4401
+4401
+4401
+4975
+4975
+4975
+4129
+4129
+4129
+4386
+4386
+4386
+2039
+122
+37
+0
+3047
+3047
+3047
+2448
+2448
+2448
+4003
+125
+138
+2542
+2542
+2542
+37
+0
+3068
+32
+128
+128
+128
+538
+178
+0
+1767
+1767
+1767
+2569
+2569
+2569
+3057
+3770
+3770
+3770
+852
+0
+1564
+30
+52
+776
+69
+4562
+4562
+4562
+3517
+3517
+3517
+45
+23
+1
+607
+0
+4924
+4924
+4924
+0
+1496
+119
+471
+43
+779
+1124
+1124
+1124
+2487
+4511
+4511
+4511
+30
+392
+35
+126
+19
+43
+86
+36
+2
+1944
+53
+89
+89
+89
+124
+4
+4487
+4487
+4487
+412
+94
+78
+116
+2343
+2343
+2343
+851
+53
+1596
+1596
+1596
+401
+401
+401
+2194
+33
+471
+158
+26
+125
+1034
+9
+32
+45
+425
+60
+4580
+4580
+4580
+53
+21
+3008
+3008
+3008
+2275
+2275
+2275
+30
+38
+25
+148
+148
+148
+171
+3031
+3031
+3031
+480
+66
+236
+4546
+4546
+4546
+39
+4507
+4507
+4507
+31
+0
+1140
+1140
+1140
+2609
+3
+207
+60
+31
+3974
+50
+58
+479
+479
+479
+68
+244
+1
+91
+0
+262
+2366
+2366
+2366
+54
+84
+132
+30
+20
+0
+71
+451
+1900
+1865
+1247
+1247
+1247
+353
+353
+353
+2439
+1
+630
+4191
+4191
+4191
+367
+4893
+4893
+4893
+44
+20
+4952
+4952
+4952
+50
+1739
+23
+2989
+2989
+2989
+242
+0
+732
+10
+2258
+1
+128
+35
+1020
+1020
+1020
+748
+57
+69
+367
+108
+534
+1519
+2
+73
+2699
+219
+694
+694
+694
+7
+2065
+3492
+3492
+3492
+2381
+228
+873
+4220
+4220
+4220
+1464
+0
+830
+20
+4285
+4285
+4285
+1001
+4353
+4353
+4353
+380
+439
+492
+719
+802
+81
+333
+900
+896
+3391
+26
+4554
+4554
+4554
+4566
+4566
+4566
+377
+513
+0
+121
+88
+2
+1438
+3819
+3819
+3819
+249
+4834
+4834
+4834
+108
+102
+3659
+3659
+3659
+3604
+3604
+3604
+182
+447
+520
+1542
+1542
+1542
+4479
+4479
+4479
+5
+21
+137
+812
+812
+812
+23
+84
+45
+1
+2305
+60
+3100
+3100
+3100
+0
+411
+3149
+54
+29
+366
+43
+0
+3464
+3049
+3049
+3049
+498
+4567
+4567
+4567
+519
+22
+50
+544
+218
+139
+3105
+366
+148
+4705
+4705
+4705
+100
+839
+4576
+4576
+4576
+166
+1181
+516
+378
+2065
+30
+3512
+3512
+3512
+1378
+27
+3799
+3799
+3799
+29
+0
+0
+365
+2012
+722
+37
+588
+876
+3721
+3721
+3721
+1668
+3315
+3315
+3315
+112
+428
+129
+4150
+4150
+4150
+422
+4378
+3584
+505
+2
+7
+477
+191
+4829
+4829
+4829
+852
+108
+834
+58
+366
+799
+4932
+4932
+4932
+0
+32
+10
+0
+172
+2315
+68
+61
+84
+365
+57
+163
+35
+4623
+4623
+4623
+74
+291
+27
+357
+2
+2749
+2749
+2749
+1
+30
+145
+1638
+1
+4297
+4297
+4297
+4641
+4641
+4641
+1793
+1605
+1605
+1605
+574
+39
+3297
+3297
+3297
+35
+582
+57
+944
+944
+944
+366
+2122
+2122
+2122
+24
+2003
+280
+40
+4
+28
+938
+29
+81
+343
+361
+361
+361
+1165
+1165
+1165
+2
+1953
+3835
+3835
+3835
+240
+0
+3889
+3889
+3889
+209
+2671
+20
+509
+20
+366
+506
+58
+36
+4125
+4125
+4125
+142
+1903
+51
+72
+1644
+1602
+1512
+1512
+1512
+94
+180
+4103
+121
+356
+1
+1258
+1258
+1258
+108
+4557
+4557
+4557
+3645
+97
+3043
+3043
+3043
+0
+1614
+58
+3431
+3425
+196
+464
+212
+809
+82
+4261
+4261
+4261
+1206
+1206
+1206
+140
+14
+0
+196
+4
+179
+143
+143
+143
+4351
+4959
+4959
+4959
+28
+29
+116
+2936
+4112
+4112
+4112
+870
+112
+112
+112
+71
+4190
+4190
+4190
+572
+341
+23
+4537
+4537
+4537
+1953
+213
+31
+173
+0
+3389
+292
+1
+152
+31
+235
+2990
+2990
+2990
+4897
+4897
+4897
+856
+366
+20
+536
+161
+187
+20
+500
+500
+500
+25
+34
+1163
+4620
+4620
+4620
+21
+2998
+96
+296
+296
+296
+787
+11
+1
+95
+2725
+2725
+2725
+138
+3756
+3756
+3756
+38
+124
+217
+3300
+3300
+3300
+4096
+4096
+4096
+2419
+2419
+2419
+249
+0
+186
+26
+1
+5
+7
+1492
+1492
+1492
+2664
+2664
+2664
+90
+962
+2411
+32
+34
+0
+772
+1673
+2500
+2500
+2500
+4097
+4097
+4097
+120
+343
+961
+1648
+26
+47
+311
+21
+105
+26
+297
+297
+297
+223
+1312
+518
+120
+1655
+1655
+1655
+1462
+21
+2332
+2332
+2332
+1564
+1564
+1564
+1
+10
+56
+1951
+1951
+1951
+2326
+2326
+2326
+487
+1976
+1976
+1976
+123
+121
+98
+2592
+2592
+2592
+345
+80
+1745
+1745
+1745
+25
+1594
+98
+2894
+253
+3907
+3907
+3907
+81
+29
+678
+4653
+4653
+4653
+22
+34
+389
+24
+963
+148
+22
+3786
+3786
+3786
+2629
+2629
+2629
+37
+45
+22
+31
+28
+27
+4185
+4185
+4185
+1
+4341
+4341
+4341
+489
+605
+81
+2
+1083
+3
+365
+31
+1458
+1458
+1458
+111
+1620
+453
+2841
+2841
+2841
+168
+219
+2439
+700
+700
+700
+1
+49
+4851
+4851
+4851
+139
+0
+2649
+2649
+2649
+4199
+4199
+4199
+85
+4
+645
+29
+305
+264
+112
+27
+2799
+262
+171
+38
+366
+1
+0
+78
+50
+595
+43
+116
+470
+2744
+2744
+2744
+1298
+4651
+4651
+4651
+282
+2049
+107
+69
+2422
+131
+130
+73
+137
+729
+2458
+40
+8
+559
+3655
+3655
+3655
+3497
+154
+327
+94
+2391
+2391
+2391
+475
+2432
+128
+329
+2449
+368
+3916
+3916
+3916
+3620
+3620
+3620
+29
+0
+949
+137
+66
+581
+3609
+55
+1310
+160
+175
+2121
+2121
+2121
+57
+2894
+2894
+2894
+2550
+2550
+2550
+389
+33
+246
+52
+31
+299
+513
+1714
+21
+108
+210
+1684
+1684
+1684
+20
+36
+857
+4210
+78
+498
+344
+1518
+271
+550
+23
+4621
+4621
+4621
+375
+364
+4996
+4996
+4996
+1086
+3636
+3636
+3636
+516
+3443
+3443
+3443
+37
+123
+24
+65
+600
+22
+92
+0
+369
+57
+31
+0
+125
+4
+49
+158
+93
+37
+516
+3174
+38
+2187
+2187
+2187
+4765
+4765
+4765
+188
+1
+2
+1385
+726
+726
+726
+171
+4640
+4640
+4640
+496
+424
+594
+29
+1016
+1778
+2867
+2867
+2867
+804
+6
+308
+3611
+3611
+3611
+789
+789
+789
+2786
+2786
+2786
+641
+138
+1206
+317
+219
+47
+14
+3227
+3227
+3227
+314
+3149
+2757
+30
+59
+16
+3295
+3295
+3295
+367
+2315
+46
+550
+1035
+1035
+1035
+218
+3987
+3987
+3987
+67
+1098
+3817
+3817
+3817
+2517
+573
+185
+133
+244
+244
+244
+1785
+102
+367
+30
+147
+248
+1191
+1191
+1191
+89
+0
+4379
+4379
+4379
+59
+59
+59
+235
+30
+3991
+116
+302
+1
+316
+20
+1016
+701
+701
+701
+1096
+3992
+3992
+3992
+0
+317
+1
+297
+297
+297
+31
+3607
+3607
+3607
+21
+153
+732
+4091
+4091
+4091
+21
+0
+27
+1
+54
+292
+150
+8
+253
+69
+1
+3565
+3565
+3565
+1796
+1796
+1796
+512
+2996
+86
+287
+321
+2529
+3267
+3267
+3267
+2898
+2898
+2898
+38
+40
+125
+388
+2251
+2251
+2251
+1108
+69
+132
+2672
+0
+3654
+3654
+3654
+3858
+3858
+3858
+287
+4488
+4488
+4488
+113
+141
+1
+31
+2259
+2259
+2259
+51
+63
+3235
+3235
+3235
+1
+4137
+4137
+4137
+2919
+2610
+2610
+2610
+2816
+2816
+2816
+32
+1
+4
+84
+1594
+3614
+3614
+3614
+30
+32
+3224
+3224
+3224
+55
+2443
+2443
+2443
+54
+1294
+1294
+1294
+221
+28
+146
+317
+317
+317
+1783
+4355
+4355
+4355
+914
+126
+151
+168
+345
+692
+637
+637
+637
+2986
+2986
+2986
+230
+338
+43
+269
+4350
+4350
+4350
+23
+226
+0
+120
+23
+0
+24
+20
+505
+31
+4371
+4371
+4371
+1
+61
+3117
+3117
+3117
+394
+973
+973
+973
+213
+4140
+4140
+4140
+30
+85
+2003
+636
+31
+390
+537
+52
+198
+254
+1
+189
+4641
+4641
+4641
+4273
+4273
+4273
+299
+139
+1098
+128
+128
+128
+685
+6
+22
+0
+52
+2069
+2069
+2069
+100
+4729
+4729
+4729
+620
+554
+1399
+96
+209
+209
+209
+63
+1
+207
+289
+988
+358
+1
+25
+679
+679
+679
+20
+1
+28
+35
+1037
+1379
+2180
+32
+365
+22
+22
+3968
+3968
+3968
+62
+665
+206
+94
+4670
+4670
+4670
+98
+212
+2947
+2
+38
+38
+38
+668
+0
+418
+2000
+2000
+2000
+4013
+4013
+4013
+337
+4417
+4417
+4417
+79
+1415
+1415
+1415
+3927
+3927
+3927
+2168
+2168
+2168
+20
+30
+96
+580
+1100
+221
+4040
+4040
+4040
+0
+2577
+2101
+2
+249
+1104
+488
+95
+0
+2042
+43
+0
+36
+4404
+4404
+4404
+44
+1
+653
+550
+550
+550
+37
+2898
+2898
+2898
+1861
+1861
+1861
+3287
+196
+35
+104
+30
+3653
+4015
+4015
+4015
+2601
+800
+49
+140
+106
+28
+54
+228
+44
+1844
+33
+35
+0
+135
+2
+96
+713
+5
+94
+3807
+3807
+3807
+26
+2175
+29
+41
+4600
+4600
+4600
+110
+358
+21
+53
+0
+104
+4332
+4332
+4332
+24
+42
+341
+21
+624
+918
+3
+22
+21
+42
+322
+322
+322
+1867
+0
+922
+922
+922
+3750
+3750
+3750
+452
+452
+452
+1675
+0
+27
+608
+2818
+575
+575
+575
+0
+0
+1387
+1387
+1387
+175
+121
+0
+4361
+4361
+4361
+749
+368
+366
+2602
+2602
+2602
+3232
+4705
+4705
+4705
+3296
+0
+1199
+21
+1768
+1768
+1768
+1
+3796
+3796
+3796
+156
+2577
+235
+20
+4052
+4052
+4052
+0
+4
+249
+77
+77
+77
+415
+115
+0
+281
+1
+2095
+371
+355
+3752
+3752
+3752
+26
+185
+342
+27
+6
+32
+1
+365
+37
+0
+0
+5
+2379
+2379
+2379
+0
+233
+4
+3774
+3774
+3774
+139
+680
+3366
+96
+96
+96
+1057
+230
+4636
+4636
+4636
+1784
+31
+3263
+3263
+3263
+4568
+4568
+4568
+1946
+1356
+4785
+4785
+4785
+120
+31
+48
+244
+1466
+354
+0
+1436
+41
+29
+3966
+3966
+3966
+4359
+4359
+4359
+49
+365
+4552
+4552
+4552
+31
+3
+30
+294
+49
+1234
+38
+820
+1481
+1481
+1481
+465
+79
+770
+2264
+2264
+2264
+21
+40
+309
+25
+100
+3014
+3014
+3014
+80
+34
+4668
+4668
+4668
+140
+34
+74
+31
+149
+48
+3710
+152
+1
+2157
+445
+30
+2061
+701
+282
+0
+206
+2
+0
+804
+28
+2987
+2987
+2987
+0
+34
+4704
+4704
+4704
+0
+147
+2874
+1
+710
+3700
+396
+40
+50
+163
+1766
+75
+824
+1
+31
+85
+51
+3339
+3023
+1099
+209
+60
+40
+2
+4480
+4480
+4480
+93
+2262
+2262
+2262
+33
+0
+71
+32
+1571
+2258
+11
+32
+31
+25
+1800
+267
+445
+0
+54
+337
+28
+1
+20
+91
+180
+53
+33
+23
+24
+478
+1
+4783
+4783
+4783
+23
+22
+12
+523
+3331
+3331
+3331
+33
+4307
+4307
+4307
+26
+3442
+3442
+3442
+2
+214
+24
+35
+80
+105
+0
+13
+104
+1
+2241
+42
+2585
+2585
+2585
+0
+2302
+145
+23
+96
+0
+33
+27
+32
+1836
+0
+369
+287
+396
+581
+148
+199
+40
+47
+23
+0
+70
+3
+2494
+2494
+2494
+3199
+1
+31
+0
+240
+87
+1468
+2
+3347
+3347
+3347
+204
+20
+1076
+21
+35
+4288
+4288
+4288
+33
+100
+190
+2774
+179
+1
+22
+57
+2004
+2004
+2004
+114
+2
+3636
+3636
+3636
+20
+1
+91
+3824
+3824
+3824
+25
+350
+3362
+3362
+3362
+22
+3312
+4797
+4797
+4797
+2184
+981
+3516
+3516
+3516
+279
+31
+32
+25
+125
+68
+0
+1219
+113
+34
+25
+0
+0
+3203
+2082
+166
+4881
+4881
+4881
+4016
+4016
+4016
+59
+533
+1451
+1451
+1451
+4160
+4160
+4160
+27
+97
+32
+4058
+4058
+4058
+414
+49
+421
+89
+31
+74
+911
+3898
+3898
+3898
+3423
+3423
+3423
+1
+39
+28
+1901
+197
+86
+47
+2359
+2359
+2359
+4159
+4159
+4159
+26
+35
+25
+30
+410
+31
+68
+1920
+1920
+1920
+22
+866
+22
+4865
+4865
+4865
+2776
+3256
+3256
+3256
+32
+30
+64
+577
+31
+1
+1123
+1123
+1123
+23
+3415
+3415
+3415
+1139
+1139
+1139
+0
+4792
+4792
+4792
+4822
+4822
+4822
+805
+95
+1369
+1369
+1369
+3957
+3957
+3957
+27
+61
+46
+1080
+1080
+1080
+4243
+4243
+4243
+870
+3
+98
+98
+98
+3993
+3993
+3993
+1273
+1273
+1273
+0
+1939
+25
+4516
+4516
+4516
+140
+1
+209
+4384
+4384
+4384
+90
+31
+1545
+25
+3
+1
+27
+2198
+37
+1889
+1
+115
+443
+992
+276
+812
+5
+29
+300
+43
+43
+43
+1036
+134
+3152
+3152
+3152
+3
+365
+884
+3764
+3764
+3764
+31
+86
+547
+2194
+43
+2993
+2993
+2993
+70
+361
+1232
+528
+0
+867
+95
+3212
+669
+705
+4522
+4522
+4522
+1918
+374
+21
+134
+1
+237
+3107
+3107
+3107
+0
+128
+107
+286
+126
+0
+18
+61
+45
+45
+45
+232
+2077
+2077
+2077
+178
+2675
+2823
+2823
+2823
+1105
+0
+76
+22
+39
+915
+36
+6
+10
+959
+0
+37
+3820
+2008
+10
+60
+23
+209
+1076
+0
+4336
+10
+4696
+4696
+4696
+238
+115
+3787
+21
+77
+0
+4849
+4523
+4523
+4523
+3811
+3811
+3811
+38
+0
+31
+3894
+3894
+3894
+299
+511
+1938
+1938
+1938
+4818
+4818
+4818
+8
+1353
+1353
+1353
+740
+2669
+2669
+2669
+102
+264
+514
+4359
+4359
+4359
+148
+29
+2490
+2490
+2490
+54
+31
+1
+38
+51
+32
+1602
+25
+885
+148
+3639
+3639
+3639
+135
+135
+135
+231
+3
+182
+1374
+1374
+1374
+2692
+2692
+2692
+1213
+1213
+1213
+30
+53
+3905
+3905
+3905
+462
+34
+3
+366
+366
+366
+3839
+3839
+3839
+31
+6
+0
+4225
+4225
+4225
+2726
+1946
+67
+258
+4412
+4412
+4412
+3482
+3482
+3482
+365
+3278
+3278
+3278
+76
+55
+1997
+1997
+1997
+365
+565
+125
+841
+841
+841
+45
+3404
+3404
+3404
+184
+2344
+4511
+4511
+4511
+223
+56
+2
+33
+365
+31
+2675
+3
+71
+2741
+2741
+2741
+0
+4935
+4935
+4935
+21
+690
+56
+3709
+3709
+3709
+481
+481
+481
+55
+162
+361
+1107
+2999
+2999
+2999
+106
+16
+38
+559
+1
+24
+2556
+905
+31
+106
+387
+192
+8
+4101
+3479
+3479
+3479
+101
+0
+230
+0
+58
+2424
+2424
+2424
+72
+3429
+3429
+3429
+554
+52
+70
+0
+28
+169
+4193
+4193
+4193
+3
+36
+248
+9
+4193
+4193
+4193
+4526
+4526
+4526
+0
+43
+228
+524
+144
+144
+144
+650
+741
+31
+567
+30
+368
+169
+4459
+40
+184
+2241
+1260
+793
+90
+1160
+0
+47
+345
+514
+62
+1262
+1495
+3475
+3475
+3475
+3075
+221
+90
+25
+51
+55
+38
+746
+39
+869
+24
+33
+0
+595
+3883
+3883
+3883
+71
+1256
+1256
+1256
+238
+293
+528
+2
+368
+75
+1146
+4726
+4726
+4726
+163
+106
+452
+3873
+3873
+3873
+46
+25
+184
+26
+1363
+1996
+78
+30
+641
+380
+62
+733
+235
+53
+0
+90
+163
+145
+52
+24
+2266
+128
+25
+98
+206
+834
+239
+372
+34
+164
+537
+88
+151
+0
+1639
+1639
+1639
+27
+20
+60
+4560
+4560
+4560
+78
+1
+0
+40
+0
+44
+32
+413
+22
+158
+115
+21
+1504
+1504
+1504
+546
+546
+546
+471
+180
+180
+180
+0
+2433
+40
+3850
+3850
+3850
+4440
+4440
+4440
+1036
+20
+60
+3332
+3332
+3332
+1151
+1151
+1151
+115
+24
+46
+63
+2948
+105
+0
+610
+229
+229
+229
+0
+88
+169
+123
+407
+136
+862
+2905
+2905
+2905
+0
+480
+391
+30
+5
+190
+17
+266
+52
+76
+196
+367
+28
+366
+2
+60
+1
+2270
+259
+135
+1436
+365
+55
+338
+0
+70
+580
+46
+532
+29
+96
+91
+91
+31
+22
+71
+71
+71
+40
+4145
+4145
+4145
+22
+365
+184
+1360
+176
+1
+122
+991
+80
+4386
+4386
+4386
+3278
+58
+181
+21
+832
+37
+4283
+4283
+4283
+156
+3153
+34
+125
+276
+33
+3869
+3869
+3869
+496
+318
+88
+1370
+0
+4601
+4601
+4601
+75
+65
+3175
+3175
+3175
+58
+525
+1483
+365
+565
+1307
+184
+26
+4640
+4640
+4640
+4333
+4333
+4333
+3
+4645
+4645
+4645
+1844
+434
+1659
+1659
+1659
+1
+952
+952
+952
+2923
+51
+3579
+3579
+3579
+1240
+28
+23
+1871
+49
+874
+366
+53
+123
+0
+1
+3816
+25
+36
+888
+3099
+41
+597
+1518
+1518
+1518
+562
+0
+28
+21
+3954
+3954
+3954
+148
+188
+30
+54
+520
+53
+2320
+3894
+3894
+3894
+40
+8
+104
+650
+4187
+4187
+4187
+2961
+2961
+2961
+48
+1276
+34
+572
+796
+23
+21
+0
+0
+4815
+4815
+4815
+27
+174
+4671
+4671
+4671
+145
+356
+2761
+2145
+149
+2522
+127
+3553
+3553
+3553
+48
+22
+1515
+71
+1449
+206
+0
+1001
+69
+24
+21
+226
+53
+4804
+4804
+4804
+4439
+4439
+4439
+56
+0
+42
+509
+0
+201
+1992
+72
+25
+2
+0
+588
+588
+588
+1360
+1022
+938
+938
+938
+1728
+179
+654
+32
+2256
+1002
+65
+1065
+1065
+1065
+118
+440
+151
+1
+3964
+3964
+3964
+205
+1067
+7
+243
+27
+4637
+4637
+4637
+328
+3577
+3577
+3577
+165
+950
+137
+50
+860
+225
+3897
+554
+931
+365
+23
+852
+3169
+2
+186
+24
+3976
+3976
+3976
+3980
+3980
+3980
+0
+2
+4129
+4129
+4129
+1426
+36
+0
+4569
+4569
+4569
+2809
+3549
+3549
+3549
+45
+365
+883
+883
+883
+677
+23
+368
+365
+196
+1621
+1334
+3880
+1419
+1
+2
+1297
+1772
+1951
+206
+33
+3461
+1
+26
+57
+4237
+3717
+3717
+3717
+22
+20
+3967
+3967
+3967
+29
+3132
+3132
+3132
+33
+1
+3764
+93
+97
+16
+983
+983
+983
+3967
+3967
+3967
+1380
+20
+937
+1
+3882
+3882
+3882
+36
+54
+0
+21
+29
+55
+2822
+2822
+2822
+120
+365
+20
+44
+97
+132
+220
+149
+3045
+2124
+2124
+2124
+22
+4993
+4993
+4993
+983
+365
+106
+0
+182
+4144
+4144
+4144
+4046
+4046
+4046
+1038
+0
+143
+100
+1470
+1470
+1470
+880
+17
+1749
+74
+1
+110
+0
+20
+216
+261
+153
+26
+877
+3910
+58
+293
+2401
+2401
+2401
+0
+611
+115
+100
+847
+304
+113
+22
+255
+2497
+97
+992
+34
+31
+0
+52
+1727
+1727
+1727
+37
+3513
+3513
+3513
+4885
+4885
+4885
+31
+25
+632
+632
+632
+3965
+3965
+3965
+1045
+265
+265
+265
+4688
+4688
+4688
+3430
+705
+2367
+285
+0
+2532
+2532
+2532
+614
+494
+2312
+2312
+2312
+303
+303
+303
+74
+40
+3184
+3184
+3184
+4974
+4974
+4974
+612
+378
+4058
+4058
+4058
+358
+1
+84
+795
+4577
+4577
+4577
+727
+174
+2312
+0
+4045
+4045
+4045
+2182
+4823
+4823
+4823
+54
+368
+2381
+56
+60
+2739
+2739
+2739
+0
+3004
+3004
+3004
+98
+8
+37
+367
+367
+50
+102
+70
+53
+3788
+3788
+3788
+697
+201
+0
+4874
+4874
+4874
+126
+126
+126
+88
+1036
+1036
+1036
+1732
+8
+244
+4822
+4822
+4822
+31
+305
+1
+206
+1
+74
+0
+58
+4070
+4070
+4070
+2922
+2922
+2922
+1
+1305
+1305
+1305
+24
+28
+0
+34
+38
+130
+40
+0
+26
+2573
+2573
+2573
+44
+2200
+253
+253
+253
+346
+76
+4306
+4306
+4306
+83
+671
+0
+266
+1
+931
+229
+2369
+2369
+2369
+195
+38
+65
+28
+39
+2782
+42
+46
+924
+116
+3188
+3188
+3188
+1
+37
+37
+37
+4910
+4910
+4910
+26
+0
+70
+112
+784
+163
+411
+2
+3158
+3158
+3158
+2375
+4249
+4249
+4249
+33
+65
+39
+31
+454
+230
+0
+74
+597
+139
+26
+3249
+3249
+3249
+2464
+92
+38
+33
+4627
+2122
+2122
+2122
+25
+0
+386
+8
+344
+1000
+1000
+1000
+622
+1962
+101
+2
+1365
+1365
+1365
+330
+46
+401
+36
+1
+21
+3607
+3607
+3607
+70
+29
+45
+199
+26
+21
+20
+31
+1
+1947
+53
+31
+4842
+4842
+4842
+28
+71
+23
+42
+31
+474
+1077
+188
+201
+217
+33
+0
+29
+34
+0
+3
+3990
+3990
+3990
+39
+25
+24
+64
+47
+31
+4361
+4361
+4361
+76
+55
+40
+29
+4306
+4306
+4306
+32
+49
+235
+1762
+1762
+1762
+38
+335
+4
+3961
+3961
+3961
+73
+396
+553
+0
+44
+25
+2518
+43
+30
+0
+33
+0
+35
+159
+159
+159
+2825
+2825
+2825
+40
+3895
+29
+74
+0
+723
+189
+642
+642
+642
+30
+481
+51
+64
+68
+1157
+1157
+1157
+288
+38
+21
+31
+440
+256
+170
+3
+0
+4871
+4871
+4871
+29
+37
+26
+1337
+298
+393
+2436
+2436
+2436
+2
+1571
+1571
+1571
+27
+291
+27
+39
+400
+278
+25
+4068
+28
+1290
+1290
+1290
+54
+919
+319
+808
+2
+35
+4338
+4338
+4338
+594
+668
+32
+3975
+3975
+3975
+480
+179
+0
+95
+395
+4359
+4359
+4359
+897
+4646
+4646
+4646
+1466
+1466
+1466
+687
+35
+33
+336
+109
+195
+45
+174
+4713
+4713
+4713
+59
+525
+274
+2
+29
+26
+692
+692
+692
+34
+62
+4707
+4707
+4707
+1
+1
+28
+427
+873
+873
+873
+33
+36
+59
+174
+2825
+2825
+2825
+33
+45
+43
+1735
+0
+27
+182
+25
+42
+0
+90
+0
+0
+0
+29
+3170
+4125
+4125
+4125
+231
+4346
+4346
+4346
+32
+242
+28
+33
+3609
+141
+1
+44
+34
+28
+3658
+3658
+3658
+310
+2717
+4967
+4967
+4967
+353
+293
+1157
+100
+4072
+4072
+4072
+4594
+156
+31
+0
+37
+298
+1773
+1773
+1773
+22
+2130
+96
+1724
+37
+34
+245
+35
+256
+33
+34
+263
+525
+38
+731
+1
+36
+53
+29
+76
+20
+894
+561
+32
+389
+61
+29
+33
+24
+38
+2494
+29
+4158
+4158
+4158
+28
+40
+418
+3054
+3054
+3054
+29
+56
+25
+34
+780
+780
+780
+1
+2474
+2474
+2474
+3531
+3531
+3531
+0
+269
+939
+26
+148
+40
+47
+79
+945
+45
+44
+64
+156
+648
+1
+403
+94
+27
+4400
+4400
+4400
+24
+33
+21
+30
+204
+33
+2049
+736
+1415
+37
+28
+2571
+2571
+2571
+30
+2505
+0
+77
+1
+1
+0
+24
+0
+71
+4184
+1103
+818
+553
+2553
+914
+230
+4795
+4795
+4795
+86
+359
+163
+389
+20
+0
+2302
+2302
+2302
+88
+29
+36
+4031
+4031
+4031
+3164
+688
+207
+71
+1
+0
+4339
+4339
+4339
+3326
+258
+30
+1395
+28
+1570
+2574
+33
+432
+2819
+2819
+2819
+1
+3348
+26
+396
+20
+1554
+20
+0
+1379
+27
+3083
+3083
+3083
+3028
+3028
+3028
+4385
+4385
+4385
+134
+101
+53
+24
+205
+59
+22
+205
+22
+1
+45
+1395
+413
+118
+1973
+1973
+1973
+122
+4141
+562
+149
+2151
+2151
+2151
+2936
+2936
+2936
+845
+845
+845
+1203
+1098
+1098
+1098
+44
+1536
+1536
+1536
+4879
+4879
+4879
+34
+31
+615
+36
+2
+92
+0
+92
+92
+69
+103
+1206
+1206
+1206
+1
+4309
+4309
+4309
+41
+731
+20
+34
+2940
+183
+4299
+2205
+2205
+2205
+16
+71
+699
+53
+67
+2572
+2572
+2572
+776
+0
+99
+80
+369
+2
+2922
+2922
+2922
+38
+60
+951
+951
+951
+21
+4811
+4811
+4811
+2
+2993
+2993
+2993
+24
+4343
+4343
+4343
+82
+297
+44
+1268
+2536
+2536
+2536
+21
+3606
+3606
+3606
+0
+2096
+0
+673
+47
+342
+27
+42
+132
+22
+44
+127
+102
+654
+1810
+2820
+26
+630
+45
+30
+147
+4225
+4225
+4225
+1
+92
+2465
+44
+279
+322
+68
+30
+231
+3571
+2193
+3104
+4060
+4060
+4060
+31
+1075
+20
+32
+1492
+146
+1178
+4
+27
+314
+33
+20
+127
+64
+558
+0
+34
+1445
+1445
+1445
+146
+1
+70
+1
+978
+4289
+4289
+4289
+177
+44
+1
+54
+3757
+3757
+3757
+35
+35
+35
+240
+1
+269
+32
+83
+408
+21
+31
+1789
+41
+413
+58
+1096
+191
+33
+1203
+0
+994
+2
+443
+756
+756
+756
+1050
+39
+21
+153
+1174
+162
+357
+69
+4270
+4270
+4270
+32
+27
+364
+33
+0
+103
+491
+75
+72
+182
+48
+615
+615
+615
+439
+509
+84
+31
+274
+61
+392
+4127
+366
+1
+734
+55
+83
+22
+101
+22
+333
+0
+50
+113
+21
+404
+3081
+3081
+3081
+0
+27
+178
+62
+38
+374
+2
+0
+95
+1
+38
+55
+32
+35
+4201
+489
+489
+489
+1174
+987
+125
+4462
+4462
+4462
+822
+1036
+302
+178
+46
+21
+34
+171
+171
+171
+1538
+1
+1829
+1829
+1829
+21
+2
+3033
+3033
+3033
+68
+731
+33
+863
+4218
+4218
+4218
+287
+753
+55
+21
+0
+488
+61
+82
+2518
+54
+35
+25
+43
+367
+852
+852
+852
+26
+23
+20
+21
+168
+31
+18
+417
+235
+8
+35
+0
+295
+10
+3380
+3380
+3380
+3712
+3712
+3712
+1529
+1624
+3
+45
+323
+64
+3
+785
+1097
+23
+30
+3033
+9
+0
+76
+2
+25
+0
+65
+1147
+84
+218
+41
+4448
+91
+30
+4728
+4728
+4728
+35
+32
+3536
+3536
+3536
+0
+2193
+88
+371
+910
+0
+1
+999
+350
+260
+31
+20
+311
+2106
+0
+1159
+189
+1
+3230
+3230
+3230
+55
+145
+86
+1
+59
+379
+0
+2192
+21
+1
+104
+264
+1428
+2829
+2829
+2829
+91
+29
+1948
+1948
+1948
+1
+28
+97
+1209
+366
+26
+4846
+4846
+4846
+272
+0
+1401
+1401
+1401
+2
+50
+3654
+3654
+3654
+2
+221
+4929
+4929
+4929
+92
+56
+1
+1097
+4814
+4814
+4814
+148
+156
+1
+24
+270
+270
+270
+22
+29
+234
+954
+3444
+3444
+3444
+690
+690
+690
+79
+3653
+30
+2560
+2560
+2560
+1126
+476
+8
+280
+2196
+100
+1584
+1234
+1
+0
+22
+5
+0
+4
+2065
+2065
+2065
+181
+145
+0
+129
+463
+89
+839
+0
+894
+3322
+3322
+3322
+75
+3
+3862
+3862
+3862
+393
+412
+113
+653
+47
+45
+0
+0
+63
+2
+1570
+353
+136
+31
+118
+134
+1823
+431
+89
+2
+74
+733
+733
+733
+440
+20
+35
+84
+43
+33
+828
+16
+821
+202
+121
+1327
+1327
+1327
+645
+6
+305
+112
+401
+26
+67
+61
+41
+450
+317
+1
+4121
+4121
+4121
+100
+0
+2014
+2014
+2014
+2
+1
+27
+31
+277
+4140
+4140
+4140
+118
+3
+29
+26
+3301
+3301
+3301
+22
+22
+1
+0
+230
+0
+875
+39
+4121
+4121
+4121
+910
+910
+910
+8
+0
+93
+153
+12
+11
+295
+3300
+3300
+3300
+2505
+2505
+2505
+484
+484
+484
+216
+150
+0
+35
+47
+0
+0
+0
+495
+4512
+64
+205
+0
+352
+274
+128
+4940
+4940
+4940
+367
+39
+149
+4781
+4781
+4781
+296
+74
+60
+44
+2820
+0
+0
+86
+288
+734
+119
+30
+44
+1
+135
+370
+21
+3702
+3702
+3702
+1
+304
+26
+58
+24
+4184
+4184
+4184
+1191
+1191
+1191
+356
+3656
+7
+1526
+1526
+1526
+2
+208
+1200
+21
+3506
+3506
+3506
+40
+63
+804
+266
+1161
+1161
+1161
+24
+2685
+31
+140
+25
+251
+3862
+3862
+3862
+24
+263
+61
+55
+33
+48
+108
+31
+495
+2017
+2017
+2017
+49
+114
+439
+1022
+32
+29
+475
+2
+29
+3268
+3268
+3268
+1539
+50
+268
+45
+160
+513
+0
+64
+1239
+342
+342
+342
+172
+4027
+4027
+4027
+1237
+1237
+1237
+210
+279
+279
+279
+6
+515
+1
+20
+0
+104
+23
+3
+32
+389
+3737
+3737
+3737
+1
+3259
+3259
+3259
+3830
+911
+566
+0
+54
+169
+283
+30
+304
+2908
+712
+31
+0
+23
+1
+0
+79
+94
+834
+170
+0
+4292
+4292
+4292
+0
+326
+68
+779
+25
+3844
+3844
+3844
+64
+5
+232
+4128
+4128
+4128
+4162
+4162
+4162
+109
+728
+235
+406
+164
+41
+3091
+4577
+4577
+4577
+23
+1
+267
+161
+510
+55
+1151
+136
+0
+44
+683
+9
+356
+38
+4028
+4028
+4028
+3374
+3374
+3374
+2995
+407
+39
+31
+236
+895
+196
+3275
+3275
+3275
+1656
+338
+2142
+2662
+4013
+4013
+4013
+666
+0
+67
+184
+182
+397
+450
+450
+450
+578
+3938
+1373
+544
+578
+372
+48
+0
+48
+2424
+590
+919
+13
+0
+859
+2800
+2800
+2800
+60
+79
+0
+549
+0
+4138
+4138
+4138
+2380
+2380
+2380
+10
+4534
+4534
+4534
+3872
+3872
+3872
+30
+147
+802
+48
+2661
+2661
+2661
+4072
+1613
+44
+560
+24
+169
+35
+4281
+4281
+4281
+309
+468
+3268
+3268
+3268
+148
+0
+124
+318
+60
+179
+62
+1
+29
+30
+50
+3368
+22
+738
+216
+367
+367
+367
+1877
+107
+224
+111
+1
+22
+2402
+3
+21
+39
+0
+278
+366
+602
+3343
+3343
+3343
+32
+189
+205
+48
+22
+2709
+160
+2728
+4991
+4991
+4991
+3232
+3232
+3232
+189
+0
+23
+595
+606
+1218
+1218
+1218
+38
+214
+1219
+1219
+1219
+1319
+590
+590
+590
+233
+4131
+4131
+4131
+940
+622
+588
+1698
+4700
+4700
+4700
+110
+3813
+3813
+3813
+26
+0
+4
+1116
+37
+3129
+3129
+3129
+0
+95
+95
+95
+33
+308
+413
+69
+49
+908
+220
+577
+577
+577
+366
+3092
+3092
+3092
+1
+64
+9
+1
+4405
+4405
+4405
+97
+218
+0
+29
+1
+50
+1
+94
+3539
+77
+1661
+20
+110
+0
+1304
+257
+815
+211
+23
+1
+91
+688
+45
+230
+864
+0
+2218
+2218
+2218
+106
+2
+2696
+2696
+2696
+202
+397
+2798
+1317
+30
+382
+2728
+4334
+4334
+4334
+3914
+3914
+3914
+32
+32
+4834
+4834
+4834
+4833
+4833
+4833
+1598
+1598
+1598
+473
+1
+2
+438
+4213
+4213
+4213
+3221
+3221
+3221
+26
+103
+135
+0
+3834
+3834
+3834
+3861
+3861
+3861
+84
+82
+82
+82
+598
+2559
+21
+28
+367
+367
+367
+1
+78
+895
+33
+236
+123
+907
+4018
+4018
+4018
+352
+352
+352
+380
+575
+1638
+1638
+1638
+666
+2944
+115
+2029
+2029
+2029
+857
+178
+45
+27
+96
+282
+582
+176
+44
+1
+368
+4880
+4880
+4880
+1622
+2064
+0
+1
+237
+30
+101
+0
+204
+248
+248
+248
+82
+1290
+1290
+1290
+489
+47
+56
+31
+31
+210
+1159
+1664
+1664
+1664
+30
+1185
+1074
+1074
+1074
+367
+1024
+45
+4995
+4995
+4995
+548
+548
+548
+5
+322
+1197
+581
+46
+2134
+2134
+2134
+211
+622
+0
+49
+31
+1550
+239
+129
+2
+20
+991
+0
+576
+576
+576
+337
+4329
+4329
+4329
+57
+2733
+41
+46
+4367
+4367
+4367
+4635
+4635
+4635
+0
+868
+868
+868
+863
+25
+113
+125
+56
+32
+367
+0
+883
+2770
+2770
+2770
+3852
+46
+24
+28
+32
+926
+112
+3834
+0
+67
+0
+1650
+1650
+1650
+0
+474
+474
+474
+1
+369
+104
+47
+253
+253
+253
+1373
+2020
+2020
+2020
+0
+313
+1050
+1352
+1352
+1352
+2316
+2316
+2316
+0
+4286
+4286
+4286
+1004
+1348
+73
+292
+0
+966
+63
+176
+176
+176
+3331
+3331
+3331
+286
+3477
+21
+4172
+4172
+4172
+2
+659
+41
+718
+718
+718
+67
+28
+977
+42
+50
+32
+61
+4299
+4299
+4299
+262
+70
+54
+1364
+1364
+1364
+1
+1
+333
+107
+0
+189
+50
+287
+1659
+0
+3114
+3114
+3114
+732
+90
+3449
+3449
+3449
+2126
+2126
+2126
+522
+942
+307
+29
+1472
+1278
+2421
+1617
+109
+281
+42
+50
+2509
+2509
+2509
+367
+0
+1998
+1998
+1998
+4015
+4015
+4015
+142
+69
+9
+244
+2246
+2607
+72
+2521
+2521
+2521
+3119
+3119
+3119
+1
+452
+225
+0
+38
+3976
+74
+0
+93
+4565
+4565
+4565
+78
+32
+62
+2849
+2849
+2849
+63
+314
+12
+0
+362
+562
+34
+931
+275
+52
+155
+281
+4391
+4391
+4391
+276
+120
+120
+120
+1764
+44
+34
+3615
+1
+29
+53
+90
+369
+22
+26
+2543
+2543
+2543
+226
+29
+331
+95
+337
+635
+197
+0
+35
+1404
+1134
+0
+54
+118
+985
+1570
+28
+370
+163
+3936
+975
+975
+975
+238
+300
+51
+246
+22
+652
+365
+73
+117
+117
+117
+497
+269
+1995
+2024
+2856
+53
+22
+82
+189
+1
+48
+152
+4032
+4032
+4032
+28
+1147
+1147
+1147
+90
+2539
+0
+3285
+3285
+3285
+586
+15
+2737
+4276
+4276
+4276
+98
+86
+2958
+2106
+3483
+3634
+0
+4382
+1294
+1294
+1294
+57
+559
+559
+559
+61
+202
+2745
+27
+700
+700
+700
+115
+0
+1
+1823
+1
+4204
+178
+2355
+27
+1
+236
+28
+284
+197
+0
+8
+171
+749
+157
+37
+590
+457
+1224
+2576
+687
+687
+687
+33
+829
+202
+2139
+24
+1328
+1328
+1328
+0
+1
+31
+31
+0
+76
+0
+257
+28
+101
+2142
+2142
+2142
+1766
+306
+30
+42
+0
+1285
+1
+216
+2360
+2360
+2360
+20
+82
+46
+37
+335
+408
+1462
+1462
+1462
+4342
+4342
+4342
+22
+468
+1
+4007
+4007
+4007
+1097
+1
+3655
+42
+2150
+1809
+1809
+1809
+0
+1
+1793
+1793
+1793
+335
+223
+1253
+306
+1766
+4052
+1
+2001
+2001
+2001
+1562
+1562
+1562
+611
+28
+4355
+1521
+196
+0
+1732
+5
+2574
+2574
+2574
+173
+40
+623
+1313
+430
+88
+1
+769
+769
+769
+0
+345
+4768
+4768
+4768
+1
+385
+1176
+1176
+1176
+26
+30
+79
+129
+4
+44
+224
+641
+0
+355
+82
+142
+24
+122
+621
+1709
+3657
+3657
+3657
+154
+0
+3704
+0
+424
+280
+280
+280
+3610
+3610
+3610
+31
+1
+32
+335
+1
+20
+0
+0
+3
+1
+4678
+4678
+4678
+27
+109
+121
+2231
+701
+814
+814
+814
+36
+304
+691
+210
+1
+1842
+1
+0
+31
+0
+95
+1464
+1464
+1464
+5
+281
+0
+49
+4073
+4073
+4073
+4411
+4411
+4411
+640
+640
+640
+0
+55
+67
+55
+3906
+3906
+3906
+31
+2
+1
+60
+31
+6
+31
+1475
+226
+2931
+670
+670
+670
+373
+373
+373
+331
+0
+1476
+3
+1578
+519
+2
+183
+69
+294
+2057
+2057
+2057
+0
+102
+62
+41
+4278
+4278
+4278
+3612
+3612
+3612
+53
+1
+26
+31
+1680
+329
+32
+311
+40
+30
+37
+31
+46
+4788
+3210
+3210
+3210
+20
+49
+1134
+3771
+3771
+3771
+683
+0
+0
+1088
+25
+29
+2912
+2912
+2912
+0
+1
+177
+0
+3668
+3668
+3668
+294
+40
+33
+30
+1
+4705
+4705
+4705
+0
+0
+357
+103
+11
+298
+4784
+4784
+4784
+26
+1
+4382
+4382
+4382
+167
+22
+0
+3061
+3061
+3061
+119
+531
+367
+201
+30
+0
+177
+31
+0
+58
+29
+4
+155
+4095
+4095
+4095
+682
+55
+2256
+2256
+2256
+101
+693
+20
+240
+31
+41
+4494
+4494
+4494
+769
+4
+800
+25
+752
+1
+238
+24
+32
+53
+0
+0
+28
+1
+2109
+46
+200
+168
+398
+87
+3297
+351
+0
+67
+338
+2249
+1190
+24
+340
+340
+340
+3117
+3117
+3117
+229
+408
+31
+1887
+1887
+1887
+574
+574
+574
+2
+2563
+2563
+2563
+24
+378
+53
+3754
+3754
+3754
+0
+47
+50
+2151
+85
+4019
+4019
+4019
+4390
+4390
+4390
+946
+18
+2830
+374
+410
+410
+410
+1
+1081
+54
+1
+3274
+82
+375
+945
+139
+0
+3273
+3273
+3273
+2219
+2219
+2219
+4753
+4753
+4753
+354
+28
+395
+25
+332
+63
+0
+2
+3285
+29
+0
+49
+106
+75
+30
+0
+4100
+4100
+4100
+1
+1
+327
+15
+31
+27
+1
+1876
+31
+1153
+30
+46
+308
+1545
+1545
+1545
+21
+180
+3
+22
+119
+174
+202
+700
+27
+31
+4163
+4163
+4163
+2200
+2200
+2200
+1
+140
+31
+55
+20
+47
+36
+253
+0
+168
+27
+31
+1
+200
+1903
+1903
+1903
+437
+27
+601
+1
+32
+51
+983
+1
+3472
+3472
+3472
+91
+35
+37
+1173
+1173
+1173
+1
+59
+20
+0
+1
+4090
+4090
+4090
+77
+530
+2556
+1807
+1807
+1807
+3184
+3184
+3184
+10
+23
+1630
+62
+34
+7
+55
+0
+1572
+0
+28
+2
+35
+84
+1
+79
+1769
+1769
+1769
+92
+3086
+3086
+3086
+419
+10
+4877
+4877
+4877
+1857
+4504
+4504
+4504
+34
+0
+4010
+4010
+4010
+37
+24
+40
+0
+135
+437
+0
+0
+0
+3784
+3784
+3784
+31
+20
+78
+1
+31
+32
+0
+92
+60
+268
+140
+480
+2962
+2962
+2962
+23
+58
+44
+1582
+1582
+1582
+665
+22
+0
+44
+28
+87
+489
+3
+2917
+90
+418
+32
+24
+3291
+562
+93
+3792
+3792
+3792
+90
+3046
+31
+1
+1832
+1832
+1832
+22
+4068
+4042
+4042
+4042
+257
+20
+22
+0
+345
+440
+421
+68
+0
+3795
+4038
+4038
+4038
+31
+1090
+98
+25
+25
+25
+2383
+65
+98
+358
+2269
+2269
+2269
+42
+173
+59
+0
+143
+0
+2303
+3988
+3988
+3988
+767
+176
+1
+746
+827
+33
+730
+197
+269
+47
+24
+1
+1498
+1498
+1498
+2683
+6
+51
+0
+440
+4515
+4515
+4515
+30
+1586
+33
+597
+52
+1079
+915
+915
+915
+21
+79
+106
+62
+611
+102
+2924
+132
+2981
+2981
+2981
+2716
+2716
+2716
+51
+2954
+78
+24
+61
+532
+660
+1523
+1523
+1523
+2484
+0
+95
+233
+25
+16
+1485
+28
+181
+3127
+31
+0
+1
+1244
+49
+59
+4
+255
+155
+30
+0
+2576
+171
+3840
+3840
+3840
+484
+3443
+3443
+3443
+61
+4808
+4808
+4808
+67
+2016
+2016
+2016
+4513
+4513
+4513
+3472
+3472
+3472
+57
+2
+22
+45
+127
+34
+30
+1
+619
+142
+0
+118
+507
+1636
+1069
+634
+46
+2991
+3
+1590
+61
+466
+741
+1837
+1837
+1837
+36
+3638
+24
+4633
+4633
+4633
+103
+21
+437
+20
+23
+513
+565
+58
+991
+112
+3795
+3795
+3795
+1846
+1846
+1846
+481
+60
+559
+27
+204
+2758
+2758
+2758
+32
+1346
+255
+1
+258
+68
+238
+28
+0
+370
+72
+1505
+1505
+1505
+1371
+61
+1
+61
+809
+463
+1140
+505
+3468
+741
+100
+357
+357
+357
+1
+1
+149
+2597
+2597
+2597
+486
+486
+486
+67
+211
+2251
+761
+14
+0
+664
+4
+213
+258
+476
+65
+4958
+4958
+4958
+851
+91
+20
+841
+841
+841
+41
+1581
+1581
+1581
+23
+2477
+143
+174
+127
+52
+73
+107
+59
+1446
+1446
+1446
+261
+1
+24
+489
+1
+458
+58
+305
+45
+397
+1
+26
+4004
+4004
+4004
+465
+1
+4687
+4687
+4687
+4210
+4210
+4210
+433
+3750
+3750
+3750
+97
+31
+89
+112
+0
+1526
+1526
+1526
+564
+28
+564
+1200
+25
+21
+1933
+1933
+1933
+359
+4131
+4131
+4131
+320
+2994
+98
+4361
+4361
+4361
+0
+138
+191
+103
+124
+0
+67
+1776
+3321
+3321
+3321
+500
+0
+918
+1553
+1553
+1553
+474
+21
+0
+1187
+700
+95
+4548
+4548
+4548
+583
+583
+583
+2484
+2484
+2484
+58
+878
+134
+3548
+3548
+3548
+532
+63
+26
+130
+2
+101
+27
+23
+248
+58
+31
+0
+1962
+157
+52
+0
+0
+1
+376
+233
+315
+1337
+2401
+522
+57
+188
+156
+249
+350
+39
+225
+276
+92
+276
+31
+2
+37
+460
+2555
+2555
+2555
+4609
+4609
+4609
+0
+26
+366
+1178
+390
+57
+0
+112
+605
+645
+365
+483
+22
+221
+59
+54
+94
+23
+4419
+4419
+4419
+4585
+3843
+3843
+3843
+250
+250
+250
+1695
+1695
+1695
+611
+46
+65
+3
+1008
+1008
+1008
+115
+68
+0
+561
+42
+50
+3032
+3032
+3032
+2391
+0
+1975
+28
+1409
+1409
+1409
+36
+463
+206
+0
+71
+90
+0
+0
+605
+52
+78
+4809
+4809
+4809
+336
+38
+0
+244
+42
+493
+0
+50
+406
+406
+406
+24
+4433
+4433
+4433
+0
+3909
+3909
+3909
+4589
+4589
+4589
+68
+46
+1666
+21
+1
+2479
+113
+1
+230
+2832
+2832
+2832
+46
+1150
+1150
+1150
+4666
+4666
+4666
+32
+364
+0
+0
+178
+109
+96
+2
+2282
+2282
+2282
+48
+717
+3080
+32
+78
+1937
+1937
+1937
+1
+96
+186
+607
+80
+4985
+4985
+4985
+281
+254
+1
+168
+2
+88
+2476
+2476
+2476
+32
+20
+4782
+4782
+4782
+2482
+193
+698
+791
+791
+791
+243
+122
+173
+270
+980
+612
+574
+21
+1432
+27
+30
+23
+5
+24
+105
+3778
+3778
+3778
+147
+118
+1697
+1697
+1697
+32
+1466
+26
+1548
+1078
+1078
+1078
+1561
+3757
+3757
+3757
+0
+109
+252
+125
+110
+58
+216
+237
+0
+119
+1826
+1748
+0
+75
+6
+321
+61
+285
+28
+78
+587
+46
+1349
+328
+295
+879
+273
+71
+224
+21
+270
+27
+0
+246
+3173
+32
+2142
+129
+3805
+392
+290
+39
+394
+28
+0
+0
+53
+0
+32
+94
+1710
+0
+101
+111
+242
+1
+3507
+3507
+3507
+34
+1427
+1427
+1427
+3863
+3863
+3863
+1
+601
+215
+981
+981
+981
+0
+48
+0
+21
+249
+249
+249
+0
+286
+38
+1754
+1404
+1404
+1404
+3
+27
+1740
+1740
+1740
+323
+30
+134
+118
+202
+2390
+384
+365
+60
+78
+31
+73
+1813
+3616
+3616
+3616
+735
+15
+0
+3827
+3827
+3827
+562
+1821
+640
+1016
+0
+21
+2
+1
+0
+33
+95
+21
+1758
+3208
+1
+0
+1
+0
+587
+0
+365
+4456
+4456
+4456
+3253
+51
+247
+918
+50
+3298
+3298
+3298
+461
+3827
+1
+3590
+3590
+3590
+1
+1471
+370
+4839
+4839
+4839
+32
+42
+32
+356
+3515
+14
+4
+0
+0
+1042
+5
+1
+0
+14
+20
+1
+33
+727
+3
+27
+41
+146
+0
+1159
+1824
+1
+20
+1442
+1442
+1442
+0
+212
+2303
+2303
+2303
+3875
+636
+0
+0
+29
+1
+2
+36
+1402
+1402
+1402
+118
+673
+4732
+4732
+4732
+36
+61
+1064
+33
+708
+125
+3
+319
+1013
+1
+1
+373
+373
+373
+180
+362
+1
+21
+1324
+380
+123
+123
+123
+1
+106
+2500
+804
+646
+91
+575
+229
+309
+0
+215
+33
+3609
+36
+771
+38
+4978
+4978
+4978
+477
+30
+24
+0
+1457
+1457
+1457
+31
+2264
+0
+4
+1
+0
+885
+3
+722
+303
+539
+122
+31
+95
+36
+254
+345
+5
+0
+0
+13
+1
+34
+1306
+1468
+808
+808
+808
+0
+543
+77
+415
+4656
+4656
+4656
+374
+1189
+30
+2303
+2303
+2303
+214
+22
+26
+160
+25
+4694
+21
+25
+27
+20
+1
+406
+0
+21
+6
+30
+368
+1
+26
+4161
+4161
+4161
+1
+33
+835
+146
+3269
+3269
+3269
+0
+2
+35
+33
+0
+0
+23
+13
+0
+1581
+302
+4763
+4763
+4763
+4794
+4794
+4794
+24
+365
+1
+2
+266
+30
+4327
+4327
+4327
+29
+146
+3234
+35
+5
+156
+1
+1
+1
+369
+22
+641
+2
+3482
+3482
+3482
+25
+30
+4684
+4684
+4684
+2
+436
+0
+62
+48
+1
+6
+1
+0
+37
+2564
+2564
+2564
+0
+4775
+4775
+4775
+26
+1220
+1220
+1220
+3993
+3993
+3993
+2193
+2563
+0
+156
+22
+0
+3
+926
+2047
+2047
+2047
+364
+3829
+3829
+3829
+53
+27
+1063
+2056
+40
+208
+0
+2111
+157
+20
+266
+34
+0
+88
+819
+7
+433
+3895
+3895
+3895
+39
+27
+90
+3
+41
+111
+30
+2828
+2828
+2828
+12
+464
+729
+729
+729
+417
+408
+0
+25
+1514
+35
+0
+415
+35
+4389
+4389
+4389
+55
+99
+4845
+4845
+4845
+3980
+52
+901
+0
+408
+4894
+4894
+4894
+59
+756
+46
+4822
+4822
+4822
+35
+1512
+155
+58
+2232
+447
+1
+246
+32
+38
+514
+50
+1100
+0
+745
+225
+225
+225
+33
+41
+37
+47
+20
+2
+1097
+32
+0
+59
+31
+447
+24
+37
+58
+36
+333
+4429
+4429
+4429
+248
+1497
+477
+63
+21
+0
+34
+0
+477
+0
+30
+23
+22
+145
+4791
+4791
+4791
+0
+31
+3129
+3129
+3129
+2477
+2477
+2477
+2191
+2191
+2191
+2
+31
+79
+36
+243
+120
+54
+1975
+1975
+1975
+34
+948
+948
+948
+0
+1975
+1975
+1975
+54
+239
+44
+857
+119
+0
+222
+58
+58
+58
+483
+1940 \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/data/xnotdate.json b/priv/static/metrics-graphics-3.0-alpha3/examples/data/xnotdate.json
new file mode 100644
index 0000000..989a08a
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/data/xnotdate.json
@@ -0,0 +1,34 @@
+[
+ {
+ "males": 50,
+ "females": 12
+ },
+ {
+ "males": 95,
+ "females": 66
+ },
+ {
+ "males": 143,
+ "females": 89
+ },
+ {
+ "males": 198,
+ "females": 105
+ },
+ {
+ "males": 244,
+ "females": 533
+ },
+ {
+ "males": 277,
+ "females": 175
+ },
+ {
+ "males": 344,
+ "females": 401
+ },
+ {
+ "males": 441,
+ "females": 1299
+ }
+]
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/examples.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/examples.htm
new file mode 100644
index 0000000..1219425
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/examples.htm
@@ -0,0 +1,113 @@
+<html lang='en'>
+<head>
+ <meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
+
+ <title>MetricsGraphics.js - Examples</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,700' rel='stylesheet' type='text/css'>
+ <link href='https://fonts.googleapis.com/css?family=PT+Serif:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href='https://netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.css' rel='stylesheet' type='text/css'>
+ <link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css' rel='stylesheet' type='text/css'>
+
+ <link href='metricsgraphics.css' rel='stylesheet' type='text/css'>
+ <link href='css/metricsgraphics-demo.css' rel='stylesheet' type='text/css' id='light'>
+ <link href='' rel='stylesheet' type='text/css' id='dark'>
+ <link href='' rel='stylesheet' type='text/css' id='accessible'>
+ <link href='css/highlightjs-default.css' rel='stylesheet' type='text/css' id='light-code'>
+ <link href='' rel='stylesheet' type='text/css' id='dark-code'>
+
+ <script src='js/lib/highlight.pack.js'></script>
+ <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js'></script>
+ <script src="https://d3js.org/d3.v4.min.js"></script>
+ <script src='https://unpkg.com/popper.js/dist/umd/popper.min.js'></script>
+
+ <!-- dev start -->
+ <script src='js/MG.js'></script>
+ <script src='js/misc/utility.js'></script>
+ <script src='js/common/data_graphic.js'></script>
+ <script src='js/common/hooks.js'></script>
+ <script src='js/common/register.js'></script>
+ <script src='js/common/bootstrap_tooltip_popover.js'></script>
+ <script src='js/common/scales.js'></script>
+ <script src='js/common/chart_title.js'></script>
+ <script src='js/common/y_axis.js'></script>
+ <script src='js/common/x_axis.js'></script>
+ <script src='js/common/scales.js'></script>
+ <script src='js/common/init.js'></script>
+ <script src='js/common/markers.js'></script>
+ <script src='js/common/rollover.js'></script>
+ <script src='js/common/zoom.js'></script>
+ <script src='js/common/brush.js'></script>
+ <script src='js/common/window_listeners.js'></script>
+ <script src='js/layout/bootstrap_dropdown.js'></script>
+ <script src='js/layout/button.js'></script>
+ <script src='js/charts/line.js'></script>
+ <script src='js/charts/histogram.js'></script>
+ <script src='js/charts/point.js'></script>
+ <script src='js/charts/bar.js'></script>
+ <script src='js/charts/table.js'></script>
+ <script src='js/charts/missing.js'></script>
+ <script src='js/misc/process.js'></script>
+ <script src='js/misc/smoothers.js'></script>
+ <script src='js/misc/formatters.js'></script>
+ <script src='js/misc/transitions.js'></script>
+ <script src='js/misc/error.js'></script>
+ <!-- dev end -->
+
+ <script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-51487512-1', 'metricsgraphicsjs.org');
+ ga('send', 'pageview');
+ </script>
+</head>
+
+<body>
+ <div class='container'>
+ <div class='head'>
+ <ul>
+ <li><a href='./'>Home</a></li>
+ <li><a href='https://github.com/metricsgraphics/metrics-graphics/releases'>Download</a></li>
+ <li><a href='interactive-demo.htm'>Interactive</a></li>
+ <li><a href='https://github.com/metricsgraphics/metrics-graphics'>Code</a></li>
+ <li><a href='https://github.com/metricsgraphics/metrics-graphics/issues'>Issues</a></li>
+ <li class='divider'>|</li>
+ <li><a href='#' id='light-css' class='pill active'>Light style</a></li>
+ <li><a href='#' id='dark-css' class='pill'>Dark style</a></li>
+ <li><a href='#' id='accessible-css' class='pill'>Accessible style</a></li>
+ </ul>
+
+ <img src='images/logo.svg' id='logo' class='svg' />
+ </div>
+
+ <ul class='examples text-center'>
+ <li><a href='#' id='goto-lines' class='pill'>Lines</a></li>
+ <li><a href='#' id='goto-multilines' class='pill'>Multiple Lines</a></li>
+ <li><a href='#' id='goto-data' class='pill'>Data</a></li>
+ <li><a href='#' id='goto-axes' class='pill'>Axes</a></li>
+ <li><a href='#' id='goto-rollovers' class='pill'>Rollovers</a></li>
+ <li><a href='#' id='goto-auto-time-formatting' class='pill'>Automatic time formatting</a></li>
+ <li><a href='#' id='goto-annotations' class='pill'>Annotations</a></li>
+ <li><a href='#' id='goto-updating' class='pill'>Updating</a></li>
+ <li><a href='#' id='goto-other' class='pill'>Other</a></li>
+ <li><a href='#' id='goto-brushing_zooming' class='pill'>Brushing &amp; Zooming</a></li>
+ <li><a href='#' id='goto-experimental' class='pill'>Experimental</a></li>
+ </ul>
+
+ <div id='trunk'></div>
+
+ <div class='footer'>
+ Created by <a href='https://twitter.com/alialmossawi'>Ali Almossawi</a>,
+ <a href='https://github.com/hamilton'>Hamilton Ulmer</a> &mdash; Metrics at
+ <a href='https://www.mozilla.org/en-US/'>Mozilla</a>
+ <br />Shared under the <a href='http://www.mozilla.org/MPL/2.0/'>
+ Mozilla Public License</a>.
+ </div>
+ </div> <!-- end container -->
+
+ <script src='js/main.js'></script>
+</body>
+</html>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/images/divider.png b/priv/static/metrics-graphics-3.0-alpha3/examples/images/divider.png
new file mode 100644
index 0000000..9647b67
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/images/divider.png
Binary files differ
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/images/logo.svg b/priv/static/metrics-graphics-3.0-alpha3/examples/images/logo.svg
new file mode 100644
index 0000000..c847025
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/images/logo.svg
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="480px" height="79px" viewBox="0 0 480 79" enable-background="new 0 0 480 79" xml:space="preserve">
+<g>
+ <path fill="#101111" d="M96.164,52.427c2.84-4.839,5.58-9.709,8.22-14.61c2.64-4.899,5.24-9.875,7.8-14.924
+ c0.56,0.038,1.149,0.064,1.77,0.083c0.62,0.019,1.27,0.027,1.95,0.027c0.56,0,1.11-0.027,1.65-0.083
+ c0.54-0.055,1.089-0.083,1.65-0.083c0.64,0,0.96,0.185,0.96,0.554c0,0.407-0.22,0.619-0.66,0.638
+ c-0.441,0.019-0.96,0.064-1.56,0.138c-1.121,0.121-1.821,0.904-2.1,2.348l-5.52,29.436c-0.12,0.683-0.18,1.225-0.18,1.626
+ c0,1.284,0.58,1.926,1.74,1.926c0.36,0,0.649,0.03,0.87,0.091c0.219,0.06,0.33,0.271,0.33,0.632c0,0.161-0.081,0.311-0.24,0.451
+ c-0.16,0.141-0.4,0.211-0.72,0.211c-0.32,0-0.86-0.051-1.62-0.149c-0.761-0.101-1.74-0.151-2.94-0.151
+ c-1.44,0-2.57,0.062-3.39,0.181c-0.82,0.119-1.331,0.181-1.53,0.181c-0.52,0-0.78-0.261-0.78-0.783c0-0.48,0.2-0.722,0.6-0.722
+ c0.399,0,0.879-0.08,1.44-0.241c0.879-0.24,1.449-0.672,1.71-1.295c0.26-0.621,0.53-1.574,0.81-2.859l5.88-29.676l-17.76,33.951
+ c-0.36,0.723-0.74,1.084-1.14,1.084c-0.24,0-0.39-0.14-0.45-0.421s-0.11-0.702-0.15-1.265l-1.38-31.844
+ c-2.961,9.15-5.081,16.204-6.36,21.16c-1.28,4.956-1.92,7.796-1.92,8.518c0,0.843,0.17,1.445,0.51,1.806
+ c0.339,0.362,0.72,0.623,1.14,0.783c0.42,0.16,0.8,0.29,1.14,0.391c0.339,0.101,0.51,0.312,0.51,0.632
+ c0,0.241-0.09,0.441-0.27,0.602c-0.18,0.161-0.39,0.241-0.63,0.241c-0.4,0-0.96-0.08-1.68-0.24c-0.72-0.159-1.661-0.239-2.82-0.239
+ c-0.999,0-1.83,0.06-2.49,0.18s-1.149,0.18-1.47,0.18c-0.519,0-0.78-0.199-0.78-0.6c0-0.439,0.24-0.71,0.72-0.811
+ c0.48-0.099,1.08-0.249,1.8-0.449c0.48-0.12,0.87-0.29,1.17-0.511c0.3-0.219,0.57-0.519,0.81-0.899c0.24-0.38,0.459-0.88,0.66-1.5
+ c0.2-0.62,0.439-1.39,0.72-2.311l7.62-26.16c0.08-0.2,0.14-0.459,0.18-0.78c0.039-0.32,0.06-0.68,0.06-1.08
+ c0-0.64-0.16-1.06-0.48-1.26c-0.32-0.2-0.67-0.33-1.05-0.39c-0.381-0.06-0.73-0.12-1.05-0.18c-0.321-0.06-0.48-0.25-0.48-0.57
+ c0-0.44,0.3-0.66,0.9-0.66c0.159,0,0.699,0.038,1.62,0.111c0.919,0.074,2.34,0.11,4.26,0.11c0.8,0,1.25,0.112,1.35,0.333
+ c0.099,0.221,0.169,0.657,0.21,1.306L96.164,52.427z"/>
+ <path fill="#101111" d="M122.144,51.947c0,2.24,0.489,3.96,1.47,5.16c0.979,1.199,2.25,1.8,3.81,1.8c2.16,0,4.26-1.22,6.3-3.66
+ c0.6-0.72,0.979-1.32,1.14-1.8c0.159-0.48,0.42-0.721,0.78-0.721c0.24,0,0.36,0.201,0.36,0.601c0,0.32-0.15,0.78-0.45,1.38
+ c-0.3,0.6-0.771,1.32-1.41,2.16c-2.601,3.359-5.3,5.04-8.1,5.04c-1.08,0-2.09-0.251-3.03-0.75c-0.94-0.5-1.761-1.2-2.46-2.101
+ c-0.7-0.899-1.25-1.989-1.65-3.27c-0.4-1.279-0.6-2.7-0.6-4.26c0-2.199,0.422-4.41,1.268-6.63c0.845-2.221,2.091-4.329,3.741-6.331
+ c1.528-1.879,3.128-3.279,4.797-4.2c1.67-0.92,3.269-1.38,4.798-1.38c1.81,0,3.278,0.561,4.405,1.68
+ c1.127,1.12,1.69,2.561,1.69,4.32c0,2.96-1.4,5.321-4.2,7.081c-2.8,1.761-6.96,2.86-12.479,3.3
+ C122.204,50.647,122.144,51.508,122.144,51.947z M132.074,44.807c2.22-1.879,3.33-4.199,3.33-6.959c0-1.12-0.27-2.02-0.81-2.7
+ c-0.54-0.68-1.271-1.02-2.19-1.02c-0.921,0-1.851,0.3-2.79,0.9c-0.94,0.6-1.851,1.491-2.73,2.67c-0.88,1.18-1.71,2.631-2.49,4.35
+ c-0.78,1.721-1.431,3.681-1.95,5.88C126.644,47.728,129.854,46.688,132.074,44.807z"/>
+ <path fill="#101111" d="M150.043,34.307h4.38c0.279,0,0.42,0.12,0.42,0.36c0,0.72-0.24,1.08-0.72,1.08h-4.38l-3.24,12.18
+ c-0.6,2.28-1.08,4.131-1.44,5.55c-0.36,1.421-0.54,2.431-0.54,3.03c0,0.4,0.09,0.72,0.27,0.96c0.18,0.24,0.369,0.36,0.57,0.36
+ c0.56,0,1.52-1.04,2.88-3.12c0.56-0.84,0.91-1.489,1.05-1.95c0.14-0.459,0.35-0.689,0.63-0.689c0.32,0,0.48,0.2,0.48,0.6
+ c0,0.6-0.681,1.9-2.04,3.9c-1.041,1.56-2.061,2.74-3.06,3.54c-1,0.799-1.84,1.199-2.52,1.199c-0.6,0-1.09-0.27-1.47-0.81
+ c-0.381-0.54-0.57-1.29-0.57-2.25c0-1.959,0.76-5.619,2.28-10.98l3.24-11.52h-3.66c-0.12,0-0.221-0.04-0.3-0.12
+ c-0.081-0.08-0.12-0.159-0.12-0.24c0-0.72,0.24-1.08,0.72-1.08h3.78l1.5-5.64c0.159-0.56,0.41-0.919,0.75-1.08
+ c0.339-0.159,0.89-0.24,1.65-0.24c0.799,0,1.2,0.201,1.2,0.6c0,0.16-0.1,0.6-0.3,1.32L150.043,34.307z"/>
+ <path fill="#101111" d="M161.383,50.17c2.28-5.588,4.329-9.758,6.15-12.512c1.82-2.754,3.57-4.132,5.25-4.132
+ c0.68,0,1.27,0.27,1.77,0.808c0.5,0.539,0.75,1.268,0.75,2.186c0,0.999-0.24,1.817-0.72,2.455c-0.48,0.639-1.02,0.958-1.62,0.958
+ c-0.48,0-0.87-0.149-1.17-0.449c-0.3-0.299-0.45-0.729-0.45-1.287c0-0.439-0.101-0.788-0.3-1.047
+ c-0.201-0.259-0.42-0.389-0.66-0.389c-0.681,0-1.93,1.557-3.75,4.67c-1.821,3.113-3.951,7.823-6.39,14.129
+ c-0.44,1.157-0.771,2.075-0.99,2.754c-0.221,0.679-0.42,1.197-0.6,1.557c-0.18,0.359-0.39,0.59-0.63,0.688
+ c-0.24,0.1-0.621,0.149-1.14,0.149c-0.96,0-1.44-0.239-1.44-0.718c0-0.08,0.06-0.34,0.18-0.778l4.44-16.879
+ c0.28-1.076,0.5-2.014,0.66-2.812c0.16-0.798,0.24-1.477,0.24-2.035c0-0.758-0.3-1.137-0.9-1.137c-0.52,0-1.041,0.28-1.56,0.84
+ c-0.521,0.561-1.011,1.17-1.47,1.83c-0.46,0.66-0.88,1.26-1.26,1.8c-0.381,0.54-0.651,0.81-0.81,0.81c-0.28,0-0.42-0.199-0.42-0.6
+ c0-0.16,0.199-0.6,0.6-1.32c0.399-0.72,1.06-1.62,1.98-2.7c2.16-2.559,3.98-3.84,5.46-3.84c0.6,0,1.08,0.229,1.44,0.689
+ c0.36,0.459,0.54,1.147,0.54,2.065c0,0.319-0.06,0.978-0.18,1.975c-0.12,0.999-0.36,2.195-0.72,3.593L161.383,50.17z"/>
+ <path fill="#101111" d="M179.802,55.007c-0.36,1.2-0.54,1.98-0.54,2.34c0,0.841,0.279,1.261,0.84,1.261c1,0,2.08-1.021,3.24-3.061
+ c0.639-1.08,1.069-1.869,1.29-2.37c0.219-0.499,0.41-0.75,0.57-0.75c0.279,0,0.42,0.141,0.42,0.42c0,0.681-0.801,2.241-2.4,4.681
+ c-0.921,1.4-1.84,2.45-2.76,3.149c-0.92,0.699-1.78,1.05-2.58,1.05c-1.601,0-2.4-1-2.4-3c0-1.039,0.22-2.329,0.66-3.869
+ c0.439-1.54,1.04-3.391,1.8-5.551l2.46-7.199c0.36-1.08,0.66-2.01,0.9-2.791c0.24-0.78,0.36-1.449,0.36-2.01
+ c0-0.44-0.051-0.759-0.15-0.96c-0.101-0.2-0.33-0.3-0.69-0.3c-0.48,0-0.96,0.25-1.44,0.75c-0.48,0.501-0.93,1.061-1.35,1.68
+ c-0.42,0.621-0.801,1.18-1.14,1.68c-0.34,0.501-0.591,0.75-0.75,0.75c-0.201,0-0.3-0.181-0.3-0.54c0-0.16,0.159-0.54,0.48-1.14
+ c0.319-0.6,0.84-1.359,1.56-2.28c2.04-2.56,3.84-3.84,5.4-3.84c0.68,0,1.22,0.22,1.62,0.66c0.399,0.44,0.6,1.06,0.6,1.86
+ c0,0.84-0.141,1.761-0.42,2.76c-0.28,1-0.621,2.099-1.02,3.3L179.802,55.007z M184.872,23.837c0.58-0.819,1.23-1.23,1.95-1.23
+ c0.519,0,0.939,0.201,1.26,0.6c0.32,0.4,0.48,0.92,0.48,1.56c0,1.161-0.28,2.16-0.84,3c-0.561,0.84-1.2,1.26-1.92,1.26
+ c-0.561,0-1-0.219-1.32-0.66c-0.32-0.44-0.48-1.06-0.48-1.86C184.002,25.547,184.292,24.657,184.872,23.837z"/>
+ <path fill="#101111" d="M209.082,33.917c0.919,0.581,1.38,1.41,1.38,2.49c0,0.4-0.16,0.78-0.48,1.14
+ c-0.321,0.36-0.76,0.54-1.32,0.54c-0.681,0-1.251-0.18-1.71-0.54c-0.46-0.36-0.88-0.75-1.26-1.17c-0.38-0.42-0.741-0.81-1.08-1.17
+ c-0.34-0.36-0.73-0.54-1.17-0.54c-0.88,0-1.87,0.4-2.97,1.2c-1.101,0.8-2.14,1.911-3.12,3.33c-0.981,1.42-1.811,3.13-2.49,5.13
+ c-0.681,2.001-1.02,4.2-1.02,6.6c0,2.561,0.51,4.521,1.53,5.88c1.02,1.36,2.45,2.04,4.29,2.04c1.879,0,3.9-1.199,6.06-3.6
+ c0.64-0.72,1.05-1.32,1.23-1.8c0.18-0.48,0.45-0.721,0.81-0.721c0.28,0,0.42,0.201,0.42,0.601c0,0.32-0.21,0.84-0.63,1.56
+ c-0.42,0.721-1.07,1.581-1.95,2.58c-1.281,1.48-2.571,2.591-3.87,3.33c-1.3,0.74-2.65,1.11-4.05,1.11
+ c-1.161,0-2.23-0.251-3.21-0.75c-0.98-0.5-1.84-1.2-2.58-2.101c-0.741-0.899-1.32-1.989-1.74-3.27c-0.42-1.279-0.63-2.7-0.63-4.26
+ c0-2.199,0.439-4.41,1.32-6.63c0.879-2.221,2.18-4.25,3.9-6.09c1.68-2.04,3.47-3.51,5.37-4.41c1.899-0.9,3.63-1.35,5.19-1.35
+ C206.901,33.047,208.161,33.338,209.082,33.917z"/>
+ <path fill="#101111" d="M222.342,46.901c0.96,1.206,1.72,2.34,2.28,3.405c0.56,1.064,0.84,2.2,0.84,3.404
+ c0,1.086-0.23,2.11-0.69,3.074s-1.06,1.808-1.8,2.531s-1.61,1.307-2.61,1.748c-1,0.441-2.04,0.662-3.12,0.662
+ c-0.84,0-1.68-0.11-2.52-0.329c-0.84-0.221-1.6-0.511-2.28-0.87c-0.68-0.36-1.23-0.76-1.65-1.2c-0.42-0.439-0.63-0.859-0.63-1.26
+ c0-1.28,0.13-2.271,0.39-2.971c0.261-0.699,0.57-1.05,0.93-1.05c0.24,0,0.44,0.09,0.6,0.271c0.159,0.18,0.309,0.42,0.45,0.72
+ c0.14,0.3,0.27,0.62,0.39,0.96s0.279,0.69,0.48,1.05c0.64,1.161,1.359,2.021,2.16,2.58c0.8,0.561,1.659,0.84,2.58,0.84
+ c1.119,0,2.079-0.47,2.88-1.41c0.8-0.939,1.2-2.089,1.2-3.449c0-0.92-0.19-1.771-0.57-2.551c-0.38-0.779-0.91-1.59-1.59-2.43
+ l-2.52-3.06c-0.96-1.16-1.701-2.26-2.22-3.301c-0.52-1.039-0.78-2.079-0.78-3.119c0-1,0.21-1.98,0.63-2.94s0.979-1.81,1.68-2.55
+ c0.699-0.74,1.509-1.33,2.43-1.77c0.92-0.44,1.899-0.66,2.94-0.66c0.76,0,1.51,0.074,2.25,0.222s1.41,0.351,2.01,0.609
+ c0.601,0.259,1.08,0.575,1.44,0.948c0.36,0.374,0.54,0.781,0.54,1.221c0,1.92-0.381,2.88-1.14,2.88c-0.321,0-0.681-0.229-1.08-0.69
+ c-0.4-0.459-0.87-0.969-1.41-1.53c-0.54-0.56-1.14-1.07-1.8-1.53c-0.66-0.459-1.41-0.69-2.25-0.69c-0.92,0-1.73,0.372-2.43,1.116
+ c-0.701,0.743-1.05,1.677-1.05,2.802c0,0.724,0.16,1.417,0.48,2.079c0.32,0.663,0.78,1.375,1.38,2.139L222.342,46.901z"/>
+ <path fill="#101111" d="M259.182,31.007c-0.12,0.521-0.4,0.78-0.84,0.78c-0.48,0-0.721-0.42-0.721-1.26
+ c0-0.36,0.021-0.789,0.061-1.29c0.039-0.5,0.06-1.089,0.06-1.77c0-1.479-0.13-2.499-0.39-3.06c-0.261-0.56-0.971-0.84-2.13-0.84
+ c-1.721,0-3.641,0.42-5.76,1.26c-2.121,0.84-4.121,2.1-6,3.78c-2.801,2.52-4.941,5.43-6.42,8.73c-1.48,3.3-2.221,6.771-2.221,10.41
+ c0,3.921,0.88,6.971,2.641,9.15c1.76,2.181,4.159,3.27,7.199,3.27c1.2,0,2.229-0.12,3.091-0.36c0.859-0.239,1.569-0.639,2.13-1.199
+ c0.439-1.44,0.77-2.68,0.989-3.721c0.22-1.039,0.391-1.839,0.511-2.399l0.899-4.561c0.12-0.759,0.181-1.2,0.181-1.319
+ c0-1.04-0.42-1.681-1.261-1.92c-0.28-0.08-0.561-0.12-0.84-0.12c-0.28,0-0.54-0.01-0.78-0.03c-0.239-0.02-0.44-0.08-0.6-0.18
+ c-0.16-0.1-0.24-0.29-0.24-0.57c0-0.48,0.36-0.72,1.08-0.72c0.56,0,1.26,0.04,2.101,0.12c0.84,0.08,1.819,0.119,2.939,0.119
+ c1.16,0,2.12-0.06,2.88-0.18s1.32-0.18,1.681-0.18c0.479,0,0.72,0.2,0.72,0.6c0,0.32-0.081,0.531-0.24,0.63
+ c-0.16,0.101-0.37,0.181-0.63,0.24c-0.261,0.06-0.54,0.12-0.84,0.18c-0.3,0.061-0.591,0.19-0.87,0.391c-0.48,0.4-0.87,1-1.17,1.8
+ c-0.3,0.801-0.591,1.881-0.87,3.24l-0.66,3.359c-0.12,0.641-0.28,1.44-0.479,2.4c-0.201,0.96-0.36,2.141-0.48,3.54
+ c-2.8,1.72-5.961,2.58-9.479,2.58c-2.081,0-3.99-0.351-5.73-1.05c-1.74-0.7-3.24-1.689-4.5-2.971
+ c-1.26-1.279-2.24-2.819-2.939-4.62c-0.701-1.8-1.051-3.779-1.051-5.939c0-3.92,0.9-7.55,2.7-10.89c1.8-3.339,4.46-6.33,7.98-8.97
+ c2.6-1.92,5.399-3.369,8.399-4.35c3-0.98,5.9-1.47,8.7-1.47c2,0,3,0.4,3,1.2c0,0.201-0.021,0.34-0.06,0.42L259.182,31.007z"/>
+ <path fill="#101111" d="M268.721,50.17c2.28-5.588,4.329-9.758,6.15-12.512c1.819-2.754,3.569-4.132,5.25-4.132
+ c0.68,0,1.269,0.27,1.77,0.808c0.5,0.539,0.75,1.268,0.75,2.186c0,0.999-0.24,1.817-0.72,2.455c-0.48,0.639-1.021,0.958-1.62,0.958
+ c-0.48,0-0.87-0.149-1.17-0.449c-0.3-0.299-0.45-0.729-0.45-1.287c0-0.439-0.101-0.788-0.3-1.047
+ c-0.201-0.259-0.42-0.389-0.66-0.389c-0.681,0-1.931,1.557-3.75,4.67c-1.82,3.113-3.951,7.823-6.39,14.129
+ c-0.441,1.157-0.771,2.075-0.99,2.754c-0.221,0.679-0.42,1.197-0.601,1.557c-0.18,0.359-0.39,0.59-0.63,0.688
+ c-0.239,0.1-0.62,0.149-1.14,0.149c-0.96,0-1.44-0.239-1.44-0.718c0-0.08,0.061-0.34,0.181-0.778l4.439-16.879
+ c0.279-1.076,0.5-2.014,0.66-2.812c0.159-0.798,0.24-1.477,0.24-2.035c0-0.758-0.3-1.137-0.9-1.137c-0.521,0-1.04,0.28-1.56,0.84
+ c-0.521,0.561-1.011,1.17-1.47,1.83c-0.461,0.66-0.881,1.26-1.261,1.8s-0.65,0.81-0.81,0.81c-0.28,0-0.42-0.199-0.42-0.6
+ c0-0.16,0.199-0.6,0.6-1.32c0.399-0.72,1.06-1.62,1.98-2.7c2.16-2.559,3.979-3.84,5.46-3.84c0.6,0,1.08,0.229,1.439,0.689
+ c0.36,0.459,0.54,1.147,0.54,2.065c0,0.319-0.06,0.978-0.18,1.975c-0.12,0.999-0.36,2.195-0.72,3.593L268.721,50.17z"/>
+ <path fill="#101111" d="M302.141,53.207c-0.24,0.84-0.4,1.521-0.48,2.04c-0.08,0.521-0.12,0.86-0.12,1.02
+ c0,0.841,0.22,1.261,0.66,1.261c0.68,0,1.62-0.84,2.82-2.521c0.52-0.72,0.859-1.279,1.02-1.68c0.16-0.399,0.399-0.601,0.721-0.601
+ c0.199,0,0.3,0.141,0.3,0.421c0,0.84-0.641,2.159-1.92,3.96c-2.2,3.2-4.141,4.8-5.82,4.8c-1.28,0-1.92-0.86-1.92-2.58
+ c0-0.999,0.13-2.03,0.39-3.09s0.55-2.17,0.87-3.33l1.801-6.66c-3,5.16-5.641,9.04-7.921,11.64c-2.279,2.601-4.42,3.9-6.42,3.9
+ c-1.479,0-2.66-0.561-3.54-1.68c-0.879-1.12-1.319-2.74-1.319-4.86c0-2.199,0.51-4.539,1.529-7.021
+ c1.021-2.479,2.59-5.039,4.71-7.68c2-2.52,4.051-4.389,6.15-5.61c2.1-1.22,3.95-1.83,5.55-1.83c1.08,0,1.95,0.21,2.61,0.63
+ c0.66,0.42,1.13,0.63,1.41,0.63c0.159,0,0.31-0.09,0.45-0.27c0.14-0.18,0.309-0.38,0.51-0.6c0.199-0.219,0.45-0.42,0.75-0.6
+ s0.669-0.27,1.109-0.27c0.561,0,0.939,0.051,1.141,0.15c0.199,0.101,0.3,0.371,0.3,0.81c0,0.28-0.101,0.72-0.3,1.32L302.141,53.207
+ z M294.671,36.557c-1.821,1.5-3.631,3.81-5.431,6.93c-1.4,2.44-2.44,4.649-3.12,6.63c-0.681,1.979-1.02,3.65-1.02,5.01
+ c0,1.161,0.26,2.04,0.78,2.64c0.519,0.601,1.179,0.9,1.979,0.9c1.119,0,2.35-0.669,3.69-2.01c1.34-1.34,2.91-3.33,4.71-5.97
+ c4.2-6.16,6.3-10.4,6.3-12.721c0-1.16-0.3-2.06-0.9-2.7c-0.6-0.64-1.439-0.96-2.52-0.96
+ C297.979,34.307,296.49,35.057,294.671,36.557z"/>
+ <path fill="#101111" d="M320.08,33.827c0.8-0.2,1.569-0.35,2.31-0.45c0.74-0.099,1.45-0.15,2.131-0.15c2.76,0,4.89,0.801,6.39,2.4
+ c1.5,1.601,2.25,3.9,2.25,6.9c0,2.279-0.411,4.58-1.23,6.899c-0.82,2.32-2.01,4.5-3.569,6.54c-2.961,3.801-6,5.7-9.12,5.7
+ c-1.041,0-1.971-0.21-2.79-0.63c-0.82-0.42-1.631-1.069-2.43-1.95l-2.101,10.32c-0.08,0.399-0.12,0.739-0.12,1.02
+ c0,0.601,0.181,1.029,0.54,1.29c0.36,0.26,0.77,0.46,1.23,0.601c0.459,0.14,0.87,0.26,1.229,0.359c0.36,0.1,0.54,0.29,0.54,0.57
+ c0,0.439-0.22,0.66-0.66,0.66s-1.18-0.07-2.22-0.21c-1.04-0.141-2.359-0.21-3.96-0.21c-1.119,0-2.04,0.069-2.76,0.21
+ c-0.72,0.14-1.28,0.21-1.68,0.21c-0.68,0-1.021-0.16-1.021-0.48c0-0.44,0.25-0.7,0.75-0.779c0.501-0.081,1.17-0.28,2.01-0.601
+ c0.48-0.2,0.851-0.39,1.11-0.57c0.261-0.18,0.471-0.399,0.63-0.659c0.16-0.261,0.291-0.591,0.39-0.99
+ c0.101-0.4,0.231-0.921,0.391-1.561l7.68-31.68c-0.921,0.48-1.641,0.87-2.16,1.17c-0.521,0.3-0.88,0.45-1.08,0.45
+ c-0.32,0-0.479-0.1-0.479-0.3c0-0.52,0.339-0.99,1.02-1.41c0.68-0.42,1.72-0.909,3.12-1.47l1.32-5.76c0.12-0.48,0.26-0.78,0.42-0.9
+ c0.159-0.12,0.439-0.18,0.84-0.18h0.78c0.56,0,0.949,0.01,1.17,0.03c0.22,0.021,0.33,0.13,0.33,0.33v0.24
+ c0,0.12-0.04,0.28-0.12,0.48L320.08,33.827z M315.28,53.837c-0.16,0.844-0.24,1.608-0.24,2.29c0,1.287,0.33,2.292,0.99,3.016
+ s1.55,1.084,2.67,1.084c2.84,0,5.199-1.828,7.08-5.485c1.359-2.612,2.359-5.094,3-7.445c0.64-2.351,0.96-4.33,0.96-5.938
+ c0-2.09-0.54-3.698-1.62-4.823s-2.64-1.688-4.68-1.688c-0.96,0-2.2,0.221-3.721,0.663l-3.779,15.373
+ C315.66,52.008,315.439,52.993,315.28,53.837z"/>
+ <path fill="#101111" d="M341.499,46.907c2.36-4.6,4.53-8.03,6.51-10.29c1.98-2.26,3.931-3.39,5.851-3.39
+ c1.479,0,2.68,0.648,3.6,1.941c0.92,1.294,1.38,3.136,1.38,5.525c0,2.15-0.359,4.46-1.08,6.928c-0.72,2.47-1.739,4.799-3.06,6.988
+ c-1.4,2.27-2.87,3.994-4.41,5.172c-1.54,1.176-2.91,1.766-4.109,1.766c-1.001,0-1.78-0.25-2.341-0.75s-0.84-1.169-0.84-2.007
+ c0-0.597,0.159-1.074,0.48-1.433c0.319-0.358,0.699-0.538,1.14-0.538c0.36,0,0.66,0.14,0.9,0.418
+ c0.239,0.279,0.459,0.588,0.66,0.927c0.199,0.338,0.429,0.646,0.689,0.925c0.26,0.279,0.609,0.418,1.05,0.418
+ c0.8,0,1.51-0.457,2.13-1.372s1.311-2.309,2.07-4.18c0.56-1.353,1.04-2.696,1.44-4.029c0.399-1.333,0.72-2.606,0.96-3.82
+ c0.239-1.213,0.42-2.328,0.54-3.343s0.18-1.86,0.18-2.537c0-1.393-0.25-2.448-0.75-3.164c-0.501-0.716-1.15-1.075-1.95-1.075
+ c-1.601,0-3.471,1.38-5.609,4.14c-2.141,2.76-4.211,6.72-6.21,11.88c-1.041,2.76-1.771,4.821-2.19,6.181s-0.67,2.1-0.75,2.22
+ c-0.2,0.359-0.761,0.54-1.68,0.54c-0.44,0-0.75-0.051-0.931-0.15c-0.18-0.1-0.27-0.369-0.27-0.81c0-0.2,0.06-0.54,0.18-1.021
+ l8.7-33.84c0.279-1.08,0.42-1.86,0.42-2.34c0-0.279-0.12-0.53-0.36-0.75c-0.239-0.219-0.58-0.33-1.02-0.33
+ c-0.12,0-0.23,0.01-0.33,0.03c-0.101,0.021-0.21,0.03-0.33,0.03c-0.641,0-0.96-0.2-0.96-0.6c0-0.24,0.09-0.41,0.271-0.51
+ c0.18-0.1,0.42-0.17,0.72-0.21c0.3-0.04,0.669-0.07,1.109-0.09c0.44-0.02,0.92-0.09,1.44-0.21c1.08-0.2,1.86-0.5,2.34-0.9
+ c0.48-0.399,0.9-0.6,1.26-0.6c0.2,0,0.301,0.16,0.301,0.48c0,0.041-0.011,0.111-0.03,0.21c-0.021,0.101-0.051,0.25-0.09,0.45
+ L341.499,46.907z"/>
+ <path fill="#101111" d="M366.579,55.007c-0.36,1.2-0.54,1.98-0.54,2.34c0,0.841,0.279,1.261,0.84,1.261
+ c0.999,0,2.079-1.021,3.24-3.061c0.64-1.08,1.069-1.869,1.29-2.37c0.219-0.499,0.409-0.75,0.569-0.75
+ c0.28,0,0.421,0.141,0.421,0.42c0,0.681-0.801,2.241-2.4,4.681c-0.921,1.4-1.841,2.45-2.76,3.149c-0.921,0.699-1.78,1.05-2.58,1.05
+ c-1.601,0-2.4-1-2.4-3c0-1.039,0.22-2.329,0.66-3.869c0.439-1.54,1.04-3.391,1.8-5.551l2.46-7.199c0.36-1.08,0.66-2.01,0.9-2.791
+ c0.24-0.78,0.359-1.449,0.359-2.01c0-0.44-0.05-0.759-0.149-0.96c-0.101-0.2-0.33-0.3-0.69-0.3c-0.479,0-0.96,0.25-1.439,0.75
+ c-0.48,0.501-0.931,1.061-1.351,1.68c-0.42,0.621-0.8,1.18-1.14,1.68c-0.34,0.501-0.591,0.75-0.75,0.75c-0.2,0-0.3-0.181-0.3-0.54
+ c0-0.16,0.159-0.54,0.479-1.14s0.84-1.359,1.561-2.28c2.04-2.56,3.84-3.84,5.399-3.84c0.68,0,1.22,0.22,1.62,0.66
+ c0.399,0.44,0.601,1.06,0.601,1.86c0,0.84-0.141,1.761-0.42,2.76c-0.28,1-0.621,2.099-1.021,3.3L366.579,55.007z M371.649,23.837
+ c0.579-0.819,1.229-1.23,1.949-1.23c0.52,0,0.939,0.201,1.261,0.6c0.319,0.4,0.479,0.92,0.479,1.56c0,1.161-0.28,2.16-0.84,3
+ c-0.561,0.84-1.2,1.26-1.92,1.26c-0.561,0-1-0.219-1.32-0.66c-0.32-0.44-0.479-1.06-0.479-1.86
+ C370.779,25.547,371.068,24.657,371.649,23.837z"/>
+ <path fill="#101111" d="M395.858,33.917c0.92,0.581,1.38,1.41,1.38,2.49c0,0.4-0.16,0.78-0.48,1.14
+ c-0.32,0.36-0.76,0.54-1.319,0.54c-0.681,0-1.251-0.18-1.71-0.54c-0.461-0.36-0.881-0.75-1.26-1.17
+ c-0.381-0.42-0.741-0.81-1.08-1.17c-0.341-0.36-0.73-0.54-1.17-0.54c-0.881,0-1.871,0.4-2.971,1.2c-1.101,0.8-2.14,1.911-3.12,3.33
+ c-0.98,1.42-1.81,3.13-2.489,5.13c-0.681,2.001-1.021,4.2-1.021,6.6c0,2.561,0.51,4.521,1.53,5.88c1.02,1.36,2.449,2.04,4.29,2.04
+ c1.88,0,3.899-1.199,6.06-3.6c0.64-0.72,1.05-1.32,1.23-1.8c0.18-0.48,0.45-0.721,0.81-0.721c0.279,0,0.42,0.201,0.42,0.601
+ c0,0.32-0.21,0.84-0.63,1.56c-0.42,0.721-1.07,1.581-1.95,2.58c-1.28,1.48-2.57,2.591-3.87,3.33c-1.3,0.74-2.649,1.11-4.05,1.11
+ c-1.16,0-2.23-0.251-3.21-0.75c-0.98-0.5-1.84-1.2-2.58-2.101c-0.74-0.899-1.319-1.989-1.739-3.27
+ c-0.421-1.279-0.631-2.7-0.631-4.26c0-2.199,0.44-4.41,1.32-6.63c0.88-2.221,2.18-4.25,3.9-6.09c1.68-2.04,3.47-3.51,5.37-4.41
+ c1.899-0.9,3.63-1.35,5.189-1.35C393.678,33.047,394.938,33.338,395.858,33.917z"/>
+ <path fill="#101111" d="M409.118,46.901c0.96,1.206,1.72,2.34,2.28,3.405c0.56,1.064,0.84,2.2,0.84,3.404
+ c0,1.086-0.23,2.11-0.69,3.074s-1.06,1.808-1.8,2.531s-1.61,1.307-2.609,1.748c-1.001,0.441-2.04,0.662-3.12,0.662
+ c-0.84,0-1.681-0.11-2.521-0.329c-0.84-0.221-1.6-0.511-2.279-0.87c-0.68-0.36-1.23-0.76-1.65-1.2
+ c-0.42-0.439-0.63-0.859-0.63-1.26c0-1.28,0.13-2.271,0.39-2.971c0.261-0.699,0.57-1.05,0.93-1.05c0.24,0,0.441,0.09,0.601,0.271
+ c0.159,0.18,0.31,0.42,0.45,0.72c0.14,0.3,0.27,0.62,0.39,0.96s0.279,0.69,0.48,1.05c0.639,1.161,1.359,2.021,2.159,2.58
+ c0.8,0.561,1.66,0.84,2.58,0.84c1.12,0,2.08-0.47,2.88-1.41c0.8-0.939,1.2-2.089,1.2-3.449c0-0.92-0.19-1.771-0.569-2.551
+ c-0.381-0.779-0.911-1.59-1.591-2.43l-2.52-3.06c-0.96-1.16-1.701-2.26-2.22-3.301c-0.521-1.039-0.78-2.079-0.78-3.119
+ c0-1,0.21-1.98,0.63-2.94s0.979-1.81,1.68-2.55c0.7-0.74,1.51-1.33,2.431-1.77c0.919-0.44,1.899-0.66,2.939-0.66
+ c0.76,0,1.51,0.074,2.25,0.222s1.41,0.351,2.01,0.609c0.601,0.259,1.08,0.575,1.44,0.948c0.36,0.374,0.54,0.781,0.54,1.221
+ c0,1.92-0.381,2.88-1.14,2.88c-0.321,0-0.681-0.229-1.08-0.69c-0.4-0.459-0.87-0.969-1.41-1.53c-0.54-0.56-1.14-1.07-1.8-1.53
+ c-0.66-0.459-1.41-0.69-2.25-0.69c-0.921,0-1.73,0.372-2.431,1.116c-0.7,0.743-1.05,1.677-1.05,2.802
+ c0,0.724,0.159,1.417,0.48,2.079c0.319,0.663,0.779,1.375,1.38,2.139L409.118,46.901z"/>
+ <path fill="#101111" d="M416.708,56.717c0.459-0.619,1.01-0.93,1.649-0.93c1.12,0,1.681,0.78,1.681,2.34
+ c0,0.801-0.23,1.54-0.69,2.22s-1.011,1.021-1.649,1.021c-1.121,0-1.681-0.78-1.681-2.34
+ C416.018,58.107,416.248,57.338,416.708,56.717z"/>
+ <path fill="#101111" d="M431.678,61.188c-0.6,2.279-1.311,4.249-2.13,5.909c-0.82,1.66-1.68,3.05-2.58,4.17
+ c-0.899,1.12-1.83,1.95-2.79,2.49s-1.88,0.811-2.76,0.811c-1.239,0-2.27-0.36-3.09-1.08c-0.819-0.721-1.23-1.541-1.23-2.46
+ c0-0.641,0.181-1.141,0.54-1.5c0.36-0.36,0.761-0.54,1.2-0.54c0.48,0,0.87,0.199,1.17,0.6c0.3,0.399,0.58,0.84,0.84,1.32
+ c0.261,0.479,0.521,0.92,0.78,1.319c0.261,0.399,0.61,0.601,1.05,0.601c0.601,0,1.141-0.341,1.62-1.021
+ c0.48-0.681,0.971-1.739,1.47-3.18c0.501-1.439,1.041-3.261,1.62-5.46c0.579-2.2,1.29-4.819,2.13-7.86l4.32-15.959
+ c0.199-0.68,0.33-1.24,0.39-1.68c0.061-0.439,0.091-0.72,0.091-0.84c0-0.44-0.281-0.66-0.841-0.66c-0.4,0-0.82,0.25-1.26,0.75
+ c-0.44,0.5-0.87,1.041-1.29,1.62c-0.42,0.58-0.801,1.12-1.14,1.62c-0.341,0.501-0.591,0.75-0.75,0.75c-0.24,0-0.36-0.181-0.36-0.54
+ c0-0.16,0.17-0.54,0.51-1.14s0.87-1.359,1.591-2.28c1.039-1.28,1.989-2.24,2.85-2.88c0.859-0.639,1.71-0.96,2.55-0.96
+ c0.601,0,1.1,0.201,1.5,0.6c0.399,0.4,0.601,0.98,0.601,1.74c0,0.44-0.051,0.93-0.15,1.47c-0.101,0.54-0.25,1.15-0.45,1.83
+ L431.678,61.188z M437.738,23.837c0.56-0.819,1.199-1.23,1.92-1.23c0.52,0,0.939,0.201,1.26,0.6c0.319,0.4,0.479,0.92,0.479,1.56
+ c0,1.161-0.27,2.16-0.81,3s-1.17,1.26-1.89,1.26c-0.561,0-1.001-0.219-1.32-0.66c-0.32-0.44-0.48-1.06-0.48-1.86
+ C436.897,25.547,437.178,24.657,437.738,23.837z"/>
+ <path fill="#101111" d="M451.417,46.901c0.96,1.206,1.72,2.34,2.28,3.405c0.56,1.064,0.84,2.2,0.84,3.404
+ c0,1.086-0.23,2.11-0.69,3.074s-1.06,1.808-1.8,2.531s-1.61,1.307-2.609,1.748c-1.001,0.441-2.04,0.662-3.12,0.662
+ c-0.84,0-1.681-0.11-2.521-0.329c-0.84-0.221-1.6-0.511-2.279-0.87c-0.68-0.36-1.23-0.76-1.65-1.2
+ c-0.42-0.439-0.63-0.859-0.63-1.26c0-1.28,0.13-2.271,0.39-2.971c0.261-0.699,0.57-1.05,0.93-1.05c0.24,0,0.441,0.09,0.601,0.271
+ c0.159,0.18,0.31,0.42,0.45,0.72c0.14,0.3,0.27,0.62,0.39,0.96s0.279,0.69,0.48,1.05c0.639,1.161,1.359,2.021,2.159,2.58
+ c0.8,0.561,1.66,0.84,2.58,0.84c1.12,0,2.08-0.47,2.88-1.41c0.8-0.939,1.2-2.089,1.2-3.449c0-0.92-0.19-1.771-0.569-2.551
+ c-0.381-0.779-0.911-1.59-1.591-2.43l-2.52-3.06c-0.96-1.16-1.701-2.26-2.22-3.301c-0.521-1.039-0.78-2.079-0.78-3.119
+ c0-1,0.21-1.98,0.63-2.94s0.979-1.81,1.68-2.55c0.7-0.74,1.51-1.33,2.431-1.77c0.919-0.44,1.899-0.66,2.939-0.66
+ c0.76,0,1.51,0.074,2.25,0.222s1.41,0.351,2.01,0.609c0.601,0.259,1.08,0.575,1.44,0.948c0.36,0.374,0.54,0.781,0.54,1.221
+ c0,1.92-0.381,2.88-1.14,2.88c-0.321,0-0.681-0.229-1.08-0.69c-0.4-0.459-0.87-0.969-1.41-1.53c-0.54-0.56-1.14-1.07-1.8-1.53
+ c-0.66-0.459-1.41-0.69-2.25-0.69c-0.921,0-1.73,0.372-2.431,1.116c-0.7,0.743-1.05,1.677-1.05,2.802
+ c0,0.724,0.159,1.417,0.48,2.079c0.319,0.663,0.779,1.375,1.38,2.139L451.417,46.901z"/>
+</g>
+<g>
+ <path fill="#101111" d="M3.802,51.254V24.525c0-0.928,0.267-1.775,0.8-2.541s1.241-1.311,2.123-1.636l24.502-8.91
+ c0.51-0.186,1.021-0.279,1.531-0.279c0.51,0,1.021,0.093,1.531,0.279l24.501,8.91c0.882,0.325,1.589,0.87,2.123,1.636
+ s0.801,1.613,0.801,2.541v26.729c0,0.812-0.209,1.566-0.626,2.263c-0.418,0.696-0.987,1.241-1.706,1.636L34.882,68.517
+ c-0.65,0.371-1.357,0.558-2.123,0.558s-1.474-0.187-2.123-0.558L6.134,55.152c-0.72-0.395-1.288-0.939-1.706-1.636
+ S3.802,52.066,3.802,51.254z M8.466,24.456l24.293,8.84l24.292-8.84l-24.292-8.84L8.466,24.456z M34.986,63.4L57.26,51.254V29.12
+ l-22.274,8.109V63.4z"/>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/index.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/index.htm
new file mode 100644
index 0000000..e4c1ed0
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/index.htm
@@ -0,0 +1,269 @@
+<html lang='en'>
+<head>
+ <meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
+
+ <title>MetricsGraphics.js - a library based on D3.js, optimized for visualizing and laying out time-series data</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,700' rel='stylesheet' type='text/css'>
+ <link href='https://fonts.googleapis.com/css?family=PT+Serif:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href='https://netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.css' rel='stylesheet' type='text/css'>
+ <link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css' rel='stylesheet' type='text/css'>
+
+ <link href='metricsgraphics.css' rel='stylesheet' type='text/css'>
+ <link href='css/metricsgraphics-demo.css' rel='stylesheet' type='text/css'>
+ <link href='css/highlightjs-default.css' rel='stylesheet' type='text/css'>
+
+ <script src='js/lib/highlight.pack.js'></script>
+ <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script>
+ <script src='https://d3js.org/d3.v4.min.js' charset='utf-8'></script>
+ <script src='metricsgraphics.min.js'></script>
+
+ <script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-51487512-1', 'metricsgraphicsjs.org');
+ ga('send', 'pageview');
+ </script>
+</head>
+
+<body>
+ <a href="https://github.com/metrics-graphics/metrics-graphics"><img style="z-index: 2; position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a>
+
+ <div class='container'>
+ <div id='content-body'>
+ <img src='images/logo.svg' id='logo' class='svg' />
+ <iframe src="https://ghbtns.com/github-btn.html?user=mozilla&repo=metrics-graphics&type=watch&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="110" height="20" class='github-stars-top'></iframe>
+
+ <div id='description'>
+ <p><i>MetricsGraphics.js</i> is a library built on top of
+ <a href='http://d3js.org/'>D3</a> that is optimized for visualizing and
+ laying out time-series data. It provides a simple way to produce common types of
+ graphics in a principled, consistent and responsive way. The library
+ currently supports line charts, scatterplots, histograms, bar charts and data
+ tables as well as features like rug plots and basic linear regression.</p>
+ </div>
+
+ <div id='torso'>
+ <div class='thumb'><a href='https://github.com/metricsgraphics/metrics-graphics/releases'><i class="fa fa-download fa-4x"></i><br /><span class='text'>Download</span></a></div>
+ <div class='thumb'><a href='examples.htm'><i class="fa fa-area-chart fa-4x"></i><br /><span class='text'>Examples</span></a></div>
+ <div class='thumb'><a href='https://github.com/metricsgraphics/metrics-graphics'><i class="fa fa-github fa-4x"></i><br /><span class='text'>Github</span></a></div>
+ </div>
+ </div>
+ </div>
+
+ <div class='api-example'>
+ <div class='container'>
+
+<pre><code class='javascript'>MG.data_graphic({
+ title: "Downloads",
+ description: "This graphic shows a time-series of downloads.",
+ data: [{'date':new Date('2014-11-01'),'value':12},
+ {'date':new Date('2014-11-02'),'value':18}],
+ width: 600,
+ height: 250,
+ target: '#downloads',
+ x_accessor: 'date',
+ y_accessor: 'value',
+})</code></pre>
+
+ </div>
+ </div>
+
+ <div class='container'>
+ <p>The API is simple. All that's needed to create a graphic is to specify a few default parameters and then, if desired, override one or more of the <a href='https://github.com/metricsgraphics/metrics-graphics/wiki/List-of-Options'>optional parameters on offer</a>. We don't maintain state. To update a graphic, one would call <i>MG.data_graphic</i> on the same target element.</p>
+ <p>The library is data-source agnostic. While it provides a number of convenience functions and options that allow for graphics to better handle things like missing observations, it doesn't care where the data comes from.</p>
+ <p>The library makes it easy to construct narratives by providing a layout template based on Bootstrap. Take a look at <a href='examples.htm'>the examples</a> to see that in action.</p>
+ <p>MetricsGraphics.js <a href='https://www.youtube.com/watch?v=ZmkeAlut7KI#t=399'>takes the misery out of</a> creating beautiful interactive graphics. <a href='http://blog.mozilla.org/metrics/2014/11/10/introducing-metricsgraphics-js/'>Read our blog post for more details</a>.</p>
+
+ <h1>A bit about the library's design philosophy</h1>
+ <p>MetricsGraphics.js is an opinionated library that aims to take the mystery and complication out of presenting simple data. It offers only line charts, scatterplots, bar charts, histograms and data tables, while maintaining a wide variety of options for each, and elevates the layout and explanation of these graphics to the same level of priority as the graphics themselves. The emergent philosophy is one of efficiency and practicality - by following the standards embodied by the library, you will make beautiful, concise and impactful presentations and dashboards.</p>
+
+ <h1>Creating your first graphic</h1>
+ <p>Here's a quick tutorial to get you started. Say that we have some data on a scholarly topic like <a href='http://geocommons.com/overlays/134594'>UFO sightings</a>. We decide that we're interested in creating a line chart of yearly sightings.</p>
+ <p>We create a JSON file called <a href='data/ufo-sightings.json'>data/ufo-sightings.json</a> based on the original dataset, where we aggregate yearly sightings. The data doesn't have to be JSON of course, but that will mean less work later on.</p>
+ <p>The next thing we do is load the data:</p>
+
+<pre class='highbottom'><code class='javascript'>d3.json('data/ufo-sightings.json', function(data) {
+})</code></pre>
+
+ <p><i>MG.data_graphic</i> expects the data object to be an array of objects, which is already the case for us. That's good. It also needs dates to be timestamps if they're in a format like <i>yyyy-mm-dd</i>. We've got aggregated yearly data, so we don't need to worry about that. Otherwise, we'd add a line like this one.</p>
+
+<pre class='highbottom'><code class='javascript'>d3.json('data/ufo-sightings.json', function(data) {
+ data = MG.convert.date(data, 'year');
+})</code></pre>
+
+ <p>Finally, we create the graphic and place it in the element specified in <i>target</i>.</p>
+
+<pre class='highbottom'><code class='javascript'>d3.json('data/ufo-sightings.json', function(data) {
+ MG.data_graphic({
+ title: "UFO Sightings",
+ description: "Yearly UFO sightings from the year 1945 to 2010.",
+ data: data,
+ width: 650,
+ height: 150,
+ target: '#ufo-sightings',
+ x_accessor: 'year',
+ y_accessor: 'sightings',
+ markers: [{'year': 1964, 'label': '"The Creeping Terror" released'}]
+ })
+})</code></pre>
+
+ <p class='highbottom'>And this is what we end up with. In this example, we're adding a marker to draw attention to a particular data point. This is optional of course.</p>
+ <div id='ufo-sightings'></div>
+ <p class='hightop'>It's as easy as that. If for whatever reason we decide to update the data in the graphic, we call <i>MG.data_graphic</i> with the updated data object on the same target element. The library will gracefully transition the existing plot to the new one. It's ridiculously easy to modify every aspect of the graphic by setting one or more of the <a href='https://github.com/metricsgraphics/metrics-graphics/wiki/List-of-Options'>available options</a>.</p>
+
+ <h1>Still not convinced?</h1>
+ <p>We've set up an interactive version of this example that you can play around with. You don't need to download anything. <a href='interactive-demo.htm'>Check it out</a>.</p>
+ <p>Take the library out for a spin, file bugs and don't forget to star the project on Github!</p>
+ </div>
+
+ <div class='container footer'>
+ Created by <a href='https://twitter.com/alialmossawi'>Ali Almossawi</a>,
+ <a href='https://github.com/hamilton'>Hamilton Ulmer</a> &mdash; Metrics at
+ <a href='https://www.mozilla.org/en-US/'>Mozilla</a>
+ <br />Shared under the <a href='http://www.mozilla.org/MPL/2.0/'>
+ Mozilla Public License</a>.
+ </div>
+
+ <style>
+ body {
+ background-color: #fcfcfc;
+ }
+
+ .api-example {
+ margin: 80px 0 40px 0;
+ width: 100%;
+ background-color: #f1f1f1;
+ border-top: 1px solid #ccc;
+ border-bottom: 1px solid #ccc;
+ }
+
+ .container {
+ width: 680px;
+ }
+
+ #fb-block {
+ display: inline;
+ padding: 0 0 0 6px;
+ position: relative;
+ top: 0;
+ width: 60px;
+ }
+
+ @media only screen
+ and (min-device-width : 320px)
+ and (max-device-width : 480px) {
+ #fb-block {
+ top: -5px;
+ }
+ }
+
+ .github-stars-top {
+ margin: 95px 0 0 160px;
+ position: absolute;
+ }
+
+ h1 {
+ font-size: 24px;
+ padding-top: 40px;
+ }
+
+ .highbottom {
+ margin-bottom: 40px;
+ }
+
+ .hightop {
+ margin-top: 40px;
+ }
+
+ p {
+ padding-top: 6px;
+ }
+
+ pre {
+ background-color: #f1f1f1;
+ border: none;
+ margin: 0 0 0 0 ;
+ }
+
+ .social-buttons {
+ background-image: url(images/divider.png);
+ background-repeat: no-repeat;
+ background-position: center 35px;
+ padding-top: 80px;
+ }
+
+ .thumb {
+ padding: 0 35px 0 35px;
+ }
+
+ .thumb a {
+ color: #227dc4;
+ }
+
+ .thumb a i.fa {
+ background-color: #036bbc;
+ color: transparent;
+ text-shadow: 0px 1px 1px rgba(255,255,255,0.5);
+ -webkit-background-clip: text;
+ -moz-background-clip: text;
+ background-clip: text;
+ padding: 10px;
+ }
+
+ @-moz-document url-prefix() {
+ .thumb a i.fa {
+ background-color: transparent;
+ color: #60a2d5;
+ }
+ }
+
+ .thumb a span.text {
+ color: white;
+ font-size: 12px;
+ letter-spacing: 1;
+ text-transform: uppercase;
+ background: #60a2d5;
+ border-radius: 6px;
+ padding: 1px 5px 1px 5px;
+ }
+
+ /*.thumb a:hover span.text {
+ border-bottom: 1px solid #227dc4;
+ }*/
+
+ .thumb a:hover {
+ text-decoration: none;
+ }
+
+ #twitter-block {
+ display: inline;
+ overflow: hidden;
+ padding-top: 2px;
+ position: relative;
+ top: 0;
+ }
+ </style>
+
+ <script>
+ hljs.initHighlightingOnLoad();
+
+ d3.json('data/ufo-sightings.json', function(data) {
+ MG.data_graphic({
+ title: "UFO Sightings",
+ description: "Yearly UFO sightings from the year 1945 to 2010.",
+ data: data,
+ markers: [{'year': 1964, 'label': '"The Creeping Terror" released'}],
+ width: 650,
+ height: 180,
+ target: '#ufo-sightings',
+ x_accessor: 'year',
+ y_accessor: 'sightings'
+ })
+ })
+ </script>
+</body>
+</html>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/interactive-demo.htm b/priv/static/metrics-graphics-3.0-alpha3/examples/interactive-demo.htm
new file mode 100644
index 0000000..f87f060
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/interactive-demo.htm
@@ -0,0 +1,236 @@
+<html lang='en'>
+<head>
+ <meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
+
+ <title>MetricsGraphics.js - a library based on D3.js, optimized for visualizing and laying out time-series data</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,700' rel='stylesheet' type='text/css'>
+ <link href='https://fonts.googleapis.com/css?family=PT+Serif:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href='https://netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.css' rel='stylesheet' type='text/css'>
+ <link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css' rel='stylesheet' type='text/css'>
+
+ <link href='metricsgraphics.css' rel='stylesheet' type='text/css'>
+ <link href='css/metricsgraphics-demo.css' rel='stylesheet' type='text/css'>
+
+ <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js'></script>
+ <script src="https://d3js.org/d3.v4.min.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js" charset="utf-8"></script>
+
+ <!-- dev start -->
+ <script src='js/MG.js'></script>
+ <script src='js/misc/utility.js'></script>
+ <script src='js/common/data_graphic.js'></script>
+ <script src='js/common/hooks.js'></script>
+ <script src='js/common/register.js'></script>
+ <script src='js/common/bootstrap_tooltip_popover.js'></script>
+ <script src='js/common/chart_title.js'></script>
+ <script src='js/common/scales.js'></script>
+ <script src='js/common/y_axis.js'></script>
+ <script src='js/common/x_axis.js'></script>
+ <script src='js/common/init.js'></script>
+ <script src='js/common/markers.js'></script>
+ <script src='js/common/rollover.js'></script>
+ <script src='js/common/zoom.js'></script>
+ <script src='js/common/brush.js'></script>
+ <script src='js/common/window_listeners.js'></script>
+ <script src='js/layout/bootstrap_dropdown.js'></script>
+ <script src='js/layout/button.js'></script>
+ <script src='js/charts/line.js'></script>
+ <script src='js/charts/histogram.js'></script>
+ <script src='js/charts/point.js'></script>
+ <script src='js/charts/bar.js'></script>
+ <script src='js/charts/table.js'></script>
+ <script src='js/charts/missing.js'></script>
+ <script src='js/misc/process.js'></script>
+ <script src='js/misc/smoothers.js'></script>
+ <script src='js/misc/formatters.js'></script>
+ <script src='js/misc/transitions.js'></script>
+ <script src='js/misc/error.js'></script>
+ <!-- dev end -->
+
+ <script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-51487512-1', 'metricsgraphicsjs.org');
+ ga('send', 'pageview');
+ </script>
+</head>
+
+<body>
+ <div class='container'>
+ <div class='head'>
+ <ul>
+ <li><a href='./'>Home</a></li>
+ <li><a href='https://github.com/metricsgraphics/metrics-graphics/releases'>Download</a></li>
+ <li><a href='https://github.com/metricsgraphics/metrics-graphics'>Code</a></li>
+ <li><a href='https://github.com/metricsgraphics/metrics-graphics/issues'>Issues</a></li>
+ <li><a href='examples.htm'>Examples</a></li>
+ </ul>
+
+ <img src='images/logo.svg' id='logo' class='svg' />
+ </div>
+
+ <div id='description'>
+ <p><i>MetricsGraphics.js</i> is a library built on top of
+ <a href='http://d3js.org/'>D3</a> that is optimized for visualizing and
+ laying out time-series data. It provides a simple way to produce common
+ types of graphics in a principled, consistent and responsive way. The
+ library currently supports line charts, scatterplots and histograms as
+ well as features like rug plots and basic linear regression.</p>
+
+ <p>This demo allows you to play around with the library without having to
+ download it. Try doubling the number of sightings in, say, 1995 and see
+ how that affects the graphic. Or how about changing any of the options in
+ <i>MG.data_graphic</i>? Or perhaps change the chart type to a scatterplot by
+ setting <code>chart_type:'point'</code>, switching the <i>x</i> and <i>y</i>
+ accessors and increasing the <i>height</i>? The data object is set to the
+ contents of the <i>Data</i> text area. Errors are logged to the console.</p>
+ </div>
+ </div>
+
+ <div class='container'>
+ <div class='row main-windows-titles'>
+ <div class='col-xs-2'>Data</div>
+ <div class='js-title col-xs-5'>
+ JavaScript <a href='https://github.com/metricsgraphics/metrics-graphics/wiki/List-of-Options#list-of-options' target='_blank'>See Full List of Options</a>
+ <button type='button' class='update btn'>Run</button>
+ </div>
+ </div>
+ <div class='row main-windows'>
+ <div class='data col-xs-2'>
+ <textarea></textarea>
+ </div>
+ <div class='js col-xs-5' id='editor'></div>
+ <div class='result text-center col-xs-5'></div>
+ </div>
+ </div>
+
+ <div class='container footer'>
+ Created by <a href='https://twitter.com/alialmossawi'>Ali Almossawi</a>,
+ <a href='https://github.com/hamilton'>Hamilton Ulmer</a> &mdash; Metrics at
+ <a href='https://www.mozilla.org/en-US/'>Mozilla</a>
+ <br />Shared under the <a href='http://www.mozilla.org/MPL/2.0/'>
+ Mozilla Public License</a>.
+ </div>
+
+ <style>
+ body {
+ background-color: #fcfcfc;
+ }
+
+ .container {
+ width: 90%;
+ min-width: 960px;
+ }
+
+ .data textarea {
+ font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
+ font-size: 11px;
+ height: 100%;
+ width: 100%;
+ }
+
+ .footer {
+ background-image: url(images/divider.png);
+ background-repeat: no-repeat;
+ background-position: center 115px;
+ padding-top: 70px;
+ margin-bottom: 20px;
+ }
+
+ .hightop {
+ margin-top: 40px;
+ }
+
+ #logo {
+ margin: 15px 0 10px 0;
+ }
+
+ .main-windows-titles {
+ color: #3b3b3b;
+ font-size: 16px;
+ padding-bottom: 5px;
+ text-align: center;
+ }
+
+ .main-windows-titles .js-title a {
+ position: absolute;
+ right: 0;
+ font-size: 70%;
+ margin: 7px 1px 0 0;
+ }
+
+ .main-windows .data,
+ .main-windows .js,
+ .main-windows .result {
+ height: 400px;
+ }
+
+ p {
+ padding-top: 6px;
+ }
+
+ textarea,
+ #editor {
+ border-radius: 3px;
+ border: none;
+ overflow: auto;
+ outline: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ padding: 10px;
+ border: 1px solid #ccc;
+ }
+
+ .btn.update {
+ background-color: steelblue;
+ color: white;
+ margin-top: 34px;
+ outline: none;
+ position: absolute;
+ right: 7px;
+ z-index: 99;
+ }
+
+ .btn.update:hover,
+ .btn.update:active,
+ .btn.update:visited {
+ color: #efefef;
+ outline: none;
+ }
+ </style>
+ <script>
+ var default_call = '//modify away!\n'
+ + 'MG.data_graphic({\n'
+ + ' title: "UFO Sightings",\n'
+ + ' description: "Yearly UFO sightings from 1945 to 2010.",\n'
+ + ' data: JSON.parse(document.querySelector(\'.data textarea\').value),\n'
+ + ' markers: [{\'year\': 1964, \'label\': \'"The Creeping Terror" released\'}],\n'
+ + ' width: 400,\n'
+ + ' height: 250,\n'
+ + ' target: ".result",\n'
+ + ' x_accessor: "year",\n'
+ + ' y_accessor: "sightings",\n'
+ + '});';
+
+ var editor = ace.edit("editor");
+ editor.getSession().setMode("ace/mode/javascript");
+ editor.setValue(default_call);
+ editor.gotoLine(1);
+ editor.setHighlightActiveLine(false);
+
+ d3.json('data/ufo-sightings.json', function(data) {
+ document.querySelector('.data textarea').value = JSON.stringify(data, null, 2);
+ eval(editor.getValue());
+ })
+
+ d3.select('.update').on('click', function() {
+ eval(editor.getValue());
+ })
+ </script>
+</body>
+</html>
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/js/lib/highlight.pack.js b/priv/static/metrics-graphics-3.0-alpha3/examples/js/lib/highlight.pack.js
new file mode 100644
index 0000000..470e125
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/js/lib/highlight.pack.js
@@ -0,0 +1 @@
+var hljs=new function(){function e(e){return e.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function t(e){return e.nodeName.toLowerCase()}function n(e,t){var n=e&&e.exec(t);return n&&0==n.index}function r(e){var t=(e.className+" "+(e.parentNode?e.parentNode.className:"")).split(/\s+/);return t=t.map(function(e){return e.replace(/^lang(uage)?-/,"")}),t.filter(function(e){return m(e)||/no(-?)highlight/.test(e)})[0]}function i(e,t){var n={};for(var r in e)n[r]=e[r];if(t)for(var r in t)n[r]=t[r];return n}function a(e){var n=[];return function r(e,i){for(var a=e.firstChild;a;a=a.nextSibling)3==a.nodeType?i+=a.nodeValue.length:1==a.nodeType&&(n.push({event:"start",offset:i,node:a}),i=r(a,i),t(a).match(/br|hr|img|input/)||n.push({event:"stop",offset:i,node:a}));return i}(e,0),n}function s(n,r,i){function a(){return n.length&&r.length?n[0].offset!=r[0].offset?n[0].offset<r[0].offset?n:r:"start"==r[0].event?n:r:n.length?n:r}function s(n){function r(t){return" "+t.nodeName+'="'+e(t.value)+'"'}l+="<"+t(n)+Array.prototype.map.call(n.attributes,r).join("")+">"}function o(e){l+="</"+t(e)+">"}function c(e){("start"==e.event?s:o)(e.node)}for(var u=0,l="",f=[];n.length||r.length;){var h=a();if(l+=e(i.substr(u,h[0].offset-u)),u=h[0].offset,h==n){f.reverse().forEach(o);do c(h.splice(0,1)[0]),h=a();while(h==n&&h.length&&h[0].offset==u);f.reverse().forEach(s)}else"start"==h[0].event?f.push(h[0].node):f.pop(),c(h.splice(0,1)[0])}return l+e(i.substr(u))}function o(e){function t(e){return e&&e.source||e}function n(n,r){return RegExp(t(n),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,s){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},c=function(t,n){e.cI&&(n=n.toLowerCase()),n.split(" ").forEach(function(e){var n=e.split("|");o[n[0]]=[t,n[1]?Number(n[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=o}a.lR=n(a.l||/\b[A-Za-z0-9_]+\b/,!0),s&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=n(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=n(a.e)),a.tE=t(a.e)||"",a.eW&&s.tE&&(a.tE+=(a.e?"|":"")+s.tE)),a.i&&(a.iR=n(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var u=[];a.c.forEach(function(e){e.v?e.v.forEach(function(t){u.push(i(e,t))}):u.push("self"==e?a:e)}),a.c=u,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,s);var l=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(t).filter(Boolean);a.t=l.length?n(l.join("|"),!0):{exec:function(){return null}}}}r(e)}function c(t,r,i,a){function s(e,t){for(var r=0;r<t.c.length;r++)if(n(t.c[r].bR,e))return t.c[r]}function l(e,t){return n(e.eR,t)?e:e.eW?l(e.parent,t):void 0}function f(e,t){return!i&&n(t.iR,e)}function h(e,t){var n=x.cI?t[0].toLowerCase():t[0];return e.k.hasOwnProperty(n)&&e.k[n]}function g(e,t,n,r){var i=r?"":N.classPrefix,a='<span class="'+i,s=n?"":"</span>";return a+=e+'">',a+t+s}function p(){if(!w.k)return e(B);var t="",n=0;w.lR.lastIndex=0;for(var r=w.lR.exec(B);r;){t+=e(B.substr(n,r.index-n));var i=h(w,r);i?(y+=i[1],t+=g(i[0],e(r[0]))):t+=e(r[0]),n=w.lR.lastIndex,r=w.lR.exec(B)}return t+e(B.substr(n))}function v(){if(w.sL&&!E[w.sL])return e(B);var t=w.sL?c(w.sL,B,!0,L[w.sL]):u(B);return w.r>0&&(y+=t.r),"continuous"==w.subLanguageMode&&(L[w.sL]=t.top),g(t.language,t.value,!1,!0)}function b(){return void 0!==w.sL?v():p()}function d(t,n){var r=t.cN?g(t.cN,"",!0):"";t.rB?(M+=r,B=""):t.eB?(M+=e(n)+r,B=""):(M+=r,B=n),w=Object.create(t,{parent:{value:w}})}function R(t,n){if(B+=t,void 0===n)return M+=b(),0;var r=s(n,w);if(r)return M+=b(),d(r,n),r.rB?0:n.length;var i=l(w,n);if(i){var a=w;a.rE||a.eE||(B+=n),M+=b();do w.cN&&(M+="</span>"),y+=w.r,w=w.parent;while(w!=i.parent);return a.eE&&(M+=e(n)),B="",i.starts&&d(i.starts,""),a.rE?0:n.length}if(f(n,w))throw new Error('Illegal lexeme "'+n+'" for mode "'+(w.cN||"<unnamed>")+'"');return B+=n,n.length||1}var x=m(t);if(!x)throw new Error('Unknown language: "'+t+'"');o(x);for(var w=a||x,L={},M="",k=w;k!=x;k=k.parent)k.cN&&(M=g(k.cN,"",!0)+M);var B="",y=0;try{for(var C,I,j=0;;){if(w.t.lastIndex=j,C=w.t.exec(r),!C)break;I=R(r.substr(j,C.index-j),C[0]),j=C.index+I}R(r.substr(j));for(var k=w;k.parent;k=k.parent)k.cN&&(M+="</span>");return{r:y,value:M,language:t,top:w}}catch(A){if(-1!=A.message.indexOf("Illegal"))return{r:0,value:e(r)};throw A}}function u(t,n){n=n||N.languages||Object.keys(E);var r={r:0,value:e(t)},i=r;return n.forEach(function(e){if(m(e)){var n=c(e,t,!1);n.language=e,n.r>i.r&&(i=n),n.r>r.r&&(i=r,r=n)}}),i.language&&(r.second_best=i),r}function l(e){return N.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,t){return t.replace(/\t/g,N.tabReplace)})),N.useBR&&(e=e.replace(/\n/g,"<br>")),e}function f(e,t,n){var r=t?R[t]:n,i=[e.trim()];return e.match(/(\s|^)hljs(\s|$)/)||i.push("hljs"),r&&i.push(r),i.join(" ").trim()}function h(e){var t=r(e);if(!/no(-?)highlight/.test(t)){var n;N.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):n=e;var i=n.textContent,o=t?c(t,i,!0):u(i),h=a(n);if(h.length){var g=document.createElementNS("http://www.w3.org/1999/xhtml","div");g.innerHTML=o.value,o.value=s(h,a(g),i)}o.value=l(o.value),e.innerHTML=o.value,e.className=f(e.className,t,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function g(e){N=i(N,e)}function p(){if(!p.called){p.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,h)}}function v(){addEventListener("DOMContentLoaded",p,!1),addEventListener("load",p,!1)}function b(e,t){var n=E[e]=t(this);n.aliases&&n.aliases.forEach(function(t){R[t]=e})}function d(){return Object.keys(E)}function m(e){return E[e]||E[R[e]]}var N={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},E={},R={};this.highlight=c,this.highlightAuto=u,this.fixMarkup=l,this.highlightBlock=h,this.configure=g,this.initHighlighting=p,this.initHighlightingOnLoad=v,this.registerLanguage=b,this.listLanguages=d,this.getLanguage=m,this.inherit=i,this.IR="[a-zA-Z][a-zA-Z0-9_]*",this.UIR="[a-zA-Z_][a-zA-Z0-9_]*",this.NR="\\b\\d+(\\.\\d+)?",this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",this.BNR="\\b(0b[01]+)",this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",this.BE={b:"\\\\[\\s\\S]",r:0},this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE]},this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE]},this.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/},this.CLCM={cN:"comment",b:"//",e:"$",c:[this.PWM]},this.CBCM={cN:"comment",b:"/\\*",e:"\\*/",c:[this.PWM]},this.HCM={cN:"comment",b:"#",e:"$",c:[this.PWM]},this.NM={cN:"number",b:this.NR,r:0},this.CNM={cN:"number",b:this.CNR,r:0},this.BNM={cN:"number",b:this.BNR,r:0},this.CSSNM={cN:"number",b:this.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},this.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]},this.TM={cN:"title",b:this.IR,r:0},this.UTM={cN:"title",b:this.UIR,r:0}};hljs.registerLanguage("javascript",function(r){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document"},c:[{cN:"pi",b:/^\s*('|")use strict('|")/,r:10},r.ASM,r.QSM,r.CLCM,r.CBCM,r.CNM,{b:"("+r.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[r.CLCM,r.CBCM,r.RM,{b:/</,e:/>;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[r.inherit(r.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[r.CLCM,r.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+r.IR,r:0}]}});hljs.registerLanguage("http",function(){return{i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:!0}}]}});hljs.registerLanguage("json",function(e){var t={literal:"true false null"},i=[e.QSM,e.CNM],l={cN:"value",e:",",eW:!0,eE:!0,c:i,k:t},c={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:!0,eE:!0,c:[e.BE],i:"\\n",starts:l}],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(l,{cN:null})],i:"\\S"};return i.splice(i.length,0,c,n),{c:i,k:t,i:"\\S"}});hljs.registerLanguage("xml",function(){var t="[A-Za-z0-9\\._:-]+",e={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"},c={eW:!0,i:/</,r:0,c:[e,{cN:"attribute",b:t,r:0},{b:"=",r:0,c:[{cN:"value",c:[e],v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s\/>]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:!0,c:[{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[c],starts:{e:"</style>",rE:!0,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[c],starts:{e:"</script>",rE:!0,sL:"javascript"}},e,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},c]}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("};return{cI:!0,i:"[=/|']",c:[e.CBCM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[e.CBCM,{cN:"rule",b:"[^\\s]",rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]}]}]}}); \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/js/lib/mode-javascript.js b/priv/static/metrics-graphics-3.0-alpha3/examples/js/lib/mode-javascript.js
new file mode 100755
index 0000000..a80f564
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/js/lib/mode-javascript.js
@@ -0,0 +1 @@
+define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc.tag",regex:"\\bTODO\\b"},{defaultToken:"comment.doc"}]}};r.inherits(s,i),s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b",s="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[{token:"comment",regex:"\\/\\/",next:"line_comment"},i.getStartRule("doc-start"),{token:"comment",regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+r+")(\\.)(prototype)(\\.)("+r+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+r+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:r},{token:"keyword.operator",regex:/--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],start:[i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/",next:"line_comment_regex_allowed"},{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:r},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],comment_regex_allowed:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],comment:[{token:"comment",regex:"\\*\\/",next:"no_regex"},{defaultToken:"comment"}],line_comment_regex_allowed:[{token:"comment",regex:"$|^",next:"start"},{defaultToken:"comment"}],line_comment:[{token:"comment",regex:"$|^",next:"no_regex"},{defaultToken:"comment"}],qqstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)return n.unshift("start",t),"paren";if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:s},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.id,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column);if(l=="\\")return null;var p=r.getTokens(o.start.row),d=0,v,m=-1;for(var g=0;g<p.length;g++){v=p[g],v.type=="string"?m=-1:m<0&&(m=v.value.indexOf(s));if(v.value.length+d>o.start.column)break;d+=p[g].value.length}if(!v||m<0&&v.type!=="comment"&&(v.type!=="string"||o.start.column!==v.value.length+d-1&&v.value.lastIndexOf(s)===v.value.length-1)){if(!h.isSaneInsertion(n,r))return;return{text:s+s,selection:[1,1]}}if(v&&v.type==="string"){var y=f.substring(a.column,a.column+1);if(y==s)return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n),s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)}}.call(o.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(c.prototype),t.Mode=c}) \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/js/lib/worker-javascript.js b/priv/static/metrics-graphics-3.0-alpha3/examples/js/lib/worker-javascript.js
new file mode 100755
index 0000000..f4935e8
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/js/lib/worker-javascript.js
@@ -0,0 +1 @@
+"no use strict";(function(e){if(typeof e.window!="undefined"&&e.document)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:"error",data:{message:e,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf("!")!==-1){var r=n.split("!");return e.normalizeModule(t,r[0])+"!"+e.normalizeModule(t,r[1])}if(n.charAt(0)=="."){var i=t.split("/").slice(0,-1).join("/");n=(i?i+"/":"")+n;while(n.indexOf(".")!==-1&&s!=n){var s=n;n=n.replace(/^\.\//,"").replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}}return n},e.require=function(t,n){n||(n=t,t=null);if(!n.charAt)throw new Error("worker.js require() accepts only (parentId, id) as arguments");n=e.normalizeModule(t,n);var r=e.require.modules[n];if(r)return r.initialized||(r.initialized=!0,r.exports=r.factory().exports),r.exports;var i=n.split("/");if(!e.require.tlns)return console.log("unable to load "+n);i[0]=e.require.tlns[i[0]]||i[0];var s=i.join("/")+".js";return e.require.id=n,importScripts(s),e.require(t,n)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!="string"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!="function"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=["require","exports","module"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case"require":return i;case"exports":return e.exports;case"module":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},e.initBaseUrls=function(t){require.tlns=t},e.initSender=function(){var n=e.require("ace/lib/event_emitter").EventEmitter,r=e.require("ace/lib/oop"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:"call",id:t,data:e})},this.emit=function(e,t){postMessage({type:"event",name:e,data:t})}}.call(i.prototype),new i};var t=e.main=null,n=e.sender=null;e.onmessage=function(r){var i=r.data;if(i.command){if(!t[i.command])throw new Error("Unknown command:"+i.command);t[i.command].apply(t,i.args)}else if(i.init){initBaseUrls(i.tlns),require("ace/lib/es5-shim"),n=e.sender=initSender();var s=require(i.module)[i.classname];t=e.main=new s(n)}else i.event&&n&&n._signal(i.event,i.data)}})(this),define("ace/lib/oop",["require","exports","module"],function(e,t,n){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?"unshift":"push"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define("ace/range",["require","exports","module"],function(e,t,n){"use strict";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n=="undefined"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){var t=e.data,n=t.range;if(n.start.row==n.end.row&&n.start.row!=this.row)return;if(n.start.row>this.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column,s=n.start,o=n.end;if(t.action==="insertText")if(s.row===r&&s.column<=i){if(s.column!==i||!this.$insertRight)s.row===o.row?i+=o.column-s.column:(i-=s.column,r+=o.row-s.row)}else s.row!==o.row&&s.row<r&&(r+=o.row-s.row);else t.action==="insertLines"?(s.row!==r||i!==0||!this.$insertRight)&&s.row<=r&&(r+=o.row-s.row):t.action==="removeText"?s.row===r&&s.column<i?o.column>=i?i=s.column:i=Math.max(0,i-(o.column-s.column)):s.row!==o.row&&s.row<r?(o.row===r&&(i=Math.max(0,i-o.column)+s.column),r-=o.row-s.row):o.row===r&&(r-=o.row-s.row,i=Math.max(0,i-o.column)+s.column):t.action=="removeLines"&&s.row<=r&&(o.row<=r?r-=o.row-s.row:(r=s.row,i=0));this.setPosition(r,i,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,o=e("./anchor").Anchor,u=function(e){this.$lines=[],e.length===0?this.$lines=[""]:Array.isArray(e)?this._insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.getLine(e.start.row).substring(e.start.column,e.end.column);var t=this.getLines(e.start.row,e.end.row);t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;return e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):e.row<0&&(e.row=0),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this._insertLines(e.row,n),e=this.insertInLine(e,i||"")),e},this.insertLines=function(e,t){return e>=this.getLength()?this.insert({row:e,column:0},"\n"+t.join("\n")):this._insertLines(Math.max(e,0),t)},this._insertLines=function(e,t){if(t.length==0)return{row:e,column:0};while(t.length>61440){var n=this._insertLines(e,t.slice(0,61440));t=t.slice(61440),e=n.row}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:"insertLines",range:i,lines:t};return this._signal("change",{data:o}),i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||"";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:"insertText",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._signal("change",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||"";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:"insertText",range:s.fromPoints(e,r),text:t};return this._signal("change",{data:i}),r},this.remove=function(e){e instanceof s||(e=s.fromPoints(e.start,e.end)),e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this._removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:"removeText",range:r,text:o};return this._signal("change",{data:a}),r.start},this.removeLines=function(e,t){return e<0||t>=this.getLength()?this.remove(new s(e,0,t+1,0)):this._removeLines(e,t)},this._removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:"removeLines",range:n,nl:this.getNewLineCharacter(),lines:r};return this._signal("change",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:"removeText",range:r,text:this.getNewLineCharacter()};this._signal("change",{data:o})},this.replace=function(e,t){e instanceof s||(e=s.fromPoints(e.start,e.end));if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this.insertLines(r.start.row,n.lines):n.action=="insertText"?this.insert(r.start,n.text):n.action=="removeLines"?this._removeLines(r.start.row,r.end.row-1):n.action=="removeText"&&this.remove(r)}},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this._removeLines(r.start.row,r.end.row-1):n.action=="insertText"?this.remove(r):n.action=="removeLines"?this._insertLines(r.start.row,n.lines):n.action=="removeText"&&this.insert(r.start,n.text)}},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(u.prototype),t.Document=u}),define("ace/lib/lang",["require","exports","module"],function(e,t,n){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){var n="";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]=="object"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function(e){if(typeof e!="object"||!e)return e;var n=e.constructor;if(n===RegExp)return e;var r=n();for(var i in e)typeof e[i]=="object"?r[i]=t.deepCopy(e[i]):r[i]=e[i];return r},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},t.escapeHTML=function(e){return e.replace(/&/g,"&#38;").replace(/"/g,"&#34;").replace(/'/g,"&#39;").replace(/</g,"&#60;")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define("ace/worker/mirror",["require","exports","module","ace/document","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../document").Document,i=e("../lib/lang"),s=t.Mirror=function(e){this.sender=e;var t=this.doc=new r(""),n=this.deferredUpdate=i.delayedCall(this.onUpdate.bind(this)),s=this;e.on("change",function(e){t.applyDeltas(e.data);if(s.$timeout)return n.schedule(s.$timeout);s.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(s.prototype)}),define("ace/mode/javascript/jshint",["require","exports","module"],function(e,t,n){n.exports=function r(t,n,i){function s(u,a){if(!n[u]){if(!t[u]){var f=typeof e=="function"&&e;if(!a&&f)return f(u,!0);if(o)return o(u,!0);throw new Error("Cannot find module '"+u+"'")}var l=n[u]={exports:{}};t[u][0].call(l.exports,function(e){var n=t[u][1][e];return s(n?n:e)},l,l.exports,r,t,n,i)}return n[u].exports}var o=typeof e=="function"&&e;for(var u=0;u<i.length;u++)s(i[u]);return s}({1:[function(e,t,n){var r=[];for(var i=0;i<128;i++)r[i]=i===36||i>=65&&i<=90||i===95||i>=97&&i<=122;var s=[];for(var i=0;i<128;i++)s[i]=r[i]||i>=48&&i<=57;t.exports={asciiIdentifierStartTable:r,asciiIdentifierPartTable:s}},{}],2:[function(e,t,n){(function(){var e=this,r=e._,i={},s=Array.prototype,o=Object.prototype,u=Function.prototype,a=s.push,f=s.slice,l=s.concat,c=o.toString,h=o.hasOwnProperty,p=s.forEach,d=s.map,v=s.reduce,m=s.reduceRight,g=s.filter,y=s.every,b=s.some,w=s.indexOf,E=s.lastIndexOf,S=Array.isArray,x=Object.keys,T=u.bind,N=function(e){if(e instanceof N)return e;if(!(this instanceof N))return new N(e);this._wrapped=e};typeof n!="undefined"?(typeof t!="undefined"&&t.exports&&(n=t.exports=N),n._=N):e._=N,N.VERSION="1.6.0";var C=N.each=N.forEach=function(e,t,n){if(e==null)return e;if(p&&e.forEach===p)e.forEach(t,n);else if(e.length===+e.length){for(var r=0,s=e.length;r<s;r++)if(t.call(n,e[r],r,e)===i)return}else{var o=N.keys(e);for(var r=0,s=o.length;r<s;r++)if(t.call(n,e[o[r]],o[r],e)===i)return}return e};N.map=N.collect=function(e,t,n){var r=[];return e==null?r:d&&e.map===d?e.map(t,n):(C(e,function(e,i,s){r.push(t.call(n,e,i,s))}),r)};var k="Reduce of empty array with no initial value";N.reduce=N.foldl=N.inject=function(e,t,n,r){var i=arguments.length>2;e==null&&(e=[]);if(v&&e.reduce===v)return r&&(t=N.bind(t,r)),i?e.reduce(t,n):e.reduce(t);C(e,function(e,s,o){i?n=t.call(r,n,e,s,o):(n=e,i=!0)});if(!i)throw new TypeError(k);return n},N.reduceRight=N.foldr=function(e,t,n,r){var i=arguments.length>2;e==null&&(e=[]);if(m&&e.reduceRight===m)return r&&(t=N.bind(t,r)),i?e.reduceRight(t,n):e.reduceRight(t);var s=e.length;if(s!==+s){var o=N.keys(e);s=o.length}C(e,function(u,a,f){a=o?o[--s]:--s,i?n=t.call(r,n,e[a],a,f):(n=e[a],i=!0)});if(!i)throw new TypeError(k);return n},N.find=N.detect=function(e,t,n){var r;return L(e,function(e,i,s){if(t.call(n,e,i,s))return r=e,!0}),r},N.filter=N.select=function(e,t,n){var r=[];return e==null?r:g&&e.filter===g?e.filter(t,n):(C(e,function(e,i,s){t.call(n,e,i,s)&&r.push(e)}),r)},N.reject=function(e,t,n){return N.filter(e,function(e,r,i){return!t.call(n,e,r,i)},n)},N.every=N.all=function(e,t,n){t||(t=N.identity);var r=!0;return e==null?r:y&&e.every===y?e.every(t,n):(C(e,function(e,s,o){if(!(r=r&&t.call(n,e,s,o)))return i}),!!r)};var L=N.some=N.any=function(e,t,n){t||(t=N.identity);var r=!1;return e==null?r:b&&e.some===b?e.some(t,n):(C(e,function(e,s,o){if(r||(r=t.call(n,e,s,o)))return i}),!!r)};N.contains=N.include=function(e,t){return e==null?!1:w&&e.indexOf===w?e.indexOf(t)!=-1:L(e,function(e){return e===t})},N.invoke=function(e,t){var n=f.call(arguments,2),r=N.isFunction(t);return N.map(e,function(e){return(r?t:e[t]).apply(e,n)})},N.pluck=function(e,t){return N.map(e,N.property(t))},N.where=function(e,t){return N.filter(e,N.matches(t))},N.findWhere=function(e,t){return N.find(e,N.matches(t))},N.max=function(e,t,n){if(!t&&N.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.max.apply(Math,e);var r=-Infinity,i=-Infinity;return C(e,function(e,s,o){var u=t?t.call(n,e,s,o):e;u>i&&(r=e,i=u)}),r},N.min=function(e,t,n){if(!t&&N.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.min.apply(Math,e);var r=Infinity,i=Infinity;return C(e,function(e,s,o){var u=t?t.call(n,e,s,o):e;u<i&&(r=e,i=u)}),r},N.shuffle=function(e){var t,n=0,r=[];return C(e,function(e){t=N.random(n++),r[n-1]=r[t],r[t]=e}),r},N.sample=function(e,t,n){return t==null||n?(e.length!==+e.length&&(e=N.values(e)),e[N.random(e.length-1)]):N.shuffle(e).slice(0,Math.max(0,t))};var A=function(e){return e==null?N.identity:N.isFunction(e)?e:N.property(e)};N.sortBy=function(e,t,n){return t=A(t),N.pluck(N.map(e,function(e,r,i){return{value:e,index:r,criteria:t.call(n,e,r,i)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||n===void 0)return 1;if(n<r||r===void 0)return-1}return e.index-t.index}),"value")};var O=function(e){return function(t,n,r){var i={};return n=A(n),C(t,function(s,o){var u=n.call(r,s,o,t);e(i,u,s)}),i}};N.groupBy=O(function(e,t,n){N.has(e,t)?e[t].push(n):e[t]=[n]}),N.indexBy=O(function(e,t,n){e[t]=n}),N.countBy=O(function(e,t){N.has(e,t)?e[t]++:e[t]=1}),N.sortedIndex=function(e,t,n,r){n=A(n);var i=n.call(r,t),s=0,o=e.length;while(s<o){var u=s+o>>>1;n.call(r,e[u])<i?s=u+1:o=u}return s},N.toArray=function(e){return e?N.isArray(e)?f.call(e):e.length===+e.length?N.map(e,N.identity):N.values(e):[]},N.size=function(e){return e==null?0:e.length===+e.length?e.length:N.keys(e).length},N.first=N.head=N.take=function(e,t,n){return e==null?void 0:t==null||n?e[0]:t<0?[]:f.call(e,0,t)},N.initial=function(e,t,n){return f.call(e,0,e.length-(t==null||n?1:t))},N.last=function(e,t,n){return e==null?void 0:t==null||n?e[e.length-1]:f.call(e,Math.max(e.length-t,0))},N.rest=N.tail=N.drop=function(e,t,n){return f.call(e,t==null||n?1:t)},N.compact=function(e){return N.filter(e,N.identity)};var M=function(e,t,n){return t&&N.every(e,N.isArray)?l.apply(n,e):(C(e,function(e){N.isArray(e)||N.isArguments(e)?t?a.apply(n,e):M(e,t,n):n.push(e)}),n)};N.flatten=function(e,t){return M(e,t,[])},N.without=function(e){return N.difference(e,f.call(arguments,1))},N.partition=function(e,t){var n=[],r=[];return C(e,function(e){(t(e)?n:r).push(e)}),[n,r]},N.uniq=N.unique=function(e,t,n,r){N.isFunction(t)&&(r=n,n=t,t=!1);var i=n?N.map(e,n,r):e,s=[],o=[];return C(i,function(n,r){if(t?!r||o[o.length-1]!==n:!N.contains(o,n))o.push(n),s.push(e[r])}),s},N.union=function(){return N.uniq(N.flatten(arguments,!0))},N.intersection=function(e){var t=f.call(arguments,1);return N.filter(N.uniq(e),function(e){return N.every(t,function(t){return N.contains(t,e)})})},N.difference=function(e){var t=l.apply(s,f.call(arguments,1));return N.filter(e,function(e){return!N.contains(t,e)})},N.zip=function(){var e=N.max(N.pluck(arguments,"length").concat(0)),t=new Array(e);for(var n=0;n<e;n++)t[n]=N.pluck(arguments,""+n);return t},N.object=function(e,t){if(e==null)return{};var n={};for(var r=0,i=e.length;r<i;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n},N.indexOf=function(e,t,n){if(e==null)return-1;var r=0,i=e.length;if(n){if(typeof n!="number")return r=N.sortedIndex(e,t),e[r]===t?r:-1;r=n<0?Math.max(0,i+n):n}if(w&&e.indexOf===w)return e.indexOf(t,n);for(;r<i;r++)if(e[r]===t)return r;return-1},N.lastIndexOf=function(e,t,n){if(e==null)return-1;var r=n!=null;if(E&&e.lastIndexOf===E)return r?e.lastIndexOf(t,n):e.lastIndexOf(t);var i=r?n:e.length;while(i--)if(e[i]===t)return i;return-1},N.range=function(e,t,n){arguments.length<=1&&(t=e||0,e=0),n=arguments[2]||1;var r=Math.max(Math.ceil((t-e)/n),0),i=0,s=new Array(r);while(i<r)s[i++]=e,e+=n;return s};var _=function(){};N.bind=function(e,t){var n,r;if(T&&e.bind===T)return T.apply(e,f.call(arguments,1));if(!N.isFunction(e))throw new TypeError;return n=f.call(arguments,2),r=function(){if(this instanceof r){_.prototype=e.prototype;var i=new _;_.prototype=null;var s=e.apply(i,n.concat(f.call(arguments)));return Object(s)===s?s:i}return e.apply(t,n.concat(f.call(arguments)))}},N.partial=function(e){var t=f.call(arguments,1);return function(){var n=0,r=t.slice();for(var i=0,s=r.length;i<s;i++)r[i]===N&&(r[i]=arguments[n++]);while(n<arguments.length)r.push(arguments[n++]);return e.apply(this,r)}},N.bindAll=function(e){var t=f.call(arguments,1);if(t.length===0)throw new Error("bindAll must be passed function names");return C(t,function(t){e[t]=N.bind(e[t],e)}),e},N.memoize=function(e,t){var n={};return t||(t=N.identity),function(){var r=t.apply(this,arguments);return N.has(n,r)?n[r]:n[r]=e.apply(this,arguments)}},N.delay=function(e,t){var n=f.call(arguments,2);return setTimeout(function(){return e.apply(null,n)},t)},N.defer=function(e){return N.delay.apply(N,[e,1].concat(f.call(arguments,1)))},N.throttle=function(e,t,n){var r,i,s,o=null,u=0;n||(n={});var a=function(){u=n.leading===!1?0:N.now(),o=null,s=e.apply(r,i),r=i=null};return function(){var f=N.now();!u&&n.leading===!1&&(u=f);var l=t-(f-u);return r=this,i=arguments,l<=0?(clearTimeout(o),o=null,u=f,s=e.apply(r,i),r=i=null):!o&&n.trailing!==!1&&(o=setTimeout(a,l)),s}},N.debounce=function(e,t,n){var r,i,s,o,u,a=function(){var f=N.now()-o;f<t?r=setTimeout(a,t-f):(r=null,n||(u=e.apply(s,i),s=i=null))};return function(){s=this,i=arguments,o=N.now();var f=n&&!r;return r||(r=setTimeout(a,t)),f&&(u=e.apply(s,i),s=i=null),u}},N.once=function(e){var t=!1,n;return function(){return t?n:(t=!0,n=e.apply(this,arguments),e=null,n)}},N.wrap=function(e,t){return N.partial(t,e)},N.compose=function(){var e=arguments;return function(){var t=arguments;for(var n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},N.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},N.keys=function(e){if(!N.isObject(e))return[];if(x)return x(e);var t=[];for(var n in e)N.has(e,n)&&t.push(n);return t},N.values=function(e){var t=N.keys(e),n=t.length,r=new Array(n);for(var i=0;i<n;i++)r[i]=e[t[i]];return r},N.pairs=function(e){var t=N.keys(e),n=t.length,r=new Array(n);for(var i=0;i<n;i++)r[i]=[t[i],e[t[i]]];return r},N.invert=function(e){var t={},n=N.keys(e);for(var r=0,i=n.length;r<i;r++)t[e[n[r]]]=n[r];return t},N.functions=N.methods=function(e){var t=[];for(var n in e)N.isFunction(e[n])&&t.push(n);return t.sort()},N.extend=function(e){return C(f.call(arguments,1),function(t){if(t)for(var n in t)e[n]=t[n]}),e},N.pick=function(e){var t={},n=l.apply(s,f.call(arguments,1));return C(n,function(n){n in e&&(t[n]=e[n])}),t},N.omit=function(e){var t={},n=l.apply(s,f.call(arguments,1));for(var r in e)N.contains(n,r)||(t[r]=e[r]);return t},N.defaults=function(e){return C(f.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e},N.clone=function(e){return N.isObject(e)?N.isArray(e)?e.slice():N.extend({},e):e},N.tap=function(e,t){return t(e),e};var D=function(e,t,n,r){if(e===t)return e!==0||1/e==1/t;if(e==null||t==null)return e===t;e instanceof N&&(e=e._wrapped),t instanceof N&&(t=t._wrapped);var i=c.call(e);if(i!=c.call(t))return!1;switch(i){case"[object String]":return e==String(t);case"[object Number]":return e!=+e?t!=+t:e==0?1/e==1/t:e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object RegExp]":return e.source==t.source&&e.global==t.global&&e.multiline==t.multiline&&e.ignoreCase==t.ignoreCase}if(typeof e!="object"||typeof t!="object")return!1;var s=n.length;while(s--)if(n[s]==e)return r[s]==t;var o=e.constructor,u=t.constructor;if(o!==u&&!(N.isFunction(o)&&o instanceof o&&N.isFunction(u)&&u instanceof u)&&"constructor"in e&&"constructor"in t)return!1;n.push(e),r.push(t);var a=0,f=!0;if(i=="[object Array]"){a=e.length,f=a==t.length;if(f)while(a--)if(!(f=D(e[a],t[a],n,r)))break}else{for(var l in e)if(N.has(e,l)){a++;if(!(f=N.has(t,l)&&D(e[l],t[l],n,r)))break}if(f){for(l in t)if(N.has(t,l)&&!(a--))break;f=!a}}return n.pop(),r.pop(),f};N.isEqual=function(e,t){return D(e,t,[],[])},N.isEmpty=function(e){if(e==null)return!0;if(N.isArray(e)||N.isString(e))return e.length===0;for(var t in e)if(N.has(e,t))return!1;return!0},N.isElement=function(e){return!!e&&e.nodeType===1},N.isArray=S||function(e){return c.call(e)=="[object Array]"},N.isObject=function(e){return e===Object(e)},C(["Arguments","Function","String","Number","Date","RegExp"],function(e){N["is"+e]=function(t){return c.call(t)=="[object "+e+"]"}}),N.isArguments(arguments)||(N.isArguments=function(e){return!!e&&!!N.has(e,"callee")}),typeof /./!="function"&&(N.isFunction=function(e){return typeof e=="function"}),N.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},N.isNaN=function(e){return N.isNumber(e)&&e!=+e},N.isBoolean=function(e){return e===!0||e===!1||c.call(e)=="[object Boolean]"},N.isNull=function(e){return e===null},N.isUndefined=function(e){return e===void 0},N.has=function(e,t){return h.call(e,t)},N.noConflict=function(){return e._=r,this},N.identity=function(e){return e},N.constant=function(e){return function(){return e}},N.property=function(e){return function(t){return t[e]}},N.matches=function(e){return function(t){if(t===e)return!0;for(var n in e)if(e[n]!==t[n])return!1;return!0}},N.times=function(e,t,n){var r=Array(Math.max(0,e));for(var i=0;i<e;i++)r[i]=t.call(n,i);return r},N.random=function(e,t){return t==null&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))},N.now=Date.now||function(){return(new Date).getTime()};var P={escape:{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;"}};P.unescape=N.invert(P.escape);var H={escape:new RegExp("["+N.keys(P.escape).join("")+"]","g"),unescape:new RegExp("("+N.keys(P.unescape).join("|")+")","g")};N.each(["escape","unescape"],function(e){N[e]=function(t){return t==null?"":(""+t).replace(H[e],function(t){return P[e][t]})}}),N.result=function(e,t){if(e==null)return void 0;var n=e[t];return N.isFunction(n)?n.call(e):n},N.mixin=function(e){C(N.functions(e),function(t){var n=N[t]=e[t];N.prototype[t]=function(){var e=[this._wrapped];return a.apply(e,arguments),q.call(this,n.apply(N,e))}})};var B=0;N.uniqueId=function(e){var t=++B+"";return e?e+t:t},N.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var j=/(.)^/,F={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},I=/\\|'|\r|\n|\t|\u2028|\u2029/g;N.template=function(e,t,n){var r;n=N.defaults({},n,N.templateSettings);var i=new RegExp([(n.escape||j).source,(n.interpolate||j).source,(n.evaluate||j).source].join("|")+"|$","g"),s=0,o="__p+='";e.replace(i,function(t,n,r,i,u){return o+=e.slice(s,u).replace(I,function(e){return"\\"+F[e]}),n&&(o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'"),r&&(o+="'+\n((__t=("+r+"))==null?'':__t)+\n'"),i&&(o+="';\n"+i+"\n__p+='"),s=u+t.length,t}),o+="';\n",n.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{r=new Function(n.variable||"obj","_",o)}catch(u){throw u.source=o,u}if(t)return r(t,N);var a=function(e){return r.call(this,e,N)};return a.source="function("+(n.variable||"obj")+"){\n"+o+"}",a},N.chain=function(e){return N(e).chain()};var q=function(e){return this._chain?N(e).chain():e};N.mixin(N),C(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=s[e];N.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),(e=="shift"||e=="splice")&&n.length===0&&delete n[0],q.call(this,n)}}),C(["concat","join","slice"],function(e){var t=s[e];N.prototype[e]=function(){return q.call(this,t.apply(this._wrapped,arguments))}}),N.extend(N.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),typeof define=="function"&&define.amd&&define("underscore",[],function(){return N})}).call(this)},{}],3:[function(e,t,n){var r=e("underscore"),i=e("events"),s=e("./vars.js"),o=e("./messages.js"),u=e("./lex.js").Lexer,a=e("./reg.js"),f=e("./state.js").state,l=e("./style.js"),c=function(){"use strict";function I(e,t){return e=e.trim(),/^[+-]W\d{3}$/g.test(e)?!0:p[e]===undefined&&h[e]===undefined&&t.type!=="jslint"&&!m[e]?(G("E001",t,e),!1):!0}function q(e){return Object.prototype.toString.call(e)==="[object String]"}function R(e,t){return e?!e.identifier||e.value!==t?!1:!0:!1}function U(e){if(!e.reserved)return!1;var t=e.meta;if(t&&t.isFutureReservedWord&&f.option.inES5()){if(!t.es5)return!1;if(t.strictOnly&&!f.option.strict&&!f.directive["use strict"])return!1;if(e.isProperty)return!1}return!0}function z(e,t){return e.replace(/\{([^{}]*)\}/g,function(e,n){var r=t[n];return typeof r=="string"||typeof r=="number"?r:e})}function W(e,t){Object.keys(t).forEach(function(n){if(r.has(c.blacklist,n))return;e[n]=t[n]})}function X(){f.option.esnext&&W(M,s.newEcmaIdentifiers),f.option.couch&&W(M,s.couch),f.option.qunit&&W(M,s.qunit),f.option.rhino&&W(M,s.rhino),f.option.shelljs&&(W(M,s.shelljs),W(M,s.node)),f.option.typed&&W(M,s.typed),f.option.phantom&&W(M,s.phantom),f.option.prototypejs&&W(M,s.prototypejs),f.option.node&&(W(M,s.node),W(M,s.typed)),f.option.devel&&W(M,s.devel),f.option.dojo&&W(M,s.dojo),f.option.browser&&(W(M,s.browser),W(M,s.typed)),f.option.nonstandard&&W(M,s.nonstandard),f.option.jasmine&&W(M,s.jasmine),f.option.jquery&&W(M,s.jquery),f.option.mootools&&W(M,s.mootools),f.option.worker&&W(M,s.worker),f.option.wsh&&W(M,s.wsh),f.option.globalstrict&&f.option.strict!==!1&&(f.option.strict=!0),f.option.yui&&W(M,s.yui),f.option.mocha&&W(M,s.mocha),f.option.inMoz=function(e){return f.option.moz},f.option.inESNext=function(e){return f.option.moz||f.option.esnext},f.option.inES5=function(){return!f.option.es3},f.option.inES3=function(e){return e?!f.option.moz&&!f.option.esnext&&f.option.es3:f.option.es3}}function V(e,t,n){var r=Math.floor(t/f.lines.length*100),i=o.errors[e].desc;throw{name:"JSHintError",line:t,character:n,message:i+" ("+r+"% scanned).",raw:i,code:e}}function $(e,t,n,r){return c.undefs.push([e,t,n,r])}function J(){var e=f.ignoredLines;if(r.isEmpty(e))return;c.errors=r.reject(c.errors,function(t){return e[t.line]})}function K(e,t,n,r,i,s){var u,a,l,h;if(/^W\d{3}$/.test(e)){if(f.ignored[e])return;h=o.warnings[e]}else/E\d{3}/.test(e)?h=o.errors[e]:/I\d{3}/.test(e)&&(h=o.info[e]);return t=t||f.tokens.next,t.id==="(end)"&&(t=f.tokens.curr),a=t.line||0,u=t.from||0,l={id:"(error)",raw:h.desc,code:h.code,evidence:f.lines[a-1]||"",line:a,character:u,scope:c.scope,a:n,b:r,c:i,d:s},l.reason=z(h.desc,l),c.errors.push(l),J(),c.errors.length>=f.option.maxerr&&V("E043",a,u),l}function Q(e,t,n,r,i,s,o){return K(e,{line:t,from:n},r,i,s,o)}function G(e,t,n,r,i,s){K(e,t,n,r,i,s)}function Y(e,t,n,r,i,s,o){return G(e,{line:t,from:n},r,i,s,o)}function Z(e,t){var n;return n={id:"(internal)",elem:e,value:t},c.internals.push(n),n}function et(e,t){t=t||{};var n=t.type,i=t.token,s=t.islet;n==="exception"&&r.has(w["(context)"],e)&&w[e]!==!0&&!f.option.node&&K("W002",f.tokens.next,e),r.has(w,e)&&!w["(global)"]&&(w[e]===!0?f.option.latedef&&(f.option.latedef===!0&&r.contains([w[e],n],"unction")||!r.contains([w[e],n],"unction"))&&K("W003",f.tokens.next,e):((!f.option.shadow||r.contains(["inner","outer"],f.option.shadow))&&n!=="exception"||w["(blockscope)"].getlabel(e))&&K("W004",f.tokens.next,e)),w["(context)"]&&r.has(w["(context)"],e)&&n!=="function"&&f.option.shadow==="outer"&&K("W123",f.tokens.next,e),s?w["(blockscope)"].current.add(e,n,f.tokens.curr):(w["(blockscope)"].shadow(e),w[e]=n,i&&(w["(tokens)"][e]=i),Xt(w,e,{unused:t.unused||!1}),w["(global)"]?(S[e]=w,r.has(x,e)&&(f.option.latedef&&(f.option.latedef===!0&&r.contains([w[e],n],"unction")||!r.contains([w[e],n],"unction"))&&K("W003",f.tokens.next,e),delete x[e])):D[e]=w)}function tt(){var e=f.tokens.next,t=e.body.match(/(-\s+)?[^\s,:]+(?:\s*:\s*(-\s+)?[^\s,]+)?/g)||[],n={};if(e.type==="globals"){t.forEach(function(e){e=e.split(":");var t=(e[0]||"").trim(),r=(e[1]||"").trim();t.charAt(0)==="-"?(t=t.slice(1),r=!1,c.blacklist[t]=t,delete M[t]):n[t]=r==="true"}),W(M,n);for(var i in n)r.has(n,i)&&(g[i]=e)}e.type==="exported"&&t.forEach(function(e){y[e]=!0}),e.type==="members"&&(A=A||{},t.forEach(function(e){var t=e.charAt(0),n=e.charAt(e.length-1);t===n&&(t==='"'||t==="'")&&(e=e.substr(1,e.length-2).replace('\\"','"')),A[e]=!1}));var s=["maxstatements","maxparams","maxdepth","maxcomplexity","maxerr","maxlen","indent"];if(e.type==="jshint"||e.type==="jslint")t.forEach(function(t){t=t.split(":");var n=(t[0]||"").trim(),r=(t[1]||"").trim();if(!I(n,e))return;if(s.indexOf(n)>=0){if(r!=="false"){r=+r;if(typeof r!="number"||!isFinite(r)||r<=0||Math.floor(r)!==r){G("E032",e,t[1].trim());return}f.option[n]=r}else f.option[n]=n==="indent"?4:!1;return}if(n==="validthis"){if(w["(global)"])return void G("E009");if(r!=="true"&&r!=="false")return void G("E002",e);f.option.validthis=r==="true";return}if(n==="quotmark"){switch(r){case"true":case"false":f.option.quotmark=r==="true";break;case"double":case"single":f.option.quotmark=r;break;default:G("E002",e)}return}if(n==="shadow"){switch(r){case"true":f.option.shadow=!0;break;case"outer":f.option.shadow="outer";break;case"false":case"inner":f.option.shadow="inner";break;default:G("E002",e)}return}if(n==="unused"){switch(r){case"true":f.option.unused=!0;break;case"false":f.option.unused=!1;break;case"vars":case"strict":f.option.unused=r;break;default:G("E002",e)}return}if(n==="latedef"){switch(r){case"true":f.option.latedef=!0;break;case"false":f.option.latedef=!1;break;case"nofunc":f.option.latedef="nofunc";break;default:G("E002",e)}return}if(n==="ignore"){switch(r){case"start":f.ignoreLinterErrors=!0;break;case"end":f.ignoreLinterErrors=!1;break;case"line":f.ignoredLines[e.line]=!0,J();break;default:G("E002",e)}return}var i=/^([+-])(W\d{3})$/g.exec(n);if(i){f.ignored[i[2]]=i[1]==="-";return}var o;if(r==="true"||r==="false"){e.type==="jslint"?(o=v[n]||n,f.option[o]=r==="true",d[o]!==undefined&&(f.option[o]=!f.option[o])):f.option[n]=r==="true",n==="newcap"&&(f.option["(explicitNewcap)"]=!0);return}G("E002",e)}),X()}function nt(e){var t=e||0,n=0,r;while(n<=t)r=C[n],r||(r=C[n]=k.token()),n+=1;return r}function rt(t,n){switch(f.tokens.curr.id){case"(number)":f.tokens.next.id==="."&&K("W005",f.tokens.curr);break;case"-":(f.tokens.next.id==="-"||f.tokens.next.id==="--")&&K("W006");break;case"+":(f.tokens.next.id==="+"||f.tokens.next.id==="++")&&K("W007")}if(f.tokens.curr.type==="(string)"||f.tokens.curr.identifier)e=f.tokens.curr.value;t&&f.tokens.next.id!==t&&(n?f.tokens.next.id==="(end)"?G("E019",n,n.id):G("E020",f.tokens.next,t,n.id,n.line,f.tokens.next.value):(f.tokens.next.type!=="(identifier)"||f.tokens.next.value!==t)&&K("W116",f.tokens.next,t,f.tokens.next.value)),f.tokens.prev=f.tokens.curr,f.tokens.curr=f.tokens.next;for(;;){f.tokens.next=C.shift()||k.token(),f.tokens.next||V("E041",f.tokens.curr.line);if(f.tokens.next.id==="(end)"||f.tokens.next.id==="(error)")return;f.tokens.next.check&&f.tokens.next.check();if(f.tokens.next.isSpecial)tt();else if(f.tokens.next.id!=="(endline)")break}}function it(e){return e.infix||!e.identifier&&!!e.led}function st(){var e=f.tokens.curr,t=f.tokens.next;return t.id===";"||t.id==="}"||t.id===":"?!0:it(t)===it(e)||e.id==="yield"&&f.option.inMoz(!0)?e.line!==t.line:!1}function ot(t,n){var i,s=!1,o=!1,u=!1;!n&&f.tokens.next.value==="let"&&nt(0).value==="("&&(f.option.inMoz(!0)||K("W118",f.tokens.next,"let expressions"),u=!0,w["(blockscope)"].stack(),rt("let"),rt("("),f.syntax.let.fud.call(f.syntax.let.fud,!1),rt(")")),f.tokens.next.id==="(end)"&&G("E006",f.tokens.curr);var a=f.option.asi&&f.tokens.prev.line<f.tokens.curr.line&&r.contains(["]",")"],f.tokens.prev.id)&&r.contains(["[","("],f.tokens.curr.id);a&&K("W014",f.tokens.curr,f.tokens.curr.id),rt(),n&&(e="anonymous",w["(verb)"]=f.tokens.curr.value);if(n===!0&&f.tokens.curr.fud)i=f.tokens.curr.fud();else{f.tokens.curr.nud?i=f.tokens.curr.nud():G("E030",f.tokens.curr,f.tokens.curr.id);while(t<f.tokens.next.lbp&&!st())s=f.tokens.curr.value==="Array",o=f.tokens.curr.value==="Object",i&&(i.value||i.first&&i.first.value)&&(i.value!=="new"||i.first&&i.first.value&&i.first.value===".")&&(s=!1,i.value!==f.tokens.curr.value&&(o=!1)),rt(),s&&f.tokens.curr.id==="("&&f.tokens.next.id===")"&&K("W009",f.tokens.curr),o&&f.tokens.curr.id==="("&&f.tokens.next.id===")"&&K("W010",f.tokens.curr),i&&f.tokens.curr.led?i=f.tokens.curr.led(i):G("E033",f.tokens.curr,f.tokens.curr.id)}return u&&w["(blockscope)"].unstack(),i}function ut(e,t){e=e||f.tokens.curr,t=t||f.tokens.next,!f.option.laxbreak&&e.line!==t.line&&K("W014",t,t.value)}function at(e){e=e||f.tokens.curr,e.line!==f.tokens.next.line&&K("E022",e,e.value)}function ft(e,t){e.line!==t.line&&(f.option.laxcomma||(lt.first&&(K("I001"),lt.first=!1),K("W014",e,t.value)))}function lt(e){e=e||{},e.peek?ft(f.tokens.prev,f.tokens.curr):(ft(f.tokens.curr,f.tokens.next),rt(","));if(f.tokens.next.identifier&&(!e.property||!f.option.inES5()))switch(f.tokens.next.value){case"break":case"case":case"catch":case"continue":case"default":case"do":case"else":case"finally":case"for":case"if":case"in":case"instanceof":case"return":case"switch":case"throw":case"try":case"var":case"let":case"while":case"with":return G("E024",f.tokens.next,f.tokens.next.value),!1}if(f.tokens.next.type==="(punctuator)")switch(f.tokens.next.value){case"}":case"]":case",":if(e.allowTrailing)return!0;case")":return G("E024",f.tokens.next,f.tokens.next.value),!1}return!0}function ct(e,t){var n=f.syntax[e];if(!n||typeof n!="object")f.syntax[e]=n={id:e,lbp:t,value:e};return n}function ht(e){return ct(e,0)}function pt(e,t){var n=ht(e);return n.identifier=n.reserved=!0,n.fud=t,n}function dt(e,t){var n=pt(e,t);return n.block=!0,n}function vt(e){var t=e.id.charAt(0);if(t>="a"&&t<="z"||t>="A"&&t<="Z")e.identifier=e.reserved=!0;return e}function mt(e,t){var n=ct(e,150);return vt(n),n.nud=typeof t=="function"?t:function(){this.right=ot(150),this.arity="unary";if(this.id==="++"||this.id==="--")f.option.plusplus?K("W016",this,this.id):this.right&&(!this.right.identifier||U(this.right))&&this.right.id!=="."&&this.right.id!=="["&&K("W017",this);return this},n}function gt(e,t){var n=ht(e);return n.type=e,n.nud=t,n}function yt(e,t){var n=gt(e,t);return n.identifier=!0,n.reserved=!0,n}function bt(e,t){var n=gt(e,t&&t.nud||function(){return this});return t=t||{},t.isFutureReservedWord=!0,n.value=e,n.identifier=!0,n.reserved=!0,n.meta=t,n}function wt(e,t){return yt(e,function(){return typeof t=="function"&&t(this),this})}function Et(e,t,n,r){var i=ct(e,n);return vt(i),i.infix=!0,i.led=function(i){return r||ut(f.tokens.prev,f.tokens.curr),e==="in"&&i.id==="!"&&K("W018",i,"!"),typeof t=="function"?t(i,this):(this.left=i,this.right=ot(n),this)},i}function St(e){var t=ct(e,42);return t.led=function(e){return f.option.inESNext()||K("W104",f.tokens.curr,"arrow function syntax (=>)"),ut(f.tokens.prev,f.tokens.curr),this.left=e,this.right=Jt(undefined,undefined,!1,e),this},t}function xt(e,t){var n=ct(e,100);return n.led=function(e){ut(f.tokens.prev,f.tokens.curr);var n=ot(100);return R(e,"NaN")||R(n,"NaN")?K("W019",this):t&&t.apply(this,[e,n]),(!e||!n)&&V("E041",f.tokens.curr.line),e.id==="!"&&K("W018",e,"!"),n.id==="!"&&K("W018",n,"!"),this.left=e,this.right=n,this},n}function Tt(e){return e&&(e.type==="(number)"&&+e.value===0||e.type==="(string)"&&e.value===""||e.type==="null"&&!f.option.eqnull||e.type==="true"||e.type==="false"||e.type==="undefined")}function Nt(e,t){if(f.option.notypeof)return!1;if(!e||!t)return!1;var n=["undefined","object","boolean","number","string","function","xml","object","unknown"];return t.type==="(identifier)"&&t.value==="typeof"&&e.type==="(string)"?!r.contains(n,e.value):!1}function Ct(e){function n(e){if(typeof e!="object")return;return e.right==="prototype"?e:n(e.left)}function r(e){while(!e.identifier&&typeof e.left=="object")e=e.left;if(e.identifier&&t.indexOf(e.value)>=0)return e.value}var t=["Array","ArrayBuffer","Boolean","Collator","DataView","Date","DateTimeFormat","Error","EvalError","Float32Array","Float64Array","Function","Infinity","Intl","Int16Array","Int32Array","Int8Array","Iterator","Number","NumberFormat","Object","RangeError","ReferenceError","RegExp","StopIteration","String","SyntaxError","TypeError","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","URIError"],i=n(e);if(i)return r(i)}function kt(e,t,n){var r=Et(e,typeof t=="function"?t:function(e,t){t.left=e;if(e){if(f.option.freeze){var n=Ct(e);n&&K("W121",e,n)}M[e.value]===!1&&D[e.value]["(global)"]===!0?K("W020",e):e["function"]&&K("W021",e,e.value),w[e.value]==="const"&&G("E013",e,e.value);if(e.id===".")return e.left?e.left.value==="arguments"&&!f.directive["use strict"]&&K("E031",t):K("E031",t),t.right=ot(10),t;if(e.id==="[")return f.tokens.curr.left.first?f.tokens.curr.left.first.forEach(function(e){e&&w[e.value]==="const"&&G("E013",e,e.value)}):e.left?e.left.value==="arguments"&&!f.directive["use strict"]&&K("E031",t):K("E031",t),t.right=ot(10),t;if(e.identifier&&!U(e))return w[e.value]==="exception"&&K("W022",e),t.right=ot(10),t;e===f.syntax["function"]&&K("W023",f.tokens.curr)}G("E031",t)},n);return r.exps=!0,r.assign=!0,r}function Lt(e,t,n){var r=ct(e,n);return vt(r),r.led=typeof t=="function"?t:function(e){return f.option.bitwise&&K("W016",this,this.id),this.left=e,this.right=ot(n),this},r}function At(e){return kt(e,function(e,t){f.option.bitwise&&K("W016",t,t.id);if(e)return e.id==="."||e.id==="["||e.identifier&&!U(e)?(ot(10),t):(e===f.syntax["function"]&&K("W023",f.tokens.curr),t);G("E031",t)},20)}function Ot(e){var t=ct(e,150);return t.led=function(e){return f.option.plusplus?K("W016",this,this.id):(!e.identifier||U(e))&&e.id!=="."&&e.id!=="["&&K("W017",this),this.left=e,this},t}function Mt(e,t){if(!f.tokens.next.identifier)return;rt();var n=f.tokens.curr,r=f.tokens.curr.value;return U(n)?t&&f.option.inES5()?r:e&&r==="undefined"?r:(K("W024",f.tokens.curr,f.tokens.curr.id),r):r}function _t(e,t){var n=Mt(e,t);if(n)return n;f.tokens.curr.id==="function"&&f.tokens.next.id==="("?K("W025"):G("E030",f.tokens.next,f.tokens.next.value)}function Dt(e){var t=0,n;if(f.tokens.next.id!==";"||O)return;for(;;){do n=nt(t),t+=1;while(n.id!="(end)"&&n.id==="(comment)");if(n.reach)return;if(n.id!=="(endline)"){if(n.id==="function"){f.option.latedef===!0&&K("W026",n);break}K("W027",n,n.value,e);break}}}function Pt(){f.tokens.next.id!==";"?f.option.asi||(!f.option.lastsemic||f.tokens.next.id!=="}"||f.tokens.next.line!==f.tokens.curr.line)&&Q("W033",f.tokens.curr.line,f.tokens.curr.character):rt(";")}function Ht(){var e,t=N,n,i=D,s=f.tokens.next;if(s.id===";"){rt(";");return}var o=U(s);o&&s.meta&&s.meta.isFutureReservedWord&&nt().id===":"&&(K("W024",s,s.id),o=!1);if(s.value==="module"&&s.type==="(identifier)"&&nt().type==="(identifier)"){f.option.inESNext()||K("W119",f.tokens.curr,"module"),rt("module");var u=_t();et(u,{type:"unused",token:f.tokens.curr}),rt("from"),rt("(string)"),Pt();return}if(r.has(["[","{"],s.value)&&on().isDestAssign){f.option.inESNext()||K("W104",f.tokens.curr,"destructuring expression"),e=Yt(),e.forEach(function(e){$(w,"W117",e.token,e.id)}),rt("="),Zt(e,ot(10,!0)),rt(";");return}s.identifier&&!o&&nt().id===":"&&(rt(),rt(":"),D=Object.create(i),et(s.value,{type:"label"}),!f.tokens.next.labelled&&f.tokens.next.value!=="{"&&K("W028",f.tokens.next,s.value,f.tokens.next.value),f.tokens.next.label=s.value,s=f.tokens.next);if(s.id==="{"){var a=w["(verb)"]==="case"&&f.tokens.curr.value===":";Ft(!0,!0,!1,!1,a);return}return n=ot(0,!0),n&&(!n.identifier||n.value!=="function")&&n.type!=="(punctuator)"&&!f.directive["use strict"]&&f.option.globalstrict&&f.option.strict&&K("E007"),s.block||(!f.option.expr&&(!n||!n.exps)?K("W030",f.tokens.curr):f.option.nonew&&n&&n.left&&n.id==="("&&n.left.id==="new"&&K("W031",s),Pt()),N=t,D=i,n}function Bt(e){var t=[],n;while(!f.tokens.next.reach&&f.tokens.next.id!=="(end)")f.tokens.next.id===";"?(n=nt(),(!n||n.id!=="("&&n.id!=="[")&&K("W032"),rt(";")):t.push(Ht(e===f.tokens.next.line));return t}function jt(){var e,t,n;for(;;){if(f.tokens.next.id==="(string)"){t=nt(0);if(t.id==="(endline)"){e=1;do n=nt(e),e+=1;while(n.id==="(endline)");if(n.id!==";"){if(n.id!=="(string)"&&n.id!=="(number)"&&n.id!=="(regexp)"&&n.identifier!==!0&&n.id!=="}")break;K("W033",f.tokens.next)}else t=n}else if(t.id==="}")K("W033",t);else if(t.id!==";")break;rt(),f.directive[f.tokens.curr.value]&&K("W034",f.tokens.curr,f.tokens.curr.value),f.tokens.curr.value==="use strict"&&(f.option["(explicitNewcap)"]||(f.option.newcap=!0),f.option.undef=!0),f.directive[f.tokens.curr.value]=!0,t.id===";"&&rt(";");continue}break}}function Ft(e,t,n,i,s){var o,u=T,a=N,l,c=D,h,p,d;T=e;if(!e||!f.option.funcscope)D=Object.create(D);h=f.tokens.next;var v=w["(metrics)"];v.nestedBlockDepth+=1,v.verifyMaxNestedBlockDepthPerFunction();if(f.tokens.next.id==="{"){rt("{"),w["(blockscope)"].stack(),p=f.tokens.curr.line;if(f.tokens.next.id!=="}"){N+=f.option.indent;while(!e&&f.tokens.next.from>N)N+=f.option.indent;if(n){l={};for(d in f.directive)r.has(f.directive,d)&&(l[d]=f.directive[d]);jt(),f.option.strict&&w["(context)"]["(global)"]&&!l["use strict"]&&!f.directive["use strict"]&&K("E007")}o=Bt(p),v.statementCount+=o.length,n&&(f.directive=l),N-=f.option.indent}rt("}",h),w["(blockscope)"].unstack(),N=a}else if(!e)if(n){l={},t&&!i&&!f.option.inMoz(!0)&&G("W118",f.tokens.curr,"function closure expressions");if(!t)for(d in f.directive)r.has(f.directive,d)&&(l[d]=f.directive[d]);ot(10),f.option.strict&&w["(context)"]["(global)"]&&!l["use strict"]&&!f.directive["use strict"]&&K("E007")}else G("E021",f.tokens.next,"{",f.tokens.next.value);else w["(nolet)"]=!0,(!t||f.option.curly)&&K("W116",f.tokens.next,"{",f.tokens.next.value),O=!0,N+=f.option.indent,o=[Ht()],N-=f.option.indent,O=!1,delete w["(nolet)"];switch(w["(verb)"]){case"break":case"continue":case"return":case"throw":if(s)break;default:w["(verb)"]=null}if(!e||!f.option.funcscope)D=c;return T=u,e&&f.option.noempty&&(!o||o.length===0)&&K("W035"),v.nestedBlockDepth-=1,o}function It(e){A&&typeof A[e]!="boolean"&&K("W036",f.tokens.curr,e),typeof L[e]=="number"?L[e]+=1:L[e]=1}function qt(e){var t=e.value,n=Object.getOwnPropertyDescriptor(x,t);n?n.value.push(e.line):x[t]=[e.line]}function Ut(){var e={};e.exps=!0,w["(comparray)"].stack();var t=!1;return f.tokens.next.value!=="for"&&(t=!0,f.option.inMoz(!0)||K("W116",f.tokens.next,"for",f.tokens.next.value),w["(comparray)"].setState("use"),e.right=ot(10)),rt("for"),f.tokens.next.value==="each"&&(rt("each"),f.option.inMoz(!0)||K("W118",f.tokens.curr,"for each")),rt("("),w["(comparray)"].setState("define"),e.left=ot(130),r.contains(["in","of"],f.tokens.next.value)?rt():G("E045",f.tokens.curr),w["(comparray)"].setState("generate"),ot(10),rt(")"),f.tokens.next.value==="if"&&(rt("if"),rt("("),w["(comparray)"].setState("filter"),e.filter=ot(10),rt(")")),t||(w["(comparray)"].setState("use"),e.right=ot(10)),rt("]"),w["(comparray)"].unstack(),e}function zt(){var e=Mt(!1,!0);return e||(f.tokens.next.id==="(string)"?(e=f.tokens.next.value,rt()):f.tokens.next.id==="(number)"&&(e=f.tokens.next.value.toString(),rt())),e==="hasOwnProperty"&&K("W001"),e}function Wt(e){var t,n,i=[],s,o=[],u,a=!1;if(e){if(Array.isArray(e)){for(var l in e){t=e[l];if(t.value==="..."){f.option.inESNext()||K("W104",t,"spread/rest operator");continue}t.value!==","&&(i.push(t.value),et(t.value,{type:"unused",token:t}))}return i}if(e.identifier===!0)return et(e.value,{type:"unused",token:e}),[e]}n=f.tokens.next,rt("(");if(f.tokens.next.id===")"){rt(")");return}for(;;){if(r.contains(["{","["],f.tokens.next.id)){o=Yt();for(u in o)u=o[u],u.id&&(i.push(u.id),et(u.id,{type:"unused",token:u.token}))}else f.tokens.next.value==="..."?(f.option.inESNext()||K("W104",f.tokens.next,"spread/rest operator"),rt("..."),s=_t(!0),i.push(s),et(s,{type:"unused",token:f.tokens.curr})):(s=_t(!0),i.push(s),et(s,{type:"unused",token:f.tokens.curr}));a&&f.tokens.next.id!=="="&&G("E051",f.tokens.current),f.tokens.next.id==="="&&(f.option.inESNext()||K("W119",f.tokens.next,"default parameters"),rt("="),a=!0,ot(10));if(f.tokens.next.id!==",")return rt(")",n),i;lt()}}function Xt(e,t,n){e["(properties)"][t]||(e["(properties)"][t]={unused:!1}),r.extend(e["(properties)"][t],n)}function Vt(e,t,n){return e["(properties)"][t]?e["(properties)"][t][n]||null:null}function $t(e,t,n,i){var s={"(name)":e,"(breakage)":0,"(loopage)":0,"(scope)":n,"(tokens)":{},"(properties)":{},"(catch)":!1,"(global)":!1,"(line)":null,"(character)":null,"(metrics)":null,"(statement)":null,"(context)":null,"(blockscope)":null,"(comparray)":null,"(generator)":null,"(params)":null};return t&&r.extend(s,{"(line)":t.line,"(character)":t.character,"(metrics)":Kt(t)}),r.extend(s,i),s["(context)"]&&(s["(blockscope)"]=s["(context)"]["(blockscope)"],s["(comparray)"]=s["(context)"]["(comparray)"]),s}function Jt(t,n,i,s){var o,u=f.option,a=f.ignored,l=D;return f.option=Object.create(f.option),f.ignored=Object.create(f.ignored),D=Object.create(D),w=$t(t||'"'+e+'"',f.tokens.next,D,{"(statement)":n,"(context)":w,"(generator)":i?!0:null}),o=w,f.tokens.curr.funct=w,E.push(w),t&&et(t,{type:"function"}),w["(params)"]=Wt(s),w["(metrics)"].verifyMaxParametersPerFunction(w["(params)"]),c.undefs=r.filter(c.undefs,function(e){return!r.contains(r.union(s),e[2])}),Ft(!1,!0,!0,s?!0:!1),!f.option.noyield&&i&&w["(generator)"]!=="yielded"&&K("W124",f.tokens.curr),w["(metrics)"].verifyMaxStatementsPerFunction(),w["(metrics)"].verifyMaxComplexityPerFunction(),w["(unusedOption)"]=f.option.unused,D=l,f.option=u,f.ignored=a,w["(last)"]=f.tokens.curr.line,w["(lastcharacter)"]=f.tokens.curr.character,r.map(Object.keys(w),function(e){if(e[0]==="(")return;w["(blockscope)"].unshadow(e)}),w=w["(context)"],o}function Kt(e){return{statementCount:0,nestedBlockDepth:-1,ComplexityCount:1,verifyMaxStatementsPerFunction:function(){f.option.maxstatements&&this.statementCount>f.option.maxstatements&&K("W071",e,this.statementCount)},verifyMaxParametersPerFunction:function(t){t=t||[],f.option.maxparams&&t.length>f.option.maxparams&&K("W072",e,t.length)},verifyMaxNestedBlockDepthPerFunction:function(){f.option.maxdepth&&this.nestedBlockDepth>0&&this.nestedBlockDepth===f.option.maxdepth+1&&K("W073",null,this.nestedBlockDepth)},verifyMaxComplexityPerFunction:function(){var t=f.option.maxcomplexity,n=this.ComplexityCount;t&&n>t&&K("W074",e,n)}}}function Qt(){w["(metrics)"].ComplexityCount+=1}function Gt(e){var t,n;e&&(t=e.id,n=e.paren,t===","&&(e=e.exprs[e.exprs.length-1])&&(t=e.id,n=n||e.paren));switch(t){case"=":case"+=":case"-=":case"*=":case"%=":case"&=":case"|=":case"^=":case"/=":!n&&!f.option.boss&&K("W084")}}function Yt(){var e,t,n=[];f.option.inESNext()||K("W104",f.tokens.curr,"destructuring expression");var i=function(){var e;if(r.contains(["[","{"],f.tokens.next.value)){t=Yt();for(var s in t)s=t[s],n.push({id:s.id,token:s.token})}else f.tokens.next.value===","?n.push({id:null,token:f.tokens.curr}):f.tokens.next.value==="("?(rt("("),i(),rt(")")):(e=_t(),e&&n.push({id:e,token:f.tokens.curr}))};if(f.tokens.next.value==="["){rt("["),i();while(f.tokens.next.value!=="]")rt(","),i();rt("]")}else if(f.tokens.next.value==="{"){rt("{"),e=_t(),f.tokens.next.value===":"?(rt(":"),i()):n.push({id:e,token:f.tokens.curr});while(f.tokens.next.value!=="}")rt(","),e=_t(),f.tokens.next.value===":"?(rt(":"),i()):n.push({id:e,token:f.tokens.curr});rt("}")}return n}function Zt(e,t){var n=t.first;if(!n)return;r.zip(e,Array.isArray(n)?n:[n]).forEach(function(e){var t=e[0],n=e[1];t&&n?t.first=n:t&&t.first&&!n&&K("W080",t.first,t.first.value)})}function rn(e){return f.option.inESNext()||K("W104",f.tokens.curr,"class"),e?(this.name=_t(),et(this.name,{type:"unused",token:f.tokens.curr})):f.tokens.next.identifier&&f.tokens.next.value!=="extends"&&(this.name=_t()),sn(this),this}function sn(e){var t=f.directive["use strict"];f.tokens.next.value==="extends"&&(rt("extends"),e.heritage=ot(10)),f.directive["use strict"]=!0,rt("{"),e.body=f.syntax["{"].nud(!0),f.directive["use strict"]=t}function un(){var e=on();e.notJson?(!f.option.inESNext()&&e.isDestAssign&&K("W104",f.tokens.curr,"destructuring assignment"),Bt()):(f.option.laxbreak=!0,f.jsonMode=!0,fn())}function fn(){function e(){var e={},t=f.tokens.next;rt("{");if(f.tokens.next.id!=="}")for(;;){if(f.tokens.next.id==="(end)")G("E026",f.tokens.next,t.line);else{if(f.tokens.next.id==="}"){K("W094",f.tokens.curr);break}f.tokens.next.id===","?G("E028",f.tokens.next):f.tokens.next.id!=="(string)"&&K("W095",f.tokens.next,f.tokens.next.value)}e[f.tokens.next.value]===!0?K("W075",f.tokens.next,f.tokens.next.value):f.tokens.next.value==="__proto__"&&!f.option.proto||f.tokens.next.value==="__iterator__"&&!f.option.iterator?K("W096",f.tokens.next,f.tokens.next.value):e[f.tokens.next.value]=!0,rt(),rt(":"),fn();if(f.tokens.next.id!==",")break;rt(",")}rt("}")}function t(){var e=f.tokens.next;rt("[");if(f.tokens.next.id!=="]")for(;;){if(f.tokens.next.id==="(end)")G("E027",f.tokens.next,e.line);else{if(f.tokens.next.id==="]"){K("W094",f.tokens.curr);break}f.tokens.next.id===","&&G("E028",f.tokens.next)}fn();if(f.tokens.next.id!==",")break;rt(",")}rt("]")}switch(f.tokens.next.id){case"{":e();break;case"[":t();break;case"true":case"false":case"null":case"(number)":case"(string)":rt();break;case"-":rt("-"),rt("(number)");break;default:G("E003",f.tokens.next)}}var e,t,n={"<":!0,"<=":!0,"==":!0,"===":!0,"!==":!0,"!=":!0,">":!0,">=":!0,"+":!0,"-":!0,"*":!0,"/":!0,"%":!0},h={asi:!0,bitwise:!0,boss:!0,browser:!0,camelcase:!0,couch:!0,curly:!0,debug:!0,devel:!0,dojo:!0,eqeqeq:!0,eqnull:!0,notypeof:!0,es3:!0,es5:!0,esnext:!0,moz:!0,evil:!0,expr:!0,forin:!0,funcscope:!0,globalstrict:!0,immed:!0,iterator:!0,jasmine:!0,jquery:!0,lastsemic:!0,laxbreak:!0,laxcomma:!0,loopfunc:!0,mootools:!0,multistr:!0,freeze:!0,newcap:!0,noarg:!0,node:!0,noempty:!0,nonbsp:!0,nonew:!0,nonstandard:!0,phantom:!0,plusplus:!0,proto:!0,prototypejs:!0,qunit:!0,rhino:!0,shelljs:!0,typed:!0,undef:!0,scripturl:!0,strict:!0,sub:!0,supernew:!0,validthis:!0,withstmt:!0,worker:!0,wsh:!0,yui:!0,mocha:!0,noyield:!0,onecase:!0,regexp:!0,regexdash:!0},p={maxlen:!1,indent:!1,maxerr:!1,predef:!1,globals:!1,quotmark:!1,scope:!1,maxstatements:!1,maxdepth:!1,maxparams:!1,maxcomplexity:!1,shadow:!1,unused:!0,latedef:!1,ignore:!1},d={bitwise:!0,forin:!0,newcap:!0,plusplus:!0,regexp:!0,undef:!0,eqeqeq:!0,strict:!0},v={eqeq:"eqeqeq",windows:"wsh",sloppy:"strict"},m={nomen:!0,onevar:!0,passfail:!0,white:!0,gcl:!0,smarttabs:!0,trailing:!0},g,y,b=["closure","exception","global","label","outer","unused","var"],w,E,S,x,T,N,C,k,L,A,O,M,D,P,H,B,j=[],F=new i.EventEmitter;gt("(number)",function(){return this}),gt("(string)",function(){return this}),gt("(template)",function(){return this}),f.syntax["(identifier)"]={type:"(identifier)",lbp:0,identifier:!0,nud:function(){var t=this.value,n=D[t],r,i;typeof n=="function"?n=undefined:!w["(blockscope)"].current.has(t)&&typeof n=="boolean"&&(r=w,w=E[0],et(t,{type:"var"}),n=w,w=r),i=w["(blockscope)"].getlabel(t);if(w===n||i)switch(i?i[t]["(type)"]:w[t]){case"unused":i?i[t]["(type)"]="var":w[t]="var";break;case"unction":i?i[t]["(type)"]="function":w[t]="function",this["function"]=!0;break;case"const":Xt(w,t,{unused:!1});break;case"function":this["function"]=!0;break;case"label":K("W037",f.tokens.curr,t)}else if(w["(global)"])typeof M[t]!="boolean"&&(e!=="typeof"&&e!=="delete"||f.tokens.next&&(f.tokens.next.value==="."||f.tokens.next.value==="["))&&(w["(comparray)"].check(t)||$(w,"W117",f.tokens.curr,t)),qt(f.tokens.curr);else switch(w[t]){case"closure":case"function":case"var":case"unused":K("W038",f.tokens.curr,t);break;case"label":K("W037",f.tokens.curr,t);break;case"outer":case"global":break;default:if(n===!0)w[t]=!0;else if(n===null)K("W039",f.tokens.curr,t),qt(f.tokens.curr);else if(typeof n!="object")(e!=="typeof"&&e!=="delete"||f.tokens.next&&(f.tokens.next.value==="."||f.tokens.next.value==="["))&&$(w,"W117",f.tokens.curr,t),w[t]=!0,qt(f.tokens.curr);else switch(n[t]){case"function":case"unction":this["function"]=!0,n[t]="closure",w[t]=n["(global)"]?"global":"outer";break;case"var":case"unused":n[t]="closure",w[t]=n["(global)"]?"global":"outer";break;case"const":Xt(n,t,{unused:!1});break;case"closure":w[t]=n["(global)"]?"global":"outer";break;case"label":K("W037",f.tokens.curr,t)}}return this},led:function(){G("E033",f.tokens.next,f.tokens.next.value)}},gt("(regexp)",function(){return this}),ht("(endline)"),ht("(begin)"),ht("(end)").reach=!0,ht("(error)").reach=!0,ht("}").reach=!0,ht(")"),ht("]"),ht('"').reach=!0,ht("'").reach=!0,ht(";"),ht(":").reach=!0,ht("#"),yt("else"),yt("case").reach=!0,yt("catch"),yt("default").reach=!0,yt("finally"),wt("arguments",function(e){f.directive["use strict"]&&w["(global)"]&&K("E008",e)}),wt("eval"),wt("false"),wt("Infinity"),wt("null"),wt("this",function(e){f.directive["use strict"]&&!f.option.validthis&&(w["(statement)"]&&w["(name)"].charAt(0)>"Z"||w["(global)"])&&K("W040",e)}),wt("true"),wt("undefined"),kt("=","assign",20),kt("+=","assignadd",20),kt("-=","assignsub",20),kt("*=","assignmult",20),kt("/=","assigndiv",20).nud=function(){G("E014")},kt("%=","assignmod",20),At("&=","assignbitand",20),At("|=","assignbitor",20),At("^=","assignbitxor",20),At("<<=","assignshiftleft",20),At(">>=","assignshiftright",20),At(">>>=","assignshiftrightunsigned",20),Et(",",function(e,t){var n;t.exprs=[e];if(!lt({peek:!0}))return t;for(;;){if(!(n=ot(10)))break;t.exprs.push(n);if(f.tokens.next.value!==","||!lt())break}return t},10,!0),Et("?",function(e,t){return Qt(),t.left=e,t.right=ot(10),rt(":"),t["else"]=ot(10),t},30);var Rt=40;Et("||",function(e,t){return Qt(),t.left=e,t.right=ot(Rt),t},Rt),Et("&&","and",50),Lt("|","bitor",70),Lt("^","bitxor",80),Lt("&","bitand",90),xt("==",function(e,t){var n=f.option.eqnull&&(e.value==="null"||t.value==="null");switch(!0){case!n&&f.option.eqeqeq:this.from=this.character,K("W116",this,"===","==");break;case Tt(e):K("W041",this,"===",e.value);break;case Tt(t):K("W041",this,"===",t.value);break;case Nt(t,e):K("W122",this,t.value);break;case Nt(e,t):K("W122",this,e.value)}return this}),xt("===",function(e,t){return Nt(t,e)?K("W122",this,t.value):Nt(e,t)&&K("W122",this,e.value),this}),xt("!=",function(e,t){var n=f.option.eqnull&&(e.value==="null"||t.value==="null");return!n&&f.option.eqeqeq?(this.from=this.character,K("W116",this,"!==","!=")):Tt(e)?K("W041",this,"!==",e.value):Tt(t)?K("W041",this,"!==",t.value):Nt(t,e)?K("W122",this,t.value):Nt(e,t)&&K("W122",this,e.value),this}),xt("!==",function(e,t){return Nt(t,e)?K("W122",this,t.value):Nt(e,t)&&K("W122",this,e.value),this}),xt("<"),xt(">"),xt("<="),xt(">="),Lt("<<","shiftleft",120),Lt(">>","shiftright",120),Lt(">>>","shiftrightunsigned",120),Et("in","in",120),Et("instanceof","instanceof",120),Et("+",function(e,t){var n=ot(130);return e&&n&&e.id==="(string)"&&n.id==="(string)"?(e.value+=n.value,e.character=n.character,!f.option.scripturl&&a.javascriptURL.test(e.value)&&K("W050",e),e):(t.left=e,t.right=n,t)},130),mt("+","num"),mt("+++",function(){return K("W007"),this.right=ot(150),this.arity="unary",this}),Et("+++",function(e){return K("W007"),this.left=e,this.right=ot(130),this},130),Et("-","sub",130),mt("-","neg"),mt("---",function(){return K("W006"),this.right=ot(150),this.arity="unary",this}),Et("---",function(e){return K("W006"),this.left=e,this.right=ot(130),this},130),Et("*","mult",140),Et("/","div",140),Et("%","mod",140),Ot("++","postinc"),mt("++","preinc"),f.syntax["++"].exps=!0,Ot("--","postdec"),mt("--","predec"),f.syntax["--"].exps=!0,mt("delete",function(){var e=ot(10);return(!e||e.id!=="."&&e.id!=="[")&&K("W051"),this.first=e,this}).exps=!0,mt("~",function(){return f.option.bitwise&&K("W052",this,"~"),ot(150),this}),mt("...",function(){return f.option.inESNext()||K("W104",this,"spread/rest operator"),f.tokens.next.identifier||G("E030",f.tokens.next,f.tokens.next.value),ot(150),this}),mt("!",function(){return this.right=ot(150),this.arity="unary",this.right||V("E041",this.line||0),n[this.right.id]===!0&&K("W018",this,"!"),this}),mt("typeof","typeof"),mt("new",function(){var e=ot(155),t;if(e&&e.id!=="function")if(e.identifier){e["new"]=!0;switch(e.value){case"Number":case"String":case"Boolean":case"Math":case"JSON":K("W053",f.tokens.prev,e.value);break;case"Function":f.option.evil||K("W054");break;case"Date":case"RegExp":case"this":break;default:e.id!=="function"&&(t=e.value.substr(0,1),f.option.newcap&&(t<"A"||t>"Z")&&!r.has(S,e.value)&&K("W055",f.tokens.curr))}}else e.id!=="."&&e.id!=="["&&e.id!=="("&&K("W056",f.tokens.curr);else f.option.supernew||K("W057",this);return f.tokens.next.id!=="("&&!f.option.supernew&&K("W058",f.tokens.curr,f.tokens.curr.value),this.first=e,this}),f.syntax["new"].exps=!0,mt("void").exps=!0,Et(".",function(e,t){var n=_t(!1,!0);return typeof n=="string"&&It(n),t.left=e,t.right=n,n&&n==="hasOwnProperty"&&f.tokens.next.value==="="&&K("W001"),!e||e.value!=="arguments"||n!=="callee"&&n!=="caller"?!f.option.evil&&e&&e.value==="document"&&(n==="write"||n==="writeln")&&K("W060",e):f.option.noarg?K("W059",e,n):f.directive["use strict"]&&G("E008"),!f.option.evil&&(n==="eval"||n==="execScript")&&K("W061"),t},160,!0),Et("(",function(e,t){f.option.immed&&e&&!e.immed&&e.id==="function"&&K("W062");var n=0,r=[];e&&e.type==="(identifier)"&&e.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&"Number String Boolean Date Object Error".indexOf(e.value)===-1&&(e.value==="Math"?K("W063",e):f.option.newcap&&K("W064",e));if(f.tokens.next.id!==")")for(;;){r[r.length]=ot(10),n+=1;if(f.tokens.next.id!==",")break;lt()}return rt(")"),typeof e=="object"&&(f.option.inES3()&&e.value==="parseInt"&&n===1&&K("W065",f.tokens.curr),f.option.evil||(e.value==="eval"||e.value==="Function"||e.value==="execScript"?(K("W061",e),r[0]&&[0].id==="(string)"&&Z(e,r[0].value)):!r[0]||r[0].id!=="(string)"||e.value!=="setTimeout"&&e.value!=="setInterval"?r[0]&&r[0].id==="(string)"&&e.value==="."&&e.left.value==="window"&&(e.right==="setTimeout"||e.right==="setInterval")&&(K("W066",e),Z(e,r[0].value)):(K("W066",e),Z(e,r[0].value))),!e.identifier&&e.id!=="."&&e.id!=="["&&e.id!=="("&&e.id!=="&&"&&e.id!=="||"&&e.id!=="?"&&K("W067",e)),t.left=e,t},155,!0).exps=!0,mt("(",function(){var e,t=[],n,i,s=0,o,u=1;do n=nt(s),n.value==="("?u+=1:n.value===")"&&(u-=1),s+=1,i=nt(s);while((u!==0||n.value!==")")&&i.value!=="=>"&&i.value!==";"&&i.type!=="(end)");f.tokens.next.id==="function"&&(f.tokens.next.immed=!0);var a=[];if(f.tokens.next.id!==")")for(;;){if(i.value==="=>"&&r.contains(["{","["],f.tokens.next.value)){e=f.tokens.next,e.left=Yt(),t.push(e);for(var l in e.left)a.push(e.left[l].token)}else a.push(ot(10));if(f.tokens.next.id!==",")break;lt()}rt(")",this),f.option.immed&&a[0]&&a[0].id==="function"&&f.tokens.next.id!=="("&&(f.tokens.next.id!=="."||nt().value!=="call"&&nt().value!=="apply")&&K("W068",this);if(f.tokens.next.value==="=>")return a;if(!a.length)return;return a.length>1?(o=Object.create(f.syntax[","]),o.exprs=a):o=a[0],o&&(o.paren=!0),o}),St("=>"),Et("[",function(e,t){var n=ot(10),r;return n&&n.type==="(string)"&&(!f.option.evil&&(n.value==="eval"||n.value==="execScript")&&K("W061",t),It(n.value),!f.option.sub&&a.identifier.test(n.value)&&(r=f.syntax[n.value],(!r||!U(r))&&K("W069",f.tokens.prev,n.value))),rt("]",t),n&&n.value==="hasOwnProperty"&&f.tokens.next.value==="="&&K("W001"),t.left=e,t.right=n,t},160,!0),mt("[",function(){var e=on(!0);if(e.isCompArray)return f.option.inESNext()||K("W119",f.tokens.curr,"array comprehension"),Ut();e.isDestAssign&&!f.option.inESNext()&&K("W104",f.tokens.curr,"destructuring assignment");var t=f.tokens.curr.line!==f.tokens.next.line;this.first=[],t&&(N+=f.option.indent,f.tokens.next.from===N+f.option.indent&&(N+=f.option.indent));while(f.tokens.next.id!=="(end)"){while(f.tokens.next.id===",")f.option.inES5()||K("W070"),rt(",");if(f.tokens.next.id==="]")break;this.first.push(ot(10));if(f.tokens.next.id!==",")break;lt({allowTrailing:!0});if(f.tokens.next.id==="]"&&!f.option.inES5(!0)){K("W070",f.tokens.curr);break}}return t&&(N-=f.option.indent),rt("]",this),this},160),function(e){e.nud=function(e){function c(e,t){a[e]&&r.has(a,e)?K("W075",f.tokens.next,i):a[e]={},a[e].basic=!0,a[e].basictkn=t}function h(e,t){a[e]&&r.has(a,e)?(a[e].basic||a[e].setter)&&K("W075",f.tokens.next,i):a[e]={},a[e].setter=!0,a[e].setterToken=t}function p(e){a[e]&&r.has(a,e)?(a[e].basic||a[e].getter)&&K("W075",f.tokens.next,i):a[e]={},a[e].getter=!0,a[e].getterToken=f.tokens.curr}var t,n,i,s,o,u,a={},l="";t=f.tokens.curr.line!==f.tokens.next.line,t&&(N+=f.option.indent,f.tokens.next.from===N+f.option.indent&&(N+=f.option.indent));for(;;){if(f.tokens.next.id==="}")break;e&&f.tokens.next.value==="static"&&(rt("static"),l="static ");if(f.tokens.next.value==="get"&&nt().id!==":")rt("get"),f.option.inES5(!e)||G("E034"),i=zt(),!i&&!f.option.inESNext()&&G("E035"),e&&i==="constructor"&&G("E049",f.tokens.next,"class getter method",i),i&&p(l+i),o=f.tokens.next,n=Jt(),s=n["(params)"],i&&s&&K("W076",o,s[0],i);else if(f.tokens.next.value==="set"&&nt().id!==":")rt("set"),f.option.inES5(!e)||G("E034"),i=zt(),!i&&!f.option.inESNext()&&G("E035"),e&&i==="constructor"&&G("E049",f.tokens.next,"class setter method",i),i&&h(l+i,f.tokens.next),o=f.tokens.next,n=Jt(),s=n["(params)"],i&&(!s||s.length!==1)&&K("W077",o,i);else{u=!1,f.tokens.next.value==="*"&&f.tokens.next.type==="(punctuator)"&&(f.option.inESNext()||K("W104",f.tokens.next,"generator functions"),rt("*"),u=!0),i=zt(),c(l+i,f.tokens.next);if(typeof i!="string")break;f.tokens.next.value==="("?(f.option.inESNext()||K("W104",f.tokens.curr,"concise methods"),Jt(i,undefined,u)):e||(rt(":"),ot(10))}e&&i==="prototype"&&G("E049",f.tokens.next,"class method",i),It(i);if(e){l="";continue}if(f.tokens.next.id!==",")break;lt({allowTrailing:!0,property:!0}),f.tokens.next.id===","?K("W070",f.tokens.curr):f.tokens.next.id==="}"&&!f.option.inES5(!0)&&K("W070",f.tokens.curr)}t&&(N-=f.option.indent),rt("}",this);if(f.option.inES5())for(var d in a)r.has(a,d)&&a[d].setter&&!a[d].getter&&K("W078",a[d].setterToken);return this},e.fud=function(){G("E036",f.tokens.curr)}}(ht("{"));var en=pt("const",function(e){var t,n,i;f.option.inESNext()||K("W104",f.tokens.curr,"const"),this.first=[];for(;;){var s=[];r.contains(["{","["],f.tokens.next.value)?(t=Yt(),i=!1):(t=[{id:_t(),token:f.tokens.curr}],i=!0);for(var o in t)t.hasOwnProperty(o)&&(o=t[o],w[o.id]==="const"&&K("E011",null,o.id),w["(global)"]&&M[o.id]===!1&&K("W079",o.token,o.id),o.id&&(et(o.id,{token:o.token,type:"const",unused:!0}),s.push(o.token)));if(e)break;this.first=this.first.concat(s),f.tokens.next.id!=="="&&K("E012",f.tokens.curr,f.tokens.curr.value),f.tokens.next.id==="="&&(rt("="),f.tokens.next.id==="undefined"&&K("W080",f.tokens.prev,f.tokens.prev.value),nt(0).id==="="&&f.tokens.next.identifier&&K("W120",f.tokens.next,f.tokens.next.value),n=ot(10),i?t[0].first=n:Zt(s,n));if(f.tokens.next.id!==",")break;lt()}return this});en.exps=!0;var tn=pt("var",function(e){var t,n,i;this.first=[];for(;;){var s=[];r.contains(["{","["],f.tokens.next.value)?(t=Yt(),n=!1):(t=[{id:_t(),token:f.tokens.curr}],n=!0);for(var o in t)t.hasOwnProperty(o)&&(o=t[o],f.option.inESNext()&&w[o.id]==="const"&&K("E011",null,o.id),w["(global)"]&&M[o.id]===!1&&K("W079",o.token,o.id),o.id&&(et(o.id,{type:"unused",token:o.token}),s.push(o.token)));if(e)break;this.first=this.first.concat(s),f.tokens.next.id==="="&&(rt("="),f.tokens.next.id==="undefined"&&K("W080",f.tokens.prev,f.tokens.prev.value),nt(0).id==="="&&f.tokens.next.identifier&&K("W120",f.tokens.next,f.tokens.next.value),i=ot(10),n?t[0].first=i:Zt(s,i));if(f.tokens.next.id!==",")break;lt()}return this});tn.exps=!0;var nn=pt("let",function(e){var t,n,i,s;f.option.inESNext()||K("W104",f.tokens.curr,"let"),f.tokens.next.value==="("?(f.option.inMoz(!0)||K("W118",f.tokens.next,"let block"),rt("("),w["(blockscope)"].stack(),s=!0):w["(nolet)"]&&G("E048",f.tokens.curr),this.first=[];for(;;){var o=[];r.contains(["{","["],f.tokens.next.value)?(t=Yt(),n=!1):(t=[{id:_t(),token:f.tokens.curr.value}],n=!0);for(var u in t)t.hasOwnProperty(u)&&(u=t[u],f.option.inESNext()&&w[u.id]==="const"&&K("E011",null,u.id),w["(global)"]&&M[u.id]===!1&&K("W079",u.token,u.id),u.id&&!w["(nolet)"]&&(et(u.id,{type:"unused",token:u.token,islet:!0}),o.push(u.token)));if(e)break;this.first=this.first.concat(o),f.tokens.next.id==="="&&(rt("="),f.tokens.next.id==="undefined"&&K("W080",f.tokens.prev,f.tokens.prev.value),nt(0).id==="="&&f.tokens.next.identifier&&K("W120",f.tokens.next,f.tokens.next.value),i=ot(10),n?t[0].first=i:Zt(o,i));if(f.tokens.next.id!==",")break;lt()}return s&&(rt(")"),Ft(!0,!0),this.block=!0,w["(blockscope)"].unstack()),this});nn.exps=!0,dt("class",function(){return rn.call(this,!0)}),dt("function",function(){var e=!1;f.tokens.next.value==="*"&&(rt("*"),f.option.inESNext(!0)?e=!0:K("W119",f.tokens.curr,"function*")),T&&K("W082",f.tokens.curr);var t=_t();return w[t]==="const"&&K("E011",null,t),et(t,{type:"unction",token:f.tokens.curr}),Jt(t,{statement:!0},e),f.tokens.next.id==="("&&f.tokens.next.line===f.tokens.curr.line&&G("E039"),this}),mt("function",function(){var e=!1;f.tokens.next.value==="*"&&(f.option.inESNext()||K("W119",f.tokens.curr,"function*"),rt("*"),e=!0);var t=Mt();return Jt(t,undefined,e),!f.option.loopfunc&&w["(loopage)"]&&K("W083"),this}),dt("if",function(){var e=f.tokens.next;return Qt(),f.condition=!0,rt("("),Gt(ot(0)),rt(")",e),f.condition=!1,Ft(!0,!0),f.tokens.next.id==="else"&&(rt("else"),f.tokens.next.id==="if"||f.tokens.next.id==="switch"?Ht(!0):Ft(!0,!0)),this}),dt("try",function(){function t(){var e=D,t;rt("catch"),rt("("),D=Object.create(e),t=f.tokens.next.value,f.tokens.next.type!=="(identifier)"&&(t=null,K("E030",f.tokens.next,t)),rt(),w=$t("(catch)",f.tokens.next,D,{"(context)":w,"(breakage)":w["(breakage)"],"(loopage)":w["(loopage)"],"(statement)":!1,"(catch)":!0}),t&&et(t,{type:"exception"}),f.tokens.next.value==="if"&&(f.option.inMoz(!0)||K("W118",f.tokens.curr,"catch filter"),rt("if"),ot(0)),rt(")"),f.tokens.curr.funct=w,E.push(w),Ft(!1),D=e,w["(last)"]=f.tokens.curr.line,w["(lastcharacter)"]=f.tokens.curr.character,w=w["(context)"]}var e;Ft(!0);while(f.tokens.next.id==="catch")Qt(),e&&!f.option.inMoz(!0)&&K("W118",f.tokens.next,"multiple catch blocks"),t(),e=!0;if(f.tokens.next.id==="finally"){rt("finally"),Ft(!0);return}return e||G("E021",f.tokens.next,"catch",f.tokens.next.value),this}),dt("while",function(){var e=f.tokens.next;return w["(breakage)"]+=1,w["(loopage)"]+=1,Qt(),rt("("),Gt(ot(0)),rt(")",e),Ft(!0,!0),w["(breakage)"]-=1,w["(loopage)"]-=1,this}).labelled=!0,dt("with",function(){var e=f.tokens.next;return f.directive["use strict"]?G("E010",f.tokens.curr):f.option.withstmt||K("W085",f.tokens.curr),rt("("),ot(0),rt(")",e),Ft(!0,!0),this}),dt("switch",function(){var e=f.tokens.next,t=!1,n=!1;w["(breakage)"]+=1,rt("("),Gt(ot(0)),rt(")",e),e=f.tokens.next,rt("{"),f.tokens.next.from===N&&(n=!0),n||(N+=f.option.indent),this.cases=[];for(;;)switch(f.tokens.next.id){case"case":switch(w["(verb)"]){case"yield":case"break":case"case":case"continue":case"return":case"switch":case"throw":break;default:a.fallsThrough.test(f.lines[f.tokens.next.line-2])||K("W086",f.tokens.curr,"case")}rt("case"),this.cases.push(ot(0)),Qt(),t=!0,rt(":"),w["(verb)"]="case";break;case"default":switch(w["(verb)"]){case"yield":case"break":case"continue":case"return":case"throw":break;default:this.cases.length&&(a.fallsThrough.test(f.lines[f.tokens.next.line-2])||K("W086",f.tokens.curr,"default"))}rt("default"),t=!0,rt(":");break;case"}":n||(N-=f.option.indent),rt("}",e),w["(breakage)"]-=1,w["(verb)"]=undefined;return;case"(end)":G("E023",f.tokens.next,"}");return;default:N+=f.option.indent;if(t)switch(f.tokens.curr.id){case",":G("E040");return;case":":t=!1,Bt();break;default:G("E025",f.tokens.curr);return}else{if(f.tokens.curr.id!==":"){G("E021",f.tokens.next,"case",f.tokens.next.value);return}rt(":"),G("E024",f.tokens.curr,":"),Bt()}N-=f.option.indent}}).labelled=!0,pt("debugger",function(){return f.option.debug||K("W087",this),this}).exps=!0,function(){var e=pt("do",function(){w["(breakage)"]+=1,w["(loopage)"]+=1,Qt(),this.first=Ft(!0,!0),rt("while");var e=f.tokens.next;return rt("("),Gt(ot(0)),rt(")",e),w["(breakage)"]-=1,w["(loopage)"]-=1,this});e.labelled=!0,e.exps=!0}(),dt("for",function(){var e,t=f.tokens.next,n=!1,i=null;t.value==="each"&&(i=t,rt("each"),f.option.inMoz(!0)||K("W118",f.tokens.curr,"for each")),w["(breakage)"]+=1,w["(loopage)"]+=1,Qt(),rt("(");var s,o=0,u=["in","of"];do s=nt(o),++o;while(!r.contains(u,s.value)&&s.value!==";"&&s.type!=="(end)");if(r.contains(u,s.value)){!f.option.inESNext()&&s.value==="of"&&G("W104",s,"for of");if(f.tokens.next.id==="var")rt("var"),f.syntax["var"].fud.call(f.syntax["var"].fud,!0);else if(f.tokens.next.id==="let")rt("let"),n=!0,w["(blockscope)"].stack(),f.syntax.let.fud.call(f.syntax.let.fud,!0);else if(!f.tokens.next.identifier)G("E030",f.tokens.next,f.tokens.next.type),rt();else{switch(w[f.tokens.next.value]){case"unused":w[f.tokens.next.value]="var";break;case"var":break;default:w["(blockscope)"].getlabel(f.tokens.next.value)||K("W088",f.tokens.next,f.tokens.next.value)}rt()}rt(s.value),ot(20),rt(")",t),e=Ft(!0,!0),f.option.forin&&e&&(e.length>1||typeof e[0]!="object"||e[0].value!=="if")&&K("W089",this),w["(breakage)"]-=1,w["(loopage)"]-=1}else{i&&G("E045",i);if(f.tokens.next.id!==";")if(f.tokens.next.id==="var")rt("var"),f.syntax["var"].fud.call(f.syntax["var"].fud);else if(f.tokens.next.id==="let")rt("let"),n=!0,w["(blockscope)"].stack(),f.syntax.let.fud.call(f.syntax.let.fud);else for(;;){ot(0,"for");if(f.tokens.next.id!==",")break;lt()}at(f.tokens.curr),rt(";"),f.tokens.next.id!==";"&&Gt(ot(0)),at(f.tokens.curr),rt(";"),f.tokens.next.id===";"&&G("E021",f.tokens.next,")",";");if(f.tokens.next.id!==")")for(;;){ot(0,"for");if(f.tokens.next.id!==",")break;lt()}rt(")",t),Ft(!0,!0),w["(breakage)"]-=1,w["(loopage)"]-=1}return n&&w["(blockscope)"].unstack(),this}).labelled=!0,pt("break",function(){var e=f.tokens.next.value;return w["(breakage)"]===0&&K("W052",f.tokens.next,this.value),f.option.asi||at(this),f.tokens.next.id!==";"&&!f.tokens.next.reach&&f.tokens.curr.line===f.tokens.next.line&&(w[e]!=="label"?K("W090",f.tokens.next,e):D[e]!==w&&K("W091",f.tokens.next,e),this.first=f.tokens.next,rt()),Dt("break"),this}).exps=!0,pt("continue",function(){var e=f.tokens.next.value;return w["(breakage)"]===0&&K("W052",f.tokens.next,this.value),f.option.asi||at(this),f.tokens.next.id!==";"&&!f.tokens.next.reach?f.tokens.curr.line===f.tokens.next.line&&(w[e]!=="label"?K("W090",f.tokens.next,e):D[e]!==w&&K("W091",f.tokens.next,e),this.first=f.tokens.next,rt()):w["(loopage)"]||K("W052",f.tokens.next,this.value),Dt("continue"),this}).exps=!0,pt("return",function(){return this.line===f.tokens.next.line?f.tokens.next.id!==";"&&!f.tokens.next.reach&&(this.first=ot(0),this.first&&this.first.type==="(punctuator)"&&this.first.value==="="&&!this.first.paren&&!f.option.boss&&Q("W093",this.first.line,this.first.character)):f.tokens.next.type==="(punctuator)"&&["[","{","+","-"].indexOf(f.tokens.next.value)>-1&&at(this),Dt("return"),this}).exps=!0,function(e){e.exps=!0,e.lbp=25}(mt("yield",function(){var e=f.tokens.prev;return f.option.inESNext(!0)&&!w["(generator)"]?("(catch)"!==w["(name)"]||!w["(context)"]["(generator)"])&&G("E046",f.tokens.curr,"yield"):f.option.inESNext()||K("W104",f.tokens.curr,"yield"),w["(generator)"]="yielded",this.line===f.tokens.next.line||!f.option.inMoz(!0)?(f.tokens.next.id!==";"&&!f.tokens.next.reach&&f.tokens.next.nud&&(ut(f.tokens.curr,f.tokens.next),this.first=ot(10),this.first.type==="(punctuator)"&&this.first.value==="="&&!this.first.paren&&!f.option.boss&&Q("W093",this.first.line,this.first.character)),f.option.inMoz(!0)&&f.tokens.next.id!==")"&&(e.lbp>30||!e.assign&&!st()||e.id==="yield")&&G("E050",this)):f.option.asi||at(this),this})),pt("throw",function(){return at(this),this.first=ot(20),Dt("throw"),this}).exps=!0,pt("import",function(){f.option.inESNext()||K("W119",f.tokens.curr,"import");if(f.tokens.next.type==="(string)")return rt("(string)"),this;if(f.tokens.next.identifier)this.name=_t(),et(this.name,{type:"unused",token:f.tokens.curr});else{rt("{");for(;;){if(f.tokens.next.value==="}"){rt("}");break}var e;f.tokens.next.type==="default"?(e="default",rt("default")):e=_t(),f.tokens.next.value==="as"&&(rt("as"),e=_t()),et(e,{type:"unused",token:f.tokens.curr});if(f.tokens.next.value!==","){if(f.tokens.next.value==="}"){rt("}");break}G("E024",f.tokens.next,f.tokens.next.value);break}rt(",")}}return rt("from"),rt("(string)"),this}).exps=!0,pt("export",function(){f.option.inESNext()||K("W119",f.tokens.curr,"export");if(f.tokens.next.type==="default"){rt("default");if(f.tokens.next.id==="function"||f.tokens.next.id==="class")this.block=!0;return this.exportee=ot(10),this}if(f.tokens.next.value==="{"){rt("{");for(;;){y[_t()]=!0;if(f.tokens.next.value!==","){if(f.tokens.next.value==="}"){rt("}");break}G("E024",f.tokens.next,f.tokens.next.value);break}rt(",")}return this}return f.tokens.next.id==="var"?(rt("var"),y[f.tokens.next.value]=!0,f.syntax["var"].fud.call(f.syntax["var"].fud)):f.tokens.next.id==="let"?(rt("let"),y[f.tokens.next.value]=!0,f.syntax.let.fud.call(f.syntax.let.fud)):f.tokens.next.id==="const"?(rt("const"),y[f.tokens.next.value]=!0,f.syntax["const"].fud.call(f.syntax["const"].fud)):f.tokens.next.id==="function"?(this.block=!0,rt("function"),y[f.tokens.next.value]=!0,f.syntax["function"].fud()):f.tokens.next.id==="class"?(this.block=!0,rt("class"),y[f.tokens.next.value]=!0,f.syntax["class"].fud()):G("E024",f.tokens.next,f.tokens.next.value),this}).exps=!0,bt("abstract"),bt("boolean"),bt("byte"),bt("char"),bt("class",{es5:!0,nud:rn}),bt("double"),bt("enum",{es5:!0}),bt("export",{es5:!0}),bt("extends",{es5:!0}),bt("final"),bt("float"),bt("goto"),bt("implements",{es5:!0,strictOnly:!0}),bt("import",{es5:!0}),bt("int"),bt("interface",{es5:!0,strictOnly:!0}),bt("long"),bt("native"),bt("package",{es5:!0,strictOnly:!0}),bt("private",{es5:!0,strictOnly:!0}),bt("protected",{es5:!0,strictOnly:!0}),bt("public",{es5:!0,strictOnly:!0}),bt("short"),bt("static",{es5:!0,strictOnly:!0}),bt("super",{es5:!0}),bt("synchronized"),bt("transient"),bt("volatile");var on=function(){var e,t,n=-1,i=0,s={};r.contains(["[","{"],f.tokens.curr.value)&&(i+=1);do{e=n===-1?f.tokens.next:nt(n),t=nt(n+1),n+=1,r.contains(["[","{"],e.value)?i+=1:r.contains(["]","}"],e.value)&&(i-=1);if(e.identifier&&e.value==="for"&&i===1){s.isCompArray=!0,s.notJson=!0;break}if(r.contains(["}","]"],e.value)&&t.value==="="&&i===0){s.isDestAssign=!0,s.notJson=!0;break}e.value===";"&&(s.isBlock=!0,s.notJson=!0)}while(i>0&&e.id!=="(end)"&&n<15);return s},an=function(){function i(e){var t=n.variables.filter(function(t){if(t.value===e)return t.undef=!1,e}).length;return t!==0}function s(e){var t=n.variables.filter(function(t){if(t.value===e&&!t.undef)return t.unused===!0&&(t.unused=!1),e}).length;return t===0}var e=function(){this.mode="use",this.variables=[]},t=[],n;return{stack:function(){n=new e,t.push(n)},unstack:function(){n.variables.filter(function(e){e.unused&&K("W098",e.token,e.value),e.undef&&$(e.funct,"W117",e.token,e.value)}),t.splice(-1,1),n=t[t.length-1]},setState:function(e){r.contains(["use","define","generate","filter"],e)&&(n.mode=e)},check:function(e){if(!n)return;return n&&n.mode==="use"?(s(e)&&n.variables.push({funct:w,token:f.tokens.curr,value:e,undef:!0,unused:!1}),!0):n&&n.mode==="define"?(i(e)||n.variables.push({funct:w,token:f.tokens.curr,value:e,undef:!1,unused:!0}),!0):n&&n.mode==="generate"?($(w,"W117",f.tokens.curr,e),!0):n&&n.mode==="filter"?(s(e)&&$(w,"W117",f.tokens.curr,e),!0):!1}}},ln=function(){function n(){for(var t in e)if(e[t]["(type)"]==="unused"&&f.option.unused){var n=e[t]["(token)"],r=n.line,i=n.character;Q("W098",r,i,t)}}var e={},t=[e];return{stack:function(){e={},t.push(e)},unstack:function(){n(),t.splice(t.length-1,1),e=r.last(t)},getlabel:function(e){for(var n=t.length-1;n>=0;--n)if(r.has(t[n],e)&&!t[n][e]["(shadowed)"])return t[n]},shadow:function(e){for(var n=t.length-1;n>=0;n--)r.has(t[n],e)&&(t[n][e]["(shadowed)"]=!0)},unshadow:function(e){for(var n=t.length-1;n>=0;n--)r.has(t[n],e)&&(t[n][e]["(shadowed)"]=!1)},current:{has:function(t){return r.has(e,t)},add:function(t,n,r){e[t]={"(type)":n,"(token)":r,"(shadowed)":!1}}}}},cn=function(e,n,i){function v(e,t){if(!e)return;!Array.isArray(e)&&typeof e=="object"&&(e=Object.keys(e)),e.forEach(t)}var o,a,l,h,p={},d={};n=r.clone(n),f.reset(),n&&n.scope?c.scope=n.scope:(c.errors=[],c.undefs=[],c.internals=[],c.blacklist={},c.scope="(main)"),M=Object.create(null),W(M,s.ecmaIdentifiers),W(M,s.reservedVars),W(M,i||{}),g=Object.create(null),y=Object.create(null);if(n){v(n.predef||null,function(e){var t,r;e[0]==="-"?(t=e.slice(1),c.blacklist[t]=t):(r=Object.getOwnPropertyDescriptor(n.predef,e),M[e]=r?r.value:!1)}),v(n.exported||null,function(e){y[e]=!0}),delete n.predef,delete n.exported,h=Object.keys(n);for(l=0;l<h.length;l++)/^-W\d{3}$/g.test(h[l])?d[h[l].slice(1)]=!0:(p[h[l]]=n[h[l]],h[l]==="newcap"&&n[h[l]]===!1&&(p["(explicitNewcap)"]=!0))}f.option=p,f.ignored=d,f.option.indent=f.option.indent||4,f.option.maxerr=f.option.maxerr||50,N=1,S=Object.create(M),D=S,w=$t("(global)",null,D,{"(global)":!0,"(blockscope)":ln(),"(comparray)":an(),"(metrics)":Kt(f.tokens.next)}),E=[w],B=[],P=null,L={},A=null,x={},T=!1,C=[],H=[];if(!q(e)&&!Array.isArray(e))return Y("E004",0),!1;t={get isJSON(){return f.jsonMode},getOption:function(e){return f.option[e]||null},getCache:function(e){return f.cache[e]},setCache:function(e,t){f.cache[e]=t},warn:function(e,t){Q.apply(null,[e,t.line,t.char].concat(t.data))},on:function(e,t){e.split(" ").forEach(function(e){F.on(e,t)}.bind(this))}},F.removeAllListeners(),(j||[]).forEach(function(e){e(t)}),f.tokens.prev=f.tokens.curr=f.tokens.next=f.syntax["(begin)"],k=new u(e),k.on("warning",function(e){Q.apply(null,[e.code,e.line,e.character].concat(e.data))}),k.on("error",function(e){Y.apply(null,[e.code,e.line,e.character].concat(e.data))}),k.on("fatal",function(e){V("E041",e.line,e.from)}),k.on("Identifier",function(e){F.emit("Identifier",e)}),k.on("String",function(e){F.emit("String",e)}),k.on("Number",function(e){F.emit("Number",e)}),k.start();for(var m in n)r.has(n,m)&&I(m,f.tokens.curr);X(),W(M,i||{}),lt.first=!0;try{rt();switch(f.tokens.next.id){case"{":case"[":un();break;default:jt(),f.directive["use strict"]&&!f.option.globalstrict&&!f.option.node&&!f.option.phantom&&K("W097",f.tokens.prev),Bt()}rt(f.tokens.next&&f.tokens.next.value!=="."?"(end)":undefined),w["(blockscope)"].unstack();var b=function(e,t){do{if(typeof t[e]=="string")return t[e]==="unused"?t[e]="var":t[e]==="unction"&&(t[e]="closure"),!0;t=t["(context)"]}while(t);return!1},O=function(e,t){if(!x[e])return;var n=[];for(var r=0;r<x[e].length;r+=1)x[e][r]!==t&&n.push(x[e][r]);n.length===0?delete x[e]:x[e]=n},R=function(e,t,n,r){var i=t.line,s=t.character;r===undefined&&(r=f.option.unused),r===!0&&(r="last-param");var o={vars:["var"],"last-param":["var","param"],strict:["var","param","last-param"]};r&&o[r]&&o[r].indexOf(n)!==-1&&Q("W098",i,s,e),H.push({name:e,line:i,character:s})},U=function(e,t){var n=e[t],i=e["(tokens)"][t];if(t.charAt(0)==="(")return;if(n!=="unused"&&n!=="unction"&&n!=="const")return;if(e["(params)"]&&e["(params)"].indexOf(t)!==-1)return;if(e["(global)"]&&r.has(y,t))return;if(n==="const"&&!Vt(e,t,"unused"))return;R(t,i,"var")};for(o=0;o<c.undefs.length;o+=1)a=c.undefs[o].slice(0),b(a[2].value,a[0])?O(a[2].value,a[2].line):f.option.undef&&K.apply(K,a.slice(1));E.forEach(function(e){if(e["(unusedOption)"]===!1)return;for(var t in e)r.has(e,t)&&U(e,t);if(!e["(params)"])return;var n=e["(params)"].slice(),i=n.pop(),s,o;while(i){s=e[i],o=e["(unusedOption)"]||f.option.unused,o=o===!0?"last-param":o;if(i==="undefined")return;if(s==="unused"||s==="unction")R(i,e["(tokens)"][i],"param",e["(unusedOption)"]);else if(o==="last-param")return;i=n.pop()}});for(var z in g)r.has(g,z)&&!r.has(S,z)&&!r.has(y,z)&&R(z,g[z],"var")}catch($){if(!$||$.name!=="JSHintError")throw $;var J=f.tokens.next||{};c.errors.push({scope:"(main)",raw:$.raw,code:$.code,reason:$.message,line:$.line||J.line,character:$.character||J.from},null)}if(c.scope==="(main)"){n=n||{};for(o=0;o<c.internals.length;o+=1)a=c.internals[o],n.scope=a.elem,cn(a.value,n,i)}return c.errors.length===0};return cn.addModule=function(e){j.push(e)},cn.addModule(l.register),cn.data=function(){var e={functions:[],options:f.option},t=[],n=[],i,s,o,u,a,l;cn.errors.length&&(e.errors=cn.errors),f.jsonMode&&(e.json=!0);for(a in x)r.has(x,a)&&t.push({name:a,line:x[a]});t.length>0&&(e.implieds=t),B.length>0&&(e.urls=B),l=Object.keys(D),l.length>0&&(e.globals=l);for(o=1;o<E.length;o+=1){s=E[o],i={};for(u=0;u<b.length;u+=1)i[b[u]]=[];for(u=0;u<b.length;u+=1)i[b[u]].length===0&&delete i[b[u]];i.name=s["(name)"],i.param=s["(params)"],i.line=s["(line)"],i.character=s["(character)"],i.last=s["(last)"],i.lastcharacter=s["(lastcharacter)"],i.metrics={complexity:s["(metrics)"].ComplexityCount,parameters:(s["(params)"]||[]).length,statements:s["(metrics)"].statementCount},e.functions.push(i)}H.length>0&&(e.unused=H),n=[];for(a in L)if(typeof L[a]=="number"){e.member=L;break}return e},cn.jshint=cn,cn}();typeof n=="object"&&n&&(n.JSHINT=c)},{"./lex.js":4,"./messages.js":5,"./reg.js":6,"./state.js":7,"./style.js":8,"./vars.js":9,events:10,underscore:2}],4:[function(e,t,n){"use strict";function c(){var e=[];return{push:function(t){e.push(t)},check:function(){for(var t=0;t<e.length;++t)e[t]();e.splice(0,e.length)}}}function h(e){var t=e;typeof t=="string"&&(t=t.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n")),t[0]&&t[0].substr(0,2)==="#!"&&(t[0].indexOf("node")!==-1&&(o.option.node=!0),t[0]=""),this.emitter=new i.EventEmitter,this.source=e,this.setLines(t),this.prereg=!0,this.line=0,this.char=1,this.from=1,this.input="",this.inComment=!1;for(var n=0;n<o.option.indent;n+=1)o.tab+=" "}var r=e("underscore"),i=e("events"),s=e("./reg.js"),o=e("./state.js").state,u=e("../data/ascii-identifier-data.js"),a=u.asciiIdentifierStartTable,f=u.asciiIdentifierPartTable,l={Identifier:1,Punctuator:2,NumericLiteral:3,StringLiteral:4,Comment:5,Keyword:6,NullLiteral:7,BooleanLiteral:8,RegExp:9,TemplateLiteral:10};h.prototype={_lines:[],getLines:function(){return this._lines=o.lines,this._lines},setLines:function(e){this._lines=e,o.lines=this._lines},peek:function(e){return this.input.charAt(e||0)},skip:function(e){e=e||1,this.char+=e,this.input=this.input.slice(e)},on:function(e,t){e.split(" ").forEach(function(e){this.emitter.on(e,t)}.bind(this))},trigger:function(){this.emitter.emit.apply(this.emitter,Array.prototype.slice.call(arguments))},triggerAsync:function(e,t,n,r){n.push(function(){r()&&this.trigger(e,t)}.bind(this))},scanPunctuator:function(){var e=this.peek(),t,n,r;switch(e){case".":if(/^[0-9]$/.test(this.peek(1)))return null;if(this.peek(1)==="."&&this.peek(2)===".")return{type:l.Punctuator,value:"..."};case"(":case")":case";":case",":case"{":case"}":case"[":case"]":case":":case"~":case"?":return{type:l.Punctuator,value:e};case"#":return{type:l.Punctuator,value:e};case"":return null}return t=this.peek(1),n=this.peek(2),r=this.peek(3),e===">"&&t===">"&&n===">"&&r==="="?{type:l.Punctuator,value:">>>="}:e==="="&&t==="="&&n==="="?{type:l.Punctuator,value:"==="}:e==="!"&&t==="="&&n==="="?{type:l.Punctuator,value:"!=="}:e===">"&&t===">"&&n===">"?{type:l.Punctuator,value:">>>"}:e==="<"&&t==="<"&&n==="="?{type:l.Punctuator,value:"<<="}:e===">"&&t===">"&&n==="="?{type:l.Punctuator,value:">>="}:e==="="&&t===">"?{type:l.Punctuator,value:e+t}:e===t&&"+-<>&|".indexOf(e)>=0?{type:l.Punctuator,value:e+t}:"<>=!+-*%&|^".indexOf(e)>=0?t==="="?{type:l.Punctuator,value:e+t}:{type:l.Punctuator,value:e}:e==="/"?t==="="&&/\/=(?!(\S*\/[gim]?))/.test(this.input)?{type:l.Punctuator,value:"/="}:{type:l.Punctuator,value:"/"}:null},scanComments:function(){function s(e,t,n){var r=["jshint","jslint","members","member","globals","global","exported"],i=!1,s=e+t,o="plain";return n=n||{},n.isMultiline&&(s+="*/"),r.forEach(function(n){if(i)return;if(e==="//"&&n!=="jshint")return;t.substr(0,n.length)===n&&(i=!0,e+=n,t=t.substr(n.length)),!i&&t.charAt(0)===" "&&t.substr(1,n.length)===n&&(i=!0,e=e+" "+n,t=t.substr(n.length+1));if(!i)return;switch(n){case"member":o="members";break;case"global":o="globals";break;default:o=n}}),{type:l.Comment,commentType:o,value:s,body:t,isSpecial:i,isMultiline:n.isMultiline||!1,isMalformed:n.isMalformed||!1}}var e=this.peek(),t=this.peek(1),n=this.input.substr(2),r=this.line,i=this.char;if(e==="*"&&t==="/")return this.trigger("error",{code:"E018",line:r,character:i}),this.skip(2),null;if(e!=="/"||t!=="*"&&t!=="/")return null;if(t==="/")return this.skip(this.input.length),s("//",n);var o="";if(t==="*"){this.inComment=!0,this.skip(2);while(this.peek()!=="*"||this.peek(1)!=="/")if(this.peek()===""){o+="\n";if(!this.nextLine())return this.trigger("error",{code:"E017",line:r,character:i}),this.inComment=!1,s("/*",o,{isMultiline:!0,isMalformed:!0})}else o+=this.peek(),this.skip();return this.skip(2),this.inComment=!1,s("/*",o,{isMultiline:!0})}},scanKeyword:function(){var e=/^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input),t=["if","in","do","var","for","new","try","let","this","else","case","void","with","enum","while","break","catch","throw","const","yield","class","super","return","typeof","delete","switch","export","import","default","finally","extends","function","continue","debugger","instanceof"];return e&&t.indexOf(e[0])>=0?{type:l.Keyword,value:e[0]}:null},scanIdentifier:function(){function i(e){return e>256}function s(e){return e>256}function o(e){return/^[0-9a-fA-F]$/.test(e)}var e="",t=0,n,r,u=function(){t+=1;if(this.peek(t)!=="u")return null;var e=this.peek(t+1),n=this.peek(t+2),r=this.peek(t+3),i=this.peek(t+4),u;return o(e)&&o(n)&&o(r)&&o(i)?(u=parseInt(e+n+r+i,16),f[u]||s(u)?(t+=5,"\\u"+e+n+r+i):null):null}.bind(this),c=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?a[n]?(t+=1,e):null:i(n)?(t+=1,e):null}.bind(this),h=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?f[n]?(t+=1,e):null:s(n)?(t+=1,e):null}.bind(this);r=c();if(r===null)return null;e=r;for(;;){r=h();if(r===null)break;e+=r}switch(e){case"true":case"false":n=l.BooleanLiteral;break;case"null":n=l.NullLiteral;break;default:n=l.Identifier}return{type:n,value:e}},scanNumericLiteral:function(){function s(e){return/^[0-9]$/.test(e)}function o(e){return/^[0-7]$/.test(e)}function u(e){return/^[0-9a-fA-F]$/.test(e)}function a(e){return e==="$"||e==="_"||e==="\\"||e>="a"&&e<="z"||e>="A"&&e<="Z"}var e=0,t="",n=this.input.length,r=this.peek(e),i;if(r!=="."&&!s(r))return null;if(r!=="."){t=this.peek(e),e+=1,r=this.peek(e);if(t==="0"){if(r==="x"||r==="X"){e+=1,t+=r;while(e<n){r=this.peek(e);if(!u(r))break;t+=r,e+=1}if(t.length<=2)return{type:l.NumericLiteral,value:t,isMalformed:!0};if(e<n){r=this.peek(e);if(a(r))return null}return{type:l.NumericLiteral,value:t,base:16,isMalformed:!1}}if(o(r)){e+=1,t+=r,i=!1;while(e<n){r=this.peek(e);if(s(r))i=!0;else if(!o(r))break;t+=r,e+=1}if(e<n){r=this.peek(e);if(a(r))return null}return{type:l.NumericLiteral,value:t,base:8,isMalformed:!1}}s(r)&&(e+=1,t+=r)}while(e<n){r=this.peek(e);if(!s(r))break;t+=r,e+=1}}if(r==="."){t+=r,e+=1;while(e<n){r=this.peek(e);if(!s(r))break;t+=r,e+=1}}if(r==="e"||r==="E"){t+=r,e+=1,r=this.peek(e);if(r==="+"||r==="-")t+=this.peek(e),e+=1;r=this.peek(e);if(!s(r))return null;t+=r,e+=1;while(e<n){r=this.peek(e);if(!s(r))break;t+=r,e+=1}}if(e<n){r=this.peek(e);if(a(r))return null}return{type:l.NumericLiteral,value:t,base:10,isMalformed:!isFinite(t)}},scanTemplateLiteral:function(){if(!o.option.esnext||this.peek()!=="`")return null;var e=this.line,t=this.char,n=1,r="";this.skip();while(this.peek()!=="`"){while(this.peek()===""){if(!this.nextLine())return this.trigger("error",{code:"E052",line:e,character:t}),{type:l.TemplateLiteral,value:r,isUnclosed:!0};r+="\n"}var i=this.peek();this.skip(n),r+=i}return this.skip(),{type:l.TemplateLiteral,value:r,isUnclosed:!1}},scanStringLiteral:function(e){var t=this.peek();if(t!=='"'&&t!=="'")return null;this.triggerAsync("warning",{code:"W108",line:this.line,character:this.char},e,function(){return o.jsonMode&&t!=='"'});var n="",r=this.line,i=this.char,s=!1;this.skip();e:while(this.peek()!==t){while(this.peek()===""){s?(s=!1,this.triggerAsync("warning",{code:"W043",line:this.line,character:this.char},e,function(){return!o.option.multistr}),this.triggerAsync("warning",{code:"W042",line:this.line,character:this.char},e,function(){return o.jsonMode&&o.option.multistr})):this.trigger("warning",{code:"W112",line:this.line,character:this.char});if(!this.nextLine())return this.trigger("error",{code:"E029",line:r,character:i}),{type:l.StringLiteral,value:n,isUnclosed:!0,quote:t};if(this.peek()==t)break e}s=!1;var u=this.peek(),a=1;u<" "&&this.trigger("warning",{code:"W113",line:this.line,character:this.char,data:["<non-printable>"]});if(u==="\\"){this.skip(),u=this.peek();switch(u){case"'":this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\'"]},e,function(){return o.jsonMode});break;case"b":u="\\b";break;case"f":u="\\f";break;case"n":u="\\n";break;case"r":u="\\r";break;case"t":u="\\t";break;case"0":u="\\0";var f=parseInt(this.peek(1),10);this.triggerAsync("warning",{code:"W115",line:this.line,character:this.char},e,function(){return f>=0&&f<=7&&o.directive["use strict"]});break;case"u":u=String.fromCharCode(parseInt(this.input.substr(1,4),16)),a=5;break;case"v":this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\v"]},e,function(){return o.jsonMode}),u=" ";break;case"x":var c=parseInt(this.input.substr(1,2),16);this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\x-"]},e,function(){return o.jsonMode}),u=String.fromCharCode(c),a=3;break;case"\\":u="\\\\";break;case'"':u='\\"';break;case"/":break;case"":s=!0,u="";break;case"!":if(n.slice(n.length-2)==="<")break;default:this.trigger("warning",{code:"W044",line:this.line,character:this.char})}}n+=u,this.skip(a)}return this.skip(),{type:l.StringLiteral,value:n,isUnclosed:!1,quote:t}},scanRegExp:function(){var e=0,t=this.input.length,n=this.peek(),r=n,i="",s=[],o=!1,u=!1,a,f=function(){n<" "&&(o=!0,this.trigger("warning",{code:"W048",line:this.line,character:this.char})),n==="<"&&(o=!0,this.trigger("warning",{code:"W049",line:this.line,character:this.char,data:[n]}))}.bind(this);if(!this.prereg||n!=="/")return null;e+=1,a=!1;while(e<t){n=this.peek(e),r+=n,i+=n;if(u){n==="]"&&(this.peek(e-1)!=="\\"||this.peek(e-2)==="\\")&&(u=!1),n==="\\"&&(e+=1,n=this.peek(e),i+=n,r+=n,f()),e+=1;continue}if(n==="\\"){e+=1,n=this.peek(e),i+=n,r+=n,f();if(n==="/"){e+=1;continue}if(n==="["){e+=1;continue}}if(n==="["){u=!0,e+=1;continue}if(n==="/"){i=i.substr(0,i.length-1),a=!0,e+=1;break}e+=1}if(!a)return this.trigger("error",{code:"E015",line:this.line,character:this.from}),void this.trigger("fatal",{line:this.line,from:this.from});while(e<t){n=this.peek(e);if(!/[gim]/.test(n))break;s.push(n),r+=n,e+=1}try{new RegExp(i,s.join(""))}catch(c){o=!0,this.trigger("error",{code:"E016",line:this.line,character:this.char,data:[c.message]})}return{type:l.RegExp,value:r,flags:s,isMalformed:o}},scanNonBreakingSpaces:function(){return o.option.nonbsp?this.input.search(/(\u00A0)/):-1},scanUnsafeChars:function(){return this.input.search(s.unsafeChars)},next:function(e){this.from=this.char;var t;if(/\s/.test(this.peek())){t=this.char;while(/\s/.test(this.peek()))this.from+=1,this.skip()}var n=this.scanComments()||this.scanStringLiteral(e)||this.scanTemplateLiteral();return n?n:(n=this.scanRegExp()||this.scanPunctuator()||this.scanKeyword()||this.scanIdentifier()||this.scanNumericLiteral(),n?(this.skip(n.value.length),n):null)},nextLine:function(){var e;if(this.line>=this.getLines().length)return!1;this.input=this.getLines()[this.line],this.line+=1,this.char=1,this.from=1;var t=this.input.trim(),n=function(){return r.some(arguments,function(e){return t.indexOf(e)===0})},i=function(){return r.some(arguments,function(e){return t.indexOf(e,t.length-e.length)!==-1})};o.ignoreLinterErrors===!0&&!n("/*","//")&&!i("*/")&&(this.input=""),e=this.scanNonBreakingSpaces(),e>=0&&this.trigger("warning",{code:"W125",line:this.line,character:e+1}),this.input=this.input.replace(/\t/g,o.tab),e=this.scanUnsafeChars(),e>=0&&this.trigger("warning",{code:"W100",line:this.line,character:e});if(o.option.maxlen&&o.option.maxlen<this.input.length){var u=this.inComment||n.call(t,"//")||n.call(t,"/*"),a=!u||!s.maxlenException.test(t);a&&this.trigger("warning",{code:"W101",line:this.line,character:this.input.length})}return!0},start:function(){this.nextLine()},token:function(){function n(e,t){if(!e.reserved)return!1;var n=e.meta;if(n&&n.isFutureReservedWord&&o.option.inES5()){if(!n.es5)return!1;if(n.strictOnly&&!o.option.strict&&!o.directive["use strict"])return!1;if(t)return!1}return!0}var e=c(),t,i=function(t,i,s){var u;t!=="(endline)"&&t!=="(end)"&&(this.prereg=!1);if(t==="(punctuator)"){switch(i){case".":case")":case"~":case"#":case"]":this.prereg=!1;break;default:this.prereg=!0}u=Object.create(o.syntax[i]||o.syntax["(error)"])}if(t==="(identifier)"){if(i==="return"||i==="case"||i==="typeof")this.prereg=!0;r.has(o.syntax,i)&&(u=Object.create(o.syntax[i]||o.syntax["(error)"]),n(u,s&&t==="(identifier)")||(u=null))}return u||(u=Object.create(o.syntax[t])),u.identifier=t==="(identifier)",u.type=u.type||t,u.value=i,u.line=this.line,u.character=this.char,u.from=this.from,s&&u.identifier&&(u.isProperty=s),u.check=e.check,u}.bind(this);for(;;){if(!this.input.length)return i(this.nextLine()?"(endline)":"(end)","");t=this.next(e);if(!t){this.input.length&&(this.trigger("error",{code:"E024",line:this.line,character:this.char,data:[this.peek()]}),this.input="");continue}switch(t.type){case l.StringLiteral:return this.triggerAsync("String",{line:this.line,"char":this.char,from:this.from,value:t.value,quote:t.quote},e,function(){return!0}),i("(string)",t.value);case l.TemplateLiteral:return this.trigger("Template",{line:this.line,"char":this.char,from:this.from,value:t.value}),i("(template)",t.value);case l.Identifier:this.trigger("Identifier",{line:this.line,"char":this.char,from:this.form,name:t.value,isProperty:o.tokens.curr.id==="."});case l.Keyword:case l.NullLiteral:case l.BooleanLiteral:return i("(identifier)",t.value,o.tokens.curr.id===".");case l.NumericLiteral:return t.isMalformed&&this.trigger("warning",{code:"W045",line:this.line,character:this.char,data:[t.value]}),this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["0x-"]},e,function(){return t.base===16&&o.jsonMode}),this.triggerAsync("warning",{code:"W115",line:this.line,character:this.char},e,function(){return o.directive["use strict"]&&t.base===8}),this.trigger("Number",{line:this.line,"char":this.char,from:this.from,value:t.value,base:t.base,isMalformed:t.malformed}),i("(number)",t.value);case l.RegExp:return i("(regexp)",t.value);case l.Comment:o.tokens.curr.comment=!0;if(t.isSpecial)return{id:"(comment)",value:t.value,body:t.body,type:t.commentType,isSpecial:t.isSpecial,line:this.line,character:this.char,from:this.from};break;case"":break;default:return i("(punctuator)",t.value)}}}},n.Lexer=h},{"../data/ascii-identifier-data.js":1,"./reg.js":6,"./state.js":7,events:10,underscore:2}],5:[function(e,t,n){"use strict";var r=e("underscore"),i={E001:"Bad option: '{a}'.",E002:"Bad option value.",E003:"Expected a JSON value.",E004:"Input is neither a string nor an array of strings.",E005:"Input is empty.",E006:"Unexpected early end of program.",E007:'Missing "use strict" statement.',E008:"Strict violation.",E009:"Option 'validthis' can't be used in a global scope.",E010:"'with' is not allowed in strict mode.",E011:"const '{a}' has already been declared.",E012:"const '{a}' is initialized to 'undefined'.",E013:"Attempting to override '{a}' which is a constant.",E014:"A regular expression literal can be confused with '/='.",E015:"Unclosed regular expression.",E016:"Invalid regular expression.",E017:"Unclosed comment.",E018:"Unbegun comment.",E019:"Unmatched '{a}'.",E020:"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",E021:"Expected '{a}' and instead saw '{b}'.",E022:"Line breaking error '{a}'.",E023:"Missing '{a}'.",E024:"Unexpected '{a}'.",E025:"Missing ':' on a case clause.",E026:"Missing '}' to match '{' from line {a}.",E027:"Missing ']' to match '[' from line {a}.",E028:"Illegal comma.",E029:"Unclosed string.",E030:"Expected an identifier and instead saw '{a}'.",E031:"Bad assignment.",E032:"Expected a small integer or 'false' and instead saw '{a}'.",E033:"Expected an operator and instead saw '{a}'.",E034:"get/set are ES5 features.",E035:"Missing property name.",E036:"Expected to see a statement and instead saw a block.",E037:null,E038:null,E039:"Function declarations are not invocable. Wrap the whole function invocation in parens.",E040:"Each value should have its own case label.",E041:"Unrecoverable syntax error.",E042:"Stopping.",E043:"Too many errors.",E044:null,E045:"Invalid for each loop.",E046:"A yield statement shall be within a generator function (with syntax: `function*`)",E047:null,E048:"Let declaration not directly within block.",E049:"A {a} cannot be named '{b}'.",E050:"Mozilla requires the yield expression to be parenthesized here.",E051:"Regular parameters cannot come after default parameters.",E052:"Unclosed template literal."},s={W001:"'hasOwnProperty' is a really bad name.",W002:"Value of '{a}' may be overwritten in IE 8 and earlier.",W003:"'{a}' was used before it was defined.",W004:"'{a}' is already defined.",W005:"A dot following a number can be confused with a decimal point.",W006:"Confusing minuses.",W007:"Confusing plusses.",W008:"A leading decimal point can be confused with a dot: '{a}'.",W009:"The array literal notation [] is preferable.",W010:"The object literal notation {} is preferable.",W011:null,W012:null,W013:null,W014:"Bad line breaking before '{a}'.",W015:null,W016:"Unexpected use of '{a}'.",W017:"Bad operand.",W018:"Confusing use of '{a}'.",W019:"Use the isNaN function to compare with NaN.",W020:"Read only.",W021:"'{a}' is a function.",W022:"Do not assign to the exception parameter.",W023:"Expected an identifier in an assignment and instead saw a function invocation.",W024:"Expected an identifier and instead saw '{a}' (a reserved word).",W025:"Missing name in function declaration.",W026:"Inner functions should be listed at the top of the outer function.",W027:"Unreachable '{a}' after '{b}'.",W028:"Label '{a}' on {b} statement.",W030:"Expected an assignment or function call and instead saw an expression.",W031:"Do not use 'new' for side effects.",W032:"Unnecessary semicolon.",W033:"Missing semicolon.",W034:'Unnecessary directive "{a}".',W035:"Empty block.",W036:"Unexpected /*member '{a}'.",W037:"'{a}' is a statement label.",W038:"'{a}' used out of scope.",W039:"'{a}' is not allowed.",W040:"Possible strict violation.",W041:"Use '{a}' to compare with '{b}'.",W042:"Avoid EOL escaping.",W043:"Bad escaping of EOL. Use option multistr if needed.",W044:"Bad or unnecessary escaping.",W045:"Bad number '{a}'.",W046:"Don't use extra leading zeros '{a}'.",W047:"A trailing decimal point can be confused with a dot: '{a}'.",W048:"Unexpected control character in regular expression.",W049:"Unexpected escaped character '{a}' in regular expression.",W050:"JavaScript URL.",W051:"Variables should not be deleted.",W052:"Unexpected '{a}'.",W053:"Do not use {a} as a constructor.",W054:"The Function constructor is a form of eval.",W055:"A constructor name should start with an uppercase letter.",W056:"Bad constructor.",W057:"Weird construction. Is 'new' necessary?",W058:"Missing '()' invoking a constructor.",W059:"Avoid arguments.{a}.",W060:"document.write can be a form of eval.",W061:"eval can be harmful.",W062:"Wrap an immediate function invocation in parens to assist the reader in understanding that the expression is the result of a function, and not the function itself.",W063:"Math is not a function.",W064:"Missing 'new' prefix when invoking a constructor.",W065:"Missing radix parameter.",W066:"Implied eval. Consider passing a function instead of a string.",W067:"Bad invocation.",W068:"Wrapping non-IIFE function literals in parens is unnecessary.",W069:"['{a}'] is better written in dot notation.",W070:"Extra comma. (it breaks older versions of IE)",W071:"This function has too many statements. ({a})",W072:"This function has too many parameters. ({a})",W073:"Blocks are nested too deeply. ({a})",W074:"This function's cyclomatic complexity is too high. ({a})",W075:"Duplicate key '{a}'.",W076:"Unexpected parameter '{a}' in get {b} function.",W077:"Expected a single parameter in set {a} function.",W078:"Setter is defined without getter.",W079:"Redefinition of '{a}'.",W080:"It's not necessary to initialize '{a}' to 'undefined'.",W081:null,W082:"Function declarations should not be placed in blocks. Use a function expression or move the statement to the top of the outer function.",W083:"Don't make functions within a loop.",W084:"Assignment in conditional expression",W085:"Don't use 'with'.",W086:"Expected a 'break' statement before '{a}'.",W087:"Forgotten 'debugger' statement?",W088:"Creating global 'for' variable. Should be 'for (var {a} ...'.",W089:"The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.",W090:"'{a}' is not a statement label.",W091:"'{a}' is out of scope.",W093:"Did you mean to return a conditional instead of an assignment?",W094:"Unexpected comma.",W095:"Expected a string and instead saw {a}.",W096:"The '{a}' key may produce unexpected results.",W097:'Use the function form of "use strict".',W098:"'{a}' is defined but never used.",W099:null,W100:"This character may get silently deleted by one or more browsers.",W101:"Line is too long.",W102:null,W103:"The '{a}' property is deprecated.",W104:"'{a}' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).",W105:"Unexpected {a} in '{b}'.",W106:"Identifier '{a}' is not in camel case.",W107:"Script URL.",W108:"Strings must use doublequote.",W109:"Strings must use singlequote.",W110:"Mixed double and single quotes.",W112:"Unclosed string.",W113:"Control character in string: {a}.",W114:"Avoid {a}.",W115:"Octal literals are not allowed in strict mode.",W116:"Expected '{a}' and instead saw '{b}'.",W117:"'{a}' is not defined.",W118:"'{a}' is only available in Mozilla JavaScript extensions (use moz option).",W119:"'{a}' is only available in ES6 (use esnext option).",W120:"You might be leaking a variable ({a}) here.",W121:"Extending prototype of native object: '{a}'.",W122:"Invalid typeof value '{a}'",W123:"'{a}' is already defined in outer scope.",W124:"A generator function shall contain a yield statement.",W125:"This line contains non-breaking spaces: http://jshint.com/doc/options/#nonbsp"},o={I001:"Comma warnings can be turned off with 'laxcomma'.",I002:null,I003:"ES5 option is now set per default"};n.errors={},n.warnings={},n.info={},r.each(i,function(e,t){n.errors[t]={code:t,desc:e}}),r.each(s,function(e,t){n.warnings[t]={code:t,desc:e}}),r.each(o,function(e,t){n.info[t]={code:t,desc:e}})},{underscore:2}],6:[function(e,t,n){"use string";n.unsafeString=/@cc|<\/?|script|\]\s*\]|<\s*!|&lt/i,n.unsafeChars=/[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/,n.needEsc=/[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/,n.needEscGlobal=/[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,n.starSlash=/\*\//,n.identifier=/^([a-zA-Z_$][a-zA-Z0-9_$]*)$/,n.javascriptURL=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\s*:/i,n.fallsThrough=/^\s*\/\*\s*falls?\sthrough\s*\*\/\s*$/,n.maxlenException=/^(?:(?:\/\/|\/\*|\*) ?)?[^ ]+$/},{}],7:[function(e,t,n){"use strict";var r={syntax:{},reset:function(){this.tokens={prev:null,next:null,curr:null},this.option={},this.ignored={},this.directive={},this.jsonMode=!1,this.jsonWarnings=[],this.lines=[],this.tab="",this.cache={},this.ignoredLines={},this.ignoreLinterErrors=!1}};n.state=r},{}],8:[function(e,t,n){"use strict";n.register=function(e){e.on("Identifier",function(n){if(e.getOption("proto"))return;n.name==="__proto__"&&e.warn("W103",{line:n.line,"char":n.char,data:[n.name]})}),e.on("Identifier",function(n){if(e.getOption("iterator"))return;n.name==="__iterator__"&&e.warn("W104",{line:n.line,"char":n.char,data:[n.name]})}),e.on("Identifier",function(n){if(!e.getOption("camelcase"))return;n.name.replace(/^_+|_+$/g,"").indexOf("_")>-1&&!n.name.match(/^[A-Z0-9_]*$/)&&e.warn("W106",{line:n.line,"char":n.from,data:[n.name]})}),e.on("String",function(n){var r=e.getOption("quotmark"),i;if(!r)return;r==="single"&&n.quote!=="'"&&(i="W109"),r==="double"&&n.quote!=='"'&&(i="W108"),r===!0&&(e.getCache("quotmark")||e.setCache("quotmark",n.quote),e.getCache("quotmark")!==n.quote&&(i="W110")),i&&e.warn(i,{line:n.line,"char":n.char})}),e.on("Number",function(n){n.value.charAt(0)==="."&&e.warn("W008",{line:n.line,"char":n.char,data:[n.value]}),n.value.substr(n.value.length-1)==="."&&e.warn("W047",{line:n.line,"char":n.char,data:[n.value]}),/^00+/.test(n.value)&&e.warn("W046",{line:n.line,"char":n.char,data:[n.value]})}),e.on("String",function(n){var r=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\s*:/i;if(e.getOption("scripturl"))return;r.test(n.value)&&e.warn("W107",{line:n.line,"char":n.char})})}},{}],9:[function(e,t,n){"use strict";n.reservedVars={arguments:!1,NaN:!1},n.ecmaIdentifiers={Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,JSON:!1,Math:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1},n.newEcmaIdentifiers={Set:!1,Map:!1,WeakMap:!1,WeakSet:!1,Proxy:!1,Promise:!1},n.browser={Audio:!1,Blob:!1,addEventListener:!1,applicationCache:!1,atob:!1,blur:!1,btoa:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,CustomEvent:!1,DOMParser:!1,defaultStatus:!1,document:!1,Element:!1,ElementTimeControl:!1,event:!1,FileReader:!1,FormData:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,HTMLAnchorElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPreElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLUListElement:!1,HTMLVideoElement:!1,history:!1,Image:!1,length:!1,localStorage:!1,location:!1,matchMedia:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationObserver:!1,name:!1,Node:!1,NodeFilter:!1,NodeList:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,print:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,SharedWorker:!1,status:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimationElement:!1,SVGCSSRule:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLineElement:!1,SVGLinearGradientElement:!1,SVGLocatable:!1,SVGMPathElement:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGSVGElement:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformList:!1,SVGTransformable:!1,SVGURIReference:!1,SVGUnitTypes:!1,SVGUseElement:!1,SVGVKernElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGZoomAndPan:!1,TimeEvent:!1,top:!1,URL:!1,WebSocket:!1,window:!1,Worker:!1,XMLHttpRequest:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},n.devel={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},n.worker={importScripts:!0,postMessage:!0,self:!0},n.nonstandard={escape:!1,unescape:!1},n.couch={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1,provides:!1},n.node={__filename:!1,__dirname:!1,GLOBAL:!1,global:!1,module:!1,require:!1,Buffer:!0,console:!0,exports:!0,process:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0,setImmediate:!0,clearImmediate:!0},n.phantom={phantom:!0,require:!0,WebPage:!0,console:!0,exports:!0},n.qunit={asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,"throws":!1},n.rhino={defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},n.shelljs={target:!1,echo:!1,exit:!1,cd:!1,pwd:!1,ls:!1,find:!1,cp:!1,rm:!1,mv:!1,mkdir:!1,test:!1,cat:!1,sed:!1,grep:!1,which:!1,dirs:!1,pushd:!1,popd:!1,env:!1,exec:!1,chmod:!1,config:!1,error:!1,tempdir:!1},n.typed={ArrayBuffer:!1,ArrayBufferView:!1,DataView:!1,Float32Array:!1,Float64Array:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1},n.wsh={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0,XDomainRequest:!0},n.dojo={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},n.jquery={$:!1,jQuery:!1},n.mootools={$:!1,$$:!1,Asset:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMEvent:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,IFrame:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},n.prototypejs={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},n.yui={YUI:!1,Y:!1,YUI_config:!1},n.mocha={describe:!1,it:!1,before:!1,after:!1,beforeEach:!1,afterEach:!1,suite:!1,test:!1,setup:!1,teardown:!1},n.jasmine={jasmine:!1,describe:!1,it:!1,xit:!1,beforeEach:!1,afterEach:!1,setFixtures:!1,loadFixtures:!1,spyOn:!1,expect:!1,runs:!1,waitsFor:!1,waits:!1}},{}],10:[function(e,t,n){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||undefined}function i(e){return typeof e=="function"}function s(e){return typeof e=="number"}function o(e){return typeof e=="object"&&e!==null}function u(e){return e===void 0}t.exports=r,r.EventEmitter=r,r.prototype._events=undefined,r.prototype._maxListeners=undefined,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(!s(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,n,r,s,a,f;this._events||(this._events={});if(e==="error")if(!this._events.error||o(this._events.error)&&!this._events.error.length)throw t=arguments[1],t instanceof Error?t:TypeError('Uncaught, unspecified "error" event.');n=this._events[e];if(u(n))return!1;if(i(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];n.apply(this,s)}else if(o(n)){r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];f=n.slice(),r=f.length;for(a=0;a<r;a++)f[a].apply(this,s)}return!0},r.prototype.addListener=function(e,t){var n;if(!i(t))throw TypeError("listener must be a function");this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,i(t.listener)?t.listener:t),this._events[e]?o(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t;if(o(this._events[e])&&!this._events[e].warned){var n;u(this._maxListeners)?n=r.defaultMaxListeners:n=this._maxListeners,n&&n>0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),console.trace())}return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError("listener must be a function");var n=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var n,r,s,u;if(!i(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;n=this._events[e],s=n.length,r=-1;if(n===t||i(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(o(n)){for(u=s;u-->0;)if(n[u]===t||n[u].listener&&n[u].listener===t){r=u;break}if(r<0)return this;n.length===1?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return arguments.length===0?this._events={}:this._events[e]&&delete this._events[e],this;if(arguments.length===0){for(t in this._events){if(t==="removeListener")continue;this.removeAllListeners(t)}return this.removeAllListeners("removeListener"),this._events={},this}n=this._events[e];if(i(n))this.removeListener(e,n);else while(n.length)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return!this._events||!this._events[e]?t=[]:i(this._events[e])?t=[this._events[e]]:t=this._events[e].slice(),t},r.listenerCount=function(e,t){var n;return!e._events||!e._events[t]?n=0:i(e._events[t])?n=1:n=e._events[t].length,n}},{}]},{},[3])(3)}),define("ace/mode/javascript_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/javascript/jshint"],function(require,exports,module){"use strict";function startRegex(e){return RegExp("^("+e.join("|")+")")}var oop=require("../lib/oop"),Mirror=require("../worker/mirror").Mirror,lint=require("./javascript/jshint").JSHINT,disabledWarningsRe=startRegex(["Bad for in variable '(.+)'.",'Missing "use strict"']),errorsRe=startRegex(["Unexpected","Expected ","Confusing (plus|minus)","\\{a\\} unterminated regular expression","Unclosed ","Unmatched ","Unbegun comment","Bad invocation","Missing space after","Missing operator at"]),infoRe=startRegex(["Expected an assignment","Bad escapement of EOL","Unexpected comma","Unexpected space","Missing radix parameter.","A leading decimal point can","\\['{a}'\\] is better written in dot notation.","'{a}' used out of scope"]),JavaScriptWorker=exports.JavaScriptWorker=function(e){Mirror.call(this,e),this.setTimeout(500),this.setOptions()};oop.inherits(JavaScriptWorker,Mirror),function(){this.setOptions=function(e){this.options=e||{esnext:!0,moz:!0,devel:!0,browser:!0,node:!0,laxcomma:!0,laxbreak:!0,lastsemic:!0,onevar:!1,passfail:!1,maxerr:100,expr:!0,multistr:!0,globalstrict:!0},this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.changeOptions=function(e){oop.mixin(this.options,e),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.isValidJS=function(str){try{eval("throw 0;"+str)}catch(e){if(e===0)return!0}return!1},this.onUpdate=function(){var e=this.doc.getValue();e=e.replace(/^#!.*\n/,"\n");if(!e){this.sender.emit("jslint",[]);return}var t=[],n=this.isValidJS(e)?"warning":"error";lint(e,this.options);var r=lint.errors,i=!1;for(var s=0;s<r.length;s++){var o=r[s];if(!o)continue;var u=o.raw,a="warning";if(u=="Missing semicolon."){var f=o.evidence.substr(o.character);f=f.charAt(f.search(/\S/)),n=="error"&&f&&/[\w\d{(['"]/.test(f)?(o.reason='Missing ";" before statement',a="error"):a="info"}else{if(disabledWarningsRe.test(u))continue;infoRe.test(u)?a="info":errorsRe.test(u)?(i=!0,a=n):u=="'{a}' is not defined."?a="warning":u=="'{a}' is defined but never used."&&(a="info")}t.push({row:o.line-1,column:o.character-1,text:o.reason,type:a,raw:u}),i}this.sender.emit("jslint",t)}}.call(JavaScriptWorker.prototype)}),define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)=="[object Array]"});var m=Object("a"),g=m[0]!="a"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)=="[object String]"?this.split(""):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)=="[object String]"?this.split(""):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)=="[object String]"?this.split(""):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)=="[object String]"?this.split(""):n,i=r.length>>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)=="[object String]"?this.split(""):n,i=r.length>>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)=="[object String]"?this.split(""):n,i=r.length>>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)=="[object String]"?this.split(""):n,i=r.length>>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document=="undefined"||w(document.createElement("div"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T="Property description must be an object: ",N="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(N+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,"value"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,"get")&&l(t,n,r.get),f(r,"set")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(f(t,n))n+="?";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=" \n \f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff";if(!String.prototype.trim||_.trim()){_="["+_+"]";var D=new RegExp("^"+_+_+"*"),P=new RegExp(_+_+"*$");String.prototype.trim=function(){return String(this).replace(D,"").replace(P,"")}}var F=function(e){if(e==null)throw new TypeError("can't convert "+e+" to object");return Object(e)}}) \ No newline at end of file
diff --git a/priv/static/metrics-graphics-3.0-alpha3/examples/js/main.js b/priv/static/metrics-graphics-3.0-alpha3/examples/js/main.js
new file mode 100644
index 0000000..a123f92
--- /dev/null
+++ b/priv/static/metrics-graphics-3.0-alpha3/examples/js/main.js
@@ -0,0 +1,125 @@
+var theme = 'light';
+
+(function() {
+ 'use strict';
+
+ //set the active pill and section on first load
+ var section = (document.location.hash) ? document.location.hash.slice(1) : 'lines';
+
+ $('#trunk').load('charts/' + section + '.htm', function() {
+ $('pre code').each(function(i, block) {
+ hljs.highlightBlock(block);
+ });
+ });
+
+ $('.examples li a#goto-' + section).addClass('active');
+
+ //handle mouse clicks and so on
+ assignEventListeners();
+
+ function assignEventListeners() {
+ $('ul.examples li a.pill').on('click', function(event) {
+ event.preventDefault();
+ $('ul.examples li a.pill').removeClass('active');
+ $(this).addClass('active');
+
+ var section = $(this).attr('id').slice(5);
+ $('#trunk').load('charts/' + section + '.htm', function() {
+ $('pre code').each(function(i, block) {
+ hljs.highlightBlock(block);
+ });
+ });
+
+ document.location.hash = section;
+
+ return false;
+ })
+
+ $('#dark-css').on('click', function () {
+ theme = 'dark';
+
+ $('.missing')
+ .css('background-image', 'url(images/missing-data-dark.png)');
+
+ $('.wip')
+ .css('background-color', '#3b3b3b');
+
+ $('.trunk-section')
+ .css('border-top-color', '#5e5e5e');
+
+ $('.mg-missing-background')
+ .css('stroke', '#ccc');
+
+ $('.head ul li a.pill').removeClass('active');
+ $(this).toggleClass('active');
+ $('#dark').attr({href : 'css/metricsgraphics-demo-dark.css'});
+ $('#dark-code').attr({href : 'css/railscasts.css'});
+ $('#accessible').attr({href : ''});
+
+ return false;
+ });
+
+ $('#light-css').on('click', function () {
+ theme = 'light';
+
+ $('.missing')
+ .css('background-image', 'url(images/missing-data.png)');
+
+ $('.wip')
+ .css('background-color', '#f1f1f1');
+
+ $('.trunk-section')
+ .css('border-top-color', '#ccc');
+
+ $('.mg-missing-background')
+ .css('stroke', 'blue');
+
+ $('.head ul li a.pill').removeClass('active');
+ $(this).toggleClass('active');
+ $('#dark').attr({href : ''});
+ $('#dark-code').attr({href : ''});
+ $('#accessible').attr({href : ''});
+
+ return false;
+ });
+
+ $('#accessible-css').on('click', function () {
+ $('.head ul li a.pill').removeClass('active');
+ $(this).toggleClass('active');
+ $('#accessible').attr({href : 'css/metricsgraphics-demo-accessible.css'});
+
+ return false;
+ });
+ }
+
+ // replace all SVG images with inline SVG
+ // http://stackoverflow.com/questions/11978995/how-to-change-color-of-svg
+ // -image-using-css-jquery-svg-image-replacement
+ $('img.svg').each(function() {
+ var $img = jQuery(this);
+ var imgID = $img.attr('id');
+ var imgClass = $img.attr('class');
+ var imgURL = $img.attr('src');
+
+ $.get(imgURL, function(data) {
+ // Get the SVG tag, ignore the rest
+ var $svg = jQuery(data).find('svg');
+
+ // Add replaced image's ID to the new SVG
+ if (typeof imgID !== 'undefined') {
+ $svg = $svg.attr('id', imgID);
+ }
+ // Add replaced image's classes to the new SVG
+ if (typeof imgClass !== 'undefined') {
+ $svg = $svg.attr('class', imgClass + ' replaced-svg');
+ }
+
+ // Remove any invalid XML tags as per http://validator.w3.org
+ $svg = $svg.removeAttr('xmlns:a');
+
+ // Replace image with new SVG
+ $img.replaceWith($svg);
+
+ }, 'xml');
+ });
+})();